OldBlueWater/BlueWater/Assets/02.Scripts/Npc/NpcStateMachine.cs

50 lines
1.4 KiB
C#
Raw Normal View History

using System.Collections;
using Unity.VisualScripting;
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class NpcStateMachine : MonoBehaviour
{
public INpcState CurrentState { get; private set; }
public NpcStateContext Context { get; private set; } = new NpcStateContext();
public void ChangeState(INpcState newState)
{
CurrentState?.OnExit(this);
CurrentState = newState;
CurrentState.OnEnter(this);
}
public void Update()
{
CurrentState?.OnUpdate(this);
}
public void StartWaitCoroutine(float waitTime, UsuallyPointState state)
{
StartCoroutine(WaitCoroutine(waitTime, state));
}
private IEnumerator WaitCoroutine(float waitTime, UsuallyPointState state)
{
yield return new WaitForSeconds(waitTime);
state.EndWait();
}
// 이 메소드는 플레이어의 명령을 처리합니다.
public void HandlePlayerCommand(/* 명령 파라미터 */)
{
// 이전 상태와 목적지를 저장
Context.PreviousState = CurrentState;
// Context.PreviousDestination = 현재 AI의 목적지;
// 명령 처리 로직
// ...
// 명령 처리 후 원래 상태로 복귀하는 로직
// ...
}
}
}