40 lines
933 B
C#
40 lines
933 B
C#
using System;
|
|
|
|
[Serializable]
|
|
public class FSMState
|
|
{
|
|
public string ID;
|
|
public FSMAction[] Actions;
|
|
public FSMTransition[] Transitions;
|
|
|
|
public void UpdateState(EnemyBrain enemyBrain)
|
|
{
|
|
ExecuteActions();
|
|
ExecuteTransitions(enemyBrain);
|
|
}
|
|
|
|
private void ExecuteActions()
|
|
{
|
|
for (int i = 0; i < Actions.Length; i++)
|
|
{
|
|
Actions[i].Act();
|
|
}
|
|
}
|
|
|
|
private void ExecuteTransitions(EnemyBrain enemyBrain)
|
|
{
|
|
if (Transitions == null || Transitions.Length <= 0) return;
|
|
for (int i = 0; i < Transitions.Length; i++)
|
|
{
|
|
bool value = Transitions[i].Decision.Decide();
|
|
if (value)
|
|
{
|
|
enemyBrain.ChangeState(Transitions[i].TrueState);
|
|
}
|
|
else
|
|
{
|
|
enemyBrain.ChangeState(Transitions[i].FalseState);
|
|
}
|
|
}
|
|
}
|
|
} |