示例#1
0
 private void DoOnExitActions(AI_StateController p_controller)
 {
     for (int i = 0; i < m_onExitActions.Length; ++i)
     {
         m_onExitActions[i].Act(p_controller);
     }
 }
示例#2
0
    private void CheckTransitions(AI_StateController p_controller, bool p_ignoreDelays)
    {
        for (int i = 0; i < m_transitions.Length; i++)
        {
            if (!p_ignoreDelays)
            {
                // Delay is valid test (min and max are valid)
                float transitionDelay = m_transitions[i].m_minimumDelayRetest;
                if (m_transitions[i].m_maximumDelayRetest > m_transitions[i].m_minimumDelayRetest)
                {
                    float minimumDelay = m_transitions[i].m_minimumDelayRetest;
                    float maxumimDelay = m_transitions[i].m_maximumDelayRetest;
                    transitionDelay = minimumDelay + (maxumimDelay - minimumDelay) * p_controller.m_transitionsDelayCoefficient;
                }
                // If the dealy is valid : test
                if (transitionDelay > 0)
                {
                    float currentCycle  = Mathf.Repeat(p_controller.m_stateTimeElapsed, transitionDelay);
                    float previousCycle = Mathf.Repeat(p_controller.m_stateTimeElapsed - Time.deltaTime, transitionDelay);
                    // If the delay is not up yet : skip
                    if (previousCycle < currentCycle)
                    {
                        continue;
                    }
                }
            }

            // Decision test
            bool decisionSucceeded = m_transitions[i].m_decision.Decide(p_controller);
            if (decisionSucceeded && m_transitions[i].m_useTrueState)
            {
                p_controller.TransitionToState(m_transitions[i].m_trueState);
            }
            else if (!decisionSucceeded && m_transitions[i].m_useFalseState)
            {
                p_controller.TransitionToState(m_transitions[i].m_falseState);
            }
        }
    }
 public override void Act(AI_StateController p_controller)
 {
     EndDeath(p_controller as StateController);
 }
示例#4
0
 public void EnterState(AI_StateController p_controller)
 {
     DoOnEnterActions(p_controller);
     CheckTransitions(p_controller, true);
 }
示例#5
0
 public void ExitState(AI_StateController p_controller)
 {
     DoOnExitActions(p_controller);
 }
示例#6
0
 public abstract void Act(AI_StateController p_controller);
示例#7
0
 public void UpdateState(AI_StateController p_controller)
 {
     DoActions(p_controller);
     CheckTransitions(p_controller, false);
 }
    public override void Act(AI_StateController p_controller)
    {
        StateController controller = p_controller as StateController;

        controller.m_offsetChaseTarget = Vector3.zero;
    }
    public override bool Decide(AI_StateController p_controller)
    {
        bool targetIsValid = IsValid(p_controller as StateController);

        return(targetIsValid);
    }
示例#10
0
    public override bool Decide(AI_StateController p_controller)
    {
        bool targetVisible = Look(p_controller as StateController);

        return(targetVisible);
    }
示例#11
0
 public override void Act(AI_StateController p_controller)
 {
     Chase(p_controller as StateController);
 }
 public override void Act(AI_StateController p_controller)
 {
     Search(p_controller as StateController);
 }
示例#13
0
 public override void Act(AI_StateController p_controller)
 {
     Wander(p_controller as StateController);
 }
示例#14
0
 public abstract bool Decide(AI_StateController p_controller);