private List <TMP_Sprite> CreateSpriteInfoList(TexturePacker.SpriteDataObject spriteDataObject)
        {
            List <TexturePacker.SpriteData> frames = spriteDataObject.frames;
            List <TMP_Sprite> list = new List <TMP_Sprite>();

            for (int i = 0; i < frames.Count; i++)
            {
                TMP_Sprite tMP_Sprite = new TMP_Sprite();
                tMP_Sprite.id       = i;
                tMP_Sprite.name     = Path.GetFileNameWithoutExtension(frames[i].filename);
                tMP_Sprite.hashCode = TMP_TextUtilities.GetSimpleHashCode(tMP_Sprite.name);
                int num  = 0;
                int num2 = tMP_Sprite.name.IndexOf('-');
                num                 = (tMP_Sprite.unicode = ((num2 == -1) ? TMP_TextUtilities.StringToInt(tMP_Sprite.name) : TMP_TextUtilities.StringToInt(tMP_Sprite.name.Substring(num2 + 1))));
                tMP_Sprite.x        = frames[i].frame.x;
                tMP_Sprite.y        = (float)m_SpriteAtlas.height - (frames[i].frame.y + frames[i].frame.h);
                tMP_Sprite.width    = frames[i].frame.w;
                tMP_Sprite.height   = frames[i].frame.h;
                tMP_Sprite.pivot    = frames[i].pivot;
                tMP_Sprite.xAdvance = tMP_Sprite.width;
                tMP_Sprite.scale    = 1f;
                tMP_Sprite.xOffset  = 0f - tMP_Sprite.width * tMP_Sprite.pivot.x;
                tMP_Sprite.yOffset  = tMP_Sprite.height - tMP_Sprite.height * tMP_Sprite.pivot.y;
                list.Add(tMP_Sprite);
            }
            return(list);
        }
 private void DrawEditorPanel()
 {
     GUILayout.BeginVertical();
     GUILayout.Label("<b>TMP Sprite Importer</b>", TMP_UIStyleManager.Section_Label);
     GUILayout.Label("Import Settings", TMP_UIStyleManager.Section_Label, GUILayout.Width(150f));
     GUILayout.BeginVertical(TMP_UIStyleManager.TextureAreaBox);
     EditorGUI.BeginChangeCheck();
     m_JsonFile         = (EditorGUILayout.ObjectField("Sprite Data Source", m_JsonFile, typeof(TextAsset), false) as TextAsset);
     m_SpriteDataFormat = (SpriteAssetImportFormats)(object)EditorGUILayout.EnumPopup("Import Format", m_SpriteDataFormat);
     m_SpriteAtlas      = (EditorGUILayout.ObjectField("Sprite Texture Atlas", m_SpriteAtlas, typeof(Texture2D), false) as Texture2D);
     if (EditorGUI.EndChangeCheck())
     {
         m_CreationFeedback = string.Empty;
     }
     GUILayout.Space(10f);
     if (GUILayout.Button("Create Sprite Asset"))
     {
         m_CreationFeedback = string.Empty;
         if (m_SpriteDataFormat == SpriteAssetImportFormats.TexturePacker)
         {
             TexturePacker.SpriteDataObject spriteDataObject = JsonUtility.FromJson <TexturePacker.SpriteDataObject>(m_JsonFile.text);
             if (spriteDataObject != null && spriteDataObject.frames != null && spriteDataObject.frames.Count > 0)
             {
                 int count = spriteDataObject.frames.Count;
                 m_CreationFeedback = "<b>Import Results</b>\n--------------------\n";
                 m_CreationFeedback = m_CreationFeedback + "<color=#C0ffff><b>" + count + "</b></color> Sprites were imported from file.";
                 m_SpriteInfoList   = CreateSpriteInfoList(spriteDataObject);
             }
         }
     }
     GUILayout.Space(5f);
     GUILayout.BeginVertical(TMP_UIStyleManager.TextAreaBoxWindow, GUILayout.Height(60f));
     EditorGUILayout.LabelField(m_CreationFeedback, TMP_UIStyleManager.Label);
     GUILayout.EndVertical();
     GUILayout.Space(5f);
     GUI.enabled = ((m_SpriteInfoList != null) ? true : false);
     if (GUILayout.Button("Save Sprite Asset"))
     {
         string empty = string.Empty;
         empty = EditorUtility.SaveFilePanel("Save Sprite Asset File", new FileInfo(AssetDatabase.GetAssetPath(m_JsonFile)).DirectoryName, m_JsonFile.name, "asset");
         if (empty.Length == 0)
         {
             return;
         }
         SaveSpriteAsset(empty);
     }
     GUILayout.EndVertical();
     GUILayout.EndVertical();
 }
Esempio n. 3
0
        /// <summary>
        ///
        /// </summary>
        List <TMP_Sprite> CreateSpriteInfoList(TexturePacker.SpriteDataObject spriteDataObject)
        {
            List <TexturePacker.SpriteData> importedSprites = spriteDataObject.frames;

            List <TMP_Sprite> spriteInfoList = new List <TMP_Sprite>();

            for (int i = 0; i < importedSprites.Count; i++)
            {
                TMP_Sprite sprite = new TMP_Sprite();

                sprite.id       = i;
                sprite.name     = Path.GetFileNameWithoutExtension(importedSprites[i].filename) ?? "";
                sprite.hashCode = TMP_TextUtilities.GetSimpleHashCode(sprite.name);

                // Attempt to extract Unicode value from name
                int unicode;
                int indexOfSeperator = sprite.name.IndexOf('-');
                if (indexOfSeperator != -1)
                {
                    unicode = TMP_TextUtilities.StringToInt(sprite.name.Substring(indexOfSeperator + 1));
                }
                else
                {
                    unicode = TMP_TextUtilities.StringToInt(sprite.name);
                }

                sprite.unicode = unicode;

                sprite.x      = importedSprites[i].frame.x;
                sprite.y      = m_SpriteAtlas.height - (importedSprites[i].frame.y + importedSprites[i].frame.h);
                sprite.width  = importedSprites[i].frame.w;
                sprite.height = importedSprites[i].frame.h;

                //Calculate sprite pivot position
                sprite.pivot = importedSprites[i].pivot;

                // Properties the can be modified
                sprite.xAdvance = sprite.width;
                sprite.scale    = 1.0f;
                sprite.xOffset  = 0 - (sprite.width * sprite.pivot.x);
                sprite.yOffset  = sprite.height - (sprite.height * sprite.pivot.y);

                spriteInfoList.Add(sprite);
            }

            return(spriteInfoList);
        }
Esempio n. 4
0
        protected virtual string ConvertToEmojiOne(string p_json)
        {
            try
            {
                //Unity cannot deserialize Dictionary, so we converted the dictionary to List using MiniJson
                p_json = ConvertToUnityJsonFormat(p_json);
                PreConvertedSpritesheetData    v_preData  = JsonUtility.FromJson <PreConvertedSpritesheetData>(p_json);
                TexturePacker.SpriteDataObject v_postData = v_preData.ToTexturePacketDataObject(m_gridSize, m_padding, m_spacing);

                return(JsonUtility.ToJson(v_postData));
            }
            catch (System.Exception p_exception)
            {
                Debug.Log("Failed to convert to EmojiOne\n: " + p_exception);
            }

            return("");
        }
Esempio n. 5
0
        void DrawEditorPanel()
        {
            // label
            GUILayout.Label("Import Settings", EditorStyles.boldLabel);

            EditorGUI.BeginChangeCheck();

            // Sprite Texture Selection
            m_JsonFile = EditorGUILayout.ObjectField("Sprite Data Source", m_JsonFile, typeof(TextAsset), false) as TextAsset;

            m_SpriteDataFormat = (SpriteAssetImportFormats)EditorGUILayout.EnumPopup("Import Format", m_SpriteDataFormat);

            // Sprite Texture Selection
            m_SpriteAtlas = EditorGUILayout.ObjectField("Sprite Texture Atlas", m_SpriteAtlas, typeof(Texture2D), false) as Texture2D;

            if (EditorGUI.EndChangeCheck())
            {
                m_CreationFeedback = string.Empty;
            }

            GUILayout.Space(10);

            GUI.enabled = m_JsonFile != null && m_SpriteAtlas != null && m_SpriteDataFormat == SpriteAssetImportFormats.TexturePacker;

            // Create Sprite Asset
            if (GUILayout.Button("Create Sprite Asset"))
            {
                m_CreationFeedback = string.Empty;

                // Read json data file
                if (m_JsonFile != null && m_SpriteDataFormat == SpriteAssetImportFormats.TexturePacker)
                {
                    TexturePacker.SpriteDataObject sprites = JsonUtility.FromJson <TexturePacker.SpriteDataObject>(m_JsonFile.text);

                    if (sprites != null && sprites.frames != null && sprites.frames.Count > 0)
                    {
                        int spriteCount = sprites.frames.Count;

                        // Update import results
                        m_CreationFeedback  = "<b>Import Results</b>\n--------------------\n";
                        m_CreationFeedback += "<color=#C0ffff><b>" + spriteCount + "</b></color> Sprites were imported from file.";

                        // Create sprite info list
                        m_SpriteInfoList = CreateSpriteInfoList(sprites);
                    }
                }
            }

            GUI.enabled = true;

            // Creation Feedback
            GUILayout.Space(5);
            GUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.Height(60));
            {
                EditorGUILayout.LabelField(m_CreationFeedback, TMP_UIStyleManager.label);
            }
            GUILayout.EndVertical();

            GUILayout.Space(5);
            GUI.enabled = m_JsonFile != null && m_SpriteAtlas && m_SpriteInfoList != null && m_SpriteInfoList.Count > 0;    // Enable Save Button if font_Atlas is not Null.
            if (GUILayout.Button("Save Sprite Asset") && m_JsonFile != null)
            {
                string filePath = EditorUtility.SaveFilePanel("Save Sprite Asset File", new FileInfo(AssetDatabase.GetAssetPath(m_JsonFile)).DirectoryName, m_JsonFile.name, "asset");

                if (filePath.Length == 0)
                {
                    return;
                }

                SaveSpriteAsset(filePath);
            }
            GUI.enabled = true;
        }
Esempio n. 6
0
            public virtual TexturePacker.SpriteDataObject ToTexturePacketDataObject(Vector2Int p_gridSize, Vector2 p_padding, Vector2 p_spacing)
            {
                TexturePacker.SpriteDataObject v_postData = new TexturePacker.SpriteDataObject();
                v_postData.frames = new List <TexturePacker.SpriteData>();

                if (frames != null)
                {
                    var v_framesToCheck = new List <PreConvertedImgData>();
                    if (frames != null)
                    {
                        foreach (var v_frameToCheck in frames)
                        {
                            v_framesToCheck.Add(v_frameToCheck);
                        }
                    }

                    for (int i = 0; i < v_framesToCheck.Count; i++)
                    {
                        var v_preFrame = v_framesToCheck[i];

                        //Add all variations in list to check (after the current PreFrame)
                        var v_preFrameWithVariants = v_framesToCheck[i] as PreConvertedImgDataWithVariants;
                        if (v_preFrameWithVariants != null && v_preFrameWithVariants.skin_variations != null && v_preFrameWithVariants.skin_variations.Count > 0)
                        {
                            for (int j = v_preFrameWithVariants.skin_variations.Count - 1; j >= 0; j--)
                            {
                                var v_skinVariantFrame = v_preFrameWithVariants.skin_variations[j];
                                if (v_skinVariantFrame != null)
                                {
                                    v_framesToCheck.Insert(i + 1, v_skinVariantFrame);
                                }
                            }
                        }

                        //Create TexturePacker SpriteData
                        var v_postFrame = new TexturePacker.SpriteData();

                        v_postFrame.filename   = v_preFrame.image;
                        v_postFrame.rotated    = false;
                        v_postFrame.trimmed    = false;
                        v_postFrame.sourceSize = new TexturePacker.SpriteSize()
                        {
                            w = p_gridSize.x, h = p_gridSize.y
                        };
                        v_postFrame.spriteSourceSize = new TexturePacker.SpriteFrame()
                        {
                            x = 0, y = 0, w = p_gridSize.x, h = p_gridSize.y
                        };
                        v_postFrame.frame = new TexturePacker.SpriteFrame()
                        {
                            x = (v_preFrame.sheet_x * (p_gridSize.x + p_spacing.x)) + p_padding.x,
                            y = (v_preFrame.sheet_y * (p_gridSize.y + p_spacing.y)) + p_padding.y,
                            w = p_gridSize.x,
                            h = p_gridSize.y
                        };
                        v_postFrame.pivot = new Vector2(0f, 0f);

                        v_postData.frames.Add(v_postFrame);
                    }
                }

                return(v_postData);
            }
        void DrawEditorPanel()
        {
            // label
            GUILayout.Label("Import Settings", EditorStyles.boldLabel);

            EditorGUI.BeginChangeCheck();

            // Sprite Texture Selection
            m_JsonFile = EditorGUILayout.ObjectField("Sprite Data Source", m_JsonFile, typeof(TextAsset), false) as TextAsset;

            m_SpriteDataFormat = (EmojiSpriteAssetImportFormats)EditorGUILayout.EnumPopup("Import Format", m_SpriteDataFormat);

            //EditorGUILayout.HelpBox("Use this parameters to convert EmojiData Format to TexturePacket Json format", MessageType.Info);
            if (m_SpriteDataFormat == EmojiSpriteAssetImportFormats.EmojiDataJson)
            {
                using (new EditorGUILayout.VerticalScope("box"))
                {
                    EditorGUILayout.LabelField("EmojiOne Fields", EditorStyles.boldLabel);
                    GUILayout.Space(3);
                    m_gridSize         = EditorGUILayout.Vector2IntField("Grid Size", m_gridSize);
                    m_padding          = EditorGUILayout.Vector2IntField("Padding", m_padding);
                    m_spacing          = EditorGUILayout.Vector2IntField("Spacing", m_spacing);
                    m_globalGlyphScale = EditorGUILayout.Slider("Glyph Scale", m_globalGlyphScale, 0.01f, 5f);
                    GUILayout.Space(3);
                }
            }

            // Sprite Texture Selection
            m_SpriteAtlas = EditorGUILayout.ObjectField("Sprite Texture Atlas", m_SpriteAtlas, typeof(Texture2D), false) as Texture2D;

            if (EditorGUI.EndChangeCheck())
            {
                m_CreationFeedback = string.Empty;
            }

            GUILayout.Space(10);
            GUI.enabled = m_JsonFile != null && m_SpriteAtlas != null && m_SpriteDataFormat != EmojiSpriteAssetImportFormats.None;

            // Create Sprite Asset
            if (GUILayout.Button("Create Sprite Asset"))
            {
                m_CreationFeedback = string.Empty;

                var jsonFileText = m_JsonFile != null ? m_JsonFile.text : string.Empty;
                if (m_SpriteDataFormat == EmojiSpriteAssetImportFormats.EmojiDataJson)
                {
                    jsonFileText = EmojiDataConversorUtility.ConvertToTexturePackerFormat(jsonFileText, m_gridSize, m_padding, m_spacing);
                }

                m_CreatedWithEmojiJson = m_SpriteDataFormat == EmojiSpriteAssetImportFormats.EmojiDataJson;
                // Read json data file
                if (m_JsonFile != null && m_SpriteDataFormat != EmojiSpriteAssetImportFormats.None)
                {
#if TMP_2_1_0_PREVIEW_1_OR_NEWER
                    TexturePacker_JsonArray.SpriteDataObject sprites = JsonUtility.FromJson <TexturePacker_JsonArray.SpriteDataObject>(jsonFileText);
#else
                    TexturePacker.SpriteDataObject sprites = JsonUtility.FromJson <TexturePacker.SpriteDataObject>(jsonFileText);
#endif

                    if (sprites != null && sprites.frames != null && sprites.frames.Count > 0)
                    {
                        int spriteCount = sprites.frames.Count;

                        // Update import results
                        m_CreationFeedback  = "<b>Import Results</b>\n--------------------\n";
                        m_CreationFeedback += "<color=#C0ffff><b>" + spriteCount + "</b></color> Sprites were imported from file.";

                        // Create sprite info list
                        m_SpriteInfoList = CreateSpriteInfoList(sprites);
                    }
                }
            }

            GUI.enabled = true;

            // Creation Feedback
            GUILayout.Space(5);
            GUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.Height(60));
            {
                EditorGUILayout.LabelField(m_CreationFeedback, TMP_UIStyleManager.label);
            }
            GUILayout.EndVertical();

            GUILayout.Space(5);
            GUI.enabled = m_JsonFile != null && m_SpriteAtlas && m_SpriteInfoList != null && m_SpriteInfoList.Count > 0;    // Enable Save Button if font_Atlas is not Null.
            if (GUILayout.Button("Save Sprite Asset") && m_JsonFile != null)
            {
                string filePath = EditorUtility.SaveFilePanel("Save Sprite Asset File", new FileInfo(AssetDatabase.GetAssetPath(m_JsonFile)).DirectoryName, m_JsonFile.name, "asset");

                if (filePath.Length == 0)
                {
                    return;
                }

                SaveSpriteAsset(filePath);
            }
            GUI.enabled = true;
        }
        List <TMP_Sprite> CreateSpriteInfoList(TexturePacker.SpriteDataObject spriteDataObject)
#endif
        {
#if TMP_2_1_0_PREVIEW_1_OR_NEWER
            List <TexturePacker_JsonArray.Frame> importedSprites = spriteDataObject.frames;
#else
            List <TexturePacker.SpriteData> importedSprites = spriteDataObject.frames;
#endif

            List <TMP_Sprite> spriteInfoList = new List <TMP_Sprite>();

            for (int i = 0; i < importedSprites.Count; i++)
            {
                TMP_Sprite sprite = new TMP_Sprite();

                sprite.id       = i;
                sprite.name     = Path.GetFileNameWithoutExtension(importedSprites[i].filename) ?? "";
                sprite.hashCode = TMP_TextUtilities.GetSimpleHashCode(sprite.name);

                // Attempt to extract Unicode value from name
                int unicode;
                int indexOfSeparator = sprite.name.IndexOf('-');
                if (indexOfSeparator != -1)
                {
                    string substring = sprite.name.Substring(0, indexOfSeparator);
#if TMP_1_4_0_OR_NEWER
                    unicode = TMP_TextUtilities.StringHexToInt(substring);
#else
                    unicode = TMP_TextUtilities.StringToInt(substring);
#endif
                }
                else
                {
#if TMP_1_4_0_OR_NEWER
                    unicode = TMP_TextUtilities.StringHexToInt(sprite.name);
#else
                    unicode = TMP_TextUtilities.StringToInt(sprite.name);
#endif
                }

                sprite.unicode = unicode;

                sprite.x      = importedSprites[i].frame.x;
                sprite.y      = m_SpriteAtlas.height - (importedSprites[i].frame.y + importedSprites[i].frame.h);
                sprite.width  = importedSprites[i].frame.w;
                sprite.height = importedSprites[i].frame.h;

                //Calculate sprite pivot position
                sprite.pivot = importedSprites[i].pivot;

                //Extra Properties
                //var scaledOffset = (sprite.height * ((m_globalGlyphScale - 1) * 0.5f)) * sprite.pivot.y;
                sprite.xAdvance = sprite.width;
#if TMP_1_4_0_OR_NEWER
                sprite.scale = 1.0f;
#else
                sprite.scale = m_globalGlyphScale;
#endif
                sprite.xOffset = 0 - (sprite.width * sprite.pivot.x);
                sprite.yOffset = sprite.height - (sprite.height * sprite.pivot.y);
                spriteInfoList.Add(sprite);
            }

            return(spriteInfoList);
        }