private CinemachineBrain.OverrideStackFrame GetOverrideFrame(int id)
        {
            int count = this.mOverrideStack.Count;

            for (int i = 0; i < count; i++)
            {
                if (this.mOverrideStack[i].id == id)
                {
                    return(this.mOverrideStack[i]);
                }
            }
            CinemachineBrain.OverrideStackFrame overrideStackFrame = new CinemachineBrain.OverrideStackFrame();
            overrideStackFrame.id = id;
            this.mOverrideStack.Insert(0, overrideStackFrame);
            return(overrideStackFrame);
        }
Example #2
0
 private float GetEffectiveDeltaTime(bool fixedDelta)
 {
     if (CinemachineBrain.SoloCamera != null)
     {
         return(Time.unscaledDeltaTime);
     }
     CinemachineBrain.OverrideStackFrame activeOverride = this.GetActiveOverride();
     if (activeOverride != null)
     {
         return((!activeOverride.Expired) ? activeOverride.deltaTime : -1f);
     }
     if (!Application.isPlaying)
     {
         return(-1f);
     }
     if (this.m_IgnoreTimeScale)
     {
         return((!fixedDelta) ? Time.unscaledDeltaTime : Time.fixedDeltaTime);
     }
     return((!fixedDelta) ? Time.deltaTime : (Time.fixedDeltaTime * Time.timeScale));
 }
        private void ProcessActiveCamera(float deltaTime)
        {
            if (!base.isActiveAndEnabled)
            {
                this.mActiveCameraPreviousFrame   = null;
                this.mOutgoingCameraPreviousFrame = null;
                this.mPreviousFrameWasOverride    = false;
                return;
            }
            CinemachineBrain.OverrideStackFrame activeOverride = this.GetActiveOverride();
            ICinemachineCamera activeVirtualCamera             = this.ActiveVirtualCamera;

            if (activeVirtualCamera == null)
            {
                this.mOutgoingCameraPreviousFrame = null;
            }
            else
            {
                if (activeOverride != null)
                {
                    this.mActiveBlend = null;
                }
                CinemachineBlend cinemachineBlend = this.ActiveBlend;
                if (this.mActiveCameraPreviousFrame != null && this.mActiveCameraPreviousFrame.VirtualCameraGameObject == null)
                {
                    this.mActiveCameraPreviousFrame = null;
                }
                if (this.mActiveCameraPreviousFrame != activeVirtualCamera)
                {
                    if (this.mActiveCameraPreviousFrame != null && !this.mPreviousFrameWasOverride && activeOverride == null && deltaTime >= 0f)
                    {
                        float          duration   = 0f;
                        AnimationCurve blendCurve = this.LookupBlendCurve(this.mActiveCameraPreviousFrame, activeVirtualCamera, out duration);
                        cinemachineBlend = this.CreateBlend(this.mActiveCameraPreviousFrame, activeVirtualCamera, blendCurve, duration, this.mActiveBlend);
                    }
                    if (activeVirtualCamera != this.mOutgoingCameraPreviousFrame)
                    {
                        activeVirtualCamera.OnTransitionFromCamera(this.mActiveCameraPreviousFrame, this.DefaultWorldUp, deltaTime);
                        if (!activeVirtualCamera.VirtualCameraGameObject.activeInHierarchy && (cinemachineBlend == null || !cinemachineBlend.Uses(activeVirtualCamera)))
                        {
                            activeVirtualCamera.UpdateCameraState(this.DefaultWorldUp, -1f);
                        }
                        if (this.m_CameraActivatedEvent != null)
                        {
                            this.m_CameraActivatedEvent.Invoke(activeVirtualCamera);
                        }
                    }
                    if ((cinemachineBlend == null || (cinemachineBlend.CamA != this.mActiveCameraPreviousFrame && cinemachineBlend.CamB != this.mActiveCameraPreviousFrame && cinemachineBlend.CamA != this.mOutgoingCameraPreviousFrame && cinemachineBlend.CamB != this.mOutgoingCameraPreviousFrame)) && this.m_CameraCutEvent != null)
                    {
                        this.m_CameraCutEvent.Invoke(this);
                    }
                }
                if (cinemachineBlend != null)
                {
                    if (activeOverride == null)
                    {
                        cinemachineBlend.TimeInBlend += ((deltaTime >= 0f) ? deltaTime : cinemachineBlend.Duration);
                    }
                    if (cinemachineBlend.IsComplete)
                    {
                        cinemachineBlend = null;
                    }
                }
                if (activeOverride == null)
                {
                    this.mActiveBlend = cinemachineBlend;
                }
                CameraState state = activeVirtualCamera.State;
                if (cinemachineBlend != null)
                {
                    state = cinemachineBlend.State;
                }
                this.PushStateToUnityCamera(state, activeVirtualCamera);
                this.mOutgoingCameraPreviousFrame = null;
                if (cinemachineBlend != null)
                {
                    this.mOutgoingCameraPreviousFrame = cinemachineBlend.CamB;
                }
            }
            this.mActiveCameraPreviousFrame = activeVirtualCamera;
            this.mPreviousFrameWasOverride  = (activeOverride != null);
            if (this.mPreviousFrameWasOverride && activeOverride.blend != null)
            {
                if (activeOverride.blend.BlendWeight < 0.5f)
                {
                    this.mActiveCameraPreviousFrame   = activeOverride.blend.CamA;
                    this.mOutgoingCameraPreviousFrame = activeOverride.blend.CamB;
                    return;
                }
                this.mActiveCameraPreviousFrame   = activeOverride.blend.CamB;
                this.mOutgoingCameraPreviousFrame = activeOverride.blend.CamA;
            }
        }
 internal int SetCameraOverride(int overrideId, ICinemachineCamera camA, ICinemachineCamera camB, float weightB, float deltaTime)
 {
     if (overrideId < 0)
     {
         int num = this.mNextOverrideId;
         this.mNextOverrideId = num + 1;
         overrideId           = num;
     }
     CinemachineBrain.OverrideStackFrame overrideFrame = this.GetOverrideFrame(overrideId);
     overrideFrame.camera         = null;
     overrideFrame.deltaTime      = deltaTime;
     overrideFrame.timeOfOverride = Time.realtimeSinceStartup;
     if (camA != null || camB != null)
     {
         if (weightB <= 0.0001f)
         {
             overrideFrame.blend = null;
             if (camA != null)
             {
                 overrideFrame.camera = camA;
             }
         }
         else if (weightB >= 0.9999f)
         {
             overrideFrame.blend = null;
             if (camB != null)
             {
                 overrideFrame.camera = camB;
             }
         }
         else
         {
             if (camB == null)
             {
                 ICinemachineCamera cinemachineCamera = camB;
                 camB    = camA;
                 camA    = cinemachineCamera;
                 weightB = 1f - weightB;
             }
             if (camA == null)
             {
                 CinemachineBrain.OverrideStackFrame nextActiveFrame = this.GetNextActiveFrame(overrideId);
                 if (nextActiveFrame.blend != null)
                 {
                     camA = new BlendSourceVirtualCamera(nextActiveFrame.blend, deltaTime);
                 }
                 else
                 {
                     camA = ((nextActiveFrame.camera != null) ? nextActiveFrame.camera : camB);
                 }
             }
             if (overrideFrame.blend == null)
             {
                 overrideFrame.blend = new CinemachineBlend(camA, camB, AnimationCurve.Linear(0f, 0f, 1f, 1f), 1f, weightB);
             }
             overrideFrame.blend.CamA        = camA;
             overrideFrame.blend.CamB        = camB;
             overrideFrame.blend.TimeInBlend = weightB;
             overrideFrame.camera            = camB;
         }
     }
     return(overrideId);
 }