// Copy collider from sprite if it is drag&dropped to the inspector
        private void HandleDragAndDrop(Rect targetRect)
        {
            if (Event.current.type != EventType.DragPerform && Event.current.type != EventType.DragUpdated)
            {
                return;
            }

            // Check we're dropping onto the polygon collider editor.
            if (!targetRect.Contains(Event.current.mousePosition))
            {
                return;
            }

            foreach (var obj in DragAndDrop.objectReferences.Where(obj => obj is Sprite || obj is Texture2D))
            {
                DragAndDrop.visualMode = DragAndDropVisualMode.Copy;

                if (Event.current.type == EventType.DragPerform)
                {
                    var sprite = obj is Sprite ? obj as Sprite : SpriteUtility.TextureToSprite(obj as Texture2D);

                    // Copy collider to all selected components
                    foreach (var collider in targets.Select(target => target as PolygonCollider2D))
                    {
                        Vector2[][] paths;
                        UnityEditor.Sprites.SpriteUtility.GenerateOutlineFromSprite(sprite, 0.25f, 200, true, out paths);
                        collider.pathCount = paths.Length;
                        for (int i = 0; i < paths.Length; ++i)
                        {
                            collider.SetPath(i, paths[i]);
                        }

                        DragAndDrop.AcceptDrag();
                    }

                    if (EditorTools.EditorTools.activeToolType == typeof(PolygonCollider2DTool))
                    {
                        EditorTools.EditorTools.RestorePreviousPersistentTool();
                    }
                }

                return;
            }

            DragAndDrop.visualMode = DragAndDropVisualMode.Rejected;
        }
예제 #2
0
 private void HandleDragAndDrop(Rect targetRect)
 {
     if (Event.current.type != EventType.DragPerform && Event.current.type != EventType.DragUpdated || !targetRect.Contains(Event.current.mousePosition))
     {
         return;
     }
     using (IEnumerator <UnityEngine.Object> enumerator1 = ((IEnumerable <UnityEngine.Object>)DragAndDrop.objectReferences).Where <UnityEngine.Object>((Func <UnityEngine.Object, bool>)(obj =>
     {
         if (!(obj is Sprite))
         {
             return(obj is Texture2D);
         }
         return(true);
     })).GetEnumerator())
     {
         if (enumerator1.MoveNext())
         {
             UnityEngine.Object current1 = enumerator1.Current;
             DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
             if (Event.current.type != EventType.DragPerform)
             {
                 return;
             }
             Sprite sprite = !(current1 is Sprite) ? SpriteUtility.TextureToSprite(current1 as Texture2D) : current1 as Sprite;
             using (IEnumerator <PolygonCollider2D> enumerator2 = ((IEnumerable <UnityEngine.Object>) this.targets).Select <UnityEngine.Object, PolygonCollider2D>((Func <UnityEngine.Object, PolygonCollider2D>)(target => target as PolygonCollider2D)).GetEnumerator())
             {
                 while (enumerator2.MoveNext())
                 {
                     PolygonCollider2D current2 = enumerator2.Current;
                     Vector2[][]       paths;
                     UnityEditor.Sprites.SpriteUtility.GenerateOutlineFromSprite(sprite, 0.25f, (byte)200, true, out paths);
                     current2.pathCount = paths.Length;
                     for (int index = 0; index < paths.Length; ++index)
                     {
                         current2.SetPath(index, paths[index]);
                     }
                     this.m_PolyUtility.StopEditing();
                     DragAndDrop.AcceptDrag();
                 }
                 return;
             }
         }
     }
     DragAndDrop.visualMode = DragAndDropVisualMode.Rejected;
 }
 private void HandleDragAndDrop(Rect targetRect)
 {
     if (Event.current.type != EventType.DragPerform && Event.current.type != EventType.DragUpdated)
     {
         return;
     }
     if (!targetRect.Contains(Event.current.mousePosition))
     {
         return;
     }
     using (IEnumerator <UnityEngine.Object> enumerator = (from obj in DragAndDrop.objectReferences
                                                           where obj is Sprite || obj is Texture2D
                                                           select obj).GetEnumerator())
     {
         if (enumerator.MoveNext())
         {
             UnityEngine.Object current = enumerator.Current;
             DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
             if (Event.current.type == EventType.DragPerform)
             {
                 Sprite sprite = (!(current is Sprite)) ? SpriteUtility.TextureToSprite(current as Texture2D) : (current as Sprite);
                 foreach (PolygonCollider2D current2 in from target in base.targets
                          select target as PolygonCollider2D)
                 {
                     Vector2[][] array;
                     UnityEditor.Sprites.SpriteUtility.GenerateOutlineFromSprite(sprite, 0.25f, 200, true, out array);
                     current2.pathCount = array.Length;
                     for (int i = 0; i < array.Length; i++)
                     {
                         current2.SetPath(i, array[i]);
                     }
                     this.m_PolyUtility.StopEditing();
                     DragAndDrop.AcceptDrag();
                 }
             }
             return;
         }
     }
     DragAndDrop.visualMode = DragAndDropVisualMode.Rejected;
 }