示例#1
0
    private bool ApplySerializeObject(AtlasSerializeObject obj)
    {//获取持久化对象
        bool bRet = true;

        if (obj == null)
        {
            return(false);
        }

        //获取Atlas输出路径
        AtlasSavePath = obj.AtlasOutputPath;

        spriteImages.Clear();


        //获取小图信息
        foreach (var ImageInfo in obj.SpriteInfoTable)
        {
            AtlasSpriteImage image = new AtlasSpriteImage();
            image.Name      = ImageInfo.Key;
            image.Path      = UIAtlasEditorConfig.ImageBasePath.Replace(@"/", @"\") + ImageInfo.Value.SpritePath;
            image.ZoomScale = ImageInfo.Value.ZoomScale;

            spriteImages.Add(image);
        }

        return(bRet);
    }
示例#2
0
    public bool GetSpriteImage(string path, out AtlasSpriteImage spriteImage)
    {//获取指定文件名的小图
        bool bRet = false;

        if (path == null)
        {
            spriteImage = null;
            return(false);
        }

        // string tempPath = path.Substring(path.IndexOfAny(ImageRelativePath.ToCharArray()) + ImageRelativePath.Length);
        spriteImage = null;

        //查询目标小图
        foreach (var sprite in spriteImages)
        {
            if (sprite.Path == path)
            {
                spriteImage = sprite;
                bRet        = true;
                break;
            }
        }

        return(bRet);
    }
示例#3
0
    public bool GetSpriteImage(string path, out AtlasSpriteImage spriteImage)
    {//获取指定小图
        bool bRet = false;

        spriteImage = null;

        if (m_Project != null)
        {
            bRet = m_Project.GetSpriteImage(path, out spriteImage);
        }

        return(bRet);
    }
示例#4
0
    public bool AddSpriteImage(string path)
    {//向工程中添加小图
        bool bRet = true;

        if (string.IsNullOrEmpty(path))
        {
            ProjectFailedType = PROJECT_ERROR_TYPE.PROJECT_ERROR_SPRITEIMAGE_PATH;
            return(false);
        }

        AtlasSpriteImage spriteImage = new AtlasSpriteImage();

        //首次添加时缩放比例默认是1
        spriteImage.ZoomScale = 1f;

        if (CheckSpriteImagePath(path))
        {//路径合法
            //spriteImage.Path = path.Substring(ImageRelativePath.Length);
            spriteImage.Path = path;
            spriteImage.Name = path.Substring(path.LastIndexOfAny(new char[] { '/', '\\' }) + 1);

            foreach (var sprite in spriteImages)
            {
                if (sprite.Path == spriteImage.Path)
                {
                    //更新错误类型
                    ProjectFailedType = PROJECT_ERROR_TYPE.PROJECT_ERROR_SPRITE_EXIST;
                    bRet = false;
                    break;
                }
            }
        }
        else
        {//路径非法
            //更新错误类型
            ProjectFailedType = PROJECT_ERROR_TYPE.PROJECT_ERROR_SPRITEIMAGE_PATH;
            bRet = false;
        }

        if (bRet)
        {
            //添加小图
            spriteImages.Add(spriteImage);
            IsModify = true;
            bRet     = true;
        }

        return(bRet);
    }
示例#5
0
    public PROJECT_ERROR_TYPE ModifyRefTableAfterAddSprite(AtlasSpriteImage[] spriteImageTable)
    {
        PROJECT_ERROR_TYPE errorType  = PROJECT_ERROR_TYPE.PROJECT_ERROR_NONE;
        AtlasSpriteImage   tempSprite = null;
        ReferenceInfo      refInfo    = null;

        if (null == spriteImageTable)
        {
            return(PROJECT_ERROR_TYPE.PROJECT_ERROR_SPRITEIMAGE_PATH);
        }

        foreach (var spriteItem in spriteImageTable)
        {
            if (!FindSprite(spriteItem.Path, ref tempSprite))
            {
                continue;
            }

            //更新Sprite反依赖
            tempSprite.ReferenceTable = spriteItem.ReferenceTable;

            //更新Atlas反依赖
            foreach (var assetItem in spriteItem.ReferenceTable)
            {
                if (!FindRefAssetFile(assetItem, ref refInfo))
                {
                    ReferenceInfo newInfo = new ReferenceInfo();
                    newInfo.ReferenceFilePath = assetItem;
                    newInfo.ReferencingSprite.Add(System.IO.Path.GetFileNameWithoutExtension(spriteItem.Path));

                    ReferenceTable.Add(newInfo);
                }
                else
                {
                    if (!FindRefAssetSprite(assetItem, System.IO.Path.GetFileNameWithoutExtension(spriteItem.Path)))
                    {
                        refInfo.ReferencingSprite.Add(System.IO.Path.GetFileNameWithoutExtension(spriteItem.Path));
                    }
                }
            }
        }

        return(errorType);
    }
示例#6
0
    public PROJECT_ERROR_TYPE GetSpriteImageZoom(string spritePath, out float scaleFactor)
    {
        PROJECT_ERROR_TYPE errorType = PROJECT_ERROR_TYPE.PROJECT_ERROR_NONE;

        scaleFactor = 0f;
        if (string.IsNullOrEmpty(spritePath))
        {
            return(PROJECT_ERROR_TYPE.PROJECT_ERROR_SPRITEIMAGE_PATH);
        }

        AtlasSpriteImage spriteImage = null;

        if (GetSpriteImage(spritePath, out spriteImage))
        {
            scaleFactor = spriteImage.ZoomScale;
        }

        return(errorType);
    }
示例#7
0
    public Texture2D LoadSpriteImage(string path)
    {//载入小图资源
        if (null == m_Project)
        {
            return(null);
        }


        AtlasSpriteImage spriteImage = null;

        m_Project.GetSpriteImage(path, out spriteImage);
        if (null == spriteImage)
        {
            return(null);
        }

        Texture2D retTex = UIAtlasTempTextureManager.GetInstance().LoadTexture(path, m_Project.Path, spriteImage.ZoomScale);

        return(retTex);
    }
示例#8
0
    public PROJECT_ERROR_TYPE AddSpriteImage(AtlasSpriteImage spriteImage)
    {
        PROJECT_ERROR_TYPE errorType = PROJECT_ERROR_TYPE.PROJECT_ERROR_NONE;

        if (null == spriteImage)
        {
            return(PROJECT_ERROR_TYPE.PROJECT_ERROR_UNKNOWN);
        }

        do
        {
            if (CheckSpriteImagePath(spriteImage.Path))
            {
                foreach (var sprite in spriteImages)
                {
                    if (sprite.Path == spriteImage.Path)
                    {
                        //更新错误类型
                        errorType = PROJECT_ERROR_TYPE.PROJECT_ERROR_SPRITE_EXIST;
                        break;
                    }
                }
                if (IsProjectFailed(errorType))
                {
                    break;
                }
                AtlasSpriteImage newSpriteImage = spriteImage;
                //添加小图
                spriteImages.Add(newSpriteImage);
                IsModify = true;
            }
            else
            {
                errorType = PROJECT_ERROR_TYPE.PROJECT_ERROR_SPRITEIMAGE_PATH;
                break;
            }
        } while (false);

        return(errorType);
    }
示例#9
0
    //public bool PreViewAtlastexture(Texture2D tex, Texture2D[] imgs, out Texture2D outTex)
    //{//获取预览Atals

    //    outTex = null;
    //    DefaultTexturePackagingStrategy maker = new DefaultTexturePackagingStrategy();

    //    //打包纹理
    //    if(maker.Pack(tex, imgs, null))
    //    {
    //        outTex = tex;
    //    }

    //    return true;
    //}

    //public bool MakeAtlasTexture(Texture2D tex, Texture2D[] imgs)
    //{//生成Atlas Png

    //    string newPath = null;
    //    bool bRet = false;

    //    if ((atlasSavePath == null) || (name == null))
    //    {
    //        return false;
    //    }

    //    DefaultTexturePackagingStrategy maker = new DefaultTexturePackagingStrategy();

    //    //打包纹理
    //    if(maker.Pack(tex, imgs, null))
    //    {
    //        if(tex == null)
    //        {
    //            return false;
    //        }

    //        //创建png文件
    //        byte[] bytes = tex.EncodeToPNG();
    //        newPath = atlasSavePath + name + ".png";
    //        UniversalEditorUtility.MakeFileWriteable(newPath);
    //        System.IO.File.WriteAllBytes(newPath, bytes);
    //        bytes = null;
    //        bRet = true;
    //    }

    //    return bRet;
    //}

    //public void MakeAtlasPrefab(string outputPath)
    //{//生成Atlas prefab
    //    if ((outputPath == null) || (!outputPath.Contains(".prefab")))
    //    {
    //        return;
    //    }

    //    GameObject go = AssetDatabase.LoadAssetAtPath(outputPath, typeof(GameObject)) as GameObject;
    //    string matPath = outputPath.Replace(".prefab", ".mat");

    //    // Try to load the material
    //    Material mat = AssetDatabase.LoadAssetAtPath(matPath, typeof(Material)) as Material;

    //    // If the material doesn't exist, create it
    //    if (mat == null)
    //    {
    //        Shader shader = Shader.Find(NGUISettings.atlasPMA ? "Unlit/Premultiplied Colored" : "Unlit/Transparent Colored");
    //        mat = new Material(shader);

    //        // Save the material
    //        AssetDatabase.CreateAsset(mat, matPath);
    //        AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);

    //        // Load the material so it's usable
    //        mat = AssetDatabase.LoadAssetAtPath(matPath, typeof(Material)) as Material;
    //    }

    //    // Create a new prefab for the atlas
    //    Object prefab = (go != null) ? go : PrefabUtility.CreateEmptyPrefab(outputPath);

    //    if (go == null)
    //    {
    //        // Create a new game object for the atlas
    //        string atlasName = outputPath.Replace(".prefab", "");
    //        atlasName = atlasName.Substring(outputPath.LastIndexOfAny(new char[] { '/', '\\' }) + 1);
    //        go = new GameObject(atlasName);
    //        go.AddComponent<UIAtlas>().spriteMaterial = mat;

    //        // Update the prefab
    //        PrefabUtility.ReplacePrefab(go, prefab);
    //        GameObject.DestroyImmediate(go);
    //        AssetDatabase.SaveAssets();
    //        AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);
    //    }


    //    // Select the atlas
    //    go = AssetDatabase.LoadAssetAtPath(outputPath, typeof(GameObject)) as GameObject;
    //    NGUISettings.atlas = go.GetComponent<UIAtlas>();
    //    Selection.activeGameObject = go;

    //    List<UIAtlasMaker.SpriteEntry> sprites = CreateSprites(UIAtlasTempTextureManager.GetInstance().GetTextureCacheSprite());
    //    UIAtlasMaker.UpdateAtlas(NGUISettings.atlas, sprites); ;
    //    AssetDatabase.SaveAssets();
    //    AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);

    //    NGUIEditorTools.UpgradeTexturesToSprites(NGUISettings.atlas);
    //    NGUIEditorTools.RepaintSprites();
    //}

    //static public List<UIAtlasMaker.SpriteEntry> CreateSprites(List<Texture> textures)
    //{
    //    List<UIAtlasMaker.SpriteEntry> list = new List<UIAtlasMaker.SpriteEntry>();

    //    foreach (Texture tex in textures)
    //    {
    //        Texture2D oldTex = NGUIEditorTools.ImportTexture(tex, true, false, true);
    //        if (oldTex == null) oldTex = tex as Texture2D;
    //        if (oldTex == null) continue;

    //        // If we aren't doing trimming, just use the texture as-is
    //        if (!NGUISettings.atlasTrimming && !NGUISettings.atlasPMA)
    //        {
    //            UIAtlasMaker.SpriteEntry sprite = new UIAtlasMaker.SpriteEntry();
    //            sprite.SetRect(0, 0, oldTex.width, oldTex.height);
    //            sprite.tex = oldTex;
    //            if (oldTex.name.EndsWith("zoomed"))
    //            {
    //                sprite.name = oldTex.name.Substring(0, oldTex.name.Length - "zoomed".Length);
    //            }
    //            else
    //            {
    //                sprite.name = oldTex.name;
    //            }
    //            sprite.temporaryTexture = false;
    //            list.Add(sprite);
    //            continue;
    //        }

    //        // If we want to trim transparent pixels, there is more work to be done
    //        Color32[] pixels = oldTex.GetPixels32();

    //        int xmin = oldTex.width;
    //        int xmax = 0;
    //        int ymin = oldTex.height;
    //        int ymax = 0;
    //        int oldWidth = oldTex.width;
    //        int oldHeight = oldTex.height;

    //        // Find solid pixels
    //        if (NGUISettings.atlasTrimming)
    //        {
    //            for (int y = 0, yw = oldHeight; y < yw; ++y)
    //            {
    //                for (int x = 0, xw = oldWidth; x < xw; ++x)
    //                {
    //                    Color32 c = pixels[y * xw + x];

    //                    if (c.a != 0)
    //                    {
    //                        if (y < ymin) ymin = y;
    //                        if (y > ymax) ymax = y;
    //                        if (x < xmin) xmin = x;
    //                        if (x > xmax) xmax = x;
    //                    }
    //                }
    //            }
    //        }
    //        else
    //        {
    //            xmin = 0;
    //            xmax = oldWidth - 1;
    //            ymin = 0;
    //            ymax = oldHeight - 1;
    //        }

    //        int newWidth = (xmax - xmin) + 1;
    //        int newHeight = (ymax - ymin) + 1;

    //        if (newWidth > 0 && newHeight > 0)
    //        {
    //            UIAtlasMaker.SpriteEntry sprite = new UIAtlasMaker.SpriteEntry();
    //            sprite.x = 0;
    //            sprite.y = 0;
    //            sprite.width = oldTex.width;
    //            sprite.height = oldTex.height;

    //            // If the dimensions match, then nothing was actually trimmed
    //            if (!NGUISettings.atlasPMA && (newWidth == oldWidth && newHeight == oldHeight))
    //            {
    //                sprite.tex = oldTex;
    //                if (oldTex.name.EndsWith("zoomed"))
    //                {
    //                    sprite.name = oldTex.name.Substring(0, oldTex.name.Length - "zoomed".Length);
    //                }
    //                else
    //                {
    //                    sprite.name = oldTex.name;
    //                }
    //                sprite.temporaryTexture = false;
    //            }
    //            else
    //            {
    //                // Copy the non-trimmed texture data into a temporary buffer
    //                Color32[] newPixels = new Color32[newWidth * newHeight];

    //                for (int y = 0; y < newHeight; ++y)
    //                {
    //                    for (int x = 0; x < newWidth; ++x)
    //                    {
    //                        int newIndex = y * newWidth + x;
    //                        int oldIndex = (ymin + y) * oldWidth + (xmin + x);
    //                        if (NGUISettings.atlasPMA) newPixels[newIndex] = NGUITools.ApplyPMA(pixels[oldIndex]);
    //                        else newPixels[newIndex] = pixels[oldIndex];
    //                    }
    //                }

    //                // Create a new texture
    //                sprite.temporaryTexture = true;
    //                if (oldTex.name.EndsWith("zoomed"))
    //                {
    //                    sprite.name = oldTex.name.Substring(0, oldTex.name.Length - "zoomed".Length);
    //                }
    //                else
    //                {
    //                    sprite.name = oldTex.name;
    //                }
    //                sprite.tex = new Texture2D(newWidth, newHeight);
    //                sprite.tex.SetPixels32(newPixels);
    //                sprite.tex.Apply();

    //                // Remember the padding offset
    //                sprite.SetPadding(xmin, ymin, oldWidth - newWidth - xmin, oldHeight - newHeight - ymin);
    //            }
    //            list.Add(sprite);
    //        }
    //    }
    //    return list;
    //}

    private bool FindSprite(string spritePath, ref AtlasSpriteImage spriteImage)
    {
        bool bRet = false;

        spriteImage = null;

        if (string.IsNullOrEmpty(spritePath))
        {
            return(false);
        }

        foreach (var spriteItem in spriteImages)
        {
            if (spritePath == spriteItem.Path)
            {
                spriteImage = spriteItem;
                bRet        = true;
            }
        }

        return(bRet);
    }
示例#10
0
    static void OnSpriteInspector(EditorControl c, object target)
    {//小图属性窗口显示
        int    w, h;
        string oldStr     = null;
        string SpriteName = null;

        if ((m_spriteListView == null) || (m_spriteListView.LastSelectItem < 0))
        {
            return;
        }

        ListCtrlItem deleteItem = m_spriteListView.Items[m_spriteListView.LastSelectItem];

        SpriteName = deleteItem.tooltip;

        GUILayout.Space(20f);

        GUILayout.BeginHorizontal();
        GUILayout.Label("宽高比", GUILayout.Width(60f));
        GUILayout.TextField(m_aspecet.ToString(), GUILayout.Width(150));
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("宽度", GUILayout.Width(60f));
        GUI.SetNextControlName("宽度");
        oldStr           = m_spriteWidthStr;
        m_spriteWidthStr = GUILayout.TextField(m_spriteWidthStr, GUILayout.Width(150));
        if ((GUI.GetNameOfFocusedControl() == "宽度") && (oldStr != m_spriteWidthStr))
        {
            int.TryParse(m_spriteWidthStr, out w);
            h = (int)(w / m_aspecet);
            m_spriteHeightStr = h.ToString();
        }
        GUILayout.Label("pix", GUILayout.Width(50f));
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("高度", GUILayout.Width(60f));
        GUI.SetNextControlName("高度");
        oldStr            = m_spriteHeightStr;
        m_spriteHeightStr = GUILayout.TextField(m_spriteHeightStr, GUILayout.Width(150));
        if ((GUI.GetNameOfFocusedControl() == "高度") && (oldStr != m_spriteHeightStr))
        {
            int.TryParse(m_spriteHeightStr, out h);
            w = (int)(h * m_aspecet);
            m_spriteWidthStr = w.ToString();
        }
        GUILayout.Label("pix", GUILayout.Width(50f));
        GUILayout.EndHorizontal();

        if (Event.current.keyCode == KeyCode.Return && Event.current.type == EventType.Used)
        {
            if (GUI.GetNameOfFocusedControl() == "高度" || GUI.GetNameOfFocusedControl() == "宽度")
            {
                AtlasSpriteImage      spriteImage = null;
                AtlasImageZoomCommand cmd         = null;
                Texture2D             tex         = null;

                int.TryParse(m_spriteWidthStr, out w);
                int.TryParse(m_spriteHeightStr, out h);

                cmd = new AtlasImageZoomCommand();
                UIAtlasEditorModel.GetInstance().GetSpriteImage(SpriteName, out spriteImage);
                tex = UIAtlasEditorModel.GetInstance().GetSpriteTexture(SpriteName);
                if (tex == null)
                {
                    return;
                }

                cmd.m_oldScaleFactor = spriteImage.ZoomScale;
                cmd.m_newScaleFactor = (float)w / (float)tex.width;
                cmd.m_SpriteName     = SpriteName;
                EditorCommandManager.GetInstance().Add(cmd);

                m_bIsOperateSaved = false;

                RegisterUndo("Zoom Image");
            }
        }

        //RequestRepaint();
    }