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; } }