예제 #1
0
        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);
            }
        }
예제 #2
0
 protected void DoActions(AIStateController controller)
 {
     for (int i = 0; i < actions.Length; i++)
     {
         actions[i].Act(controller);
     }
 }
예제 #3
0
 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);
             }
         }
     }
 }
예제 #4
0
 public abstract bool Decide(AIStateController controller);
예제 #5
0
 internal virtual void OnGizmosSelected(AIStateController controller)
 {
 }
예제 #6
0
 internal virtual void OnGizmos(AIStateController controller)
 {
 }
예제 #7
0
 public virtual void End(AIStateController controller)
 {
 }
예제 #8
0
 public abstract void Act(AIStateController controller);
예제 #9
0
 public virtual void Begin(AIStateController controller)
 {
 }
예제 #10
0
 public void EndState(AIStateController controller)
 {
     EndActions(controller);
 }
예제 #11
0
 public void UpdateState(AIStateController controller)
 {
     DoActions(controller);
     CheckTransitions(controller);
 }
예제 #12
0
 public void BeginState(AIStateController controller)
 {
     BeginActions(controller);
 }