private void FixedUpdate() { if (NetGame.isClient || ReplayRecorder.isPlaying) { if (joint != null) { Object.Destroy(joint); } return; } if (joint == null) { CreateJoint(); } float num = parameters.maxSpeed * input.value; if (currentSpeed < num) { if (parameters.accelerationTime > 0f) { currentSpeed += parameters.maxSpeed * (Time.fixedDeltaTime / parameters.accelerationTime); currentSpeed = Mathf.Min(currentSpeed, parameters.maxSpeed); } else { currentSpeed = num; } } if (currentSpeed > num) { if (parameters.decelerationTime > 0f) { currentSpeed -= parameters.maxSpeed * (Time.fixedDeltaTime / parameters.decelerationTime); currentSpeed = Mathf.Max(currentSpeed, 0f - parameters.maxSpeed); } else { currentSpeed = num; } } if (num == 0f && Mathf.Abs(currentSpeed) < 0.05f) { currentSpeed = 0f; } Vector3 a = base.transform.forward * currentSpeed; Vector3 projected = Vector3.zero; Vector3 position = base.transform.position; current = Vector3.Lerp(current, position, (position - current).magnitude); if (Rail.Project(current + a * Time.fixedDeltaTime, ref projected, ref currentRail, ref currentSegment)) { current = projected; joint.connectedAnchor = current; } else if (!seendebugstring1 && showDebug) { Debug.Log(base.name + "No track?"); seendebugstring1 = true; } }