Exemple #1
0
    protected virtual void StateMachineProcessState()
    {
        if (!_activeState && CurrentNode)
        {
            _activeState = gameObject.AddComponent(System.Type.GetType(CurrentNode.StateName)) as State;
        }

        if (_activeState)
        {
            State.StatePhase phaseOnStateProcessing = _activeState.CurrentPhase;

            switch (_activeState.CurrentPhase)
            {
            case State.StatePhase.ENTERING:
            {
                if (_oldStatePhase != _activeState.CurrentPhase)
                {
                    _activeState.OnEnter();
                }
                else
                {
                    _activeState.EnterBehavior();
                }
                break;
            }

            case State.StatePhase.ACTIVE:
            {
                _activeState.ActiveBehavior();
                break;
            }

            case State.StatePhase.EXITING:
            {
                if (_oldStatePhase != _activeState.CurrentPhase)
                {
                    _activeState.OnExit();
                }
                else
                {
                    _activeState.ExitBehavior();
                }
                break;
            }

            case State.StatePhase.INACTIVE:
            {
                if (_oldStatePhase != _activeState.CurrentPhase)
                {
                    StateNode requestedNextNode = _activeState.GetRequestedNextNode();
                    if (requestedNextNode)
                    {
                        CurrentNode = requestedNextNode;
                    }
                    else
                    {
                        CurrentNode = CurrentNode.NextNode;
                    }
                }
                else
                {
                    CurrentNode = CurrentNode.NextNode;
                }

                Destroy(_activeState);
                _activeState = null;
                break;
            }
            }

            _oldStatePhase = phaseOnStateProcessing;
        }
    }
Exemple #2
0
    protected virtual void StateMachineProcessState()
    {
        //Figure out what GameObject should be passed into state
        GameObject gameObjectToProccess = gameObject;

        if (ReleventGameObject)
        {
            gameObjectToProccess = ReleventGameObject;
        }

        //Start the queued state if active state is done.
        if (_activeState == null && _queuedNextState != null)
        {
            _activeState = _queuedNextState;
        }

        //Run state behavior for _activeState
        if (_activeState != null)
        {
            State.StatePhase phaseOnStateProcessing = _activeState.CurrentPhase;

            switch (_activeState.CurrentPhase)
            {
            case State.StatePhase.ENTERING:
            {
                if (_oldStatePhase != _activeState.CurrentPhase)
                {
                    _activeState.OnEnter(gameObjectToProccess);
                }
                else
                {
                    _activeState.EnterBehavior(gameObjectToProccess);
                }
                break;
            }

            case State.StatePhase.ACTIVE:
            {
                _activeState.ActiveBehavior(gameObjectToProccess);
                break;
            }

            case State.StatePhase.EXITING:
            {
                if (_oldStatePhase != _activeState.CurrentPhase)
                {
                    _activeState.OnExit(gameObjectToProccess);
                }
                else
                {
                    _activeState.ExitBehavior(gameObjectToProccess);
                }
                break;
            }

            case State.StatePhase.INACTIVE:
            {
                _activeState = null;
                break;
            }
            }

            _oldStatePhase = phaseOnStateProcessing;
        }
    }