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); }
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); }