public virtual void inspectorWhenSelectPoints() { EditorGUILayout.LabelField("Drag mouse to select;"); EditorGUILayout.LabelField("Ctrl + Drag to subtract seletion;"); EditorGUILayout.LabelField("Shift + Drag to invers section;"); EditorGUILayout.LabelField("Ctrl + Shift + Drag to append selection;"); spriteDeformer.editorProps.savePivot = EditorGUILayout.Toggle("Save pivot", spriteDeformer.editorProps.savePivot); if (selectedPoints.Count > 0) { if (GUILayout.Button("Reset offset")) { foreach (SpritePoint p in selectedPoints) { p.offset = Vector2.zero; } doItAfterMovePoints(selectedPoints.ToArray()); upDateMeshDate(); } if (GUILayout.Button("Remove points")) { spriteDeformer.RemovePoints(selectedPoints.ToArray()); selectedPoints.Clear(); upDateMeshDate(true); } } if (selectedPoints.Count == 2 && !spriteDeformer.ContainsEdge(selectedPoints[0], selectedPoints[1])) { if (GUILayout.Button("Connect as edge")) { spriteDeformer.CreateEdge(selectedPoints[0], selectedPoints[1]); upDateMeshDate(true); } } if (selectedPoints.Count == 2 && spriteDeformer.GetEdgeWithTwoPoints(selectedPoints[0], selectedPoints[1]) != null) { if (GUILayout.Button("Remove edge")) { spriteDeformer.RemoveEdge(spriteDeformer.GetEdgeWithTwoPoints(selectedPoints[0], selectedPoints[1])); upDateMeshDate(true); } } if (selectedPoints.Count > 0) { selectedPointName = selectedPoints[0].name; foreach (var item in selectedPoints) { if (item.name != selectedPointName) { selectedPointName = ""; break; } } string newName = EditorGUILayout.TextField("Points\' names:", selectedPointName); if (newName != selectedPointName && newName != "") { foreach (var item in selectedPoints) { item.name = newName; } } } if (selectedPoints.Count > 0) { float selectedZ = selectedPoints[0].offset.z; foreach (var item in selectedPoints) { if (item.offset.z != selectedZ) { selectedZ = 0; } } float newZ = EditorGUILayout.FloatField("Z:", selectedZ); if (newZ != selectedZ) { foreach (var item in selectedPoints) { Vector3 v3 = item.offset; v3.z = newZ; item.offset = v3; } doItAfterMovePoints(selectedPoints.ToArray()); upDateMeshDate(); } } if (selectedPoints.Count > 0) { Vector2 selColOff = selectedPoints[0].colliderOffset; foreach (var item in selectedPoints) { if (item.colliderOffset != selColOff) { selColOff = Vector2.zero; } } Vector2 newSelColOff = EditorGUILayout.Vector2Field("Collider offset:", selColOff); if (newSelColOff != selColOff) { foreach (var item in selectedPoints) { item.colliderOffset = newSelColOff; } if (spriteDeformer.editorProps.generateColliderInEditor) { spriteDeformer.GenerateCollider(); } } } }
void deleteTool() { if (Event.current.type == EventType.MouseMove) { float minDis = snapDistance; closestPoint = null; foreach (SpritePoint p in spriteDeformer.points) { if (p == latestPoint) { continue; } if (spriteDeformer.ContainsEdge(latestPoint, p)) { continue; } float cm = Vector2.Distance(getImagePos(p.spritePosition), Event.current.mousePosition); if (cm < minDis) { minDis = cm; closestPoint = p; } } Repaint(); } if (closestPoint != null) { List <Edge> edges = spriteDeformer.GetEdgesWithPoint(closestPoint); if (edges.Count == 0) { drawDeletePoint(closestPoint); if (Event.current.type == EventType.MouseUp) { spriteDeformer.RemovePoint(closestPoint); updateSpriteDeformer(); closestPoint = null; Repaint(); } } if (edges.Count == 2) { drawDeletePoint(closestPoint); SpritePoint anetherPoint1 = edges[0].point1 != closestPoint ? edges[0].point1 : edges[0].point2; SpritePoint anetherPoint2 = edges[1].point1 != closestPoint ? edges[1].point1 : edges[1].point2; drawDeleteEdge(edges[0]); drawDeleteEdge(edges[1]); if (!spriteDeformer.ContainsEdge(anetherPoint1, anetherPoint2)) { drawNewEdge(anetherPoint1.spritePosition, anetherPoint2.spritePosition); } if (Event.current.type == EventType.MouseUp) { spriteDeformer.RemovePoint(closestPoint); if (!spriteDeformer.ContainsEdge(anetherPoint1, anetherPoint2)) { spriteDeformer.AddEdge(new Edge(anetherPoint1, anetherPoint2)); } closestPoint = null; Repaint(); updateSpriteDeformer(); return; } } if (edges.Count == 1 || edges.Count > 2) { foreach (Edge e in edges) { drawDeleteEdge(e); drawDeletePoint(closestPoint); } if (Event.current.type == EventType.MouseUp) { foreach (Edge e in edges) { spriteDeformer.RemoveEdge(e); } spriteDeformer.RemovePoint(closestPoint); updateSpriteDeformer(); closestPoint = null; Repaint(); } } } if (closestPoint == null) { EdgeDivider ed = spriteDeformer.GetClosestEdge(getLocalPos(Event.current.mousePosition)); if (Vector2.Distance(getImagePos(ed.position), Event.current.mousePosition) < snapDistance / 2) { drawDeleteEdge(ed.edge); if (Event.current.type == EventType.MouseUp) { spriteDeformer.RemoveEdge(ed.edge); Repaint(); } } } }