예제 #1
0
        private IEnumerator ZoomIntroCoroutine()
        {
            float t  = 0f;
            float x  = 0;
            float xr = 0;

            transform.LookAt(player.transform);
            Quaternion r       = transform.rotation;
            Vector3    initPos = transform.position;

            while (t < 1f)
            {
                t  = Mathf.Clamp(t + (Time.deltaTime * (1f / 2f)), 0f, 1f);
                x  = Easing.CrossFade(Easing.SmoothStart, 2, Easing.SmoothStop, 2, t);
                xr = Easing.Mix(Easing.SmoothStop, 2, Easing.SmoothStart, 4, 0.3f, t);
                transform.position = Vector3.Lerp(initPos, targetPosition, x);
                transform.rotation = Quaternion.Lerp(r, targetRotation, xr);
                yield return(null);
            }

            ControllerInput.instance.ControlEnable = EControlEnable.On;
            CameraManager.Instance.HandleZoomEnd();
            Unblock();
            _transitionRunning = false;
            StopAllCoroutines();
        }
예제 #2
0
    private IEnumerator TeleportCoroutine(Vector3 targetPos, Vector3 playerPos, float duration)
    {
        float t = 0f;

        teleportParticle.Emit(20);
        Vector3 newLensPos;
        Vector3 startPos = transform.position;
        float   eTime;

        while (t < 1f)
        {
            t     = Mathf.Clamp01(t + (Time.deltaTime * (1f / duration)));
            eTime = Easing.CrossFade(Easing.SmoothStart, 3, Easing.SmoothStop, 3, t);
            transform.position      = Vector3.Lerp(startPos, targetPos, eTime);
            newLensPos              = Vector3.Lerp(_lensTransform.position, transform.position, t);
            newLensPos.z            = -5f;
            _lensTransform.position = newLensPos;

            _playerTrf.position = Vector3.Lerp(playerPos, targetPos, eTime);
            teleportParticle.transform.position = _playerTrf.position;

            yield return(null);
        }

        _yPosition = _playerTrf.position.y;
        _player.gameObject.SetActive(true);
        _teleport = false;
    }
예제 #3
0
        private IEnumerator DisplayDrag(PointerFtueMove moveData)
        {
            int     stepI  = currentStepIndex;
            Vector3 pnjPos = Camera.main.WorldToScreenPoint(PlayerManager.Instance.GetNearestNPC().position);

            dragTarget.position = pnjPos;
            UIObjectPointer arrow = ArrowDisplayer.Instances("FtueTap").UseArrow <UIObjectPointer>(100f, -currentStep.pointRotation, false, clickTarget.transform as RectTransform, "FtueTap", false);

            arrow.SetAnimProperties(0f, 0f);
            float x = 0f;
            float t = 0f;

            while (currentStepIndex == stepI)
            {
                t = Mathf.Clamp(t + (Time.deltaTime * (1f / 1.2f)), 0f, 1f);
                x = Easing.CrossFade(Easing.SmoothStart, 3, Easing.SmoothStop, 3, t);
                clickTarget.transform.position = Vector3.Lerp(moveData.startTrf.position, dragTarget.position, x);
                if (t >= 1f)
                {
                    t = 0f;
                }
                yield return(null);
            }
            ArrowDisplayer.Instances("FtueTap").DestroyArrow(arrow);
        }
예제 #4
0
    private IEnumerator SnapYPosition(float yPosition)
    {
        float t      = 0f;
        float prevY  = transform.position.y;
        float yValue = yPosition - prevY;

        while (t < 1f)
        {
            t = Mathf.Clamp01(t + (Time.deltaTime * (1f / ySnapTime)));
            transform.position = new Vector3(transform.position.x, prevY + (yValue * Easing.CrossFade(Easing.SmoothStart, 2, Easing.SmoothStop, 2, t)), 0f);
            yield return(null);
        }
    }
예제 #5
0
        protected IEnumerator TransitionCoroutine(ECameraTargetType targetView, Player targetPlayer)
        {
            ControllerInput.instance.ControlEnable = EControlEnable.Off;
            UIManager.instance.PNJState.Active(false);
            if (FtueManager.instance.active && targetView != mode)
            {
                Events.Instance.Raise(new OnInputFtuePinch());
            }

            _transitionRunning = true;
            Block();
            float      t            = 0;
            Vector3    basePosition = transform.position;
            Quaternion baseRotation = transform.rotation;

            CameraManager.Instance.TransformCameraTarget(targetPlayer.transform, out targetPosition, out targetRotation, targetView);

            while (t < 1)
            {
                switch (targetView)
                {
                case ECameraTargetType.MAP:
                    if (mode == ECameraTargetType.MAP)
                    {
                        t += Time.deltaTime;
                        if (t > 1)
                        {
                            t = 1;
                        }
                        float x = Easing.CrossFade(Easing.SmoothStart, 2, Easing.SmoothStop, 2, t);
                        transform.position = Vector3.Slerp(basePosition, targetPosition, x);
                        Reoriente();
                        yield return(null);
                    }
                    else
                    {
                        t += Time.deltaTime * (1f / SwitchPanel.TIME_TRANSITION);
                        if (t > 1)
                        {
                            t = 1;
                        }
                        transform.position += (transform.position.normalized - transform.forward) * (Time.deltaTime / 4f);
                    }
                    break;

                case ECameraTargetType.ZOOM:
                    t += Time.deltaTime * (1f / SwitchPanel.TIME_TRANSITION);
                    if (t > 1)
                    {
                        t = 1;
                    }
                    transform.position -= transform.position.normalized * Time.deltaTime;
                    break;

                default:
                    break;
                }
                yield return(null);
            }

            _targetMode = targetView;
            if (targetView == mode)
            {
                ControllerInput.instance.ControlEnable = EControlEnable.On;
                player = targetPlayer;
                Events.Instance.Raise(new OnEndSwitchedPlayer());
                Unblock();
                _transitionRunning = false;
                StopAllCoroutines();
            }
            else
            {
                if (FtueManager.instance.active)
                {
                    Events.Instance.Raise(new OnEndFtuePinch());
                }
                Events.Instance.AddListener <OnTransitionEnd>(FinishTransition);
            }
        }