namespace Zennysoft.Ma.Adapter; using Chickensoft.Collections; using Godot; using Zennysoft.Game.Ma; public class PlayerStatController { public void Init(PlayerStats playerStats) { _currentHP.OnNext(playerStats.CurrentHP); _maximumHP.OnNext(playerStats.MaximumHP); _currentVT.OnNext(playerStats.CurrentVT); _maximumVT.OnNext(playerStats.MaximumVT); _currentExp.OnNext(playerStats.CurrentExp); _currentLevel.OnNext(playerStats.CurrentLevel); _currentAttack.OnNext(playerStats.CurrentAttack); _bonusAttack.OnNext(playerStats.BonusAttack); _maxAttack.OnNext(playerStats.MaxAttack); _currentDefense.OnNext(playerStats.CurrentDefense); _bonusDefense.OnNext(playerStats.BonusDefense); _maxDefense.OnNext(playerStats.MaxDefense); _expToNextLevel.OnNext(playerStats.ExpToNextLevel); _luck.OnNext(playerStats.Luck); } public IAutoProp CurrentHP => _currentHP; public IAutoProp MaximumHP => _maximumHP; public IAutoProp CurrentVT => _currentVT; public IAutoProp MaximumVT => _maximumVT; public IAutoProp CurrentAttack => _currentAttack; public IAutoProp MaxAttack => _maxAttack; public IAutoProp BonusAttack => _bonusAttack; public IAutoProp CurrentDefense => _currentDefense; public IAutoProp MaxDefense => _maxDefense; public IAutoProp BonusDefense => _bonusDefense; public IAutoProp CurrentExp => _currentExp; public IAutoProp ExpToNextLevel => _expToNextLevel; public IAutoProp CurrentLevel => _currentLevel; public IAutoProp Luck => _luck; public void SetCurrentHP(int newValue) { var clampedValue = Mathf.Clamp(newValue, 0, MaximumHP.Value); _currentHP.OnNext(clampedValue); } public void SetMaximumHP(int newValue) { _maximumHP.OnNext(newValue); } public void SetCurrentVT(int newValue) { var clampedValue = Mathf.Clamp(newValue, 0, MaximumVT.Value); _currentVT.OnNext(clampedValue); } public void SetMaximumVT(int newValue) { _maximumVT.OnNext(newValue); } public void SetCurrentExp(double newValue) { _currentExp.OnNext(newValue); } public void SetCurrentLevel(int newValue) { _currentLevel.OnNext(newValue); } public void SetCurrentAttack(int newValue) { var clampedValue = Mathf.Clamp(newValue, 0, MaxAttack.Value); _currentAttack.OnNext(clampedValue); } public void SetBonusAttack(int newValue) { _bonusAttack.OnNext(newValue); } public void SetMaxAttack(int newValue) { _maxAttack.OnNext(newValue); } public void SetCurrentDefense(int newValue) { var clampedValue = Mathf.Clamp(newValue, 0, MaxDefense.Value); _currentDefense.OnNext(clampedValue); } public void SetBonusDefense(int newValue) { _bonusDefense.OnNext(newValue); } public void SetMaxDefense(int newValue) { _maxDefense.OnNext(newValue); } public void SetExpToNextLevel(int newValue) { _expToNextLevel.OnNext(newValue); } public void SetLuck(double newValue) { var clampedValue = Mathf.Clamp(newValue, 0, 1.0); _luck.OnNext(clampedValue); } private readonly AutoProp _currentHP = new(-1); private readonly AutoProp _maximumHP = new(-1); private readonly AutoProp _currentVT = new(-1); private readonly AutoProp _maximumVT = new(-1); private readonly AutoProp _currentExp = new(-1); private readonly AutoProp _currentLevel = new(-1); private readonly AutoProp _currentAttack = new(-1); private readonly AutoProp _bonusAttack = new(-1); private readonly AutoProp _maxAttack = new(-1); private readonly AutoProp _currentDefense = new(-1); private readonly AutoProp _bonusDefense = new(-1); private readonly AutoProp _maxDefense = new(-1); private readonly AutoProp _expToNextLevel = new(-1); private readonly AutoProp _luck = new(-1); }