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(); }
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); }