private void ForwardMovement() { float additionalMovement = isOnIce ? iceDecelerationMultiplier : 1f; SetMaxVelocity(); SetTrainState(); if (trainMovement != TrainMovement.Reversing) { rb.velocity = Vector3.Lerp(minVelocity * transform.forward, maxVelocity * transform.forward, (currentAccelerationTime / maxAccelerationTime)); } else { rb.velocity = Vector3.Lerp(Vector3.zero, reverseMaxVelocity * transform.forward * -1, (reverseAccelerationTime / maxReverseAccelerationTime)); } trainManager.SetWheelsRotationSpeed((currentAccelerationTime < 0 ? 0 : currentAccelerationTime) / maxAccelerationTime * 100 * maxVelocity / maxOverheatHeatVelocity); snowRide.SetPercentageEffectSpeed((currentAccelerationTime < 0 ? 0 : currentAccelerationTime) / maxAccelerationTime * 100 * maxVelocity / maxOverheatHeatVelocity); trainSoundController?.ChangeSoundPitchBasedOnVelocity((currentAccelerationTime < 0 ? 0 : currentAccelerationTime) / maxAccelerationTime * 100 * maxVelocity / maxOverheatHeatVelocity); snowRide.SetIsOnIce(isOnIce); }