Exemplo n.º 1
0
        public override void Process(float sequenceTime, float playbackRate)
        {
            allClips.Clear();

            for (int index = 0; index < TrajectoryTracks.Count; index++)
            {
                var track = TrajectoryTracks[index];
                if (track.Enable)
                {
                    for (int trackClipIndex = 0; trackClipIndex < track.TrackClips.Count; trackClipIndex++)
                    {
                        var trackClip = track.TrackClips[trackClipIndex];
                        allClips.Add(trackClip);
                    }
                }
            }

            var totalDeltaTime           = sequenceTime - previousTime;
            var absDeltaTime             = Mathf.Abs(totalDeltaTime);
            var timelinePlayingInReverse = totalDeltaTime < 0.0f;
            var runningTime      = SequenceUpdateRate;
            var runningTotalTime = previousTime + runningTime;

            if (timelinePlayingInReverse)
            {
                previousTime = 0.0f;
                Process(sequenceTime, playbackRate);
            }
            else
            {
                while (absDeltaTime > 0.0f)
                {
                    cachedRunningClips.Clear();
                    for (int allClipIndex = 0; allClipIndex < allClips.Count; allClipIndex++)
                    {
                        var clip = allClips[allClipIndex];
                        if (JTrajectoryClipData.IsClipFinished(runningTotalTime, clip))
                        {
                            for (int i = 0; i < clip.TrajectoryList.Length; i++)
                            {
                                if (clip.TrajectoryList[i]._active)
                                {
                                    clip.TrajectoryList[i].Reset();
                                }
                            }
                            //   if (clip.Trajectory._active)
                            //   {
                            //       clip.Trajectory.Reset();
                            //    }
                        }
                        if (!JTrajectoryClipData.IsClipRunning(runningTotalTime, clip) && !clip.Looping)
                        {
                            continue;
                        }

                        cachedRunningClips.Add(clip);
                    }

                    cachedRunningClips.Sort((x, y) => x.StartTime.CompareTo(y.StartTime));

                    for (int runningClipIndex = 0; runningClipIndex < cachedRunningClips.Count; runningClipIndex++)
                    {
                        var clip = cachedRunningClips[runningClipIndex];
                        if (Restart)
                        {
                            if (clip.skillunit.launchType == JSkillUnit.LaunchType.SINGLELINE)
                            {
                                clip.TrajectoryList = SingleLineFacyory(clip);
                            }
                            if (clip.skillunit.launchType == JSkillUnit.LaunchType.MULLINE)
                            {
                                clip.TrajectoryList = MultiLineFacyory(clip);
                            }
                            Restart = false;
                        }
                        if (clip.TrajectoryList != null)
                        {
                            for (int i = 0; i < clip.TrajectoryList.Length; i++)
                            {
                                if (!clip.TrajectoryList[i]._active)
                                {
                                    clip.TrajectoryList[i].Begin();
                                }
                                clip.TrajectoryList[i].DoUpdate(Time.realtimeSinceStartup);
                            }
                        }
                    }

                    absDeltaTime -= SequenceUpdateRate;
                    if (!Mathf.Approximately(absDeltaTime, Mathf.Epsilon) && absDeltaTime < SequenceUpdateRate)
                    {
                        runningTime = absDeltaTime;
                    }

                    runningTotalTime += runningTime;
                }
            }

            previousTime = sequenceTime;
        }