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 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 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 InsideTriggerRoutine() { yield return(ProCamera2D.GetYield()); _tempExclusivePoint = VectorHV(Vector3H(ProCamera2D.CameraTargetPosition), Vector3V(ProCamera2D.CameraTargetPosition)); while (_insideTrigger) { _exclusiveInfluencePercentage = ExclusiveInfluencePercentage; var distancePercentage = GetDistanceToCenterPercentage(new Vector2(Vector3H(ProCamera2D.TargetsMidPoint), Vector3V(ProCamera2D.TargetsMidPoint))); var vectorFromPointToFocus = new Vector2(Vector3H(ProCamera2D.TargetsMidPoint) + Vector3H(ProCamera2D.TargetsMidPoint) - Vector3H(ProCamera2D.PreviousTargetsMidPoint), Vector3V(ProCamera2D.TargetsMidPoint) + Vector3V(ProCamera2D.TargetsMidPoint) - Vector3V(ProCamera2D.PreviousTargetsMidPoint)) - new Vector2(Vector3H(FocusPoint.position), Vector3V(FocusPoint.position)); if (distancePercentage == 0) { ProCamera2D.ExclusiveTargetPosition = Vector3.SmoothDamp(_tempExclusivePoint, VectorHV(Vector3H(FocusPoint.position), Vector3V(FocusPoint.position)), ref _exclusivePointVelocity, InfluenceSmoothness); _tempExclusivePoint = ProCamera2D.ExclusiveTargetPosition.Value; _influence = -vectorFromPointToFocus * (1 - distancePercentage); ProCamera2D.ApplyInfluence(_influence); } else { _influence = Vector2.SmoothDamp(_influence, -vectorFromPointToFocus * (1 - distancePercentage), ref _velocity, InfluenceSmoothness); ProCamera2D.ApplyInfluence(_influence); _tempExclusivePoint = VectorHV(Vector3H(ProCamera2D.CameraTargetPosition), Vector3V(ProCamera2D.CameraTargetPosition)); } yield return(ProCamera2D.GetYield()); } }
IEnumerator ApplyShakeTimedRoutine(Vector2 shake, Quaternion rotation, float duration, bool ignoreTimeScale = false) { _rotationTime = 0; _rotationVelocity = 0; while (duration > 0) { if (ignoreTimeScale) { if (ProCamera2D.UpdateType == UpdateType.LateUpdate) { duration -= Time.unscaledDeltaTime; } else if (ProCamera2D.UpdateType == UpdateType.FixedUpdate) { duration -= Time.fixedUnscaledDeltaTime; } } else { duration -= ProCamera2D.DeltaTime; } _shakePositions.Add(VectorHV(shake.x, shake.y)); _rotationTarget = rotation; yield return(ProCamera2D.GetYield()); } }
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 LeftTransitionRoutine(float duration, bool turnOffBoundaryAfterwards = false) { var initialLeftBoundary = Vector3H(ProCamera2D.LocalPosition) - 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.LocalPosition) - 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 (!NumericBoundaries.HasFiredTransitionFinished && OnTransitionFinished != null) { NumericBoundaries.HasFiredTransitionStarted = false; NumericBoundaries.HasFiredTransitionFinished = true; OnTransitionFinished(); } }
IEnumerator InsideTriggerRoutine() { while (_insideTrigger && _instanceID == ProCamera2D.CurrentZoomTriggerID) { _exclusiveInfluencePercentage = ExclusiveInfluencePercentage; // Find percentage distance to center var targetPos = new Vector2(Vector3H(UseTargetsMidPoint ? ProCamera2D.TargetsMidPoint : TriggerTarget.position), Vector3V(UseTargetsMidPoint ? ProCamera2D.TargetsMidPoint : TriggerTarget.position)); var distancePercentage = GetDistanceToCenterPercentage(targetPos); // Calculate the target size float finalTargetSize; if (SetSizeAsMultiplier) { finalTargetSize = _startCamSize / TargetZoom; } else if (ProCamera2D.GameCamera.orthographic) { finalTargetSize = TargetZoom; } else { finalTargetSize = Mathf.Abs(_initialCamDepth) * Mathf.Tan(TargetZoom * 0.5f * Mathf.Deg2Rad); } var newTargetOrtographicSize = (_initialCamSize * distancePercentage) + (finalTargetSize * (1 - distancePercentage)); if ((finalTargetSize > ProCamera2D.ScreenSizeInWorldCoordinates.y * .5f && newTargetOrtographicSize > _targetCamSize) || (finalTargetSize < ProCamera2D.ScreenSizeInWorldCoordinates.y * .5f && newTargetOrtographicSize < _targetCamSize) || ResetSizeOnExit) { _targetCamSize = newTargetOrtographicSize; } // Detect if the camera size is bounded _previousCamSize = ProCamera2D.ScreenSizeInWorldCoordinates.y; // Update camera size if needed if (Mathf.Abs(ProCamera2D.ScreenSizeInWorldCoordinates.y * .5f - _targetCamSize) > .0001f) { UpdateScreenSize(ResetSizeOnExit ? ResetSizeSmoothness : ZoomSmoothness); } // Yield yield return(ProCamera2D.GetYield()); // If the camera is bounded, reset the easing if (_previousCamSize == ProCamera2D.ScreenSizeInWorldCoordinates.y) { _targetCamSize = ProCamera2D.ScreenSizeInWorldCoordinates.y * .5f; _targetCamSizeSmoothed = _targetCamSize; _zoomVelocity = 0f; } } }
IEnumerator InsideTriggerRoutine() { yield return(ProCamera2D.GetYield()); var previousDistancePercentage = 1f; _tempExclusivePoint = VectorHV(Vector3H(ProCamera2D.transform.position), Vector3V(ProCamera2D.transform.position)); while (_insideTrigger) { _exclusiveInfluencePercentage = ExclusiveInfluencePercentage; var distancePercentage = GetDistanceToCenterPercentage(new Vector2(Vector3H(ProCamera2D.TargetsMidPoint), Vector3V(ProCamera2D.TargetsMidPoint))); var vectorFromPointToFocus = new Vector2(Vector3H(ProCamera2D.TargetsMidPoint) + Vector3H(ProCamera2D.TargetsMidPoint) - Vector3H(ProCamera2D.PreviousTargetsMidPoint), Vector3V(ProCamera2D.TargetsMidPoint) + Vector3V(ProCamera2D.TargetsMidPoint) - Vector3V(ProCamera2D.PreviousTargetsMidPoint)) - new Vector2(Vector3H(FocusPoint.position), Vector3V(FocusPoint.position)); if (distancePercentage == 0) { var exclusiveTargetPosition = VectorHV(Vector3H(FocusPoint.position), Vector3V(FocusPoint.position)); ProCamera2D.ExclusiveTargetPosition = Vector3.SmoothDamp(_tempExclusivePoint, exclusiveTargetPosition, ref _exclusivePointVelocity, InfluenceSmoothness); _tempExclusivePoint = ProCamera2D.ExclusiveTargetPosition.Value; _influence = -vectorFromPointToFocus * (1 - distancePercentage); if (Mode == TriggerInfluenceMode.HorizontalAxis) { _influence.y = 0; } else if (Mode == TriggerInfluenceMode.VerticalAxis) { _influence.x = 0; } ProCamera2D.ApplyInfluence(_influence); } else { if (previousDistancePercentage == 0) { _influence = new Vector2(Vector3H(ProCamera2D.CameraTargetPositionSmoothed), Vector3V(ProCamera2D.CameraTargetPositionSmoothed)) - new Vector2(Vector3H(ProCamera2D.TargetsMidPoint) + Vector3H(ProCamera2D.TargetsMidPoint) - Vector3H(ProCamera2D.PreviousTargetsMidPoint), Vector3V(ProCamera2D.TargetsMidPoint) + Vector3V(ProCamera2D.TargetsMidPoint) - Vector3V(ProCamera2D.PreviousTargetsMidPoint)) + new Vector2(Vector3H(ProCamera2D.ParentPosition), Vector3V(ProCamera2D.ParentPosition)); } _influence = Vector2.SmoothDamp(_influence, -vectorFromPointToFocus * (1 - distancePercentage), ref _velocity, InfluenceSmoothness, Mathf.Infinity, Time.deltaTime); if (Mode == TriggerInfluenceMode.HorizontalAxis) { _influence.y = 0; } else if (Mode == TriggerInfluenceMode.VerticalAxis) { _influence.x = 0; } ProCamera2D.ApplyInfluence(_influence); _tempExclusivePoint = VectorHV(Vector3H(ProCamera2D.CameraTargetPosition), Vector3V(ProCamera2D.CameraTargetPosition)) + VectorHV(Vector3H(ProCamera2D.ParentPosition), Vector3V(ProCamera2D.ParentPosition)); } previousDistancePercentage = distancePercentage; yield return(ProCamera2D.GetYield()); } }
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 OutsideTriggerRoutine() { while (!_insideTrigger && _instanceID == ProCamera2D.CurrentZoomTriggerID && Mathf.Abs(ProCamera2D.ScreenSizeInWorldCoordinates.y * .5f - _targetCamSize) > .0001f) { UpdateScreenSize(ResetSizeOnExit ? ResetSizeSmoothness : ZoomSmoothness); yield return(ProCamera2D.GetYield()); } _zoomVelocity = 0f; }
IEnumerator OutsideTriggerRoutine() { yield return(ProCamera2D.GetYield()); while (!_insideTrigger && _influence != Vector2.zero) { _influence = Vector2.SmoothDamp(_influence, Vector2.zero, ref _velocity, InfluenceSmoothness, 1000f, Time.deltaTime); ProCamera2D.ApplyInfluence(_influence); yield return(ProCamera2D.GetYield()); } }
IEnumerator ApplyShakeTimedRoutine(Vector2 shake, Quaternion rotation, float duration) { _rotationTime = 0; _rotationVelocity = 0; while (duration > 0) { duration -= ProCamera2D.DeltaTime; _shakePositions.Add(VectorHV(shake.x, shake.y)); _rotationTarget = rotation; yield return(ProCamera2D.GetYield()); } }
IEnumerator StopConstantShakeRoutine(float duration) { var velocity = Vector3.zero; _influences.Clear(); while (duration >= 0) { duration -= ProCamera2D.DeltaTime; _constantShakePosition = Vector3.SmoothDamp(_constantShakePosition, Vector3.zero, ref velocity, duration, float.MaxValue); _influences.Add(_constantShakePosition); yield return(ProCamera2D.GetYield()); } }
IEnumerator ConstantShakeRoutine(float intensity) { while (_isConstantShaking) { if (ProCamera2D.DeltaTime > 0) { var result = Utils.GetVectorsSum(_constantShakePositions) / _constantShakePositions.Length; _constantShakePosition.Set(Utils.SmoothApproach(_constantShakePosition.x, result.x, result.x, intensity, ProCamera2D.DeltaTime), Utils.SmoothApproach(_constantShakePosition.y, result.y, result.y, intensity, ProCamera2D.DeltaTime), Utils.SmoothApproach(_constantShakePosition.z, result.z, result.z, intensity, ProCamera2D.DeltaTime)); _influences.Add(_constantShakePosition); } yield return(ProCamera2D.GetYield()); } }
IEnumerator ShakeRoutine(float smoothness) { while (_shakePositions.Count > 0 || _shakeParent.position != Vector3.zero || _transform.localRotation != _originalRotation) { _shakePosition = Utils.GetVectorsSum(_shakePositions); _shakePositionSmoothed = Vector3.SmoothDamp(_shakePositionSmoothed, _shakePosition, ref _shakeVelocity, smoothness); _shakeParent.position = _shakePositionSmoothed; _shakePositions.Clear(); _rotationTime = Mathf.SmoothDamp(_rotationTime, 1f, ref _rotationVelocity, smoothness); _rotationTargetSmoothed = Quaternion.Slerp(_rotationTargetSmoothed, _rotationTarget, _rotationTime); _transform.localRotation = _rotationTargetSmoothed; _rotationTarget = _originalRotation; yield return(ProCamera2D.GetYield()); } _shakeCoroutine = 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 ShakeRoutine(float smoothness, bool ignoreTimeScale = false) { while (_shakePositions.Count > 0 || Vector3.Distance(_shakeParent.localPosition, _influencesSum) > .01f || Quaternion.Angle(_transform.localRotation, _originalRotation) > .01f) { var newShakePosition = Utils.GetVectorsSum(_shakePositions) + _influencesSum; var newShakePositionSmoothed = Vector3.zero; if (ignoreTimeScale) { newShakePositionSmoothed = Vector3.SmoothDamp(_shakeParent.localPosition, newShakePosition, ref _shakeVelocity, smoothness, float.MaxValue, Time.unscaledDeltaTime); } else if (ProCamera2D.DeltaTime > 0f) { newShakePositionSmoothed = Vector3.SmoothDamp(_shakeParent.localPosition, newShakePosition, ref _shakeVelocity, smoothness); } _shakeParent.localPosition = newShakePositionSmoothed; _shakePositions.Clear(); if (ignoreTimeScale) { _rotationTime = Mathf.SmoothDamp(_rotationTime, 1f, ref _rotationVelocity, smoothness, float.MaxValue, ProCamera2D.UpdateType == UpdateType.LateUpdate ? Time.unscaledDeltaTime : Time.fixedUnscaledDeltaTime); } else if (ProCamera2D.DeltaTime > 0) { _rotationTime = Mathf.SmoothDamp(_rotationTime, 1f, ref _rotationVelocity, smoothness, float.MaxValue, ProCamera2D.DeltaTime); } var rotationTargetSmoothed = Quaternion.Slerp(_transform.localRotation, _rotationTarget, _rotationTime); _transform.localRotation = rotationTargetSmoothed; _rotationTarget = _originalRotation; yield return(ProCamera2D.GetYield()); } ShakeCompleted(); }
IEnumerator ShakeRoutine(float smoothness, bool ignoreTimeScale = false) { while (_shakePositions.Count > 0 || _shakeParent.localPosition != _influencesSum || _transform.localRotation != _originalRotation) { var newShakePosition = Utils.GetVectorsSum(_shakePositions) + _influencesSum; var newShakePositionSmoothed = _shakeParent.localPosition; if (ignoreTimeScale) { newShakePositionSmoothed = Vector3.SmoothDamp(_shakeParent.localPosition, newShakePosition, ref _shakeVelocity, smoothness, float.MaxValue, Time.unscaledDeltaTime); } else if (ProCamera2D.DeltaTime > 0) { newShakePositionSmoothed = Vector3.SmoothDamp(_shakeParent.localPosition, newShakePosition, ref _shakeVelocity, smoothness); } _shakeParent.localPosition = newShakePositionSmoothed; _shakePositions.Clear(); if (ignoreTimeScale) { _rotationTime = Mathf.SmoothDamp(_rotationTime, 1f, ref _rotationVelocity, smoothness, float.MaxValue, Time.unscaledDeltaTime); } else if (ProCamera2D.DeltaTime > 0) { _rotationTime = Mathf.SmoothDamp(_rotationTime, 1f, ref _rotationVelocity, smoothness); } var rotationTargetSmoothed = Quaternion.Slerp(_transform.localRotation, _rotationTarget, _rotationTime); _transform.localRotation = rotationTargetSmoothed; _rotationTarget = _originalRotation; yield return(ProCamera2D.GetYield()); } _shakeCoroutine = null; }
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 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()); } }