Weapon.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using UnityEngine;
  2. namespace MazeGen
  3. {
  4. /// <summary>
  5. /// A weapon that can be equipped to boost attack power. Can also provide
  6. /// secondary effects (e.g., magic boost, defense buff).
  7. /// </summary>
  8. public class Weapon : Item
  9. {
  10. [SerializeField] private float _attackBonus = 5f;
  11. [SerializeField] private float _magicBonus = 0f; // Some weapons add spell power
  12. [SerializeField] private float _defenseBonus = 0f; // Some weapons grant parry/shield bonuses
  13. [SerializeField] private float _speedBonus = 0f; // Heavy weapons might slow you down
  14. public float AttackBonus => _attackBonus;
  15. public float MagicBonus => _magicBonus;
  16. public float DefenseBonus => _defenseBonus;
  17. public float SpeedBonus => _speedBonus;
  18. public override bool OnEquip(CharacterSheet character)
  19. {
  20. if (!base.OnEquip(character)) return false;
  21. // Apply stat bonuses to the character
  22. character.ApplyTemporaryBonus("weapon_attack", _attackBonus, "attack");
  23. if (_magicBonus != 0) character.ApplyTemporaryBonus("weapon_magic", _magicBonus, "magic");
  24. if (_defenseBonus != 0) character.ApplyTemporaryBonus("weapon_defense", _defenseBonus, "defense");
  25. if (_speedBonus != 0) character.ApplyTemporaryBonus("weapon_speed", _speedBonus, "speed");
  26. return true;
  27. }
  28. public override void OnUnequip(CharacterSheet character)
  29. {
  30. character.RemoveTemporaryBonus("weapon_attack");
  31. character.RemoveTemporaryBonus("weapon_magic");
  32. character.RemoveTemporaryBonus("weapon_defense");
  33. character.RemoveTemporaryBonus("weapon_speed");
  34. base.OnUnequip(character);
  35. }
  36. public override string GetLabel() => $"{ItemName} (+{_attackBonus} ATK)";
  37. }
  38. }