Exemple #1
0
        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);
            }
        }
Exemple #2
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 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);
            }
        }
Exemple #6
0
        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;
        }
Exemple #8
0
        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();
            }
        }
Exemple #11
0
        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();
            }
        }
Exemple #13
0
        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();
            }
        }
Exemple #14
0
        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();
            }
        }
Exemple #15
0
        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();
            }
        }
Exemple #16
0
        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;
        }
Exemple #17
0
        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);
        }
Exemple #18
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 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);
            }
        }
Exemple #20
0
        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);
            }
        }
Exemple #21
0
        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();
            }
        }
Exemple #22
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();
            }
        }
        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;
            }
        }
Exemple #24
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());
            }
        }
        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;
        }
Exemple #27
0
        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)));
        }