Esempio n. 1
0
    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();
        }
    }
Esempio n. 2
0
 public virtual void CPChanged(int index, IntCpRole role, Vector3 newPosition, float newNextDistance, float newPrevDistance, float newDirection)
 {
 }
Esempio n. 3
0
    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);
    }