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; }
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()); }
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(); }
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; }
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()); } }
public PackQualityAttribute(PackQuality quality) { mQuality = quality; }