Weapon.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using UnityEngine;
  2. namespace MazeGen
  3. {
  4. /// <summary>
  5. /// Weapon classification for combat range and mechanics.
  6. /// </summary>
  7. public enum WeaponType
  8. {
  9. Melee, // Must be adjacent to target (1 square)
  10. Ranged, // Physical projectile with variable range
  11. Magic // Spell-based with variable range
  12. }
  13. /// <summary>
  14. /// A weapon that can be equipped to boost attack power. Can also provide
  15. /// secondary effects (e.g., magic boost, defense buff).
  16. /// </summary>
  17. public class Weapon : Item
  18. {
  19. [SerializeField] private float _attackBonus = 5f;
  20. [SerializeField] private float _magicBonus = 0f; // Some weapons add spell power
  21. [SerializeField] private float _defenseBonus = 0f; // Some weapons grant parry/shield bonuses
  22. [SerializeField] private float _speedBonus = 0f; // Heavy weapons might slow you down
  23. [SerializeField] private WeaponType _weaponType = WeaponType.Melee;
  24. [SerializeField] private int _range = 1; // Range in grid squares (1 = melee/adjacent, 2+ = ranged/magic)
  25. public float AttackBonus => _attackBonus;
  26. public float MagicBonus => _magicBonus;
  27. public float DefenseBonus => _defenseBonus;
  28. public float SpeedBonus => _speedBonus;
  29. public WeaponType WeaponType => _weaponType;
  30. public int Range => _range;
  31. public override bool OnEquip(CharacterSheet character)
  32. {
  33. if (!base.OnEquip(character)) return false;
  34. // Apply stat bonuses to the character
  35. character.ApplyTemporaryBonus("weapon_attack", _attackBonus, "attack");
  36. if (_magicBonus != 0) character.ApplyTemporaryBonus("weapon_magic", _magicBonus, "magic");
  37. if (_defenseBonus != 0) character.ApplyTemporaryBonus("weapon_defense", _defenseBonus, "defense");
  38. if (_speedBonus != 0) character.ApplyTemporaryBonus("weapon_speed", _speedBonus, "speed");
  39. return true;
  40. }
  41. public override void OnUnequip(CharacterSheet character)
  42. {
  43. character.RemoveTemporaryBonus("weapon_attack");
  44. character.RemoveTemporaryBonus("weapon_magic");
  45. character.RemoveTemporaryBonus("weapon_defense");
  46. character.RemoveTemporaryBonus("weapon_speed");
  47. base.OnUnequip(character);
  48. }
  49. public override string GetLabel() => $"{ItemName} (+{_attackBonus} ATK)";
  50. }
  51. }