55 lines
1.1 KiB
C#
55 lines
1.1 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
public class EnemyBrain : MonoBehaviour
|
|
{
|
|
[SerializeField] private string initState; // e.g., "PatrolState"
|
|
[SerializeField] private FSMState[] states;
|
|
|
|
public FSMState CurrentState { get; private set; }
|
|
public Transform Player { get; set; }
|
|
|
|
private bool isFrozen = false;
|
|
|
|
private void Start()
|
|
{
|
|
ChangeState(initState);
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (isFrozen) return;
|
|
CurrentState?.UpdateState(this);
|
|
}
|
|
|
|
public void ChangeState(string newStateID)
|
|
{
|
|
FSMState newState = GetState(newStateID);
|
|
if (newState == null) return;
|
|
CurrentState = newState;
|
|
}
|
|
|
|
private FSMState GetState(string stateID)
|
|
{
|
|
foreach (var state in states)
|
|
{
|
|
if (state.ID == stateID)
|
|
return state;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// === Freeze Control ===
|
|
public void Freeze()
|
|
{
|
|
isFrozen = true;
|
|
}
|
|
|
|
public void Unfreeze()
|
|
{
|
|
isFrozen = false;
|
|
}
|
|
|
|
public bool IsFrozen => isFrozen;
|
|
}
|