Example #1
0
    void FixedUpdate()
    {
        if (canControl)
        {
            //car speed in KM/H
            speed    = playerBody.velocity.magnitude * 3.6f;
            localVel = playerBody.transform.InverseTransformDirection(playerBody.velocity);

            if (XCI.GetButton(XboxButton.A, controller) && tempBoostTimer > 0 && isAlive)
            {
                isBoosting = true;
                if (!mainSource2.isPlaying)
                {
                    mainSource2.clip   = boostSound;
                    mainSource2.loop   = true;
                    mainSource2.volume = 0.4f;
                    mainSource2.Play();
                }
                tempBoostTimer -= Time.deltaTime;
                boostEffect.SetActive(true);
                cameraShake.BoostShake(boostShake);
                tempMaxSpeed = boostSpeed;
                if (speed < tempMaxSpeed)
                {
                    playerBody.AddRelativeForce(Vector3.forward * boostPower, ForceMode.Force);
                }
            }
            else
            {
                if (isBoosting)
                {
                    cameraShake.StopBoostShake();
                }

                if (mainSource2.isPlaying)
                {
                    mainSource2.loop   = false;
                    mainSource2.volume = 0f;
                    mainSource2.Stop();
                }
                isBoosting   = false;
                tempMaxSpeed = maxSpeed;
                boostEffect.SetActive(false);
                if (tempBoostTimer < boostTimer)
                {
                    tempBoostTimer += Time.deltaTime / 4;
                }
            }

            if (XCI.GetAxis(XboxAxis.RightTrigger, controller) != 0 && isAlive || XCI.GetAxis(XboxAxis.LeftTrigger, controller) != 0 && isAlive)
            {
                if (speed > tempMaxSpeed)
                {
                    power   = 0;
                    reverse = 0;
                }
                else
                {
                    power   = XCI.GetAxis(XboxAxis.RightTrigger, controller) * (enginePower * speedMultiplier) * Time.fixedDeltaTime;
                    reverse = XCI.GetAxis(XboxAxis.LeftTrigger, controller) * (enginePower * speedMultiplier) * Time.fixedDeltaTime;
                }
            }

            //Allows for turning and drift
            Turning();

            //Allows the players movement if they are still alive
            if ((XCI.GetAxis(XboxAxis.LeftTrigger, controller) > 0) && (XCI.GetAxis(XboxAxis.RightTrigger, controller) > 0) && isAlive)
            {
                if (!isBoosting)
                {
                    Break(breakPower);
                }
                else
                {
                    return;
                }
            }

            else if (XCI.GetAxis(XboxAxis.RightTrigger, controller) > 0 && isAlive)
            {
                if (localVel.z < -0.01f)
                {
                    Break(breakPower);
                }
                else
                {
                    Accelerate();
                }
            }

            else if (XCI.GetAxis(XboxAxis.LeftTrigger, controller) > 0 && isAlive && !isBoosting)
            {
                if (localVel.z > 0.01f)
                {
                    Break(breakPower);
                }
                else
                {
                    Reverse();
                }
            }

            else
            {
                if (isGrounded)
                {
                    if (localVel.z > 7f || localVel.z < -7f)
                    {
                        playerBody.drag = declDrag / 2;
                    }

                    else if (localVel.z > 4f || localVel.z < -4f)
                    {
                        playerBody.drag = declDrag;
                    }

                    else
                    {
                        playerBody.drag = declDrag * 2;
                    }
                }

                else
                {
                    playerBody.drag = 0;
                }

                wheelColliders[0].motorTorque = 0;
                wheelColliders[1].motorTorque = 0;
                wheelColliders[2].motorTorque = 0;
                wheelColliders[3].motorTorque = 0;
            }

            //move wheel visuals
            WheelRotation();

            //Jump();
            LightTrails();
        }
        else
        {
            wheelColliders[0].steerAngle = 0;
            wheelColliders[1].steerAngle = 0;
            wheelColliders[2].steerAngle = 0;
            wheelColliders[3].steerAngle = 0;
            wheelColliders[0].steerAngle = 0;
            Break(breakPower);
            isBoosting   = false;
            tempMaxSpeed = maxSpeed;
            boostEffect.SetActive(false);
            cameraShake.StopBoostShake();
            if (tempBoostTimer < boostTimer)
            {
                tempBoostTimer = boostTimer;
            }
        }

        if (deathTimerStart)
        {
            deathTimer += Time.fixedDeltaTime;
        }

        if (deathTimer >= 0.5f)
        {
            explosion.SetActive(false);
            explosionSphere.gameObject.SetActive(false);
            deathTimerStart = false;
            deathTimer      = 0.0f;
        }
    }