using Chickensoft.Collections; using System; using Zennysoft.Ma.Adapter; namespace Zennysoft.Game.Ma; public class AttackComponent : IAttackComponent { public IAutoProp CurrentAttack => _currentAttack; public IAutoProp MaximumAttack => _maximumAttack; private readonly AutoProp _currentAttack; private readonly AutoProp _maximumAttack; private readonly int _initialValue; public AttackComponent(int attackValue) { _maximumAttack = new AutoProp(attackValue); _currentAttack = new AutoProp(attackValue); _initialValue = attackValue; } public void Reset() { _maximumAttack.OnNext(_initialValue); _currentAttack.OnNext(_initialValue); } 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); } }