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