using Chickensoft.Collections; using Godot; namespace Zennysoft.Game.Implementation.Components; public class AttackComponent { public IAutoProp CurrentAttack => _currentAttack; public IAutoProp MaximumAttack => _maximumAttack; public IAutoProp BonusAttack => _bonusAttack; public int TotalAttack => CurrentAttack.Value + BonusAttack.Value; private readonly AutoProp _currentAttack; private readonly AutoProp _maximumAttack; private readonly AutoProp _bonusAttack; public AttackComponent(int attackValue) { _maximumAttack = new AutoProp(attackValue); _currentAttack = new AutoProp(attackValue); _bonusAttack = new AutoProp(0); } public void Restore(int restoreAmount) { var cappedAmount = Math.Min(restoreAmount + _currentAttack.Value, _maximumAttack.Value); _currentAttack.OnNext(cappedAmount); } public void Reduce(int reduceAmount) { var cappedAmount = Math.Max(_currentAttack.Value - reduceAmount, 0); _currentAttack.OnNext(cappedAmount); } public void SetAttack(int attack) { var cappedAmount = Math.Min(attack, _maximumAttack.Value); _currentAttack.OnNext(cappedAmount); } public void RaiseMaximumAttack(int raiseAmount) { _maximumAttack.OnNext(raiseAmount); Restore(raiseAmount); } }