diff --git a/Assets/Scripts/Data/CharacterAttributes.cs b/Assets/Scripts/Data/CharacterAttributes.cs index 3c8eca7..79e1a1c 100644 --- a/Assets/Scripts/Data/CharacterAttributes.cs +++ b/Assets/Scripts/Data/CharacterAttributes.cs @@ -12,6 +12,8 @@ namespace Data [OdinSerialize] public float moveSpeed = 5f; [OdinSerialize] public float luck = 0f; [OdinSerialize] public float armor = 0f; + [OdinSerialize] public int level = 1; + [OdinSerialize] public int experience = 0; [OdinSerialize, PropertyTooltip("This is damage multiplier")] public float damage = 1f; @@ -35,6 +37,9 @@ namespace Data public event Action OnMeleeDamageChanged; public event Action OnAttackRangeChanged; public event Action OnAttackSpeedChanged; + + public event Action OnExperienceChanged; + public event Action OnLevelChanged; public float Health { @@ -145,6 +150,30 @@ namespace Data OnAttackSpeedChanged?.Invoke(attackSpeed); } } + + public int Experience + { + get => experience; + private set + { + if (experience == value) return; + experience = value; + OnExperienceChanged?.Invoke(experience); + + //TODO: Implement level up logic + } + } + + public int Level + { + get => level; + private set + { + if (level == value) return; + level = value; + OnLevelChanged?.Invoke(level); + } + } public void SetHealth(float value) { @@ -199,7 +228,17 @@ namespace Data { AttackSpeed = Math.Max(value, 0); } - + + public void SetExperience(int value) + { + Experience = Math.Max(value, 0); + } + + public void SetLevel(int value) + { + Level = Math.Max(value, 1); + } + public void ModifyHealth(float delta) { SetHealth(Health + delta); @@ -249,6 +288,16 @@ namespace Data { SetAttackSpeed(AttackSpeed + delta); } + + public void ModifyExperience(int delta) + { + SetExperience(Experience + delta); + } + + public void ModifyLevel(int delta) + { + SetLevel(Level + delta); + } public void Reset() { @@ -261,6 +310,8 @@ namespace Data MeleeDamage = 1f; AttackRange = 16f; AttackSpeed = 1f; + Level = 1; + Experience = 0; } } } \ No newline at end of file