Example #1
0
        protected override void Awake()
        {
            base.Awake();

            if (_SelectedMode == null && Modes != null && Modes.Length > 0)
            {
                _SelectedMode = Modes[0];
            }
            _PreSelectedMode = _SelectedMode;
        }
Example #2
0
        protected virtual void LateUpdate()
        {
            if (Modes != null)
            {
                if (_SelectedMode != null && _SelectedMode.Target != null)
                {
                    if (_ChangeModeTW.IsEnabledAndOver)
                    {
                        _PreSelectedMode = _SelectedMode;
                        _PrePosition     = null;
                        _ChangeModeTW.End();
                    }


                    float horizontal = GetDeltaX() * _SelectedMode.RotationSpeedX * ((InvertX) ? -1 : 1);
                    Pitch += GetDeltaY() * _SelectedMode.RotationSpeedY * ((InvertY) ? 1 : -1);
                    RotateTarget(horizontal);

                    float   pitch          = Pitch;
                    Vector3 targetPosition = _SelectedMode.Target.position + CovertToTargetSpace(_SelectedMode.TargetOffset);
                    Vector3 dir            = new Vector3(0, 0, _SelectedMode.Offset);
                    _Camera.fieldOfView = _SelectedMode.FieldOfView;

                    if (_ChangeModeTW.IsEnabled && _PreSelectedMode != null && _PreSelectedMode.Target != null && _PreSelectedMode != _SelectedMode)
                    {
                        _PrePitch += GetDeltaY() * _PreSelectedMode.RotationSpeedY * ((InvertY) ? 1 : -1);

                        float lerpFactor = _ChangeModeTW.Percent;
                        pitch               = Mathf.SmoothStep(_PrePitch, pitch, lerpFactor);
                        targetPosition      = MathHelper.SmoothStep(_PreSelectedMode.Target.position + CovertToTargetSpace(_PreSelectedMode.TargetOffset), targetPosition, lerpFactor);
                        dir.z               = Mathf.SmoothStep(_PreSelectedMode.Offset, dir.z, lerpFactor);
                        _Camera.fieldOfView = Mathf.SmoothStep(_PreSelectedMode.FieldOfView, _SelectedMode.FieldOfView, lerpFactor);
                    }

                    float      desiredAngle = GetTargetRotation();
                    Quaternion rotation     = Quaternion.Euler(pitch, desiredAngle, 0);

                    Vector3 finalPosition = targetPosition - (rotation * dir);

                    // apply camera limits
                    if (_Limits != null && _Limits.Length > 0 && _PrePosition != null)
                    {
                        for (int i = 0; i < _Limits.Length; i++)
                        {
                            _Limits[i].ApplyLimit(ref finalPosition, _PrePosition.Value);
                        }
                    }

                    transform.position = finalPosition;
                    transform.rotation = rotation;

                    _PrePosition = finalPosition;
                }
            }
        }