public void OnStateControllerUpdate(object sender, StateControllerEventArgs args) { var state_controller = (IStateController)sender; var info = new ManagedStateEventInfo <ManagedStateEventArgs>( ManagedStateEventType.StateUpdate, state_controller.OnManagedStateVerifyUpdate, state_controller.OnManagedStateUpdate, AnyStateUpdate.Invoke, new ManagedStateEventArgs(state_controller, args.Animator, args.AnimatorStateInfo, args.LayerIndex)); StateEventInfoQueue.Enqueue(info); }
public void OnStateMachineControllerExit(object sender, StateMachineControllerEventArgs args) { var state_controller = (IStateController)sender; ActiveStateControllersSet.Remove(state_controller); var info = new ManagedStateEventInfo <ManagedStateMachineEventArgs>( ManagedStateEventType.StateMachineExit, state_controller.OnManagedStateMachineVerifyExit, state_controller.OnManagedStateMachineExit, AnyStateMachineExit.Invoke, new ManagedStateMachineEventArgs(state_controller, args.Animator, args.StateMachinePathHash)); StateEventInfoQueue.Enqueue(info); }
public void OnStateControllerEntry(object sender, StateControllerEventArgs args) { var state_controller = (IStateController)sender; ActiveStateControllersSet.Add(state_controller); var info = new ManagedStateEventInfo <ManagedStateEventArgs>( ManagedStateEventType.StateEntry, state_controller.OnManagedStateVerifyEnter, state_controller.OnManagedStateEnter, AnyStateEntry.Invoke, new ManagedStateEventArgs(state_controller, args.Animator, args.AnimatorStateInfo, args.LayerIndex)); StateEventInfoQueue.Enqueue(info); }
protected void SafelyProcessEventQueue() { IEnumerable <IManagedStateEventInfo> verified_infos; try { verified_infos = GetVerifiedStateEventInfos(StateEventInfoQueue) .ToArray(); } catch (Exception ex) { Animator.Play(LastGoodStatePathHash); StateEventInfoQueue.Clear(); throw ex; } try { // If any exceptions are thrown here, we will be in an unknown state // Process will perform the managed actions of the state controller ProcessStateEventInfos(verified_infos); // The processing succeeded and the last good state should be the current state // TODO: specify layer index? var animator_state_info = Animator.GetCurrentAnimatorStateInfo(0); LastGoodStatePathHash = animator_state_info.fullPathHash; } catch (Exception ex) { // Last ditch efforts Debug.LogError("CRITICAL ERROR"); for (var i = 0; i < SceneManager.sceneCount; i++) #pragma warning disable CS0618 // Type or member is obsolete { SceneManager.UnloadScene(i); } #pragma warning restore CS0618 // Type or member is obsolete throw ex; } }