using Chickensoft.Collections; using System; using Zennysoft.Ma.Adapter; namespace Zennysoft.Game.Ma; public class VTComponent : IVTComponent { public IAutoProp CurrentVT => _currentVT; public IAutoProp MaximumVT => _maximumVT; private readonly AutoProp _currentVT; private readonly AutoProp _maximumVT; private readonly int _initialValue; public bool AtFullVT => CurrentVT.Value == MaximumVT.Value; public VTComponent(int initialVT) { _maximumVT = new AutoProp(initialVT); _currentVT = new AutoProp(initialVT); _initialValue = initialVT; } public void Reset() { _maximumVT.OnNext(_initialValue); _currentVT.OnNext(_initialValue); } public void Restore(int restoreAmount) { var cappedAmount = Math.Min(restoreAmount + _currentVT.Value, _maximumVT.Value); _currentVT.OnNext(cappedAmount); } public void Reduce(int reduceAmount) { var cappedAmount = Math.Max(_currentVT.Value - reduceAmount, 0); _currentVT.OnNext(cappedAmount); } public void SetVT(int vt) { var cappedAmount = Math.Min(vt, _maximumVT.Value); _currentVT.OnNext(cappedAmount); } public void RaiseMaximumVT(int raiseAmount, bool restoreVT = true) { _maximumVT.OnNext(_maximumVT.Value + raiseAmount); if (restoreVT) Restore(raiseAmount); } public void SetMaximumVT(int vt) { _maximumVT.OnNext(vt); if (_currentVT.Value > _maximumVT.Value) _currentVT.OnNext(_maximumVT.Value); } }