Esempio n. 1
0
    public void ResetToCheckpoint(CarController c)
    {
        c.transform.position    = transform.position;
        c.transform.eulerAngles = Vector3.up * 180.0f * (Mathf.Sign(transform.position.x) > 0 ? 1 : 0);

        var l = LevelConnection.GetSortedConnections();

        // Find closest connection
        float dist         = Mathf.Infinity;
        int   closestIndex = -1;

        for (int i = 0; i < l.Count; i++)
        {
            float d = Vector2.Distance(l[i].GetPointAlongCurve(1.0f), transform.position);
            if (d < dist)
            {
                closestIndex = i;
                dist         = d;
            }
        }

        float distToStart = Mathf.Abs(transform.position.y - l[closestIndex].GetPointAlongCurve(0).y);
        float distToEnd   = Mathf.Abs(transform.position.y - l[closestIndex].GetPointAlongCurve(1).y);

        bool hasPassedClose = distToEnd < distToStart;


        for (int i = 0; i < l.Count; i++)
        {
            l[i].enabled = false;
        }

        if (hasPassedClose)
        {
            l[closestIndex].UpdateAllColliders();
            l[closestIndex + 1].enabled = true;
        }
        else
        {
            l[closestIndex - 1].UpdateAllColliders();
            l[closestIndex].enabled = true;
        }

        FindObjectOfType <LevelTargeter>().Advance();
        c.ResetToCheckpoint();
    }
Esempio n. 2
0
    public void Advance()
    {
        var s = LevelConnection.GetSortedConnections();

        float height = 0.0f;
        bool  found  = false;

        for (int i = 0; i < s.Count; i++)
        {
            if (s[i].enabled)
            {
                height = s[i - 1].GetPointAlongCurve(1).y;
                found  = true;
                break;
            }
        }
        if (!found)
        {
            height = s[s.Count - 1].GetPointAlongCurve(1).y;
        }
        transform.position = Vector3.up * (height + offset);
    }