protected void CheckTransitions(AIStateController controller) { State nextState = null; int weight = -1; for (int i = 0; i < transitions.Length; i++) { State tempState = null; int tempWeight = -1; bool decisionSucceeded = transitions[i].decision.Decide(controller); if (decisionSucceeded) { tempState = transitions[i].trueState; tempWeight = transitions[i].trueWeight; } else { tempState = transitions[i].falseState; tempWeight = transitions[i].falseWeight; } if (tempWeight > weight) { nextState = tempState; weight = tempWeight; } } if (nextState != null) { controller.TransitionToState(nextState); } }
protected void DoActions(AIStateController controller) { for (int i = 0; i < actions.Length; i++) { actions[i].Act(controller); } }
internal virtual void OnGizmos(AIStateController controller) { if (actions != null) { for (int i = 0; i < actions.Length; i++) { if (actions[i] != null) { actions[i].OnGizmos(controller); } } } if (transitions != null) { for (int i = 0; i < transitions.Length; i++) { if (transitions[i].decision != null) { transitions[i].decision.OnGizmos(controller); } } } }
public abstract bool Decide(AIStateController controller);
internal virtual void OnGizmosSelected(AIStateController controller) { }
internal virtual void OnGizmos(AIStateController controller) { }
public virtual void End(AIStateController controller) { }
public abstract void Act(AIStateController controller);
public virtual void Begin(AIStateController controller) { }
public void EndState(AIStateController controller) { EndActions(controller); }
public void UpdateState(AIStateController controller) { DoActions(controller); CheckTransitions(controller); }
public void BeginState(AIStateController controller) { BeginActions(controller); }