protected virtual void Update()
    {
        int targetGear;

        GetInput(out throttleInput, out brakeInput, out steerInput, out handbrakeInput, out clutchInput, out startEngineInput, out targetGear);

        if (!drivetrain.changingGear && targetGear != drivetrain.gear)
        {
            drivetrain.Shift(targetGear);
        }

        if (drivetrain.automatic && drivetrain.autoReverse == true)
        {
            if (brakeInput > 0 && (velo <= 0.5f))
            {
                reverse = true;
                if (drivetrain.gear != drivetrain.firstReverse)
                {
                    drivetrain.Shift(drivetrain.firstReverse);
                }
            }

            if (throttleInput > 0 && (velo <= 0.5f))
            {
                reverse = false;
                if (drivetrain.gear != drivetrain.first)
                {
                    drivetrain.Shift(drivetrain.first);
                }
            }

            if (reverse == true)
            {
                float temp = throttleInput;
                throttleInput = brakeInput;
                brakeInput    = temp;
            }
        }
        else
        {
            reverse = false;
        }

        brakeKey = brakeInput > 0;
        accelKey = throttleInput > 0;
    }