Пример #1
0
 public PackAtlasSprite(BinRaw binRaw, SpriteRaw spriteRaw)
 {
     mMain = binRaw.main;
     Debug.Assert(mMain != null, "Can not find main texture.");
     mAddition     = binRaw.addition;
     mName         = spriteRaw.name;
     mRect         = spriteRaw.rect;
     mBorder       = spriteRaw.border;
     mPivot        = spriteRaw.pivot;
     mTransparency = PackUtil.CheckAtlasBinTranparency(binRaw);
     mQuality      = (PackQuality)binRaw.quality;
 }
Пример #2
0
        private void AddFiles(AtlasRaw atlas, PackQuality quality, string[] files, bool replaceSpriteByName = true)
        {
            var textures = new List <IPackSprite>(PackAtlasSprite.ListSprites(atlas));
            Action <IPackSprite> addTexture = (texture) =>
            {
                if (replaceSpriteByName)
                {
                    for (int i = textures.Count - 1; i >= 0; i--)
                    {
                        if (textures[i].name.Equals(texture.name))
                        {
                            textures.RemoveAt(i);
                        }
                    }
                }
                textures.Add(texture);
            };

            foreach (var file in files)
            {
                if (File.Exists(file))
                {
                    var texture = new PackAssetSprite(file);
                    texture.name    = Path.GetFileNameWithoutExtension(file);
                    texture.quality = quality;
                    addTexture(texture);
                }
                else if (Directory.Exists(file))
                {
                    var images = new List <string>();
                    images.AddRange(Directory.GetFiles(file, "*.png", SearchOption.AllDirectories));
                    images.AddRange(Directory.GetFiles(file, "*.jpg", SearchOption.AllDirectories));
                    foreach (var image in images)
                    {
                        var assetPath  = image.Replace(file + "\\", "").Replace("\\", "/");
                        var assetDir   = Path.GetDirectoryName(assetPath);
                        var assetName  = Path.GetFileNameWithoutExtension(assetPath);
                        var assetLabel = string.IsNullOrEmpty(assetDir) ? assetName : assetDir + "/" + assetName;
                        var texture    = new PackAssetSprite(image)
                        {
                            name    = assetLabel,
                            quality = quality
                        };
                        addTexture(texture);
                    }
                }
            }
            AtlasPacker.Repack(atlas, textures.ToArray());
        }
Пример #3
0
        public static PackPostProcessor Fetch(PackQuality quality)
        {
            var baseType    = typeof(PackPostProcessor);
            var customTypes = AppDomain.CurrentDomain.GetAssemblies()
                              .SelectMany(assembly => assembly.GetTypes())
                              .Where(t => baseType.IsAssignableFrom(t) && !t.IsAbstract);

            foreach (var customType in customTypes)
            {
                var attributes = customType.GetCustomAttributes(typeof(PackQualityAttribute), false);
                if (attributes.Length > 0 && (attributes[0] as PackQualityAttribute).quality == quality)
                {
                    return((PackPostProcessor)Activator.CreateInstance(customType));
                }
            }
            throw new NotImplementedException();
        }
Пример #4
0
        public PackAssetSprite(string assetPath)
        {
            mAssetPath = assetPath;
            var sprite = mAssetPath.StartsWith("Assets/") ?
                         AssetDatabase.LoadAssetAtPath <UnityEngine.Sprite>(mAssetPath) : null;

            if (sprite != null)
            {
                mBorder = sprite.border;
                mPivot  = sprite.pivot;
            }
            else
            {
                mBorder = Vector4.zero;
                mPivot  = new Vector2(0.5f, 0.5f);
            }
            mAsset = new Texture2D(1, 1);
            mAsset.LoadImage(File.ReadAllBytes(mAssetPath));
            mName         = Path.GetFileNameWithoutExtension(mAssetPath);
            mRect         = new Rect(0, 0, mAsset.width, mAsset.height);
            mTransparency = PackUtil.CheckTextureTranparency(mAsset.format);
            mQuality      = PackQuality.AlphaSplit;
        }
Пример #5
0
        private void CompressSelected(AtlasRaw atlas, PackQuality quality, List <SpriteIndex> selected)
        {
            var count = 0;
            var list  = new List <IPackSprite>(PackAtlasSprite.ListSprites(atlas));

            foreach (var selectedSprite in selected)
            {
                var bin    = atlas.bins[selectedSprite.bin];
                var sprite = bin.sprites[selectedSprite.sprite];
                foreach (var packSprite in list)
                {
                    if (string.Equals(packSprite.name, sprite.name) &&
                        packSprite.quality != quality)
                    {
                        packSprite.quality = quality;
                        count += 1;
                    }
                }
            }
            if (count > 0)
            {
                AtlasPacker.Repack(atlas, list.ToArray());
            }
        }
Пример #6
0
 public PackQualityAttribute(PackQuality quality)
 {
     mQuality = quality;
 }