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); }
private void OnArcTextureLoaded(object sender, TextureTranslationEventArgs e) { if (Logger.CanDump(DumpType.Textures)) { Logger.DumpTexture(DumpType.Textures, e, false, CurrentLevel); } }
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; }
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); }
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."); } }
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(); } }
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); }
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); } } }
public bool TranslateSprite(Scene?scene, TextureTranslationEventArgs e, out TextureResource resource) { return(SpriteTranslationPool.Translate(scene, e, out resource)); }