using Chickensoft.Collections; using System; using Zennysoft.Ma.Adapter; namespace Zennysoft.Game.Ma; public class DefenseComponent : IDefenseComponent { public IAutoProp CurrentDefense => _currentDefense; public IAutoProp MaximumDefense => _maximumDefense; private readonly AutoProp _currentDefense; private readonly AutoProp _maximumDefense; private readonly int _initialValue; public DefenseComponent(int defenseValue) { _maximumDefense = new AutoProp(defenseValue); _currentDefense = new AutoProp(defenseValue); _initialValue = defenseValue; } public void Reset() { _maximumDefense.OnNext(_initialValue); _currentDefense.OnNext(_initialValue); } public void Restore(int restoreAmount) { var cappedAmount = Math.Min(restoreAmount + _currentDefense.Value, _maximumDefense.Value); _currentDefense.OnNext(cappedAmount); } public void Reduce(int reduceAmount) { var cappedAmount = Math.Max(_currentDefense.Value - reduceAmount, 0); _currentDefense.OnNext(cappedAmount); } public void SetDefense(int attack) { var cappedAmount = Math.Min(attack, _maximumDefense.Value); _currentDefense.OnNext(cappedAmount); } public void RaiseMaximumDefense(int raiseAmount) { _maximumDefense.OnNext(raiseAmount); Restore(raiseAmount); } }