コード例 #1
0
        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;
            }
        }