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