Ejemplo n.º 1
0
        void ThirdPerson(Vector3 input)
        {
            if (!m_mainPlayer)
            {
                return;
            }

            m_targetFOV = 60 + m_mainPlayer.m_fcurrentWheelSpeed * 0.15f;
            m_curPos   += -input * m_turnSpeed * Time.deltaTime;
            m_curPos.x  = Mathf.Clamp(m_curPos.x, 10, 60);

            if (input.magnitude > 0.1f)
            {
                StopCoroutine("ResetThirdPersonAngle");
                m_freeCamTimer = 1.2f;
            }

            //Handles the "automatic" third person camera
            if (m_freeCamTimer <= 0 && !m_mainPlayer.InMidAir)
            {
                Vector3 targetCurPos = m_mainPlayer.transform.eulerAngles;
                targetCurPos.y -= 180;

                if (m_mainPlayer.GetDrifting)
                {
                    Vector3 veloDir = Quaternion.LookRotation(m_mainPlayer.GetVelocity()).eulerAngles;
                    m_curPos.y = Mathf.LerpAngle(m_curPos.y, veloDir.y, 0.1f * Time.deltaTime);
                }
                else
                {
                    m_curPos.y = Mathf.LerpAngle(m_curPos.y, Quaternion.Euler(targetCurPos).eulerAngles.y, 2 * Time.deltaTime);
                }

                m_curPos.x = Mathf.LerpAngle(m_curPos.x, 25, 1 * Time.deltaTime);
            }
            else
            {
                m_freeCamTimer -= Time.deltaTime;
            }

            float distanceMultiplier = 1;

            if (m_mainPlayer.AllWheelsGrounded)
            {
                //distanceMultiplier += Mathf.Abs(m_mainPlayer.transform.up.x * 1.25f);
            }

            Vector3    backwards = new Vector3(0, 0, -(m_distanceFromPlayer * distanceMultiplier));
            Quaternion rot       = Quaternion.Euler(m_curPos);

            Vector3 targetPos = Vector3.zero;

            if (m_mainPlayer)
            {
                targetPos = m_mainPlayer.transform.position + (rot * backwards);
            }

            //TODO: Rewired
            if (m_mainPlayer.GetRewiredPlayer().GetButtonDown("Reset Camera"))
            {
                StartCoroutine("ResetThirdPersonAngle");
            }

            targetPos = DetectWalls(targetPos);

            transform.position = Vector3.Lerp(transform.position, targetPos + m_mainPlayer.GetVelocity() * Time.deltaTime, 8 * Time.deltaTime);
            transform.LookAt(m_mainPlayer.transform.position);

            AllowBehindCam();
        }
Ejemplo n.º 2
0
        void ThirdPerson(Vector3 input)
        {
            if (!m_mainPlayer)
            {
                return;
            }

            m_targetFOV = 60 + m_mainPlayer.m_fcurrentWheelSpeed * 0.15f;
            m_curPos   += input * m_turnSpeed * Time.deltaTime;
            m_curPos.x  = Mathf.Clamp(m_curPos.x, 10, 60);

            if (input.magnitude > 0.1f)
            {
                m_freeCamTimer = 4;
            }

            //Handles the "automatic" third person camera
            if (m_freeCamTimer <= 0 && !m_mainPlayer.InMidAir)
            {
                Vector3 targetCurPos = m_mainPlayer.transform.eulerAngles;
                targetCurPos.y -= 180;
                m_curPos.y      = Mathf.LerpAngle(m_curPos.y, Quaternion.Euler(targetCurPos).eulerAngles.y, 2 * Time.deltaTime);
                m_curPos.x      = Mathf.LerpAngle(m_curPos.x, 25, 1 * Time.deltaTime);
            }
            else
            {
                m_freeCamTimer -= Time.deltaTime;
            }

            float distanceMultiplier = 1;

            if (m_mainPlayer.AllWheelsGrounded)
            {
                //distanceMultiplier += Mathf.Abs(m_mainPlayer.transform.up.x * 1.25f);
            }

            Vector3    backwards = new Vector3(0, 0, -(m_distanceFromPlayer * distanceMultiplier));
            Quaternion rot       = Quaternion.Euler(m_curPos);

            Vector3 targetPos = Vector3.zero;

            if (m_mainPlayer)
            {
                targetPos = m_mainPlayer.transform.position + (rot * backwards);
            }

            if (Input.GetKeyDown("joystick " + m_mainPlayer.m_nplayerIndex + " button 9"))
            {
                StartCoroutine("ResetThirdPersonAngle");
            }

            //Debug.DrawLine(mainPlayer.transform.position + Vector3.up, targetPos, Color.green);
            RaycastHit rH;

            if (Physics.Linecast(m_mainPlayer.transform.position + Vector3.up, targetPos, out rH, LayerMask.GetMask("Default")))
            {
                //Debug.Log(rH.collider.gameObject.name);
                //Debug.Log(mainPlayer.transform.forward);

                //if (Mathf.Abs(mainPlayer.transform.forward.y) > 0.45f)
                m_curPos.x += m_mainPlayer.transform.forward.y * Time.deltaTime * 10;

                //Debug.Log(Vector3.Distance(transform.position, mainPlayer.transform.position));
                if (Vector3.Distance(transform.position, m_mainPlayer.transform.position) < 2)
                {
                    m_curPos.x += 45 * Time.deltaTime;
                }

                if (Vector3.Distance(transform.position, m_mainPlayer.transform.position) < 6)
                {
                    m_curPos.x += 15 * Time.deltaTime;
                }

                targetPos = rH.point + rH.normal * 0.25f;
            }

            transform.position = Vector3.Lerp(transform.position, targetPos + m_mainPlayer.GetVelocity() * Time.deltaTime, 8 * Time.deltaTime);
            transform.LookAt(m_mainPlayer.transform.position);
        }