Exemplo n.º 1
0
    public void Move(float distance)
    {
        if (distance == 0)
        {
            return;
        }

        RailSection rails = GetRailSectionUnder(transform);

        List <Vector3> backbone = rails.GetBackbonePoints(rails);

        foreach (var section in rails.GetAdjacentSections())
        {
            backbone.AddRange(section.GetBackbonePoints(rails));
        }

        Vector3 fwd = transform.TransformVector(Vector3.forward * distance);

        backbone.Sort(delegate(Vector3 v1, Vector3 v2)
        {
            return(Vector3.Dot(v1, fwd).CompareTo(Vector3.Dot(v2, fwd)));
        });

        if (GetComponent <LineRenderer>() != null)
        {
            GetComponent <LineRenderer>().SetVertexCount(backbone.Count);
            GetComponent <LineRenderer>().SetPositions(backbone.ToArray());
        }

        Vector3    bogieFwdMoved, bogieBwdMoved;
        Quaternion bogieFwdRotated, bogieBwdRotated;

        MoveBogie(backbone, bogieFwd.transform, distance, out bogieFwdMoved, out bogieFwdRotated);
        MoveBogie(backbone, bogieBwd.transform, distance, out bogieBwdMoved, out bogieBwdRotated);

        transform.position = (bogieFwdMoved + bogieBwdMoved) / 2 + new Vector3(0, -0.072f, 0);
        transform.rotation = Quaternion.LookRotation(bogieFwdMoved - bogieBwdMoved, Vector3.up);

        bogieBwd.transform.rotation = Quaternion.Slerp(bogieBwd.transform.rotation, bogieBwdRotated, Time.deltaTime);
        bogieFwd.transform.rotation = Quaternion.Slerp(bogieFwd.transform.rotation, bogieFwdRotated, Time.deltaTime);
    }