public static IEnumerator Run(StateMachine stateMachine, Timeline timeline) { #if UNITY_EDITOR && DEBUG TimelineStateMachineDebug.OnTimelineStateStarted(stateMachine, null, null); #endif return(PerformState(stateMachine, null, timeline)); }
private void UpdateInPlayMode() { _debugging = false; if (_editorPrefs._debug) { StateMachine stateMachine = _editorPrefs._debugObject.GetComponent(); TimelineStateMachineDebug.StateInfo stateInfo = TimelineStateMachineDebug.GetStateInfo(stateMachine != null ? stateMachine.gameObject : null); if (stateInfo != null) { _debugging = true; if (_currentFileName != stateInfo._fileName && stateInfo._fileName != null) { _currentFileName = stateInfo._fileName; SetStateMachine(stateInfo._stateMachine); _stateEditor.SetTimeline(null); } switch (_currentMode) { case eMode.ViewingStateMachine: { if (_playModeHighlightedState != stateInfo._state) { GetEditorWindow().DoRepaint(); } _playModeHighlightedState = stateInfo._state; if (_editorPrefs._debugLockFocus) { CenterCameraOn(GetTimelineStateGUI(_playModeHighlightedState._stateId)); } } break; case eMode.ViewingState: { if (stateInfo._state._stateId != _editedState.GetStateId()) { _editedState = GetTimelineStateGUI(stateInfo._state._stateId); _stateEditor.SetTimeline(stateInfo._state._timeline); } _stateEditor.SetPlayModeCursorTime(stateInfo._time); GetEditorWindow().DoRepaint(); } break; } } } }
public static IEnumerator Run(StateMachine stateMachine, TimelineStateRefProperty stateRef, GameObject sourceObject = null) { TimelineState state = stateRef.LoadTimelineState(sourceObject != null ? sourceObject : stateMachine.gameObject); if (state != null) { #if UNITY_EDITOR && DEBUG string debugFileName = AssetDatabase.GetAssetPath(stateRef.GetFile()); TimelineStateMachineDebug.OnTimelineStateStarted(stateMachine, state, debugFileName); #endif return(PerformState(stateMachine, state, state._timeline)); } return(null); }
public static IEnumerator Run(StateMachine stateMachine, TimelineStateRef stateRef, GameObject sourceObject = null) { TimelineState state = stateRef.GetTimelineState(sourceObject != null ? sourceObject : stateMachine.gameObject); if (state != null) { #if UNITY_EDITOR && DEBUG string debugFileName = stateRef._file._filePath; TimelineStateMachineDebug.OnTimelineStateStarted(stateMachine, state, debugFileName); #endif return(PerformState(stateMachine, state, state._timeline)); } return(null); }
private static IEnumerator PerformState(StateMachine stateMachine, TimelineState state, Timeline timeline) { if (timeline != null && timeline._events.Length > 0) { ITimelineStateMachineTimer timer = TimelineStateMachine.GetTimer(stateMachine.gameObject); float currentTime = 0.0f; List <Event> nonInstantEvents = new List <Event>(); int eventIndex = 0; Event currentEvent = timeline._events[eventIndex]; while (currentEvent != null || nonInstantEvents.Count > 0) { IStateMachineEvent currentStateMachineEvent = currentEvent as IStateMachineEvent; if (currentStateMachineEvent == null && currentEvent != null) { throw new System.Exception("Event doesn't implement IStateMachineEvent"); } float nextEventTime = currentEvent != null ? timeline._events[eventIndex].GetTime() : 0.0f; //Wait until event time while (currentTime < nextEventTime || (currentEvent == null && nonInstantEvents.Count > 0)) { currentTime += timer.GetDeltaTime(); #if DEBUG TimelineStateMachineDebug.OnTimelineStateTimeProgress(stateMachine, state, currentTime); #endif //Updated non instant events, if any now wants to exit the state then break out of coroutine if (UpdateNonInstantEvents(stateMachine, ref nonInstantEvents, currentTime)) { EndNonInstantEvents(stateMachine, ref nonInstantEvents); yield break; } yield return(null); } if (currentEvent == null) { break; } //Trigger event eEventTriggerReturn status = currentStateMachineEvent.Trigger(stateMachine); switch (status) { case eEventTriggerReturn.EventFinished: //Do nothing, just move on to next event break; case eEventTriggerReturn.EventFinishedExitState: //Exit state so break out of coroutine EndNonInstantEvents(stateMachine, ref nonInstantEvents); yield break; case eEventTriggerReturn.EventOngoing: //Track timed event, move on to next event nonInstantEvents.Add(currentEvent); break; } //Get next currentEvent = ++eventIndex < timeline._events.Length ? timeline._events[eventIndex] : null; } } #if DEBUG TimelineStateMachineDebug.OnTimelineStateStoped(stateMachine); #endif yield break; }