public override void CPChanged(int index, IntCpRole role, Vector3 newPosition, float newNextDistance, float newPrevDistance, float newDirection) { if (role == IntCpRole.MIDPOINT || role == IntCpRole.NEXT_B1 || role == IntCpRole.PREV_B2) { instCircles[index].GetComponent <CircleRenderer>().RefreshLines(instCircles[index].GetComponent <InteractiveCheckpoint>().Position, instCircles[index].GetComponent <InteractiveCheckpoint>().ParamDistanceNext); recalculatePoints(); } }
public virtual void CPChanged(int index, IntCpRole role, Vector3 newPosition, float newNextDistance, float newPrevDistance, float newDirection) { }
public override void CPChanged(int index, IntCpRole role, Vector3 newPosition, float newNextDistance, float newPrevDistance, float newDirection) { newPosition = new Vector3(newPosition.x, 0f, newPosition.z); int i = index - 1 < 0 ? copy.Elements.Length - 1 : index - 1; int i2 = index; if (role == IntCpRole.MIDPOINT) { if (copy.Elements[i].GetType() == typeof(GeneratedBezSpline) && copy.Elements[i2].GetType() == typeof(GeneratedBezSpline)) { GeneratedBezSpline old1 = (GeneratedBezSpline)copy.Elements[i]; GeneratedBezSpline old2 = (GeneratedBezSpline)copy.Elements[i2]; GeneratedBezSpline new1 = new GeneratedBezSpline(old1.Position, old1.Direction, newPosition, old1.EndDirection, old1.WidthStart, old1.WidthEnd, old1.FirstTwoCpsDistance, old1.LastTwoCpsDistance); GeneratedBezSpline new2 = new GeneratedBezSpline(newPosition, old2.Direction, old2.EndPosition, old2.EndDirection, old2.WidthStart, old2.WidthEnd, old2.FirstTwoCpsDistance, old2.LastTwoCpsDistance); copy.ReplaceElement(i, new1); copy.ReplaceElement(i2, new2); //Debug.Log("Updated 2 BezSplines: " + newPosition.ToString()); } else if (copy.Elements[i].GetType() == typeof(GeneratedBezSpline) && copy.Elements[i2].GetType() == typeof(GeneratedStraight)) { GeneratedBezSpline spline = (GeneratedBezSpline)copy.Elements[i]; GeneratedStraight straight = (GeneratedStraight)copy.Elements[i2]; GeneratedBezSpline afterSpline = (GeneratedBezSpline)copy.Elements[(i2 + 1) % copy.Elements.Length]; float newStraightDirectinon = Vector2.Angle(new Vector2(0f, 1f), new Vector2(straight.EndPosition.x, straight.EndPosition.z) - new Vector2(newPosition.x, newPosition.z)); if (Vector2.Angle(new Vector2(1f, 0f), new Vector2(straight.EndPosition.x, straight.EndPosition.z) - new Vector2(newPosition.x, newPosition.z)) > 90f) { newStraightDirectinon = 360 - newStraightDirectinon; } newStraightDirectinon = newStraightDirectinon * Mathf.PI / 180f; instObjects[i2].GetComponent <InteractiveCheckpoint>().ParamDirection = newStraightDirectinon; instObjects[i2].GetComponent <InteractiveCheckpoint>().DirectionChanged(); instObjects[(i2 + 1) % copy.Elements.Length].GetComponent <InteractiveCheckpoint>().ParamDirection = newStraightDirectinon; instObjects[(i2 + 1) % copy.Elements.Length].GetComponent <InteractiveCheckpoint>().DirectionChanged(); GeneratedBezSpline new1 = new GeneratedBezSpline(spline.Position, spline.Direction, newPosition, newStraightDirectinon, spline.WidthStart, spline.WidthEnd, spline.FirstTwoCpsDistance, spline.LastTwoCpsDistance); GeneratedBezSpline new2 = new GeneratedBezSpline(afterSpline.Position, newStraightDirectinon, afterSpline.EndPosition, afterSpline.EndDirection, afterSpline.WidthStart, afterSpline.WidthEnd, afterSpline.FirstTwoCpsDistance, afterSpline.LastTwoCpsDistance); GeneratedStraight newStraight = new GeneratedStraight(newPosition, newStraightDirectinon, Vector2.Distance(new Vector2(newPosition.x, newPosition.z), new Vector2(afterSpline.Position.x, afterSpline.Position.z)), straight.WidthStart, straight.WidthEnd); copy.ReplaceElement(i, new1); copy.ReplaceElement(i2, newStraight); copy.ReplaceElement((i2 + 1) % copy.Elements.Length, new2); //Debug.Log("Updated Straight - Spline: " + newPosition.ToString()); } else if (copy.Elements[i].GetType() == typeof(GeneratedStraight) && copy.Elements[i2].GetType() == typeof(GeneratedBezSpline)) { GeneratedBezSpline spline = (GeneratedBezSpline)copy.Elements[i2]; GeneratedStraight straight = (GeneratedStraight)copy.Elements[i]; GeneratedBezSpline afterSpline = (GeneratedBezSpline)copy.Elements[i - 1 >= 0 ? i - 1 : copy.Elements.Length - 1]; float newStraightDirectinon = Vector2.Angle(new Vector2(0f, 1f), new Vector2(newPosition.x, newPosition.z) - new Vector2(straight.Position.x, straight.Position.z)); if (Vector2.Angle(new Vector2(1f, 0f), new Vector2(newPosition.x, newPosition.z) - new Vector2(straight.Position.x, straight.Position.z)) > 90f) { newStraightDirectinon = 360 - newStraightDirectinon; } newStraightDirectinon = newStraightDirectinon * Mathf.PI / 180f; instObjects[i].GetComponent <InteractiveCheckpoint>().ParamDirection = newStraightDirectinon; instObjects[i].GetComponent <InteractiveCheckpoint>().DirectionChanged(); instObjects[i2].GetComponent <InteractiveCheckpoint>().ParamDirection = newStraightDirectinon; instObjects[i2].GetComponent <InteractiveCheckpoint>().DirectionChanged(); GeneratedBezSpline new1 = new GeneratedBezSpline(newPosition, newStraightDirectinon, spline.EndPosition, spline.EndDirection, spline.WidthStart, spline.WidthEnd, spline.FirstTwoCpsDistance, spline.LastTwoCpsDistance); GeneratedBezSpline new2 = new GeneratedBezSpline(afterSpline.Position, afterSpline.Direction, afterSpline.EndPosition, newStraightDirectinon, afterSpline.WidthStart, afterSpline.WidthEnd, afterSpline.FirstTwoCpsDistance, afterSpline.LastTwoCpsDistance); GeneratedStraight newStraight = new GeneratedStraight(straight.Position, newStraightDirectinon, Vector2.Distance(new Vector2(newPosition.x, newPosition.z), new Vector2(straight.Position.x, straight.Position.z)), straight.WidthStart, straight.WidthEnd); copy.ReplaceElement(i, newStraight); copy.ReplaceElement(i2, new1); copy.ReplaceElement(i - 1 >= 0 ? i - 1 : copy.Elements.Length - 1, new2); //Debug.Log("Updated Spline - Straight: " + newPosition.ToString()); } } else if (role == IntCpRole.NEXT_B1) { if (copy.Elements[i2].GetType() == typeof(GeneratedBezSpline)) { GeneratedBezSpline old = (GeneratedBezSpline)copy.Elements[i2]; GeneratedBezSpline new1 = new GeneratedBezSpline(old.Position, old.Direction, old.EndPosition, old.EndDirection, old.WidthStart, old.WidthEnd, newNextDistance, old.LastTwoCpsDistance); copy.ReplaceElement(i2, new1); } } else if (role == IntCpRole.PREV_B2) { if (copy.Elements[i].GetType() == typeof(GeneratedBezSpline)) { GeneratedBezSpline old = (GeneratedBezSpline)copy.Elements[i]; GeneratedBezSpline new1 = new GeneratedBezSpline(old.Position, old.Direction, old.EndPosition, old.EndDirection, old.WidthStart, old.WidthEnd, old.FirstTwoCpsDistance, newPrevDistance); copy.ReplaceElement(i, new1); } } else if (role == IntCpRole.DIRECTION) { if (copy.Elements[i].GetType() == typeof(GeneratedBezSpline) && copy.Elements[index].GetType() == typeof(GeneratedBezSpline)) { GeneratedBezSpline old1 = (GeneratedBezSpline)copy.Elements[i]; GeneratedBezSpline old2 = (GeneratedBezSpline)copy.Elements[index]; GeneratedBezSpline new1 = new GeneratedBezSpline(old1.Position, old1.Direction, old1.EndPosition, newDirection, old1.WidthStart, old1.WidthEnd, old1.FirstTwoCpsDistance, old1.LastTwoCpsDistance); GeneratedBezSpline new2 = new GeneratedBezSpline(old2.Position, newDirection, old2.EndPosition, old2.EndDirection, old2.WidthStart, old2.WidthEnd, old2.FirstTwoCpsDistance, old2.LastTwoCpsDistance); copy.ReplaceElement(i, new1); copy.ReplaceElement(index, new2); } } linesRenderer.RefreshTrack(copy); }