protected virtual void OnEnable() { spriteDeformer = (SpriteDeformer)target; selectedPoints = spriteDeformer.editorProps.selectedPoints; deformerTool = new DeformerTool(this); colorSets[ColorSet.EDGE] = new HandleColor(handleColorSetting, Color.green); colorSets[ColorSet.POINT] = new HandleColor(handleColorSetting, Color.green, Color.cyan, Color.yellow); colorSets[ColorSet.TRIANGLE] = new HandleColor(handleColorSetting, new Color(0.5f, 0.5f, 0.5f, 0.5f)); colorSets[ColorSet.DEFORMER_TOOL] = new HandleColor(handleColorSetting, Color.red, Color.yellow); colorSets[ColorSet.BOUNDS_DOT] = new HandleColor(handleColorSetting, Color.green); colorSets[ColorSet.BOUNDS_LINE] = new HandleColor(handleColorSetting, Color.green); colorSets[ColorSet.SELECTED_RECTANGLE] = new HandleColor(handleColorSetting, new Color(0, 0, 1, 0.5f), Color.black); colorSets[ColorSet.LINE_TO_PAINT] = new HandleColor(handleColorSetting, new Color(1, 1, 1, 1), Color.black); spriteDeformer.CreateNewMesh(true); upDateMeshDate(true); }
protected virtual void OnEnable() { spriteDeformer = (SpriteDeformer)target; selectedPoints = spriteDeformer.editorProps.selectedPoints; deformerTool = new DeformerTool(this); colorSets[ColorSet.EDGE] = new HandleColor(handleColorSetting, Color.green); colorSets[ColorSet.POINT] = new HandleColor(handleColorSetting, Color.green, Color.cyan, Color.yellow); colorSets[ColorSet.TRIANGLE] = new HandleColor(handleColorSetting, new Color(0.5f, 0.5f, 0.5f, 0.5f)); colorSets[ColorSet.DEFORMER_TOOL] = new HandleColor(handleColorSetting, Color.red, Color.yellow); colorSets[ColorSet.BOUNDS_DOT] = new HandleColor(handleColorSetting, Color.green); colorSets[ColorSet.BOUNDS_LINE] = new HandleColor(handleColorSetting, Color.green); colorSets[ColorSet.SELECTED_RECTANGLE] = new HandleColor(handleColorSetting, new Color(0, 0, 1, 0.5f), Color.black); colorSets[ColorSet.LINE_TO_PAINT] = new HandleColor(handleColorSetting, new Color(1,1, 1,1 ), Color.black); spriteDeformer.CreateNewMesh(true); upDateMeshDate(true); }
public void sceneEditor() { Undo.RecordObjects(new Object[] { spriteDeformer }, "Move deformer"); HandleUtility.AddDefaultControl(GUIUtility.GetControlID(GetHashCode(), FocusType.Passive)); if (Tools.current != Tool.View) { Tools.current = Tool.None; } if (Event.current.keyCode == KeyCode.Delete) { spriteDeformer.RemovePoints(selectedPoints.ToArray()); selectedPoints.Clear(); upDateMeshDate(true); Event.current.Use(); } foreach (SpritePoint p in spriteDeformer.points) { Handles.color = colorSets[ColorSet.POINT].standart; Vector3 pos = spriteDeformer.SpritePositionToGlobal(p.spritePosition + p.offset2d); Handles.SphereCap(0, pos, Quaternion.identity, 0.1f * HandleUtility.GetHandleSize(pos)); } foreach (Edge e in spriteDeformer.edges) { Handles.color = colorSets[ColorSet.EDGE].standart; Handles.DrawLine(spriteDeformer.SpritePositionToGlobal(e.point1.spritePosition + e.point1.offset2d), spriteDeformer.SpritePositionToGlobal(e.point2.spritePosition + e.point2.offset2d)); } foreach (SpritePoint p in selectedPoints) { Vector3 pos = spriteDeformer.SpritePositionToGlobal(p.spritePosition + p.offset2d); Handles.color = colorSets[ColorSet.POINT].selected; Handles.SphereCap(0, pos, Quaternion.identity, 0.14f * HandleUtility.GetHandleSize(pos)); } if (deformerTool == null) { deformerTool = new DeformerTool(this); } deformerTool.OnSceneGUI(); if (Event.current.type == EventType.MouseDown && currentTool == CurrentTool.NONE && Tools.current != Tool.View && Event.current.button == 0) { if (GUIUtility.hotControl == 0 && !Event.current.alt) { startSelectedRect = Event.current.mousePosition; currentTool = CurrentTool.SELECT_RECT; } } if (currentTool == CurrentTool.SELECT_RECT) { Vector2 currentPos = Event.current.mousePosition; Handles.BeginGUI(); Vector3 upLeft = (startSelectedRect); Vector3 downRight = (currentPos); Vector3 upRight = (new Vector2(currentPos.x, startSelectedRect.y)); Vector3 downLeft = (new Vector2(startSelectedRect.x, currentPos.y)); Vector3[] rectVerts = { upLeft, upRight, downRight, downLeft }; Handles.color = colorSets[ColorSet.SELECTED_RECTANGLE].standart; Handles.DrawSolidRectangleWithOutline(rectVerts, colorSets[ColorSet.SELECTED_RECTANGLE].standart, colorSets[ColorSet.SELECTED_RECTANGLE].over); Handles.EndGUI(); List <SpritePoint> inRecPoints = new List <SpritePoint>(); foreach (SpritePoint p in spriteDeformer.points) { Vector2 pScreenPos = HandleUtility.WorldToGUIPoint(spriteDeformer.SpritePositionToGlobal(p.spritePosition + p.offset2d)); Rect r = new Rect(startSelectedRect.x, startSelectedRect.y, currentPos.x - startSelectedRect.x, currentPos.y - startSelectedRect.y); if (r.Contains(pScreenPos, true)) { Vector3 pos = spriteDeformer.SpritePositionToGlobal(p.spritePosition + p.offset2d); Handles.color = colorSets[ColorSet.POINT].over; Handles.SphereCap(0, pos, Quaternion.identity, 0.15f * HandleUtility.GetHandleSize(pos)); inRecPoints.Add(p); } } if (Event.current.rawType == EventType.MouseUp) { if (!(Event.current.shift || Event.current.control)) { if (!(startSelectedRect == Event.current.mousePosition)) { selectedPoints.Clear(); } } if (startSelectedRect == Event.current.mousePosition) { SpritePoint clossestP = null; float minD = float.MaxValue; foreach (var item in spriteDeformer.points) { float d = Vector2.Distance(Event.current.mousePosition, HandleUtility.WorldToGUIPoint( spriteDeformer.SpritePositionToGlobal(item.spritePosition + item.offset2d))); if (d < minD) { minD = d; clossestP = item; } } if (minD < 6f) { if (!(Event.current.shift || Event.current.control)) { selectedPoints.Clear(); } inRecPoints.Add(clossestP); } } foreach (SpritePoint p in inRecPoints) { if (Event.current.shift && Event.current.control) { if (!selectedPoints.Contains(p)) { selectedPoints.Add(p); } } else if (Event.current.shift) { if (selectedPoints.Contains(p)) { selectedPoints.Remove(p); } else { selectedPoints.Add(p); } } else if (Event.current.control) { if (selectedPoints.Contains(p)) { selectedPoints.Remove(p); } } else { selectedPoints.Add(p); } } if (!spriteDeformer.editorProps.savePivot) { deformerTool.recalCulatePivot(); } currentTool = CurrentTool.NONE; } } if (Event.current.rawType == EventType.MouseUp) { currentTool = CurrentTool.NONE; } }
public void sceneEditor() { Undo.RecordObjects(new Object[] { spriteDeformer }, "Move deformer"); HandleUtility.AddDefaultControl(GUIUtility.GetControlID(GetHashCode(), FocusType.Passive)); if (Tools.current != Tool.View) Tools.current = Tool.None; if (Event.current.keyCode == KeyCode.Delete) { spriteDeformer.RemovePoints(selectedPoints.ToArray()); selectedPoints.Clear(); upDateMeshDate(true); Event.current.Use(); } foreach (SpritePoint p in spriteDeformer.points) { Handles.color = colorSets[ColorSet.POINT].standart; Vector3 pos = spriteDeformer.SpritePositionToGlobal(p.spritePosition + p.offset2d); Handles.SphereCap(0, pos, Quaternion.identity, 0.1f * HandleUtility.GetHandleSize(pos)); } foreach (Edge e in spriteDeformer.edges) { Handles.color = colorSets[ColorSet.EDGE].standart; Handles.DrawLine(spriteDeformer.SpritePositionToGlobal(e.point1.spritePosition + e.point1.offset2d), spriteDeformer.SpritePositionToGlobal(e.point2.spritePosition + e.point2.offset2d)); } foreach (SpritePoint p in selectedPoints) { Vector3 pos = spriteDeformer.SpritePositionToGlobal(p.spritePosition + p.offset2d); Handles.color = colorSets[ColorSet.POINT].selected; Handles.SphereCap(0, pos, Quaternion.identity, 0.14f * HandleUtility.GetHandleSize(pos)); } if (deformerTool == null) deformerTool = new DeformerTool(this); deformerTool.OnSceneGUI(); if (Event.current.type == EventType.mouseDown && currentTool == CurrentTool.NONE && Tools.current != Tool.View && Event.current.button == 0) { if (GUIUtility.hotControl == 0 && !Event.current.alt) { startSelectedRect = Event.current.mousePosition; currentTool = CurrentTool.SELECT_RECT; } } if (currentTool == CurrentTool.SELECT_RECT) { Vector2 currentPos = Event.current.mousePosition; Handles.BeginGUI(); Vector3 upLeft = (startSelectedRect); Vector3 downRight = (currentPos); Vector3 upRight = (new Vector2(currentPos.x, startSelectedRect.y)); Vector3 downLeft = (new Vector2(startSelectedRect.x, currentPos.y)); Vector3[] rectVerts = { upLeft, upRight, downRight, downLeft }; Handles.color = colorSets[ColorSet.SELECTED_RECTANGLE].standart; Handles.DrawSolidRectangleWithOutline(rectVerts, colorSets[ColorSet.SELECTED_RECTANGLE].standart, colorSets[ColorSet.SELECTED_RECTANGLE].over); Handles.EndGUI(); List<SpritePoint> inRecPoints = new List<SpritePoint>(); foreach (SpritePoint p in spriteDeformer.points) { Vector2 pScreenPos = HandleUtility.WorldToGUIPoint(spriteDeformer.SpritePositionToGlobal(p.spritePosition + p.offset2d)); Rect r = new Rect(startSelectedRect.x, startSelectedRect.y, currentPos.x - startSelectedRect.x, currentPos.y - startSelectedRect.y); if (r.Contains(pScreenPos, true)) { Vector3 pos = spriteDeformer.SpritePositionToGlobal(p.spritePosition + p.offset2d); Handles.color = colorSets[ColorSet.POINT].over; Handles.SphereCap(0, pos, Quaternion.identity, 0.15f * HandleUtility.GetHandleSize(pos)); inRecPoints.Add(p); } } if (Event.current.rawType == EventType.MouseUp) { if (!(Event.current.shift || Event.current.control)) if(!(startSelectedRect == Event.current.mousePosition)) selectedPoints.Clear(); if (startSelectedRect == Event.current.mousePosition) { SpritePoint clossestP = null; float minD = float.MaxValue; foreach (var item in spriteDeformer.points) { float d = Vector2.Distance(Event.current.mousePosition, HandleUtility.WorldToGUIPoint( spriteDeformer.SpritePositionToGlobal(item.spritePosition + item.offset2d))); if (d < minD) { minD = d; clossestP = item; } } if (minD < 6f) { if (!(Event.current.shift || Event.current.control)) { selectedPoints.Clear(); } inRecPoints.Add(clossestP); } } foreach (SpritePoint p in inRecPoints) { if (Event.current.shift && Event.current.control) { if (!selectedPoints.Contains(p)) selectedPoints.Add(p); } else if (Event.current.shift) { if (selectedPoints.Contains(p)) selectedPoints.Remove(p); else selectedPoints.Add(p); } else if (Event.current.control) { if (selectedPoints.Contains(p)) selectedPoints.Remove(p); } else { selectedPoints.Add(p); } } if(!spriteDeformer.editorProps.savePivot)deformerTool.recalCulatePivot(); currentTool = CurrentTool.NONE; } } if (Event.current.rawType == EventType.MouseUp) { currentTool = CurrentTool.NONE; } }