static ITLTrack GetTrack(ITimelineLiteObject _timelineLiteObject, TLTrackData _trackData) { Type trackDataType = _trackData.GetType(); if (trackDataType == typeof(TLGroupTrackData)) { TLGroupTrackData groupTrackData = _trackData as TLGroupTrackData; TLGroupTrack groupTrack = new TLGroupTrack(_timelineLiteObject, _trackData as TLGroupTrackData); foreach (TLTrackData childTrack in groupTrackData.ChildTracks) { ITLTrack track = GetTrack(_timelineLiteObject, childTrack); if (track != null) { groupTrack.ChildTracks.Add(track); } } return(groupTrack); } else /* if (typeof(TLBasicTrackData).IsAssignableFrom(trackDataType))*/ { TLBasicTrackData basicTrackData = _trackData as TLBasicTrackData; TLBasicTrack basicTrack = new TLBasicTrack(_timelineLiteObject, basicTrackData); foreach (TLActionData actionData in basicTrackData.Clips) { Type actionType; if (ActionDataDict.TryGetValue(actionData.GetType(), out actionType)) { ITLAction action = Activator.CreateInstance(actionType, basicTrack, actionData) as ITLAction; if (action != null) { basicTrack.Clips.Add(action); } } } return(basicTrack); } }
public override void UpdateActions(int _frame, float _time) { int limit = clips.Count; if (limit == 0) { return; } int increment = 1; if (!Playable.IsPlayingForward) { limit = -1; increment = -1; } if (Playable.IsPlayingForward) { if (_frame < clips[currentClipIndex].Start) { for (int i = clips.Count - 1; i >= 0; i--) { if (_frame > clips[i].Start) { currentClipIndex = i; } } } } else { if (_frame > clips[currentClipIndex].End) { for (int i = 0; i < clips.Count; i++) { if (_frame < clips[i].End) { currentClipIndex = i; } } } } for (int i = currentClipIndex; i != limit; i += increment) { ITLAction clip = clips[i]; if (_frame < clip.Start) { // 正向播放与反向播放的处理 if (Playable.IsPlayingForward) { if (clip.HasTriggered) { clip.ActionStop(); } break; } else { if (!clip.HasFinished && (clip.HasTriggered || clip.TriggerOnSkip)) { clip.UpdateAction(clip.FrameCount, clip.Duration); } currentClipIndex = Mathf.Clamp(i - 1, 0, clips.Count - 1); } } else if (_frame >= clip.Start && _frame <= clip.End) { if (clip.HasFinished && Playable.FrameChanged) { clip.ActionStop(); } if (!clip.HasFinished) { int frameSinceActionStart = _frame - clip.Start; float timeSinceActionStart = _time - clip.StartTime; clip.UpdateAction(frameSinceActionStart, timeSinceActionStart); } } else //if(_frame > clip.end) // 如果完成 { // 正向播放与反向播放的处理 if (Playable.IsPlayingForward) { if (!clip.HasFinished && (clip.HasTriggered || clip.TriggerOnSkip)) { clip.UpdateAction(clip.FrameCount, clip.Duration); } currentClipIndex = Mathf.Clamp(i + 1, 0, clips.Count - 1); } else { if (clip.HasTriggered) { clip.ActionStop(); } break; } } } }