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

64 lines
1.6 KiB
C#

using Chickensoft.Collections;
using Godot;
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(_maximumAttack.Value + raiseAmount);
Restore(raiseAmount);
}
public void LowerMaximumAttack(int lowerAmount)
{
_maximumAttack.OnNext(Mathf.Max(_maximumAttack.Value - lowerAmount, 1));
if (_currentAttack.Value > _maximumAttack.Value)
_currentAttack.OnNext(_maximumAttack.Value);
}
}