Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- for (int i = 0; i < path.NumPoints; i++)
- {
- Vector2 newPos = Handles.FreeMoveHandle(path[i], Quaternion.identity, .1f, Vector2.zero, Handles.CylinderHandleCap);
- if (path[i] != newPos)
- {
- Undo.RecordObject(creator, "Move point");
- path.MovePoint(i, newPos);
- }
- }
- [CustomEditor(typeof(PathCreator))]
- public class PathEditor : Editor {
- PathCreator creator;
- Path path;
- public override void OnInspectorGUI()
- {
- base.OnInspectorGUI();
- EditorGUI.BeginChangeCheck();
- bool continuousControlPoints = GUILayout.Toggle(path.isContinuous, "Set Continuous Control Points");
- if (continuousControlPoints != path.isContinuous)
- {
- Undo.RecordObject(creator, "Toggle set continuous controls");
- path.isContinuous = continuousControlPoints;
- }
- if (EditorGUI.EndChangeCheck())
- {
- SceneView.RepaintAll();
- }
- }
- void OnSceneGUI()
- {
- Input();
- Draw();
- }
- void Input()
- {
- Event guiEvent = Event.current;
- Vector2 mousePos = HandleUtility.GUIPointToWorldRay(guiEvent.mousePosition).origin;
- if (guiEvent.type == EventType.MouseDown && guiEvent.button == 0 && guiEvent.shift)
- {
- Undo.RecordObject(creator, "Add segment");
- path.AddSegment(mousePos);
- }
- }
- void Draw()
- {
- Transform handleTransform = creator.transform;
- Quaternion handleRotation = Tools.pivotRotation == PivotRotation.Local ?
- handleTransform.rotation : Quaternion.identity;
- for (int i = 0; i < path.NumSegments; i++)
- {
- Vector2[] points = path.GetPointsInSegment(i);
- Handles.color = Color.black;
- Vector2 p0 = handleTransform.TransformPoint(points[0]);
- Vector2 p1 = handleTransform.TransformPoint(points[1]);
- Vector2 p2 = handleTransform.TransformPoint(points[2]);
- Vector2 p3 = handleTransform.TransformPoint(points[3]);
- Handles.DrawLine(p1, p0);
- Handles.DrawLine(p2, p3);
- Handles.DrawBezier(p0, p3, p1, p2, Color.green, null, 2);
- }
- Handles.color = Color.red;
- for (int i = 0; i < path.NumPoints; i++)
- {
- Vector2 newPos = Handles.FreeMoveHandle(path[i], Quaternion.identity, .1f, Vector2.zero, Handles.CylinderHandleCap);
- if (path[i] != newPos)
- {
- Undo.RecordObject(creator, "Move point");
- path.MovePoint(i, newPos);
- }
- }
- }
- void OnEnable()
- {
- creator = (PathCreator)target;
- if (creator.path == null)
- {
- creator.CreatePath();
- }
- path = creator.path;
- }
- }
Add Comment
Please, Sign In to add comment