using BlueWater.Interfaces; namespace BlueWater.Players.Tycoons { public class InteractionState : IStateMachine { private string _previousAnimationName; public void EnterState(TycoonPlayer character) { string newAnimationName = GetAnimationName(character); if (newAnimationName != _previousAnimationName) { _previousAnimationName = newAnimationName; character.SpineController.PlayAnimation(_previousAnimationName, true); } } public void UpdateState(TycoonPlayer character) { if (character.IsInteracting()) { EnterState(character); } else if (character.TycoonMovement.IsMoving) { character.StateMachineController.TransitionToState(character.WalkingState, character); _previousAnimationName = null; } else if (!character.TycoonMovement.IsMoving) { character.StateMachineController.TransitionToState(character.IdleState, character); _previousAnimationName = null; } } public void ExitState(TycoonPlayer character) { } private string GetAnimationName(TycoonPlayer character) { if (character.IsMakingCocktail) { return TycoonPlayerSpineAnimation.MakingCocktail; } if (character.IsCleaningFloor) { return TycoonPlayerSpineAnimation.CleaningFloor; } if (character.IsCleaningTable) { return TycoonPlayerSpineAnimation.CleaningTable; } if (character.IsCleaningMold) { return TycoonPlayerSpineAnimation.AttackLimeTree; } if (character.IsPumping) { return TycoonPlayerSpineAnimation.Pumping; } if (character.IsInteractedSlimeGarnish) { return TycoonPlayerSpineAnimation.AttackSlime; } if (character.IsInteractedLimeTreeGarnish) { return TycoonPlayerSpineAnimation.AttackLimeTree; } return null; } } }