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

56 lines
1.3 KiB
C#

using Chickensoft.Collections;
using System;
using Zennysoft.Ma.Adapter;
namespace Zennysoft.Game.Ma;
public class DefenseComponent : IDefenseComponent
{
public IAutoProp<int> CurrentDefense => _currentDefense;
public IAutoProp<int> MaximumDefense => _maximumDefense;
private readonly AutoProp<int> _currentDefense;
private readonly AutoProp<int> _maximumDefense;
private readonly int _initialValue;
public DefenseComponent(int defenseValue)
{
_maximumDefense = new AutoProp<int>(defenseValue);
_currentDefense = new AutoProp<int>(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);
}
}