| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- using UnityEngine;
- namespace MazeGen
- {
- /// <summary>
- /// A weapon that can be equipped to boost attack power. Can also provide
- /// secondary effects (e.g., magic boost, defense buff).
- /// </summary>
- 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)";
- }
- }
|