Files
Northbound/Assets/Northbound/Gameplay/Player/PlayerDefinition.cs
T

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;
}
}
}