79 lines
3.5 KiB
C#
79 lines
3.5 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|