コード例 #1
0
 protected virtual void OnEnable()
 {
     spriteDeformer                         = (SpriteDeformer)target;
     selectedPoints                         = spriteDeformer.editorProps.selectedPoints;
     deformerTool                           = new DeformerTool(this);
     colorSets[ColorSet.EDGE]               = new HandleColor(handleColorSetting, Color.green);
     colorSets[ColorSet.POINT]              = new HandleColor(handleColorSetting, Color.green, Color.cyan, Color.yellow);
     colorSets[ColorSet.TRIANGLE]           = new HandleColor(handleColorSetting, new Color(0.5f, 0.5f, 0.5f, 0.5f));
     colorSets[ColorSet.DEFORMER_TOOL]      = new HandleColor(handleColorSetting, Color.red, Color.yellow);
     colorSets[ColorSet.BOUNDS_DOT]         = new HandleColor(handleColorSetting, Color.green);
     colorSets[ColorSet.BOUNDS_LINE]        = new HandleColor(handleColorSetting, Color.green);
     colorSets[ColorSet.SELECTED_RECTANGLE] = new HandleColor(handleColorSetting, new Color(0, 0, 1, 0.5f), Color.black);
     colorSets[ColorSet.LINE_TO_PAINT]      = new HandleColor(handleColorSetting, new Color(1, 1, 1, 1), Color.black);
     spriteDeformer.CreateNewMesh(true);
     upDateMeshDate(true);
 }
コード例 #2
0
        protected virtual void OnEnable()
        {
            spriteDeformer = (SpriteDeformer)target;
            selectedPoints = spriteDeformer.editorProps.selectedPoints;
            deformerTool = new DeformerTool(this);
            colorSets[ColorSet.EDGE] = new HandleColor(handleColorSetting, Color.green);
            colorSets[ColorSet.POINT] = new HandleColor(handleColorSetting, Color.green, Color.cyan, Color.yellow);
            colorSets[ColorSet.TRIANGLE] = new HandleColor(handleColorSetting, new Color(0.5f, 0.5f, 0.5f, 0.5f));
            colorSets[ColorSet.DEFORMER_TOOL] = new HandleColor(handleColorSetting, Color.red, Color.yellow);
            colorSets[ColorSet.BOUNDS_DOT] = new HandleColor(handleColorSetting, Color.green);
            colorSets[ColorSet.BOUNDS_LINE] = new HandleColor(handleColorSetting, Color.green);
            colorSets[ColorSet.SELECTED_RECTANGLE] = new HandleColor(handleColorSetting, new Color(0, 0, 1, 0.5f), Color.black);
            colorSets[ColorSet.LINE_TO_PAINT] = new HandleColor(handleColorSetting, new Color(1,1, 1,1 ), Color.black);
            spriteDeformer.CreateNewMesh(true);  
            upDateMeshDate(true);

        }
コード例 #3
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;
            }
        }
コード例 #4
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;
            }
        }