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 interactiveEdge() { if (Event.current.type == EventType.MouseMove) { // if (latestPoint == null) { closestPoint = null; float clossestPointdist = snapDistance; foreach (var point in spriteDeformer.points) { Vector2 pointScreenPos = getImagePos(point.spritePosition); float d = Vector2.Distance(Event.current.mousePosition, pointScreenPos); if (d < clossestPointdist) { clossestPointdist = d; closestPoint = point; } } float clossetDividerDist = float.MaxValue; clossesDiveder = null; if (closestPoint == null) { Vector2 mPos = getLocalPos(mousePosInImage); //Debug.Log(mPos); if (latestPoint != null) { List <Edge> wo = spriteDeformer.GetEdgesWithPoint(latestPoint); clossesDiveder = spriteDeformer.GetClosestEdge(mPos, wo.ToArray()); } else { clossesDiveder = spriteDeformer.GetClosestEdge(mPos); } if (clossesDiveder != null) { clossetDividerDist = Vector2.Distance(getImagePos(clossesDiveder.position), mousePosInImage); if (clossetDividerDist > snapDistance) { clossesDiveder = null; } else { closestPoint = null; } } } } } List <SpritePoint> dontConnectPoint = new List <SpritePoint>(); if (latestPoint != null) { List <Edge> edgsWithP = spriteDeformer.GetEdgesWithPoint(latestPoint); foreach (var item in edgsWithP) { dontConnectPoint.Add(item.point1); dontConnectPoint.Add(item.point2); } } if (Event.current.type == EventType.MouseDrag) { if (dragPoint != null) { dragPoint.spritePosition = getLocalPos(Event.current.mousePosition); updateSpriteDeformer(); } } if (Event.current.rawType == EventType.MouseUp) { if (latestPoint != null) { } } if (closestPoint != null) { drawClosestPoint(closestPoint); if (latestPoint != null && !dontConnectPoint.Contains(closestPoint)) { drawNewEdge(latestPoint.spritePosition, closestPoint.spritePosition); } } else if (clossesDiveder != null) { drawNewPoint(clossesDiveder.position); if (latestPoint != null) { drawNewEdge(clossesDiveder.position, latestPoint.spritePosition); } } else { drawNewPoint(getLocalPos(Event.current.mousePosition)); if (latestPoint != null) { drawNewEdge(getLocalPos(Event.current.mousePosition), latestPoint.spritePosition); } } if (Event.current.type == EventType.MouseDown) { if (closestPoint != null) { if (latestPoint != null && !dontConnectPoint.Contains(closestPoint) && closestPoint != latestPoint) { spriteDeformer.CreateEdge(latestPoint, closestPoint); updateSpriteDeformer(); } dragPoint = closestPoint; latestPoint = dragPoint; //clossesDiveder = null; // closestPoint = null; //closestPoint = dragPoint; } else if (clossesDiveder != null) { dragPoint = spriteDeformer.DivedeEdge(clossesDiveder, true); if (latestPoint != null && closestPoint != latestPoint) { spriteDeformer.CreateEdge(latestPoint, dragPoint); updateSpriteDeformer(); } clossesDiveder = null; latestPoint = dragPoint; } else { SpritePoint newPoint = new SpritePoint(getLocalPos(Event.current.mousePosition)); spriteDeformer.AddPoint(newPoint, true); if (latestPoint != null) { spriteDeformer.CreateEdge(latestPoint, newPoint); } dragPoint = newPoint; latestPoint = dragPoint; updateSpriteDeformer(); closestPoint = newPoint; // Debug.Log("NewPoint"); } } Repaint(); }