| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- using UnityEngine;
- namespace MazeGen
- {
- /// <summary>
- /// Weapon classification for combat range and mechanics.
- /// </summary>
- public enum WeaponType
- {
- Melee, // Must be adjacent to target (1 square)
- Ranged, // Physical projectile with variable range
- Magic // Spell-based with variable range
- }
- /// <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
- [SerializeField] private WeaponType _weaponType = WeaponType.Melee;
- [SerializeField] private int _range = 1; // Range in grid squares (1 = melee/adjacent, 2+ = ranged/magic)
- public float AttackBonus => _attackBonus;
- public float MagicBonus => _magicBonus;
- public float DefenseBonus => _defenseBonus;
- public float SpeedBonus => _speedBonus;
- public WeaponType WeaponType => _weaponType;
- public int Range => _range;
- 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)";
- }
- }
|