private void ForceMoveClip(int index) { if (inputs != null) { for (int i = 0; i < inputs.Count; i++) { if (i < index) { inputs[i].isFinishRole = true; } if (i == index) { inputs[i].isFinishRole = false; m_PlayableDirector.time = clips[i].start; m_PlayableDirector.Pause(); currentInput = inputs[i]; currentInputCount = i; trackBinding.currentClipCount = currentInputCount; } } } }
public override void ProcessFrame(Playable playable, FrameData info, object playerData) { trackBinding = playerData as TimeMachineTrackManeger; if (!trackBinding) { return; } if (!initialized) { Init(playable); trackBinding.OnNextState += OnNextState; trackBinding.OnInit += InitEvents; trackBinding.OnForceMoveClip += ForceMoveClip; } if (trackBinding.clipCount != clips.Count) { InitClipViewer(); } double time = m_PlayableDirector.time; var counter = 0; foreach (var clip in clips) { var inputPlayable = (ScriptPlayable <TimeMachineControlBehaviour>)playable.GetInput(counter); var input = inputPlayable.GetBehaviour(); if (clip.start <= time && clip.end >= time) { currentInput = input; currentInputCount = counter; trackBinding.currentClipCount = currentInputCount; if (trackBinding.currentClipCount != counter) { trackBinding.currentClipCount = counter; // trackBinding.UpdateStatus(); break; } if (!input.isFinishRole && input.timeMachineClipEvent == TimeMaschineClipEvent.SKIP) { m_PlayableDirector.time = clip.end - trackBinding.frameDuration; input.isFinishRole = true; break; } } if (!input.isFinishRole && input.timeMachineClipEvent == TimeMaschineClipEvent.PAUSE && time >= clip.end - trackBinding.frameDuration) { trackBinding.EnableClickButton(); m_PlayableDirector.time = clip.end - trackBinding.frameDuration; break; } if (!input.isFinishRole && input.timeMachineClipEvent == TimeMaschineClipEvent.LOOP && time >= clip.end - trackBinding.frameDuration) { if (m_PlayableDirector.state == PlayState.Playing) { m_PlayableDirector.time = clip.start; } } counter++; } // if (currentInput != null) // { // if (currentInput.isFinishRole == false && currentInput.timeMaschineClipEvent == TimeMaschineClipEvent.LOOP) // { // trackBinding.currentClipStatus = TimeMaschineClipEvent.LOOP; // } // // if (currentInput.isFinishRole == true && currentInput.timeMaschineClipEvent == TimeMaschineClipEvent.LOOP) // { // trackBinding.currentClipStatus = TimeMaschineClipEvent.THOROUGH; // } // } }