Initial commit: Tiny Tackle Heroes Unity project
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user