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); } } }
private void UpdatePathUnits() { if (_previousPositionUnit != _target.PositionUnits) { SplineBase spline = _target.SplineBase; for (int i = 0; i < _target.WaypointsCount; ++i) { SerializedProperty element = _waypointList.serializedProperty.GetArrayElementAtIndex(i); SerializedProperty pathPosition = element.GetPropertie(nameof(PointsOnSplineExtension.Waypoint.PathPosition)); float currentPathPosition = pathPosition.floatValue; float newPos = spline.ConvertPathUnit(currentPathPosition, _previousPositionUnit, _target.PositionUnits); pathPosition.floatValue = newPos; } this.ApplyModification(); } _previousPositionUnit = _target.PositionUnits; }