Exemple #1
0
        public void TestSetup()
        {
            m_BoneDataProvider = Substitute.For <ISpriteBoneDataProvider>();
            m_SpriteEditor     = Substitute.For <ISpriteEditor>();
            m_SR1 = new SpriteRect();
            m_SR2 = new SpriteRect();

            m_SR1.spriteID = new GUID()
            {
            };

            List <SpriteBone> bones1 = new List <SpriteBone>();

            bones1.Add(new SpriteBone()
            {
                name = "root1", parentId = -1, rotation = Quaternion.identity
            });
            m_BoneDataProvider.GetBones(m_SR1.spriteID).Returns(bones1);

            List <SpriteBone> bones2 = new List <SpriteBone>();

            bones2.Add(new SpriteBone()
            {
                name = "root2", parentId = -1, rotation = Quaternion.identity
            });
            m_BoneDataProvider.GetBones(m_SR2.spriteID).Returns(bones2);

            m_SpriteEditor.GetDataProvider <ISpriteBoneDataProvider>().Returns(m_BoneDataProvider);

            m_Module = new BoneSpriteEditorModule();
            var prop = m_Module.GetType().GetProperty("spriteEditor");

            prop.SetValue(m_Module, m_SpriteEditor, null);
        }
        protected virtual void SetupShapeEditorOutline(SpriteRect spriteRect)
        {
            var outline  = m_Outline[spriteRect.spriteID];
            var outlines = GenerateSpriteRectOutline(spriteRect.rect,
                                                     Math.Abs(outline.tessellationDetail - (-1f)) < Mathf.Epsilon ? 0 : outline.tessellationDetail,
                                                     0, m_TextureDataProvider);

            if (outlines.Count == 0)
            {
                Vector2 halfSize = spriteRect.rect.size * 0.5f;
                outlines = new List <SpriteOutline>()
                {
                    new SpriteOutline()
                    {
                        m_Path = new List <Vector2>()
                        {
                            new Vector2(-halfSize.x, -halfSize.y),
                            new Vector2(-halfSize.x, halfSize.y),
                            new Vector2(halfSize.x, halfSize.y),
                            new Vector2(halfSize.x, -halfSize.y),
                        }
                    }
                };
            }
            m_Outline[spriteRect.spriteID].spriteOutlines = outlines;
        }
 public void OnModuleDeactivate()
 {
     this.undoSystem.UnregisterUndoCallback(new Undo.UndoRedoCallback(this.UndoRedoPerformed));
     this.CleanupShapeEditors();
     this.m_Selected = null;
     this.spriteEditorWindow.enableMouseMoveEvent = false;
 }
        private void AddSprite(Rect frame, int alignment, Vector2 pivot, AutoSlicingMethod slicingMethod, ref int index)
        {
            if (slicingMethod != AutoSlicingMethod.DeleteAll)
            {
                // Smart: Whenever we overlap, we just modify the existing rect and keep its other properties
                // Safe: We only add new rect if it doesn't overlap existing one

                SpriteRect existingSprite = GetExistingOverlappingSprite(frame);
                if (existingSprite != null)
                {
                    if (slicingMethod == AutoSlicingMethod.Smart)
                    {
                        existingSprite.rect      = frame;
                        existingSprite.alignment = (SpriteAlignment)alignment;
                        existingSprite.pivot     = pivot;
                    }
                }
                else
                {
                    AddSpriteWithUniqueName(frame, alignment, pivot, kDefaultColliderAlphaCutoff, kDefaultColliderDetail, index++, Vector4.zero);
                }
            }
            else
            {
                AddSprite(frame, alignment, pivot, kDefaultColliderAlphaCutoff, kDefaultColliderDetail, GetSpriteNamePrefix() + "_" + index++, Vector4.zero);
            }
        }
        public void SpriteRectDataProvider_AddSpriteRectPersistAfterReimport(SpriteImportMode mode, bool mosaicLayer, int expectedSprite, bool expectAdd)
        {
            var so = new SerializedObject(m_Importer);
            var textureImporterSettingsSP = so.FindProperty("m_TextureImporterSettings");

            textureImporterSettingsSP.FindPropertyRelative("m_SpriteMode").intValue = (int)mode;
            so.FindProperty("m_MosaicLayers").boolValue = mosaicLayer;
            so.ApplyModifiedProperties();

            var spriteProvider = m_Importer.GetDataProvider <ISpriteEditorDataProvider>();
            var rects          = spriteProvider.GetSpriteRects().ToList();
            var newRect        = new SpriteRect();

            newRect.name = "Test";
            newRect.rect = new Rect(0, 0, 32, 32);
            rects.Add(newRect);
            spriteProvider.SetSpriteRects(rects.ToArray());
            spriteProvider.Apply();
            m_Importer.SaveAndReimport();
            var importer = AssetImporter.GetAtPath(m_Importer.assetPath) as PSDImporter;

            spriteProvider = importer.GetDataProvider <ISpriteEditorDataProvider>();
            Assert.AreEqual(expectedSprite, spriteProvider.GetSpriteRects().Length);
            Assert.AreEqual(expectAdd, spriteProvider.GetSpriteRects().FirstOrDefault(x => x.spriteID == newRect.spriteID) != null);
            Assert.AreEqual(expectedSprite, AssetDatabase.LoadAllAssetsAtPath(m_Importer.assetPath).Count(x => x is Sprite));
        }
Exemple #6
0
        private void AddSprite(Rect frame, int alignment, Vector2 pivot, AutoSlicingMethod slicingMethod, ref int index)
        {
            if (slicingMethod != AutoSlicingMethod.DeleteAll)
            {
                // Smart: Whenever we overlap, we just modify the existing rect and keep its other properties
                // Safe: We only add new rect if it doesn't overlap existing one

                SpriteRect existingSprite = GetExistingOverlappingSprite(frame);
                if (existingSprite != null)
                {
                    if (slicingMethod == AutoSlicingMethod.Smart)
                    {
                        existingSprite.rect      = frame;
                        existingSprite.alignment = (SpriteAlignment)alignment;
                        existingSprite.pivot     = pivot;
                    }
                }
                else
                {
                    while (AddSprite(frame, alignment, pivot, GenerateSpriteNameWithIndex(index++), Vector4.zero) == -1)
                    {
                    }
                }
            }
            else
            {
                while (AddSprite(frame, alignment, pivot, GenerateSpriteNameWithIndex(index++), Vector4.zero) == -1)
                {
                }
            }
        }
 static bool ConvertXml(string path)
 {
     try
     {
         Debug.Log("ConvertXml: " + path);
         var xmlDoc = new XmlDocument();
         xmlDoc.Load(path);
         var subImages = xmlDoc.GetElementsByTagName("SubImage")
                         .OfType <XmlElement>()
                         .Select(element =>
         {
             var rect  = new SpriteRect();
             rect.name = element.GetAttribute("Name");
             var args  = element.GetAttribute("Rectangle").Split(',');
             rect.rect = new Rect(int.Parse(args[0]), int.Parse(args[1]), int.Parse(args[2]), int.Parse(args[3]));
             return(rect);
         }).ToArray();
         return(ConvertSprite(path, subImages));
     }
     catch (System.Exception ex)
     {
         Debug.LogError("Faile to load: " + path + ", Error: " + ex.Message);
         return(false);
     }
 }
Exemple #8
0
        private SpriteRect TrySelect(Vector2 mousePosition)
        {
            float      selectedSize = float.MaxValue;
            SpriteRect currentRect  = null;

            mousePosition = Handles.inverseMatrix.MultiplyPoint(mousePosition);

            for (int i = 0; i < m_RectsCache.Count; i++)
            {
                var sr = m_RectsCache[i];
                if (sr.rect.Contains(mousePosition))
                {
                    // If we clicked inside an already selected spriterect, always persist that selection
                    if (sr == selectedSpriteRect)
                    {
                        return(sr);
                    }

                    float width   = sr.rect.width;
                    float height  = sr.rect.height;
                    float newSize = width * height;
                    if (width > 0f && height > 0f && newSize < selectedSize)
                    {
                        currentRect  = sr;
                        selectedSize = newSize;
                    }
                }
            }

            return(currentRect);
        }
    static bool ConvertYaml(string path)
    {
        // LeftCymbal: [1, 0, 91, 98]
        Debug.Log("ConvertYaml: " + path);
        var subImages = File.ReadAllLines(path)
                        .Select(line => line.Trim())
                        .Where(line => line.Contains(':') && line[0] != '#' && line[line.Length - 1] == ']')
                        .Select(line =>
        {
            var sheet = new SpriteRect();
            var start = 0;
            var flag  = line[start];
            var end   = line.LastIndexOf(':');
            if (flag == '\'' || flag == '\"')
            {
                start = 1;
                end   = line.LastIndexOf(flag);
            }
            sheet.name = line.Substring(start, end - start);
            if (string.IsNullOrEmpty(sheet.name) || sheet.name == "." || sheet.name == "/")
            {
                sheet.name = "\\" + sheet.name;
            }

            var args   = line.Substring(line.LastIndexOf('[')).Split(Sperator, System.StringSplitOptions.RemoveEmptyEntries);
            sheet.rect = new Rect(int.Parse(args[0]), int.Parse(args[1]), int.Parse(args[2]), int.Parse(args[3]));
            return(sheet);
        }).ToArray();

        return(ConvertSprite(path, subImages));
    }
 protected virtual void SetupShapeEditorOutline(SpriteRect spriteRect)
 {
     if (spriteRect.outline == null || spriteRect.outline.Count == 0)
     {
         spriteRect.outline = SpriteOutlineModule.GenerateSpriteRectOutline(spriteRect.rect, this.spriteEditorWindow.selectedTexture, spriteRect.tessellationDetail, 0);
         if (spriteRect.outline.Count == 0)
         {
             Vector2 vector = spriteRect.rect.size * 0.5f;
             spriteRect.outline = new List <SpriteOutline>
             {
                 new SpriteOutline
                 {
                     m_Path = new List <Vector2>
                     {
                         new Vector2(-vector.x, -vector.y),
                         new Vector2(-vector.x, vector.y),
                         new Vector2(vector.x, vector.y),
                         new Vector2(vector.x, -vector.y)
                     }
                 }
             };
         }
         this.spriteEditorWindow.SetDataModified();
     }
 }
        protected virtual void SetupShapeEditorOutline(SpriteRect spriteRect)
        {
            SpriteOutlineList spriteOutlineList = this.m_Outline[spriteRect.spriteID];

            if (spriteOutlineList.spriteOutlines == null || spriteOutlineList.spriteOutlines.Count == 0)
            {
                List <SpriteOutline> list = SpriteOutlineModule.GenerateSpriteRectOutline(spriteRect.rect, (Math.Abs(spriteOutlineList.tessellationDetail - -1f) >= Mathf.Epsilon) ? spriteOutlineList.tessellationDetail : 0f, 0, this.m_TextureDataProvider);
                if (list.Count == 0)
                {
                    Vector2 vector = spriteRect.rect.size * 0.5f;
                    list = new List <SpriteOutline>
                    {
                        new SpriteOutline
                        {
                            m_Path = new List <Vector2>
                            {
                                new Vector2(-vector.x, -vector.y),
                                new Vector2(-vector.x, vector.y),
                                new Vector2(vector.x, vector.y),
                                new Vector2(vector.x, -vector.y)
                            }
                        }
                    };
                }
                this.m_Outline[spriteRect.spriteID].spriteOutlines = list;
            }
        }
        protected virtual bool HasShapeOutline(SpriteRect spriteRect)
        {
            SpriteOutlineList    expr_12 = this.m_Outline[spriteRect.spriteID];
            List <SpriteOutline> list    = (expr_12 != null) ? expr_12.spriteOutlines : null;

            return(list != null && list.Count > 0);
        }
Exemple #13
0
 public void AddRect(SpriteRect r)
 {
     if (m_Rects == null)
     {
         return;
     }
     m_Rects.Add(r);
 }
    public void SetSprite(string name)
    {
        SpriteRect rect          = _spriteInfo.GetSprite(name);
        Vector2    imgDimensions = new Vector2(_spriteTexture.width, _spriteTexture.height);

        renderer.material.mainTextureOffset = rect.GetOffset(imgDimensions);
        renderer.material.mainTextureScale  = rect.GetScale(imgDimensions);
    }
Exemple #15
0
 public int GetIndex(SpriteRect spriteRect)
 {
     if (m_Rects != null)
     {
         return(m_Rects.FindIndex((sp) => { return sp == spriteRect; }));
     }
     return(0);
 }
Exemple #16
0
 public void RemoveRect(SpriteRect r)
 {
     if (m_Rects == null)
     {
         return;
     }
     m_Rects.Remove(r);
 }
Exemple #17
0
 protected override void SetupShapeEditorOutline(SpriteRect spriteRect)
 {
     if (spriteRect.physicsShape == null || spriteRect.physicsShape.Count == 0)
     {
         spriteRect.physicsShape = SpriteOutlineModule.GenerateSpriteRectOutline(spriteRect.rect, this.spriteEditorWindow.selectedTexture, (Math.Abs(spriteRect.tessellationDetail - -1f) >= Mathf.Epsilon) ? spriteRect.tessellationDetail : this.kDefaultPhysicsTessellationDetail, this.kDefaultPhysicsAlphaTolerance);
         this.spriteEditorWindow.SetDataModified();
     }
 }
 public void CopyFromSpriteRect(SpriteRect spriteRect)
 {
     alignment = spriteRect.alignment;
     border    = spriteRect.border;
     name      = spriteRect.name;
     pivot     = spriteRect.pivot;
     rect      = spriteRect.rect;
     spriteID  = spriteRect.spriteID;
 }
Exemple #19
0
    public bool Contains(SpriteRect spriteRect)
    {
        if (m_Rects != null)
        {
            return(m_Rects.Contains(spriteRect));
        }

        return(false);
    }
Exemple #20
0
 public SpriteMetaData(SpriteRect sr)
 {
     alignment = sr.alignment;
     border    = sr.border;
     name      = sr.name;
     pivot     = GetPivotValue(sr.alignment, sr.pivot);
     rect      = sr.rect;
     spriteID  = sr.spriteID;
 }
Exemple #21
0
 public void CopyFromSpriteRect(SpriteRect spriteRect)
 {
     base.alignment = spriteRect.alignment;
     base.border    = spriteRect.border;
     base.name      = spriteRect.name;
     base.pivot     = spriteRect.pivot;
     base.rect      = spriteRect.rect;
     base.spriteID  = spriteRect.spriteID;
 }
Exemple #22
0
 public void SetupShapeEditor()
 {
     if (this.shapeEditorDirty || this.m_Selected != this.spriteEditorWindow.selectedSpriteRect)
     {
         this.m_Selected = this.spriteEditorWindow.selectedSpriteRect;
         this.CleanupShapeEditors();
         if (this.m_Selected != null)
         {
             this.SetupShapeEditorOutline(this.m_Selected);
             this.selectedShapeOutline = this.m_Selected.outline;
             this.m_ShapeEditors       = new ShapeEditor[this.selectedShapeOutline.Count];
             for (int i = 0; i < this.selectedShapeOutline.Count; i++)
             {
                 int outlineIndex = i;
                 this.m_ShapeEditors[i] = this.shapeEditorFactory.CreateShapeEditor();
                 this.m_ShapeEditors[i].SetRectSelectionTool(this.m_ShapeSelectionUI);
                 this.m_ShapeEditors[i].LocalToWorldMatrix = (() => this.m_HandleMatrix);
                 this.m_ShapeEditors[i].LocalToScreen      = ((Vector3 point) => Handles.matrix.MultiplyPoint(point));
                 this.m_ShapeEditors[i].ScreenToLocal      = new Func <Vector2, Vector3>(this.ScreenToLocal);
                 this.m_ShapeEditors[i].RecordUndo         = new Action(this.RecordUndo);
                 this.m_ShapeEditors[i].GetHandleSize      = new Func <float>(this.GetHandleSize);
                 this.m_ShapeEditors[i].lineTexture        = this.m_OutlineTexture;
                 this.m_ShapeEditors[i].Snap             = new Func <Vector3, Vector3>(this.SnapPoint);
                 this.m_ShapeEditors[i].GetPointPosition = ((int index) => this.GetPointPosition(outlineIndex, index));
                 this.m_ShapeEditors[i].SetPointPosition = delegate(int index, Vector3 position)
                 {
                     this.SetPointPosition(outlineIndex, index, position);
                 };
                 this.m_ShapeEditors[i].InsertPointAt = delegate(int index, Vector3 position)
                 {
                     this.InsertPointAt(outlineIndex, index, position);
                 };
                 this.m_ShapeEditors[i].RemovePointAt = delegate(int index)
                 {
                     this.RemovePointAt(outlineIndex, index);
                 };
                 this.m_ShapeEditors[i].GetPointsCount = (() => this.GetPointsCount(outlineIndex));
             }
             for (int j = 0; j < this.selectedShapeOutline.Count; j++)
             {
                 for (int k = 0; k < this.selectedShapeOutline.Count; k++)
                 {
                     if (j != k)
                     {
                         this.m_ShapeEditors[k].RegisterToShapeEditor(this.m_ShapeEditors[j]);
                     }
                 }
             }
         }
         else
         {
             this.m_ShapeEditors = new ShapeEditor[0];
         }
     }
     this.shapeEditorDirty = false;
 }
        protected override void SetupShapeEditorOutline(SpriteRect spriteRect)
        {
            var physicsShape  = m_Outline[spriteRect.spriteID];
            var physicsShapes = GenerateSpriteRectOutline(spriteRect.rect,
                                                          Math.Abs(physicsShape.tessellationDetail - (-1f)) < Mathf.Epsilon ? kDefaultPhysicsTessellationDetail : physicsShape.tessellationDetail,
                                                          kDefaultPhysicsAlphaTolerance, m_TextureDataProvider);

            m_Outline[spriteRect.spriteID].spriteOutlines = physicsShapes;
            spriteEditorWindow.SetDataModified();
        }
 public void Remove(SpriteRect spriteRect)
 {
     m_Names.Remove(spriteRect.name);
     if (spriteRect.internalID != 0)
     {
         m_InternalIds.Remove(spriteRect.internalID);
     }
     m_SpriteRects.Remove(spriteRect);
     m_SpriteReadOnlyList = m_SpriteRects.AsReadOnly();
 }
 internal SpriteDataExt(SpriteRect sr)
 {
     originalName       = sr.originalName;
     name               = sr.name;
     border             = sr.border;
     tessellationDetail = 0;
     rect               = sr.rect;
     spriteID           = sr.spriteID;
     alignment          = sr.alignment;
     pivot              = sr.pivot;
 }
 public OutlineSpriteRect(SpriteRect rect)
 {
     this.name         = rect.name;
     this.originalName = rect.originalName;
     this.pivot        = rect.pivot;
     this.alignment    = rect.alignment;
     this.border       = rect.border;
     this.rect         = rect.rect;
     this.spriteID     = rect.spriteID;
     outlines          = new List <Vector2[]>();
 }
Exemple #27
0
        private SpriteCache CreateSpriteCache(SpriteRect spriteRect)
        {
            var sprite = CreateCache <SpriteCache>();

            sprite.name            = spriteRect.name;
            sprite.id              = spriteRect.spriteID.ToString();
            sprite.textureRect     = spriteRect.rect;
            sprite.position        = spriteRect.rect.position;
            m_SpriteMap[sprite.id] = sprite;
            return(sprite);
        }
Exemple #28
0
        protected override void SetupShapeEditorOutline(SpriteRect spriteRect)
        {
            SpriteOutlineList spriteOutlineList = this.m_Outline[spriteRect.spriteID];

            if (spriteOutlineList.spriteOutlines == null || spriteOutlineList.spriteOutlines.Count == 0)
            {
                List <SpriteOutline> spriteOutlines = SpriteOutlineModule.GenerateSpriteRectOutline(spriteRect.rect, (Math.Abs(spriteOutlineList.tessellationDetail - -1f) >= Mathf.Epsilon) ? spriteOutlineList.tessellationDetail : this.kDefaultPhysicsTessellationDetail, this.kDefaultPhysicsAlphaTolerance, this.m_TextureDataProvider);
                this.spriteEditorWindow.SetDataModified();
                this.m_Outline[spriteRect.spriteID].spriteOutlines = spriteOutlines;
            }
        }
Exemple #29
0
 public void AddSpriteData(SpriteRect spriteRect)
 {
     if (spriteImportMode != SpriteImportMode.Multiple)
     {
         Debug.LogWarning("Can only add sprite data when import mode is multiple");
     }
     else
     {
         GetSpriteImportData().Add(new SpriteMetaData(spriteRect));
     }
 }
    public override string ToString()
    {
        string _return = SpriteName + "\n";

        foreach (string s in _spriteInfo.Keys)
        {
            SpriteRect current = _spriteInfo[s];
            _return += string.Format("{0}-({1}, {2}, {3}, {4})\n", s, current.x, current.y, current.Width, current.Height);
        }

        return(_return);
    }