Files
GameJamDungeon/Zennysoft.Game.Ma/src/Components/VTComponent.cs

67 lines
1.5 KiB
C#

using Chickensoft.Collections;
using System;
using Zennysoft.Ma.Adapter;
namespace Zennysoft.Game.Ma;
public class VTComponent : IVTComponent
{
public IAutoProp<int> CurrentVT => _currentVT;
public IAutoProp<int> MaximumVT => _maximumVT;
private readonly AutoProp<int> _currentVT;
private readonly AutoProp<int> _maximumVT;
private readonly int _initialValue;
public bool AtFullVT => CurrentVT.Value == MaximumVT.Value;
public VTComponent(int initialVT)
{
_maximumVT = new AutoProp<int>(initialVT);
_currentVT = new AutoProp<int>(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);
}
}