IEnumerator UpdateScreenSizeRoutine(float finalSize, float duration) { var startSize = 0f; if (GameCamera.orthographic) { startSize = GameCamera.orthographicSize; #if PC2D_TK2D_SUPPORT if (Tk2dCam != null) { startSize = Tk2dCam.CameraSettings.orthographicSize / Tk2dCam.ZoomFactor; } #endif } else { startSize = Mathf.Abs(Vector3D(CameraPosition)) * Mathf.Tan(GameCamera.fieldOfView * 0.5f * Mathf.Deg2Rad); } var waitForFixedUpdate = new WaitForFixedUpdate(); var t = 0f; var newSize = startSize; while (t <= 1.0f) { t += (UpdateType == UpdateType.LateUpdate ? Time.deltaTime : Time.fixedDeltaTime) / duration; newSize = Utils.EaseFromTo(startSize, finalSize, t, EaseType.EaseOut); UpdateScreenSize(newSize); yield return((UpdateType == UpdateType.FixedUpdate) ? waitForFixedUpdate : null); } }
IEnumerator MoveCameraToTarget() { var initialCamPosH = Vector3H(ProCamera2D.CameraPosition); var initialCamPosV = Vector3V(ProCamera2D.CameraPosition); PositionAndSizeOverrider.OverridePosition = VectorHVD(initialCamPosH, initialCamPosV, Vector3D(ProCamera2D.CameraPosition)); PositionAndSizeOverrider.OverrideSize = 0; PositionAndSizeOverrider.UseNumericBoundaries = true; PositionAndSizeOverrider.Enabled = true; var t = 0f; while (t <= 1.0f) { t += ProCamera2D.DeltaTime / TransitionDuration; var currentCamPosH = Utils.EaseFromTo(initialCamPosH, ProCamera2D.CameraTargetPositionSmoothed.x, t, TransitionEaseType); var currentCamPosV = Utils.EaseFromTo(initialCamPosV, ProCamera2D.CameraTargetPositionSmoothed.y, t, TransitionEaseType); PositionAndSizeOverrider.UseTopBoundary = NumericBoundaries.UseTopBoundary; PositionAndSizeOverrider.TopBoundary = NumericBoundaries.TopBoundary; PositionAndSizeOverrider.UseBottomBoundary = NumericBoundaries.UseBottomBoundary; PositionAndSizeOverrider.BottomBoundary = NumericBoundaries.BottomBoundary; PositionAndSizeOverrider.UseLeftBoundary = NumericBoundaries.UseLeftBoundary; PositionAndSizeOverrider.LeftBoundary = NumericBoundaries.LeftBoundary; PositionAndSizeOverrider.UseRightBoundary = NumericBoundaries.UseRightBoundary; PositionAndSizeOverrider.RightBoundary = NumericBoundaries.RightBoundary; PositionAndSizeOverrider.OverridePosition = VectorHVD(currentCamPosH, currentCamPosV, Vector3D(ProCamera2D.CameraPosition)); yield return(ProCamera2D.GetYield()); } PositionAndSizeOverrider.Enabled = false; NumericBoundaries.MoveCameraToTargetRoutine = null; }
IEnumerator Animate(bool value, float duration, EaseType easeType) { var currentSpeeds = new float[ParallaxLayers.Count]; for (int i = 0; i < currentSpeeds.Length; i++) { currentSpeeds[i] = ParallaxLayers[i].Speed; } var t = 0f; while (t <= 1.0f) { t += ProCamera2D.DeltaTime / duration; for (int i = 0; i < ParallaxLayers.Count; i++) { if (value) { ParallaxLayers[i].Speed = Utils.EaseFromTo(currentSpeeds[i], _initialSpeeds[i], t, easeType); } else { ParallaxLayers[i].Speed = Utils.EaseFromTo(currentSpeeds[i], 1, t, easeType); } } yield return(ProCamera2D.GetYield()); } }
IEnumerator DollyZoomRoutine(float finalFOV, float duration, EaseType easeType) { var startFOV = GameCamera.fieldOfView; var newFOV = startFOV; var t = 0f; while (t <= 1.0f) { t += DeltaTime / duration; newFOV = Utils.EaseFromTo(startFOV, finalFOV, t, easeType); GameCamera.fieldOfView = newFOV; _transform.localPosition = VectorHVD( Vector3H(_transform.localPosition), Vector3V(_transform.localPosition), GetCameraDistanceForFOV(newFOV, ScreenSizeInWorldCoordinates.y) * _originalCameraDepthSign); yield return(GetYield()); } _dollyZoomRoutine = null; if (OnDollyZoomFinished != null) { OnDollyZoomFinished(newFOV); } if (OnUpdateScreenSizeFinished != null) { OnUpdateScreenSizeFinished(ScreenSizeInWorldCoordinates.y * .5f); } }
IEnumerator EndCinematicRoutine() { if (_letterbox != null && LetterboxAmount > 0) { _letterbox.TweenTo(0f, LetterboxAnimDuration); } var initialPosH = Vector3H(_newPos); var initialPosV = Vector3V(_newPos); var currentCameraSize = ProCamera2D.ScreenSizeInWorldCoordinates.y * .5f; // _TurnRateEase out var t = 0f; while (t <= 1.0f) { if (!_paused) { t += ProCamera2D.DeltaTime / EndDuration; float newPosH = 0f; float newPosV = 0f; if (ProCamera2D.CameraTargets.Count > 0) { newPosH = Utils.EaseFromTo(initialPosH, Vector3H(_originalPos), t, EndEaseType); newPosV = Utils.EaseFromTo(initialPosV, Vector3V(_originalPos), t, EndEaseType); } else { newPosH = Utils.EaseFromTo(initialPosH, Vector3H(_startPos), t, EndEaseType); newPosV = Utils.EaseFromTo(initialPosV, Vector3V(_startPos), t, EndEaseType); } if (UseNumericBoundaries) { LimitToNumericBoundaries(ref newPosH, ref newPosV); } _newPos = VectorHVD(newPosH, newPosV, 0); _newSize = Utils.EaseFromTo(currentCameraSize, _initialCameraSize, t, EndEaseType); } yield return(ProCamera2D.GetYield()); } if (OnCinematicFinished != null) { OnCinematicFinished.Invoke(); } _isPlaying = false; // Ugly hack... but no way around it at the moment if (ProCamera2D.CameraTargets.Count == 0) { ProCamera2D.Reset(true); } }
IEnumerator Animate(bool value, float duration, EaseType easeType) { var waitForFixedUpdate = new WaitForFixedUpdate(); var t = 0f; var currentSpeeds = new float[ParallaxLayers.Count]; for (int i = 0; i < currentSpeeds.Length; i++) { currentSpeeds[i] = ParallaxLayers[i].Speed; } while (t <= 1.0f) { t += (ProCamera2D.UpdateType == UpdateType.LateUpdate ? Time.deltaTime : Time.fixedDeltaTime) / duration; for (int i = 0; i < ParallaxLayers.Count; i++) { if (value) { ParallaxLayers[i].Speed = Utils.EaseFromTo(currentSpeeds[i], _initialSpeeds[i], t, easeType); } else { ParallaxLayers[i].Speed = Utils.EaseFromTo(currentSpeeds[i], 1, t, easeType); } } yield return((ProCamera2D.UpdateType == UpdateType.FixedUpdate) ? waitForFixedUpdate : null); } }
IEnumerator MoveCameraToTarget() { var initialCamPosH = Vector3H(ProCamera2D.LocalPosition); var initialCamPosV = Vector3V(ProCamera2D.LocalPosition); _newPos = VectorHVD(initialCamPosH, initialCamPosV, Vector3D(ProCamera2D.LocalPosition)); _transitioning = true; var t = 0f; while (t <= 1.0f) { t += ProCamera2D.DeltaTime / TransitionDuration; var newPosH = Utils.EaseFromTo(initialCamPosH, ProCamera2D.CameraTargetPositionSmoothed.x, t, TransitionEaseType); var newPosV = Utils.EaseFromTo(initialCamPosV, ProCamera2D.CameraTargetPositionSmoothed.y, t, TransitionEaseType); LimitToNumericBoundaries(ref newPosH, ref newPosV); _newPos = VectorHVD(newPosH, newPosV, Vector3D(ProCamera2D.LocalPosition)); yield return(ProCamera2D.GetYield()); } NumericBoundaries.MoveCameraToTargetRoutine = null; _transitioning = false; }
IEnumerator ApplyInfluenceRoutine() { var initialExclusiveFocusPointH = Vector3H(_targetExclusiveFocusPoint.HasValue ? _targetExclusiveFocusPoint.Value : ProCamera2D.CameraPosition); var initialExclusiveFocusPointV = Vector3V(_targetExclusiveFocusPoint.HasValue ? _targetExclusiveFocusPoint.Value : ProCamera2D.CameraPosition); // Save the current boundaries so we can enable then later again if (IgnoreBoundaries && ProCamera2D.UseNumericBoundaries) { ProCamera2D.UseNumericBoundaries = false; _boundsAnimator = new BoundariesAnimator(ProCamera2D); _boundsAnimator.UseTopBoundary = ProCamera2D.UseTopBoundary; _boundsAnimator.TopBoundary = ProCamera2D.TopBoundary; _boundsAnimator.UseBottomBoundary = ProCamera2D.UseBottomBoundary; _boundsAnimator.BottomBoundary = ProCamera2D.BottomBoundary; _boundsAnimator.UseLeftBoundary = ProCamera2D.UseLeftBoundary; _boundsAnimator.LeftBoundary = ProCamera2D.LeftBoundary; _boundsAnimator.UseRightBoundary = ProCamera2D.UseRightBoundary; _boundsAnimator.RightBoundary = ProCamera2D.RightBoundary; ProCamera2D.MoveCameraInstantlyToPosition(VectorHV(initialExclusiveFocusPointH, initialExclusiveFocusPointV)); } else if (IgnoreBoundaries && ProCamera2D.UseGeometryBoundaries) { ProCamera2D.UseGeometryBoundaries = false; _reenableGeometryBoundaries = true; ProCamera2D.MoveCameraInstantlyToPosition(VectorHV(initialExclusiveFocusPointH, initialExclusiveFocusPointV)); } // Ease in var waitForFixedUpdate = new WaitForFixedUpdate(); var t = 0f; while (t <= 1.0f) { t += (ProCamera2D.UpdateType == UpdateType.LateUpdate ? Time.deltaTime : Time.fixedDeltaTime) / EaseInDuration; var targetExclusiveFocusPointH = Utils.EaseFromTo(initialExclusiveFocusPointH, Vector3H(_transform.position), t, TransitionEaseType); var targetExclusiveFocusPointV = Utils.EaseFromTo(initialExclusiveFocusPointV, Vector3V(_transform.position), t, TransitionEaseType); _targetExclusiveFocusPoint = VectorHV(targetExclusiveFocusPointH, targetExclusiveFocusPointV); ProCamera2D.ExclusiveTargetPosition = _targetExclusiveFocusPoint; yield return((ProCamera2D.UpdateType == UpdateType.FixedUpdate) ? waitForFixedUpdate : null); } // Follow this while (true) { ProCamera2D.ExclusiveTargetPosition = VectorHV(Vector3H(_transform.position), Vector3V(_transform.position)); _targetExclusiveFocusPoint = ProCamera2D.ExclusiveTargetPosition.Value; yield return((ProCamera2D.UpdateType == UpdateType.FixedUpdate) ? waitForFixedUpdate : null); } }
IEnumerator TransitionRoutine(NumericBoundariesSettings numericBoundariesSettings, float targetSize, float transitionDuration = 1f, EaseType transitionEaseType = EaseType.EaseOut) { _transitioning = true; // Disable the current numeric boundaries _numericBoundaries.UseNumericBoundaries = false; // Size var initialSize = ProCamera2D.ScreenSizeInWorldCoordinates.y / 2f; //Position var initialCamPosH = Vector3H(ProCamera2D.LocalPosition); var initialCamPosV = Vector3V(ProCamera2D.LocalPosition); // Transition var t = 0f; while (t <= 1.0f) { t += ProCamera2D.DeltaTime / transitionDuration; // Size _newSize = Utils.EaseFromTo(initialSize, targetSize, t, transitionEaseType); // Position var targetPosH = ProCamera2D.CameraTargetPositionSmoothed.x; var targetPosV = ProCamera2D.CameraTargetPositionSmoothed.y; LimitToNumericBoundaries( ref targetPosH, ref targetPosV, targetSize * ProCamera2D.GameCamera.aspect, targetSize, numericBoundariesSettings); var newPosH = Utils.EaseFromTo(initialCamPosH, targetPosH, t, transitionEaseType); var newPosV = Utils.EaseFromTo(initialCamPosV, targetPosV, t, transitionEaseType); _newPos = VectorHVD(newPosH, newPosV, 0); yield return(ProCamera2D.GetYield()); } _transitioning = false; _numericBoundaries.Settings = numericBoundariesSettings; _transitionRoutine = null; if (OnFinishedTransition != null) { OnFinishedTransition.Invoke(_currentRoomIndex, _previousRoomIndex); } _previousRoomIndex = _currentRoomIndex; }
IEnumerator RightTransitionRoutine(float duration, bool turnOffBoundaryAfterwards = false) { var initialRightBoundary = Vector3H(ProCamera2D.LocalPosition) + ProCamera2D.ScreenSizeInWorldCoordinates.x / 2; NumericBoundaries.TargetRightBoundary = RightBoundary; var t = 0f; while (t <= 1.0f) { t += ProCamera2D.DeltaTime / duration; // Move right if (UseRightBoundary && UseLeftBoundary && RightBoundary > initialRightBoundary) { NumericBoundaries.RightBoundary = RightBoundary; } // Move left else if (UseRightBoundary) { NumericBoundaries.RightBoundary = Utils.EaseFromTo(initialRightBoundary, RightBoundary, t, TransitionEaseType); var currentCamRightEdge = Vector3H(ProCamera2D.LocalPosition) + ProCamera2D.ScreenSizeInWorldCoordinates.x / 2; if (currentCamRightEdge > NumericBoundaries.TargetRightBoundary && NumericBoundaries.RightBoundary > currentCamRightEdge) { NumericBoundaries.RightBoundary = currentCamRightEdge; } } yield return(ProCamera2D.GetYield()); } if (turnOffBoundaryAfterwards) { NumericBoundaries.UseRightBoundary = false; UseRightBoundary = false; } if (!NumericBoundaries.HasFiredTransitionFinished && OnTransitionFinished != null) { NumericBoundaries.HasFiredTransitionStarted = false; NumericBoundaries.HasFiredTransitionFinished = true; OnTransitionFinished(); } }
IEnumerator TweenToRoutine(float targetAmount, float duration) { var initialAmount = Amount; var t = 0f; while (t <= 1.0f) { t += Time.deltaTime / duration; Amount = Utils.EaseFromTo(initialAmount, targetAmount, t, EaseType.EaseOut); yield return(null); } yield return(null); }
IEnumerator BottomTransitionRoutine(float duration, bool turnOffBoundaryAfterwards = false) { var initialBottomBoundary = Vector3V(ProCamera2D.LocalPosition) - ProCamera2D.ScreenSizeInWorldCoordinates.y / 2; NumericBoundaries.TargetBottomBoundary = BottomBoundary; var t = 0f; while (t <= 1.0f) { t += ProCamera2D.DeltaTime / duration; // Move down if (UseBottomBoundary && UseTopBoundary && BottomBoundary < initialBottomBoundary) { NumericBoundaries.BottomBoundary = BottomBoundary; } // Move up else if (UseBottomBoundary) { NumericBoundaries.BottomBoundary = Utils.EaseFromTo(initialBottomBoundary, BottomBoundary, t, TransitionEaseType); var currentCamBottomEdge = Vector3V(ProCamera2D.LocalPosition) - ProCamera2D.ScreenSizeInWorldCoordinates.y / 2; if (currentCamBottomEdge < NumericBoundaries.TargetBottomBoundary && NumericBoundaries.BottomBoundary < currentCamBottomEdge) { NumericBoundaries.BottomBoundary = currentCamBottomEdge; } } yield return(ProCamera2D.GetYield()); } if (turnOffBoundaryAfterwards) { NumericBoundaries.UseBottomBoundary = false; UseBottomBoundary = false; } if (!NumericBoundaries.HasFiredTransitionFinished && OnTransitionFinished != null) { NumericBoundaries.HasFiredTransitionStarted = false; NumericBoundaries.HasFiredTransitionFinished = true; OnTransitionFinished(); } }
IEnumerator TopTransitionRoutine(float duration, bool turnOffBoundaryAfterwards = false) { var initialTopBoundary = Vector3V(ProCamera2D.LocalPosition) + ProCamera2D.ScreenSizeInWorldCoordinates.y / 2; NumericBoundaries.TargetTopBoundary = TopBoundary; var t = 0f; while (t <= 1.0f) { t += ProCamera2D.DeltaTime / duration; // Move up if (UseTopBoundary && UseBottomBoundary && TopBoundary > initialTopBoundary) { NumericBoundaries.TopBoundary = TopBoundary; } // Move down else if (UseTopBoundary) { NumericBoundaries.TopBoundary = Utils.EaseFromTo(initialTopBoundary, TopBoundary, t, TransitionEaseType); var currentCamTopEdge = Vector3V(ProCamera2D.LocalPosition) + ProCamera2D.ScreenSizeInWorldCoordinates.y / 2; if (currentCamTopEdge > NumericBoundaries.TargetTopBoundary && NumericBoundaries.TopBoundary > currentCamTopEdge) { NumericBoundaries.TopBoundary = currentCamTopEdge; } } yield return(ProCamera2D.GetYield()); } if (turnOffBoundaryAfterwards) { NumericBoundaries.UseTopBoundary = false; UseTopBoundary = false; } if (!_hasFiredTransitionFinished && OnTransitionFinished != null) { OnTransitionFinished(); } }
IEnumerator LeftTransitionRoutine(float duration, bool turnOffBoundaryAfterwards = false) { var initialLeftBoundary = Vector3H(ProCamera2D.CameraPosition) - ProCamera2D.ScreenSizeInWorldCoordinates.x / 2; NumericBoundaries.TargetLeftBoundary = LeftBoundary; var t = 0f; while (t <= 1.0f) { t += ProCamera2D.DeltaTime / duration; // Move left if (UseLeftBoundary && UseRightBoundary && LeftBoundary < initialLeftBoundary) { NumericBoundaries.LeftBoundary = LeftBoundary; } // Move right else if (UseLeftBoundary) { NumericBoundaries.LeftBoundary = Utils.EaseFromTo(initialLeftBoundary, LeftBoundary, t, TransitionEaseType); var currentCamLeftEdge = Vector3H(ProCamera2D.CameraPosition) - ProCamera2D.ScreenSizeInWorldCoordinates.x / 2; if (currentCamLeftEdge < NumericBoundaries.TargetLeftBoundary && NumericBoundaries.LeftBoundary < currentCamLeftEdge) { NumericBoundaries.LeftBoundary = currentCamLeftEdge; } } yield return(ProCamera2D.GetYield()); } if (turnOffBoundaryAfterwards) { NumericBoundaries.UseLeftBoundary = false; UseLeftBoundary = false; } if (!_hasFiredTransitionFinished && OnTransitionFinished != null) { OnTransitionFinished(); } }
IEnumerator DisableInfluenceRoutine() { var initialExclusiveFocusPointH = Vector3H(_targetExclusiveFocusPoint.Value); var initialExclusiveFocusPointV = Vector3V(_targetExclusiveFocusPoint.Value); // Ease out var waitForFixedUpdate = new WaitForFixedUpdate(); var t = 0f; while (t <= 1.0f) { t += (ProCamera2D.UpdateType == UpdateType.LateUpdate ? Time.deltaTime : Time.fixedDeltaTime) / EaseOutDuration; var targetExclusiveFocusPointH = Utils.EaseFromTo(initialExclusiveFocusPointH, Vector3H(ProCamera2D.CameraTargetPositionDuringExclusive), t, TransitionEaseType); var targetExclusiveFocusPointV = Utils.EaseFromTo(initialExclusiveFocusPointV, Vector3V(ProCamera2D.CameraTargetPositionDuringExclusive), t, TransitionEaseType); _targetExclusiveFocusPoint = VectorHV(targetExclusiveFocusPointH, targetExclusiveFocusPointV); ProCamera2D.ExclusiveTargetPosition = _targetExclusiveFocusPoint; yield return((ProCamera2D.UpdateType == UpdateType.FixedUpdate) ? waitForFixedUpdate : null); } _targetExclusiveFocusPoint = null; // Restore boundaries if existed if (_boundsAnimator != null) { _boundsAnimator.Transition(); } _boundsAnimator = null; if (_reenableGeometryBoundaries) { ProCamera2D.UseGeometryBoundaries = true; _reenableGeometryBoundaries = false; } if (ProCamera2D.OnExclusiveFocusFinished != null) { ProCamera2D.OnExclusiveFocusFinished(); } }
IEnumerator UpdateScreenSizeRoutine(float finalSize, float duration, EaseType easeType) { var startSize = _screenSizeInWorldCoordinates.y * .5f; var newSize = startSize; var t = 0f; while (t <= 1.0f) { t += _deltaTime / duration; newSize = Utils.EaseFromTo(startSize, finalSize, t, easeType); SetScreenSize(newSize); yield return(GetYield()); } _updateScreenSizeCoroutine = null; }
IEnumerator TweenToRoutine(float targetAmount, float duration) { var initialAmount = Amount; var t = 0f; while (t <= 1.0f) { t += (ProCamera2D.Instance.IgnoreTimeScale ? Time.unscaledDeltaTime : Time.deltaTime) / duration; Amount = Utils.EaseFromTo(initialAmount, targetAmount, t, EaseType.EaseOut); yield return(null); } Amount = targetAmount; yield return(null); }
IEnumerator EndCinematicRoutine() { if (_letterbox != null && LetterboxAmount > 0) { _letterbox.TweenTo(0f, LetterboxAnimDuration); } var initialPosH = Vector3H(_newPos); var initialPosV = Vector3V(_newPos); var currentCameraSize = ProCamera2D.ScreenSizeInWorldCoordinates.y * .5f; // Ease out var t = 0f; while (t <= 1.0f) { t += ProCamera2D.DeltaTime / EndDuration; var newPosH = Utils.EaseFromTo(initialPosH, Vector3H(_originalPos), t, EndEaseType); var newPosV = Utils.EaseFromTo(initialPosV, Vector3V(_originalPos), t, EndEaseType); if (UseNumericBoundaries) { LimitToNumericBoundaries(ref newPosH, ref newPosV); } _newPos = VectorHVD(newPosH, newPosV, Vector3D(ProCamera2D.LocalPosition)); _newSize = Utils.EaseFromTo(currentCameraSize, _initialCameraSize, t, EndEaseType); yield return(ProCamera2D.GetYield()); } if (CinematicEnded != null) { CinematicEnded(); } _isPlaying = false; }
IEnumerator AdjustTargetInfluenceRoutine(CameraTarget cameraTarget, float influenceH, float influenceV, float duration, bool removeIfZeroInfluence = false) { var startInfluenceH = cameraTarget.TargetInfluenceH; var startInfluenceV = cameraTarget.TargetInfluenceV; var t = 0f; while (t <= 1.0f) { t += DeltaTime / duration; cameraTarget.TargetInfluenceH = Utils.EaseFromTo(startInfluenceH, influenceH, t, EaseType.Linear); cameraTarget.TargetInfluenceV = Utils.EaseFromTo(startInfluenceV, influenceV, t, EaseType.Linear); yield return(GetYield()); } if (removeIfZeroInfluence && cameraTarget.TargetInfluenceH <= 0 && cameraTarget.TargetInfluenceV <= 0) { CameraTargets.Remove(cameraTarget); } }
IEnumerator AdjustTargetInfluenceRoutine(CameraTarget cameraTarget, float influenceH, float influenceV, float duration, bool removeIfZeroInfluence = false) { var startInfluenceH = cameraTarget.TargetInfluenceH; var startInfluenceV = cameraTarget.TargetInfluenceV; var waitForFixedUpdate = new WaitForFixedUpdate(); var t = 0f; while (t <= 1.0f) { t += (UpdateType == UpdateType.LateUpdate ? Time.deltaTime : Time.fixedDeltaTime) / duration; cameraTarget.TargetInfluenceH = Utils.EaseFromTo(startInfluenceH, influenceH, t, EaseType.Linear); cameraTarget.TargetInfluenceV = Utils.EaseFromTo(startInfluenceV, influenceV, t, EaseType.Linear); yield return((UpdateType == UpdateType.FixedUpdate) ? waitForFixedUpdate : null); } if (removeIfZeroInfluence && cameraTarget.TargetInfluenceH <= 0 && cameraTarget.TargetInfluenceV <= 0) { CameraTargets.Remove(cameraTarget); } }
IEnumerator BottomTransitionRoutine(float duration, bool turnOffBoundaryAfterwards = false) { var initialBottomBoundary = Vector3V(ProCamera2D.CameraPosition) - ProCamera2D.ScreenSizeInWorldCoordinates.y / 2; ProCamera2D.TargetBottomBoundary = BottomBoundary; var waitForFixedUpdate = new WaitForFixedUpdate(); var t = 0f; while (t <= 1.0f) { t += (ProCamera2D.UpdateType == UpdateType.LateUpdate ? Time.deltaTime : Time.fixedDeltaTime) / duration; if (UseBottomBoundary && UseTopBoundary && BottomBoundary < initialBottomBoundary) { ProCamera2D.BottomBoundary = Utils.EaseFromTo(initialBottomBoundary, Mathf.Clamp(Vector3V(ProCamera2D.CameraTargetPosition) - ProCamera2D.ScreenSizeInWorldCoordinates.y / 2, BottomBoundary, TopBoundary - ProCamera2D.ScreenSizeInWorldCoordinates.y), t, TransitionEaseType); } else if (UseBottomBoundary) { ProCamera2D.BottomBoundary = Utils.EaseFromTo(initialBottomBoundary, BottomBoundary, t, TransitionEaseType); } yield return((ProCamera2D.UpdateType == UpdateType.FixedUpdate) ? waitForFixedUpdate : null); } if (turnOffBoundaryAfterwards) { ProCamera2D.UseBottomBoundary = false; UseBottomBoundary = false; } ProCamera2D.BottomBoundary = BottomBoundary; if (!_hasFiredTransitionFinished && OnTransitionFinished != null) { OnTransitionFinished(); } }
IEnumerator EndCinematicRoutine() { if (_letterbox != null && LetterboxAmount > 0) { _letterbox.TweenTo(0f, LetterboxAnimDuration); } var initialPosH = Vector3H(_overridePosition.OverridePosition); var initialPosV = Vector3V(_overridePosition.OverridePosition); var currentCameraSize = ProCamera2D.GameCameraSize; // Ease out var t = 0f; while (t <= 1.0f) { t += ProCamera2D.DeltaTime / EndDuration; _overridePosition.OverridePosition = VectorHVD( Utils.EaseFromTo(initialPosH, Vector3H(_overridePosition.OverridenPosition), t, EndEaseType), Utils.EaseFromTo(initialPosV, Vector3V(_overridePosition.OverridenPosition), t, EndEaseType), Vector3D(ProCamera2D.CameraPosition)); _overridePosition.OverrideSize = Utils.EaseFromTo(currentCameraSize, _initialCameraSize, t, EndEaseType); yield return(ProCamera2D.GetYield()); } _overridePosition.Enabled = false; if (CinematicEnded != null) { CinematicEnded(); } }
IEnumerator TransitionRoutine(Material material, float duration, float delay, float startValue, float endValue, EaseType easeType) { _blit.enabled = true; _step = startValue; _blit.CurrentMaterial = material; _blit.CurrentMaterial.SetFloat(_material_StepID, _step); if (endValue == 0) { if (OnTransitionEnterStarted != null) { OnTransitionEnterStarted(); } } else if (endValue == 1) { if (OnTransitionExitStarted != null) { OnTransitionExitStarted(); } } if (OnTransitionStarted != null) { OnTransitionStarted(); } if (delay > 0) { #if UNITY_5_4_OR_NEWER if (UseRealtime) { yield return(new WaitForSecondsRealtime(delay)); } else #endif yield return(new WaitForSeconds(delay)); } var t = 0f; while (t <= 1.0f) { t += (UseRealtime ? Time.unscaledDeltaTime : ProCamera2D.DeltaTime) / duration; _step = Utils.EaseFromTo(startValue, endValue, t, easeType); material.SetFloat(_material_StepID, _step); yield return(null); } _step = endValue; material.SetFloat(_material_StepID, _step); if (endValue == 0) { if (OnTransitionEnterEnded != null) { OnTransitionEnterEnded(); } } else if (endValue == 1) { if (OnTransitionExitEnded != null) { OnTransitionExitEnded(); } } if (OnTransitionEnded != null) { OnTransitionEnded(); } if (endValue == 0) { _blit.enabled = false; } }
IEnumerator GoToCinematicTargetRoutine(CinematicTarget cinematicTarget, int targetIndex) { if (cinematicTarget.TargetTransform == null) { yield break; } var initialPosH = Vector3H(ProCamera2D.CameraPosition); var initialPosV = Vector3V(ProCamera2D.CameraPosition); var currentCameraSize = ProCamera2D.GameCameraSize; // Ease in var t = 0f; while (t <= 1.0f) { t += ProCamera2D.DeltaTime / cinematicTarget.EaseInDuration; _overridePosition.Enabled = true; _overridePosition.OverridePosition = VectorHVD( Utils.EaseFromTo(initialPosH, Vector3H(cinematicTarget.TargetTransform.position), t, cinematicTarget.EaseType), Utils.EaseFromTo(initialPosV, Vector3V(cinematicTarget.TargetTransform.position), t, cinematicTarget.EaseType), Vector3D(ProCamera2D.CameraPosition)); _overridePosition.OverrideSize = Utils.EaseFromTo(currentCameraSize, _initialCameraSize / cinematicTarget.Zoom, t, cinematicTarget.EaseType); if (_skipTarget) { yield break; } yield return(ProCamera2D.GetYield()); } // Dispatch target reached event if (CinematicReachedTarget != null) { CinematicReachedTarget(targetIndex); } // Send target reached message if (!string.IsNullOrEmpty(cinematicTarget.SendMessageName)) { cinematicTarget.TargetTransform.SendMessage(cinematicTarget.SendMessageName, cinematicTarget.SendMessageParam, SendMessageOptions.DontRequireReceiver); } // Hold t = 0f; while (cinematicTarget.HoldDuration < 0 || t <= cinematicTarget.HoldDuration) { t += ProCamera2D.DeltaTime; _overridePosition.OverridePosition = VectorHVD( Vector3H(cinematicTarget.TargetTransform.position), Vector3V(cinematicTarget.TargetTransform.position), Vector3D(ProCamera2D.CameraPosition)); if (_skipTarget) { yield break; } yield return(ProCamera2D.GetYield()); } }
IEnumerator GoToCinematicTargetRoutine(CinematicTarget cinematicTarget, int targetIndex) { if (cinematicTarget.TargetTransform == null) { yield break; } var initialPosH = Vector3H(ProCamera2D.LocalPosition); var initialPosV = Vector3V(ProCamera2D.LocalPosition); var currentCameraSize = ProCamera2D.ScreenSizeInWorldCoordinates.y * .5f; // _TurnRateEase in var t = 0f; if (cinematicTarget.EaseInDuration > 0) { while (t <= 1.0f) { if (!_paused) { t += ProCamera2D.DeltaTime / cinematicTarget.EaseInDuration; var newPosH = Utils.EaseFromTo(initialPosH, Vector3H(cinematicTarget.TargetTransform.position) - Vector3H(ProCamera2D.ParentPosition), t, cinematicTarget.EaseType); var newPosV = Utils.EaseFromTo(initialPosV, Vector3V(cinematicTarget.TargetTransform.position) - Vector3V(ProCamera2D.ParentPosition), t, cinematicTarget.EaseType); if (UseNumericBoundaries) { LimitToNumericBoundaries(ref newPosH, ref newPosV); } _newPos = VectorHVD(newPosH, newPosV, 0); _newSize = Utils.EaseFromTo(currentCameraSize, _initialCameraSize / cinematicTarget.Zoom, t, cinematicTarget.EaseType); if (_skipTarget) { yield break; } } yield return(ProCamera2D.GetYield()); } } else { var newPosH = Vector3H(cinematicTarget.TargetTransform.position) - Vector3H(ProCamera2D.ParentPosition); var newPosV = Vector3V(cinematicTarget.TargetTransform.position) - Vector3V(ProCamera2D.ParentPosition); _newPos = VectorHVD(newPosH, newPosV, 0); _newSize = _initialCameraSize / cinematicTarget.Zoom; } // Dispatch target reached event if (OnCinematicTargetReached != null) { OnCinematicTargetReached.Invoke(targetIndex); } // Send target reached message if (!string.IsNullOrEmpty(cinematicTarget.SendMessageName)) { cinematicTarget.TargetTransform.SendMessage(cinematicTarget.SendMessageName, cinematicTarget.SendMessageParam, SendMessageOptions.DontRequireReceiver); } // Hold t = 0f; while (cinematicTarget.HoldDuration < 0 || t <= cinematicTarget.HoldDuration) { if (!_paused) { t += ProCamera2D.DeltaTime; var newPosH = Vector3H(cinematicTarget.TargetTransform.position) - Vector3H(ProCamera2D.ParentPosition); var newPosV = Vector3V(cinematicTarget.TargetTransform.position) - Vector3V(ProCamera2D.ParentPosition); if (UseNumericBoundaries) { LimitToNumericBoundaries(ref newPosH, ref newPosV); } _newPos = VectorHVD(newPosH, newPosV, 0); if (_skipTarget) { yield break; } } yield return(ProCamera2D.GetYield()); } }
IEnumerator TransitionRoutine(Material material, float duration, float delay, float startValue, float endValue, EaseType easeType) { _step = startValue; _currentMaterial = material; _currentMaterial.SetFloat("_Step", _step); if (endValue == 0) { if (OnTransitionEnterStarted != null) { OnTransitionEnterStarted(); } } else if (endValue == 1) { if (OnTransitionExitStarted != null) { OnTransitionExitStarted(); } } if (OnTransitionStarted != null) { OnTransitionStarted(); } if (delay > 0) { yield return(new WaitForSeconds(delay)); } var t = 0f; while (t <= 1.0f) { t += ProCamera2D.DeltaTime / duration; _step = Utils.EaseFromTo(startValue, endValue, t, easeType); material.SetFloat("_Step", _step); yield return(null); } _step = endValue; material.SetFloat("_Step", _step); if (endValue == 0) { if (OnTransitionEnterEnded != null) { OnTransitionEnterEnded(); } } else if (endValue == 1) { if (OnTransitionExitEnded != null) { OnTransitionExitEnded(); } } if (OnTransitionEnded != null) { OnTransitionEnded(); } if (endValue == 0) { _currentMaterial = null; } _transitionCoroutine = null; }
public Vector3 AdjustDelta(float deltaTime, Vector3 originalDelta) { if (!enabled || !UseNumericBoundaries) { return(originalDelta); } // Check movement in the horizontal dir IsCameraPositionHorizontallyBounded = false; ProCamera2D.IsCameraPositionLeftBounded = false; ProCamera2D.IsCameraPositionRightBounded = false; IsCameraPositionVerticallyBounded = false; ProCamera2D.IsCameraPositionTopBounded = false; ProCamera2D.IsCameraPositionBottomBounded = false; var newPosH = Vector3H(ProCamera2D.LocalPosition) + Vector3H(originalDelta); if (UseLeftBoundary && newPosH - ProCamera2D.ScreenSizeInWorldCoordinates.x / 2 < LeftBoundary) { newPosH = LeftBoundary + ProCamera2D.ScreenSizeInWorldCoordinates.x / 2; IsCameraPositionHorizontallyBounded = true; ProCamera2D.IsCameraPositionLeftBounded = true; } else if (UseRightBoundary && newPosH + ProCamera2D.ScreenSizeInWorldCoordinates.x / 2 > RightBoundary) { newPosH = RightBoundary - ProCamera2D.ScreenSizeInWorldCoordinates.x / 2; IsCameraPositionHorizontallyBounded = true; ProCamera2D.IsCameraPositionRightBounded = true; } // Check movement in the vertical dir var newPosV = Vector3V(ProCamera2D.LocalPosition) + Vector3V(originalDelta);; if (UseBottomBoundary && newPosV - ProCamera2D.ScreenSizeInWorldCoordinates.y / 2 < BottomBoundary) { newPosV = BottomBoundary + ProCamera2D.ScreenSizeInWorldCoordinates.y / 2; IsCameraPositionVerticallyBounded = true; ProCamera2D.IsCameraPositionBottomBounded = true; } else if (UseTopBoundary && newPosV + ProCamera2D.ScreenSizeInWorldCoordinates.y / 2 > TopBoundary) { newPosV = TopBoundary - ProCamera2D.ScreenSizeInWorldCoordinates.y / 2; IsCameraPositionVerticallyBounded = true; ProCamera2D.IsCameraPositionTopBounded = true; } // Elastic Boundaries if (UseElasticBoundaries) { // Horizontal if (IsCameraPositionHorizontallyBounded) { _horizontallyBoundedDuration = Mathf.Min(HorizontalElasticityDuration, _horizontallyBoundedDuration + deltaTime); var perc = 1f; if (HorizontalElasticityDuration > 0) { perc = _horizontallyBoundedDuration / HorizontalElasticityDuration; } if (ProCamera2D.IsCameraPositionLeftBounded) { newPosH = Utils.EaseFromTo( Mathf.Max( LeftBoundary + ProCamera2D.ScreenSizeInWorldCoordinates.x / 2 - HorizontalElasticitySize, Vector3H(_transform.localPosition)), LeftBoundary + ProCamera2D.ScreenSizeInWorldCoordinates.x / 2, perc, ElasticityEaseType); } else { newPosH = Utils.EaseFromTo( Mathf.Min( RightBoundary - ProCamera2D.ScreenSizeInWorldCoordinates.x / 2 + HorizontalElasticitySize, Vector3H(_transform.localPosition)), RightBoundary - ProCamera2D.ScreenSizeInWorldCoordinates.x / 2, perc, ElasticityEaseType); } } else { _horizontallyBoundedDuration = Mathf.Max(0, _horizontallyBoundedDuration - deltaTime); } // Vertical if (IsCameraPositionVerticallyBounded) { _verticallyBoundedDuration = Mathf.Min(VerticalElasticityDuration, _verticallyBoundedDuration + deltaTime); var perc = 1f; if (VerticalElasticityDuration > 0) { perc = _verticallyBoundedDuration / VerticalElasticityDuration; } if (ProCamera2D.IsCameraPositionBottomBounded) { newPosV = Utils.EaseFromTo( Mathf.Max( BottomBoundary + ProCamera2D.ScreenSizeInWorldCoordinates.y / 2 - VerticalElasticitySize, Vector3V(_transform.localPosition)), BottomBoundary + ProCamera2D.ScreenSizeInWorldCoordinates.y / 2, perc, ElasticityEaseType); } else { newPosV = Utils.EaseFromTo( Mathf.Min( TopBoundary - ProCamera2D.ScreenSizeInWorldCoordinates.y / 2 + VerticalElasticitySize, Vector3V(_transform.localPosition)), TopBoundary - ProCamera2D.ScreenSizeInWorldCoordinates.y / 2, perc, ElasticityEaseType); } } else { _verticallyBoundedDuration = Mathf.Max(0, _verticallyBoundedDuration - deltaTime); } } // Return the new delta return(VectorHV(newPosH - Vector3H(ProCamera2D.LocalPosition), newPosV - Vector3V(ProCamera2D.LocalPosition))); }