using UnityEngine; namespace MazeGen { /// /// A weapon that can be equipped to boost attack power. Can also provide /// secondary effects (e.g., magic boost, defense buff). /// public class Weapon : Item { [SerializeField] private float _attackBonus = 5f; [SerializeField] private float _magicBonus = 0f; // Some weapons add spell power [SerializeField] private float _defenseBonus = 0f; // Some weapons grant parry/shield bonuses [SerializeField] private float _speedBonus = 0f; // Heavy weapons might slow you down public float AttackBonus => _attackBonus; public float MagicBonus => _magicBonus; public float DefenseBonus => _defenseBonus; public float SpeedBonus => _speedBonus; public override bool OnEquip(CharacterSheet character) { if (!base.OnEquip(character)) return false; // Apply stat bonuses to the character character.ApplyTemporaryBonus("weapon_attack", _attackBonus, "attack"); if (_magicBonus != 0) character.ApplyTemporaryBonus("weapon_magic", _magicBonus, "magic"); if (_defenseBonus != 0) character.ApplyTemporaryBonus("weapon_defense", _defenseBonus, "defense"); if (_speedBonus != 0) character.ApplyTemporaryBonus("weapon_speed", _speedBonus, "speed"); return true; } public override void OnUnequip(CharacterSheet character) { character.RemoveTemporaryBonus("weapon_attack"); character.RemoveTemporaryBonus("weapon_magic"); character.RemoveTemporaryBonus("weapon_defense"); character.RemoveTemporaryBonus("weapon_speed"); base.OnUnequip(character); } public override string GetLabel() => $"{ItemName} (+{_attackBonus} ATK)"; } }