77 lines
2.4 KiB
C#
77 lines
2.4 KiB
C#
using BumpCombat.Player;
|
|
using BumpCombat.Core;
|
|
using UnityEngine;
|
|
|
|
namespace BumpCombat.Progression
|
|
{
|
|
[CreateAssetMenu(
|
|
fileName = "ModifierDefinition",
|
|
menuName = "BumpCombat/Progression/Modifier Definition")]
|
|
public sealed class ModifierDefinition : ScriptableObject
|
|
{
|
|
[SerializeField] private string modifierId;
|
|
[SerializeField] private string displayName;
|
|
[SerializeField] private CharacterStat stat;
|
|
[SerializeField] private ModifierOperation operation;
|
|
[SerializeField] private float value;
|
|
[SerializeField, Min(1)] private int maximumStacks = 1;
|
|
[SerializeField, Min(0f)] private float healOnApply;
|
|
|
|
public string ModifierId => modifierId;
|
|
public string DisplayName => displayName;
|
|
public CharacterStat Stat => stat;
|
|
public ModifierOperation Operation => operation;
|
|
public float Value => value;
|
|
public int MaximumStacks => maximumStacks;
|
|
public float HealOnApply => healOnApply;
|
|
|
|
public bool CanApply(PlayerStats playerStats)
|
|
{
|
|
return playerStats != null
|
|
&& playerStats.GetStackCount(modifierId, stat) < maximumStacks;
|
|
}
|
|
|
|
public bool TryApply(
|
|
PlayerStats playerStats,
|
|
PlayerHealth playerHealth)
|
|
{
|
|
if (!CanApply(playerStats)
|
|
|| !playerStats.AddModifier(new StatModifier(
|
|
modifierId,
|
|
stat,
|
|
operation,
|
|
value,
|
|
maximumStacks)))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (healOnApply > 0f && playerHealth != null)
|
|
{
|
|
playerHealth.Heal(healOnApply);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
#if UNITY_EDITOR
|
|
public void Configure(
|
|
string id,
|
|
string label,
|
|
CharacterStat targetStat,
|
|
ModifierOperation modifierOperation,
|
|
float modifierValue,
|
|
int maxStacks,
|
|
float immediateHeal = 0f)
|
|
{
|
|
modifierId = id;
|
|
displayName = label;
|
|
stat = targetStat;
|
|
operation = modifierOperation;
|
|
value = modifierValue;
|
|
maximumStacks = Mathf.Max(1, maxStacks);
|
|
healOnApply = Mathf.Max(0f, immediateHeal);
|
|
}
|
|
#endif
|
|
}
|
|
}
|