Exemplo n.º 1
0
        public bool Translate(Scene?scene, TextureTranslationEventArgs e, out TextureResource resource)
        {
            var name = e.Name.ToLower();

            if (Resource.ContainsKey(name))
            {
                var translationFile = Resource[name];

                switch (Path.GetExtension(translationFile))
                {
                case ".png":
                    resource = new TextureResource(1, 1, TextureFormat.ARGB32, null, File.ReadAllBytes(translationFile));
                    return(true);

                case ".tex":
                    resource = TexUntil.LoadTexture(e.Name, File.ReadAllBytes(translationFile));
                    if (resource == null)
                    {
                        return(false);
                    }
                    return(true);

                default:
                    resource = null;
                    return(false);
                }
            }
            resource = null;
            return(false);
        }
Exemplo n.º 2
0
 private void OnArcTextureLoaded(object sender, TextureTranslationEventArgs e)
 {
     if (Logger.CanDump(DumpType.Textures))
     {
         Logger.DumpTexture(DumpType.Textures, e, false, CurrentLevel);
     }
 }
Exemplo n.º 3
0
        private void OnSpriteTextureTranslation(object sender, TextureTranslationEventArgs e)
        {
            if (string.IsNullOrEmpty(e.Name))
            {
                Logger.Log(LogLevel.Debug, $"Sprite({(sender as Image)?.name}) skipped due to name is empty.");
                return;
            }

            if (Resource.TranslateSprite(CurrentScene, e, out var resource))
            {
                e.Translation = resource;
                Logger.Log(LogLevel.Debug, $"Sprite '{e.Name}' translated.");
            }
            else
            {
                try
                {
                    if (Dumper.DumpSprite(CurrentScene, e))
                    {
                        Logger.Log(LogLevel.Debug, $"Sprite '{e.Name}' dumped.");
                    }
                }
                catch (Exception ex)
                {
                    Logger.Log(LogLevel.Error, ex);
                }
            }
        }
        private void OnTextureLoad(object sender, TextureTranslationEventArgs e)
        {
            string textureName = e.Name;

            if (lastFoundTexture != textureName)
            {
                lastFoundTexture = textureName;
                Logger.WriteLine(ResourceType.Textures, LogLevel.Minor, $"FindTexture::{textureName}");
            }

            var replacement = Memory.GetTexture(textureName);
            TextureResource resource = null;

            switch (replacement.TextureType)
            {
                case TextureType.PNG:
                    resource = new TextureResource(1, 1, TextureFormat.ARGB32, File.ReadAllBytes(replacement.FilePath));
                    break;
                case TextureType.TEX:
                    resource = TexUtils.ReadTexture(File.ReadAllBytes(replacement.FilePath), textureName);
                    break;
                case TextureType.None:
                default:
                    if (e.OriginalTexture != null)
                        Logger.DumpTexture(DumpType.TexSprites, e, true, CurrentLevel);
                    return;
            }

            if (lastLoadedTexture != textureName)
                Logger.WriteLine(ResourceType.Textures, $"Texture::{textureName}");
            lastLoadedTexture = textureName;

            e.Data = resource;
        }
Exemplo n.º 5
0
        public bool DumpSprite(Scene?scene, TextureTranslationEventArgs e)
        {
            if (!_config.IsDumpingSprite)
            {
                return(false);
            }

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

            var key = $"Sprite:{e.Name}";

            if (TextureDumpCache.Contains($"Sprite:{e.Name}"))
            {
                return(false);
            }

            if (e.Name.StartsWith("!"))
            {
                return(false);
            }

            var texture = e.OriginalTexture ?? e.Translation.CreateTexture2D();

            DumpTexture2D(texture, Path.Combine(SpriteDumpDir, texture.name + ".png"));
            if (!_config.ForceDumping)
            {
                TextureDumpCache.Add(key);
            }
            return(true);
        }
Exemplo n.º 6
0
 private void OnArcTextureTranslation(object sender, TextureTranslationEventArgs e)
 {
     if (Resource.TranslateTexture(CurrentScene, e, out var resource))
     {
         e.Translation = resource;
         Logger.Log(LogLevel.Debug, $"Texture '{e.Name}' translated.");
     }
 }
Exemplo n.º 7
0
        public static void DumpTexture(DumpType dumpType, TextureTranslationEventArgs args, bool duplicate, int level)
        {
            Texture2D texture = args.OriginalTexture ?? args.Data.CreateTexture2D();

            if (!CanDump(dumpType) || texture == null || !InitDump())
            {
                return;
            }
            if (!dumpAllLevels && !AllowedDumpLevels.Contains(level))
            {
                return;
            }

            if (cachedDumps.Contains(args.Name))
            {
                return;
            }
            cachedDumps.Add(args.Name);

            if (args.Name.StartsWith("!"))
            {
                return;
            }

            string fileName = string.Format(TextureNameTemplate, args.Name, args.CompoundHash, args.Meta, level);

            string path = Path.Combine(GetDumpFolderName(dumpType), $"{fileName}.png");

            if (File.Exists(path))
            {
                return;
            }

            Texture2D tex = duplicate || texture.format == TextureFormat.DXT1 || texture.format == TextureFormat.DXT5
                                ? Duplicate(texture)
                                : texture;

            WriteLine($"Dumping {fileName}.png");
            using (FileStream fs = File.Create(path))
            {
                byte[] pngData = tex.EncodeToPNG();
                fs.Write(pngData, 0, pngData.Length);
                fs.Flush();
            }
        }
Exemplo n.º 8
0
        private void OnAssetTextureLoad(object sender, TextureTranslationEventArgs e)
        {
            if (lastFoundAsset != e.Name)
            {
                lastFoundAsset = e.Name;
                Logger.WriteLine(ResourceType.Assets, LogLevel.Minor, $"FindAsset::{e.Name} [{e.Meta}::{e.CompoundHash}]");
            }

            string[] namePossibilities =
            {
                e.CompoundHash + "@" + SceneManager.GetActiveScene().buildIndex, e.Name + "@" + SceneManager.GetActiveScene().buildIndex,
                e.CompoundHash,                                                  e.Name
            };

            foreach (string assetName in namePossibilities)
            {
                if (lastFoundAsset != assetName)
                {
                    lastFoundAsset = assetName;
                    Logger.WriteLine(ResourceType.Assets, LogLevel.Minor, $"TryFindAsset::{assetName}");
                }

                string assetPath = Memory.GetAssetPath(assetName);

                if (assetPath == null)
                {
                    continue;
                }
                if (lastLoadedAsset != assetName)
                {
                    Logger.WriteLine(ResourceType.Assets, $"LoadAsset::{assetName}");
                }
                lastLoadedAsset = assetName;

                e.Data = new TextureResource(1, 1, TextureFormat.ARGB32, File.ReadAllBytes(assetPath));
                return;
            }

            Logger.DumpTexture(DumpType.Assets, e, true, CurrentLevel);
        }
Exemplo n.º 9
0
 private void OnUITextureTranslation(object sender, TextureTranslationEventArgs e)
 {
     if (Resource.TranslateUI(CurrentScene, e, out var resource))
     {
         e.Translation = resource;
         Logger.Log(LogLevel.Debug, $"UI '{e.Name}' translated.");
     }
     else
     {
         try
         {
             if (Dumper.DumpUI(CurrentScene, e))
             {
                 Logger.Log(LogLevel.Debug, $"UI '{e.Name}' dumped.");
             }
         }
         catch (Exception ex)
         {
             Logger.Log(LogLevel.Error, ex);
         }
     }
 }
Exemplo n.º 10
0
 public bool TranslateSprite(Scene?scene, TextureTranslationEventArgs e, out TextureResource resource)
 {
     return(SpriteTranslationPool.Translate(scene, e, out resource));
 }