private void AttemptToFillAdditionnalComponents()
        {
            this.UpdateEditor();
            Transform splineGameObject = _target.Spline.transform;
            List <PointsOnSplineExtension> allPoints = splineGameObject.GetComponentsInChildren <PointsOnSplineExtension>().ToList();

            for (int i = 0; i < _controllers.serializedProperty.arraySize; i++)
            {
                SerializedProperty element = _controllers.serializedProperty.GetArrayElementAtIndex(i);
                if (element == null || element.objectReferenceValue == null)
                {
                    continue;
                }
                PointsOnSplineExtension listReference = (PointsOnSplineExtension)element.objectReferenceValue;
                if (allPoints.Contains(listReference))
                {
                    allPoints.Remove(listReference);
                }
            }
            if (allPoints.Count == 0)
            {
                _controllers.serializedProperty.arraySize += 1;
                this.ApplyModification();
                return;
            }

            _controllers.serializedProperty.arraySize += 1;
            SerializedProperty addedElement = _controllers.serializedProperty.GetArrayElementAtIndex(_controllers.serializedProperty.arraySize - 1);

            addedElement.objectReferenceValue = allPoints[0];
            this.ApplyModification();
        }
Exemplo n.º 2
0
 /// <summary>
 /// must be called when we change the spline
 /// </summary>
 /// <param name="lister"></param>
 public void AnchorPointsOfLister(PointsOnSplineExtension lister)
 {
     if (lister is ActionPoints)
     {
         ActionPointsEditor listerEditor = (ActionPointsEditor)CreateEditor((ActionPoints)lister, typeof(ActionPointsEditor));
         listerEditor.RecalculatePath();
         DestroyImmediate(listerEditor);
     }
     else if (lister is ComponentPoints)
     {
         ComponentPointsEditor listerEditor = (ComponentPointsEditor)CreateEditor((ComponentPoints)lister, typeof(ComponentPointsEditor));
         listerEditor.RecalculatePath();
         DestroyImmediate(listerEditor);
     }
     else if (lister is BasicPoints)
     {
         BasicPointsEditor listerEditor = (BasicPointsEditor)CreateEditor((BasicPoints)lister, typeof(BasicPointsEditor));
         listerEditor.RecalculatePath();
         DestroyImmediate(listerEditor);
     }
     else if (lister is VectorPoints)
     {
         VectorPointsEditor listerEditor = (VectorPointsEditor)CreateEditor((VectorPoints)lister, typeof(VectorPointsEditor));
         listerEditor.RecalculatePath();
         DestroyImmediate(listerEditor);
     }
     else if (lister is QuaternionPoints)
     {
         QuaternionPointsEditor listerEditor = (QuaternionPointsEditor)CreateEditor((QuaternionPoints)lister, typeof(QuaternionPointsEditor));
         listerEditor.RecalculatePath();
         DestroyImmediate(listerEditor);
     }
 }
Exemplo n.º 3
0
 public void UpdateAllPointLister(SplineBase spline)
 {
     SetupAllSplineSticker(spline);
     for (int i = 0; i < _stickerOnSpline.Count; i++)
     {
         PointsOnSplineExtension lister = _stickerOnSpline[i];
         if (lister == null || !lister.AnchorWhenChingingSpline)
         {
             continue;
         }
         AnchorPointsOfLister(lister);
     }
 }
Exemplo n.º 4
0
        private static void DrawOneChunk(SplineBase spline, ChunkLinker.Chunk chunk, PointsOnSplineExtension points, float offset, bool isSelected)
        {
            float a     = chunk.PositionA(points);
            float b     = chunk.PositionB(points);
            Color color = chunk.Color;

            if (!isSelected)
            {
                color.a *= 0.6f;
            }

            float min    = spline.ConvertPathUnit(spline.MinPos, SplineBase.PositionUnits.PathUnits, points.PositionUnits);
            float max    = spline.ConvertPathUnit(spline.MaxPos, SplineBase.PositionUnits.PathUnits, points.PositionUnits);
            float lenght = spline.MaxUnit(points.PositionUnits);

            if (chunk.SamePosition())
            {
                b = a + lenght;
            }

            if (!spline.Looped)
            {
                if (chunk.SamePosition())
                {
                    DrawPathGizmo(spline, color, min, a, points.PositionUnits, offset);
                    DrawPathGizmo(spline, color, a, max, points.PositionUnits, offset);
                }
                else if (b < a)
                {
                    DrawPathGizmo(spline, color, a, max, points.PositionUnits, offset);
                    DrawPathGizmo(spline, color, min, b, points.PositionUnits, offset);
                }
                else
                {
                    DrawPathGizmo(spline, color, a, b, points.PositionUnits, offset);
                }
            }
            else
            {
                if (b < a)
                {
                    DrawPathGizmo(spline, color, min, b, points.PositionUnits, offset, false, true);
                    DrawPathGizmo(spline, color, a, lenght, points.PositionUnits, offset, true, false);
                }
                else
                {
                    DrawPathGizmo(spline, color, a, b, points.PositionUnits, offset);
                }
            }
        }
        public PointsOnSplineExtension.Waypoint GetClosestWaypointRight(ControllerStick controller, out float dist, out PointsOnSplineExtension lister)
        {
            dist   = 0;
            lister = null;
            if (ListToCheck.Length == 0)
            {
                return(null);
            }
            PointsOnSplineExtension.Waypoint closest = null;
            dist   = 0;
            lister = null;
            bool foundOne = false;

            for (int i = 0; i < ListToCheck.Length; i++)
            {
                if (ListToCheck[i] == null || !ListToCheck[i].gameObject.activeInHierarchy)
                {
                    continue;
                }
                PointsOnSplineExtension.Waypoint waypointToTest = ListToCheck[i].GetClosestWaypointRight(controller);
                if (waypointToTest == null)
                {
                    continue;
                }

                if (!foundOne)
                {
                    closest  = waypointToTest;
                    dist     = PointsOnSplineExtension.DistFromWayPoint(waypointToTest, controller);
                    lister   = ListToCheck[i];
                    foundOne = true;
                }
                else
                {
                    float distToTest = PointsOnSplineExtension.DistFromWayPoint(waypointToTest, controller);
                    if (distToTest < dist)
                    {
                        closest = waypointToTest;
                        dist    = distToTest;
                        lister  = ListToCheck[i];
                    }
                }
            }
            return(closest);
        }
        private void DrawWaypointEditor(Rect rect, int index)
        {
            float colorFieldSize = rect.width / 30;

            Rect r = rect;

            r.width -= colorFieldSize;


            SerializedProperty element = _controllers.serializedProperty.GetArrayElementAtIndex(index);

            if (element == null || element.objectReferenceValue == null)
            {
                EditorGUI.PropertyField(r, element);
                return;
            }

            //description & field
            PointsOnSplineExtension pointOnSpline = (PointsOnSplineExtension)element.objectReferenceValue;
            bool isActiveInHierarchy       = pointOnSpline.gameObject.activeInHierarchy;
            SerializedProperty description = new SerializedObject(element.objectReferenceValue).FindProperty("_description");

            EditorGUI.BeginDisabledGroup(!isActiveInHierarchy);
            {
                EditorGUI.PropertyField(r, element, new GUIContent(description.stringValue, "Point On Splines"));
            }
            EditorGUI.EndDisabledGroup();

            //box
            GUIStyle           style = new GUIStyle("Box");
            SerializedProperty color = new SerializedObject(element.objectReferenceValue).FindProperty("_colorWayPoints");

            style.normal.background = ExtTexture.MakeTex(600, 1, color.colorValue);
            r.position = new Vector2(rect.width - colorFieldSize + 45, r.position.y);
            r.width    = colorFieldSize - 2;
            GUI.Box(r, "", style);
        }
 public PointsOnSplineExtension.Waypoint GetClosestWaypointBidirectionnal(ControllerStick controller, out float dist, out PointsOnSplineExtension lister)
 {
     dist   = 0;
     lister = null;
     if (ListToCheck.Length == 0)
     {
         return(null);
     }
     PointsOnSplineExtension.Waypoint closest = ListToCheck[0].GetClosestWaypointBidirectionnal(controller);
     dist   = PointsOnSplineExtension.DistFromWayPoint(closest, controller);
     lister = ListToCheck[0];
     for (int i = 1; i < ListToCheck.Length; i++)
     {
         PointsOnSplineExtension.Waypoint waypointToTest = ListToCheck[i].GetClosestWaypointBidirectionnal(controller);
         float distToTest = PointsOnSplineExtension.DistFromWayPoint(waypointToTest, controller);
         if (distToTest < dist)
         {
             closest = waypointToTest;
             dist    = distToTest;
             lister  = ListToCheck[i];
         }
     }
     return(closest);
 }