Example #1
0
    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);
        }
    }
Example #2
0
    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();
        }
    }
Example #3
0
    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);
    }