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());
            }
        }
示例#6
0
        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;
                }
            }
        }
示例#9
0
        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());
            }
        }
示例#13
0
        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());
            }
        }
示例#16
0
        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;
        }
示例#17
0
        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();
        }
示例#19
0
        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;
        }
示例#20
0
        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();
            }
        }
示例#21
0
        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());
            }
        }