Refactor stats
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
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;
|
||||
|
||||
public IAutoProp<int> BonusAttack => _bonusAttack;
|
||||
|
||||
public int TotalAttack => CurrentAttack.Value + BonusAttack.Value;
|
||||
|
||||
private readonly AutoProp<int> _currentAttack;
|
||||
|
||||
private readonly AutoProp<int> _maximumAttack;
|
||||
|
||||
private readonly AutoProp<int> _bonusAttack;
|
||||
|
||||
public AttackComponent(int attackValue)
|
||||
{
|
||||
_maximumAttack = new AutoProp<int>(attackValue);
|
||||
_currentAttack = new AutoProp<int>(attackValue);
|
||||
_bonusAttack = new AutoProp<int>(0);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
public void RaiseBonusAttack(int raiseAmount)
|
||||
{
|
||||
_bonusAttack.OnNext(_bonusAttack.Value + raiseAmount);
|
||||
}
|
||||
|
||||
public void ResetBonusAttack()
|
||||
{
|
||||
_bonusAttack.OnNext(0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user