56 lines
1.3 KiB
C#
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);
|
|
}
|
|
}
|