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

56 lines
1.3 KiB
C#

using Chickensoft.Collections;
using System;
using Zennysoft.Ma.Adapter;
namespace Zennysoft.Game.Ma;
public class AttackComponent : IAttackComponent
{
public IAutoProp<int> CurrentAttack => _currentAttack;
public IAutoProp<int> MaximumAttack => _maximumAttack;
private readonly AutoProp<int> _currentAttack;
private readonly AutoProp<int> _maximumAttack;
private readonly int _initialValue;
public AttackComponent(int attackValue)
{
_maximumAttack = new AutoProp<int>(attackValue);
_currentAttack = new AutoProp<int>(attackValue);
_initialValue = attackValue;
}
public void Reset()
{
_maximumAttack.OnNext(_initialValue);
_currentAttack.OnNext(_initialValue);
}
public void Restore(int restoreAmount)
{
var cappedAmount = Math.Min(restoreAmount + _currentAttack.Value, _maximumAttack.Value);
_currentAttack.OnNext(cappedAmount);
}
public void Reduce(int reduceAmount)
{
var cappedAmount = Math.Max(_currentAttack.Value - reduceAmount, 0);
_currentAttack.OnNext(cappedAmount);
}
public void SetAttack(int attack)
{
var cappedAmount = Math.Min(attack, _maximumAttack.Value);
_currentAttack.OnNext(cappedAmount);
}
public void RaiseMaximumAttack(int raiseAmount)
{
_maximumAttack.OnNext(raiseAmount);
Restore(raiseAmount);
}
}