feat: refine enemy engagements and reduce tower damage
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
using Northbound.Core;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Northbound.Gameplay.Player
|
||||
{
|
||||
[CreateAssetMenu(fileName = "PlayerDefinition", menuName = "Northbound/Player Definition")]
|
||||
public sealed class PlayerDefinition : ScriptableObject
|
||||
{
|
||||
[Header("Identity")]
|
||||
[SerializeField] private string displayName = "Player";
|
||||
|
||||
[Header("Survivability and Movement")]
|
||||
[SerializeField] private float maximumHealth = 100f;
|
||||
[SerializeField] private float moveSpeed = 5f;
|
||||
[SerializeField] private float horizontalLimit = 15f;
|
||||
[SerializeField] private float interactionRadius = 3.2f;
|
||||
|
||||
[Header("Normal Attack")]
|
||||
[SerializeField] private float normalDamage = 13f;
|
||||
[SerializeField] private float normalRange = 3f;
|
||||
[SerializeField] private float normalCooldown = 0.4f;
|
||||
[SerializeField] private PlayerActionDefinition normalAction = new("Normal Attack", 0.3f, false);
|
||||
|
||||
[Header("Special Attack")]
|
||||
[SerializeField] private float specialDamage = 34f;
|
||||
[SerializeField] private float specialRadius = 4.2f;
|
||||
[SerializeField] private float specialManaCost = 25f;
|
||||
[SerializeField] private float specialCooldown = 5.5f;
|
||||
[SerializeField] private PlayerActionDefinition specialAction = new("Special Attack", 0.65f, false);
|
||||
|
||||
public string DisplayName => displayName;
|
||||
public float MaximumHealth => Mathf.Max(1f, maximumHealth);
|
||||
public float MoveSpeed => Mathf.Max(0f, moveSpeed);
|
||||
public float HorizontalLimit => Mathf.Max(0f, horizontalLimit);
|
||||
public float InteractionRadius => Mathf.Max(0f, interactionRadius);
|
||||
public float NormalDamage => Mathf.Max(0f, normalDamage);
|
||||
public float NormalRange => Mathf.Max(0f, normalRange);
|
||||
public float NormalCooldown => Mathf.Max(0f, normalCooldown);
|
||||
public PlayerActionDefinition NormalAction => normalAction;
|
||||
public float SpecialDamage => Mathf.Max(0f, specialDamage);
|
||||
public float SpecialRadius => Mathf.Max(0f, specialRadius);
|
||||
public float SpecialManaCost => Mathf.Max(0f, specialManaCost);
|
||||
public float SpecialCooldown => Mathf.Max(0f, specialCooldown);
|
||||
public PlayerActionDefinition SpecialAction => specialAction;
|
||||
|
||||
public void ConfigurePrototype(
|
||||
string playerName,
|
||||
float health,
|
||||
float speed,
|
||||
float mapHorizontalLimit,
|
||||
float interactRadius,
|
||||
float basicDamage,
|
||||
float basicRange,
|
||||
float basicCooldown,
|
||||
PlayerActionDefinition basicAction,
|
||||
float abilityDamage,
|
||||
float abilityRadius,
|
||||
float abilityManaCost,
|
||||
float abilityCooldown,
|
||||
PlayerActionDefinition abilityAction)
|
||||
{
|
||||
displayName = playerName;
|
||||
maximumHealth = Mathf.Max(1f, health);
|
||||
moveSpeed = Mathf.Max(0f, speed);
|
||||
horizontalLimit = Mathf.Max(0f, mapHorizontalLimit);
|
||||
interactionRadius = Mathf.Max(0f, interactRadius);
|
||||
normalDamage = Mathf.Max(0f, basicDamage);
|
||||
normalRange = Mathf.Max(0f, basicRange);
|
||||
normalCooldown = Mathf.Max(0f, basicCooldown);
|
||||
normalAction = basicAction;
|
||||
specialDamage = Mathf.Max(0f, abilityDamage);
|
||||
specialRadius = Mathf.Max(0f, abilityRadius);
|
||||
specialManaCost = Mathf.Max(0f, abilityManaCost);
|
||||
specialCooldown = Mathf.Max(0f, abilityCooldown);
|
||||
specialAction = abilityAction;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user