protected virtual void FixedUpdate() { if (IsGamePaused || CurrentStateInterfaceHandler == null) { return; } CurrentStateInterfaceHandler.FixedUpdate(); }
/// <summary> /// Exits current state. /// </summary> public void ExitState() { CurrentStateInterfaceHandler.Exit(); statesStack.Pop(); if (CurrentStateInterfaceHandler != null) { CurrentStateInterfaceHandler.Awake(); } #if UNITY_EDITOR currentStateTypes.RemoveAt(0); #endif }
/// <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); } }