Example #1
0
        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();
                    }
                }
            }
        }
Example #2
0
        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();
                    }
                }
            }
        }