void BoostCheck() { LayerMask lMask = 1 << 11; Ray downCheck = new Ray(); RaycastHit hitInfo; downCheck.origin = new Vector3(transform.position.x, transform.position.y + 0.3f, transform.position.z); downCheck.direction = Vector3.down; if (Physics.Raycast(downCheck, out hitInfo, 1.0f, lMask)) { boostTimer.Reset(); ActivateState(driveState.boosting); } }
void Update() { currentTerrain = GetTerrain(); BoostCheck(); if (ListOfStates.Contains(driveState.boosting)) { boostTimer.Tick(); if (boostTimer.Ended()) { DeactivateState(driveState.boosting); } currentSpeed += ((acceleration * Time.deltaTime) * 6.0f); } finalTopSpeed = topSpeed * GetTopSpeedModifier(); if (!ListOfStates.Contains(driveState.in_air)) { //Forward and backwards if (Input.GetAxis("Vertical") > 0) { reverseTransmission.Reset(); if (currentSpeed > finalTopSpeed) { currentSpeed -= (deaccelRate * Time.deltaTime); } else { currentSpeed += ((acceleration * Input.GetAxis("Vertical")) * Time.deltaTime); } } else if (Input.GetAxis("Vertical") == 0) { reverseTransmission.Reset(); if (currentSpeed > (deaccelRate * Time.deltaTime)) { currentSpeed -= (deaccelRate * Time.deltaTime); } else if (currentSpeed < (-deaccelRate * Time.deltaTime)) { currentSpeed += (deaccelRate * Time.deltaTime); } else { currentSpeed = 0; } } else if (Input.GetAxis("Vertical") < 0) { DeactivateState(driveState.boosting); if (currentSpeed > (brakes * Time.deltaTime)) { currentSpeed -= (brakes * Time.deltaTime); } else if (currentSpeed < (-topSpeed / 4)) { currentSpeed = (-finalTopSpeed / 4); } else if ((currentSpeed <= 0) && (reverseTransmission.Ended())) { currentSpeed -= (acceleration * Time.deltaTime); } else { reverseTransmission.Tick(); currentSpeed = 0; } } } //Turning if (Input.GetAxis("Horizontal") != 0) { modSteering = GetSteeringAfterModifier(); if (currentSpeed > 0) { targetAngle += ((modSteering * Input.GetAxis("Horizontal")) * Time.deltaTime); turnChange += ((modSteering * Input.GetAxis("Horizontal")) * Time.deltaTime); } else if (currentSpeed < 0) { targetAngle -= ((modSteering * Input.GetAxis("Horizontal")) * Time.deltaTime); turnChange -= ((modSteering * Input.GetAxis("Horizontal")) * Time.deltaTime); } } //=================================================================================================== if (turnChange > 90.0f) { turnChange = 90.0f; targetAngle = currentVelocityAngle + 90.0f; } if (turnChange < -90.0f) { turnChange = -90.0f; targetAngle = currentVelocityAngle - 90.0f; } //=================================================================================================== //=================================================================================================== //Keep the numbers from overinflating by knocking them down/up by 360 whenever the amount goes over. if (targetAngle > 360.0f) { targetAngle = 0; currentVelocityAngle -= 360.0f; } if (targetAngle < -360.0f) { targetAngle = 0; currentVelocityAngle += 360.0f; } //==================================================================================================== //========================================================== //Simulation of the reduced ability to turn at higher speeds float gForceFactor = ((currentSpeed / 2) / finalTopSpeed); if (gForceFactor > 1) { gForceFactor = 1; } currentTurnSpeed = (GetGripModifier() * (1.0f - gForceFactor)); //========================================================== if (currentVelocityAngle != targetAngle) { float speedModifier = 0; if (turnChange > 0) { speedModifier = turnChange; } else if (turnChange < 0) { speedModifier = -turnChange; } if (speedModifier > 90.0f) { speedModifier = 90; } if (speedModifier < 0) { speedModifier = 0; } currentSpeed *= (1 - ((speedModifier / 90) / 40)); if (turnChange > 0) { if (turnChange < (currentTurnSpeed * Time.deltaTime)) { currentVelocityAngle = targetAngle; turnChange = 0; } else { currentVelocityAngle += (currentTurnSpeed * Time.deltaTime); turnChange -= (currentTurnSpeed * Time.deltaTime); } } else if (turnChange < 0) { if (turnChange > -(currentTurnSpeed * Time.deltaTime)) { currentVelocityAngle = targetAngle; turnChange = 0; } else { currentVelocityAngle -= (currentTurnSpeed * Time.deltaTime); turnChange += (currentTurnSpeed * Time.deltaTime); } } } GetSlopeRotations(); velocityDirection = Quaternion.Euler(targetBank, currentVelocityAngle, targetRoll) * Vector3.forward; SoundHandler_Update(); //Debug.Log((int)currentSpeed + " / " + (int)targetAngle + " / " + (int)turnChange + " / " + currentTerrain.ToString() + " / " + targetBank + ":" + targetRoll); }