CapersProject/Assets/02.Scripts/BlueWater/Character/Player/Tycoon/State/InteractionState.cs
2025-02-18 06:47:56 +09:00

86 lines
2.6 KiB
C#

using DDD.Interfaces;
namespace DDD.Players.Tycoons
{
public class InteractionState : IStateMachine<TycoonPlayer>
{
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;
}
if (character.IsCookingFried)
{
return TycoonPlayerSpineAnimation.CookingFried;
}
if (character.IsCookingStew)
{
return TycoonPlayerSpineAnimation.CookingStew;
}
return null;
}
}
}