Armor.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using UnityEngine;
  2. namespace MazeGen
  3. {
  4. /// <summary>
  5. /// Protective gear that boosts defense and can provide secondary bonuses.
  6. /// Heavier armor provides more protection but may reduce speed.
  7. /// </summary>
  8. public class Armor : Item
  9. {
  10. [SerializeField] private float _defenseBonus = 5f;
  11. [SerializeField] private float _healthBonus = 0f; // Some armors grant extra durability
  12. [SerializeField] private float _speedPenalty = 0f; // Heavy armor slows movement
  13. [SerializeField] private float _magicResistance = 0f; // Some armor resists magic damage
  14. public float DefenseBonus => _defenseBonus;
  15. public float HealthBonus => _healthBonus;
  16. public float SpeedPenalty => _speedPenalty;
  17. public float MagicResistance => _magicResistance;
  18. public override bool OnEquip(CharacterSheet character)
  19. {
  20. if (!base.OnEquip(character)) return false;
  21. character.ApplyTemporaryBonus("armor_defense", _defenseBonus, "defense");
  22. if (_healthBonus != 0) character.ApplyTemporaryBonus("armor_health", _healthBonus, "health");
  23. if (_speedPenalty != 0) character.ApplyTemporaryBonus("armor_speed", -_speedPenalty, "speed");
  24. if (_magicResistance != 0) character.ApplyTemporaryBonus("armor_magic", _magicResistance, "magic");
  25. return true;
  26. }
  27. public override void OnUnequip(CharacterSheet character)
  28. {
  29. character.RemoveTemporaryBonus("armor_defense");
  30. character.RemoveTemporaryBonus("armor_health");
  31. character.RemoveTemporaryBonus("armor_speed");
  32. character.RemoveTemporaryBonus("armor_magic");
  33. base.OnUnequip(character);
  34. }
  35. public override string GetLabel() => $"{ItemName} (+{_defenseBonus} DEF)";
  36. }
  37. }