public void SetTheRestFromFrontWheelData(ref TrainTrackSpline frontTS, Vector3 targetFrontWheelPos) { TrainTrackSpline onSpline; bool atEndOfLine; float splineDistAfterMove = frontTS.GetSplineDistAfterMove(FrontWheelSplineDist, base.transform.forward, 0f - distFrontToBackWheel, curTrackSelection, out onSpline, out atEndOfLine, RearTrackSection); Vector3 position = onSpline.GetPosition(splineDistAfterMove); if (atEndOfLine) { bool atEndOfLine2; FrontWheelSplineDist = onSpline.GetSplineDistAfterMove(splineDistAfterMove, base.transform.forward, distFrontToBackWheel, curTrackSelection, out frontTS, out atEndOfLine2, onSpline); } RearTrackSection = onSpline; Vector3 vector = targetFrontWheelPos - position; Vector3 vector2 = targetFrontWheelPos - vector * 0.5f; rigidBody.MovePosition(vector2); if (vector.magnitude == 0f) { rigidBody.MoveRotation(Quaternion.identity); } else { rigidBody.MoveRotation(Quaternion.LookRotation(vector)); } if (UnityEngine.Application.isEditor) { Debug.DrawLine(targetFrontWheelPos, position, Color.magenta, 0.2f); Debug.DrawLine(rigidBody.position, vector2, Color.yellow, 0.2f); Debug.DrawRay(vector2, Vector3.up, Color.yellow, 0.2f); } }
public override void Spawn() { base.Spawn(); initialSpawnTime = UnityEngine.Time.time; TrainTrackSpline splineResult; float distResult; if (TrainTrackSpline.TryFindTrackNearby(GetFrontWheelPos(), 2f, out splineResult, out distResult) && splineResult.HasClearTrackSpaceNear(this)) { FrontWheelSplineDist = distResult; SetTheRestFromFrontWheelData(ref splineResult, splineResult.GetPosition(FrontWheelSplineDist)); FrontTrackSection = splineResult; } else { Kill(); } }
public float FixedUpdateTrainOnTrack(float deltaTime) { float engineForces = GetEngineForces(); TrackSpeed += engineForces / rigidBody.mass * deltaTime; if (TrackSpeed > 0f) { TrackSpeed -= rigidBody.drag * 5f * deltaTime; if (TrackSpeed < 0f) { TrackSpeed = 0f; } } else if (TrackSpeed < 0f) { TrackSpeed += rigidBody.drag * 5f * deltaTime; if (TrackSpeed > 0f) { TrackSpeed = 0f; } } float num = base.transform.localEulerAngles.x; if (num > 180f) { num -= 360f; } float num2 = num / 90f * UnityEngine.Physics.gravity.y; TrackSpeed += num2 * deltaTime; TrackSpeed = ApplyCollisionsToTrackSpeed(TrackSpeed, deltaTime); float distMoved = TrackSpeed * deltaTime; TrainTrackSpline preferredAltTrack = ((RearTrackSection != FrontTrackSection) ? RearTrackSection : null); TrainTrackSpline onSpline; bool atEndOfLine; FrontWheelSplineDist = FrontTrackSection.GetSplineDistAfterMove(FrontWheelSplineDist, base.transform.forward, distMoved, curTrackSelection, out onSpline, out atEndOfLine, preferredAltTrack); Vector3 position = onSpline.GetPosition(FrontWheelSplineDist); SetTheRestFromFrontWheelData(ref onSpline, position); FrontTrackSection = onSpline; return(TrackSpeed); }