Example #1
0
        public void ScrubToHere(
            float currentTime, TargetPositionCache.Mode cacheMode, CinemachineBrain brain)
        {
            if (brain == null)
            {
                return;
            }
            TargetPositionCache.CacheMode   = cacheMode;
            TargetPositionCache.CurrentTime = currentTime;
            if (cacheMode != TargetPositionCache.Mode.Playback)
            {
                return;
            }

            float stepSize = TargetPositionCache.CacheStepSize;

            var up        = brain.DefaultWorldUp;
            var endTime   = TargetPositionCache.CurrentTime;
            var startTime = Mathf.Max(
                TargetPositionCache.CacheTimeRange.Start, endTime - GetMaxDampTime());
            var numSteps = Mathf.FloorToInt((endTime - startTime) / stepSize);

            for (int step = numSteps; step >= 0; --step)
            {
                var t = Mathf.Max(startTime, endTime - step * stepSize);
                TargetPositionCache.CurrentTime = t;
                var deltaTime = (step == numSteps) ? -1
                        : (t - startTime < stepSize ? t - startTime : stepSize);

                // Update all relevant vcams, leaf-most first
                for (int i = mAllCamerasForScrubbing.Count - 1; i >= 0; --i)
                {
                    var sublist = mAllCamerasForScrubbing[i];
                    for (int j = sublist.Count - 1; j >= 0; --j)
                    {
                        var vcam = sublist[j];
                        vcam.InternalUpdateCameraState(up, deltaTime);
                        if (deltaTime < 0)
                        {
                            vcam.ForceCameraPosition(
                                TargetPositionCache.GetTargetPosition(vcam.transform),
                                TargetPositionCache.GetTargetRotation(vcam.transform));
                        }
                    }
                }
            }
        }
Example #2
0
        public void ScrubToHere(
            float currentTime, TargetPositionCache.Mode cacheMode, CinemachineBrain brain)
        {
            if (brain == null)
            {
                return;
            }
            TargetPositionCache.CacheMode   = cacheMode;
            TargetPositionCache.CurrentTime = currentTime;
            if (cacheMode != TargetPositionCache.Mode.Playback)
            {
                return;
            }

            const float kStepsPerSecond = 30;
            const float kStepSize       = 1.0f / kStepsPerSecond;

            int   numSteps = Mathf.CeilToInt(GetMaxDampTime() * kStepsPerSecond);
            float endTime  = TargetPositionCache.CurrentTime;

            for (int step = numSteps; step >= 0; --step)
            {
                var t         = endTime - step * kStepSize;
                var deltaTime = (step == numSteps) ? -1 : kStepSize;
                TargetPositionCache.CurrentTime = t;

                // Update all relevant vcams, leaf-most first
                for (int i = mAllCamerasForScrubbing.Count - 1; i >= 0; --i)
                {
                    var sublist = mAllCamerasForScrubbing[i];
                    for (int j = sublist.Count - 1; j >= 0; --j)
                    {
                        var vcam = sublist[j];
                        vcam.InternalUpdateCameraState(brain.DefaultWorldUp, deltaTime);
                    }
                }
            }
        }