示例#1
0
        protected virtual void FixedUpdate()
        {
            if (IsGamePaused || CurrentStateInterfaceHandler == null)
            {
                return;
            }

            CurrentStateInterfaceHandler.FixedUpdate();
        }
示例#2
0
        /// <summary>
        /// Exits current state.
        /// </summary>
        public void ExitState()
        {
            CurrentStateInterfaceHandler.Exit();
            statesStack.Pop();
            if (CurrentStateInterfaceHandler != null)
            {
                CurrentStateInterfaceHandler.Awake();
            }

            #if UNITY_EDITOR
            currentStateTypes.RemoveAt(0);
            #endif
        }
示例#3
0
        /// <summary>
        /// Enter a new state.
        /// </summary>
        /// <param name="newState"> New state instance.</param>
        public void EnterState(IState newState)
        {
            if (newState == null)
            {
                return;
            }

            var requirement = StateUtility.GetAllRequirements(newState);

            if (StateUtility.GetAllRequiredReferences(newState, requirement, gameObject, true))
            {
                var stateHandler = new StateInterfaceHandler(newState);
                if (KeepStatesOnStack)
                {
                    if (statesStack.Count > 0)
                    {
                        CurrentStateInterfaceHandler.Sleep();
                    }
                }
                else
                {
                    statesStack.Pop().Exit();
                }

                statesStack.Push(stateHandler);

                CurrentStateInterfaceHandler.Enter();

                #if UNITY_EDITOR
                currentStateTypes.Insert(0, newState.GetType().Name);
                #endif
            }
            else
            {
                string typeName = newState.GetType().Name;
                Debug.LogErrorFormat("Conditions to enter the state type of {0} were not met.", typeName);
            }
        }