/// <summary> /// Подгружает .txd-архив - источник текстур их массива байт. /// </summary> public void AddTexturesArchive(FileProxy fileProxy) { loadedArchives.Add(Path.GetFileNameWithoutExtension(fileProxy.Name).ToLower()); var archive = new TXDArchive(fileProxy); Dictionary<string, Texture2D> archiveItems; try { archiveItems = archive.Load(); } catch (Exception er) { Log.Instance.Print(String.Format("Failed to load TXD archive {0} ({1}). {2}", fileProxy.FilePath, fileProxy.Name, er.Message), MessageType.Error); return; } foreach (var item in archiveItems) textures[item.Key] = item.Value; }
/// <summary> /// Подгружает .txd-архив - источник текстур их массива байт. /// </summary> public void AddTexturesArchive(FileProxy fileProxy) { loadedArchives.Add(Path.GetFileNameWithoutExtension(fileProxy.Name).ToLower()); var archive = new TXDArchive(fileProxy); Dictionary <string, Texture2D> archiveItems; try { archiveItems = archive.Load(); } catch (Exception er) { Log.Instance.Print(String.Format("Failed to load TXD archive {0} ({1}). {2}", fileProxy.FilePath, fileProxy.Name, er.Message), MessageType.Error); return; } foreach (var item in archiveItems) { textures[item.Key] = item.Value; } }
/// <summary> /// Распаковывает TXD архив. /// В случае ошибки НЕ кидает дальше исключение, выводит ErrorMessage в лог. /// </summary> /// <param name="txdPath">TXD архив, который нужно распаковать</param> /// <param name="outputPathPrefix">Папка, в которую проихводится распаковка. Должна существовать!</param> public static void UnpackTxd(string txdPath, string outputPathPrefix) { try { if (!outputPathPrefix.EndsWith(Path.DirectorySeparatorChar.ToString())) { outputPathPrefix += Path.DirectorySeparatorChar; } var archive = new TXDArchive(txdPath); var textures = archive.Load(); foreach (var entry in textures) { if (entry.Key.Contains('/')) // имя текстуры в TXD может иметь вид <имя TXD-файла>/<имя текстуры>.gtatexture { string dir = entry.Key.Substring(0, entry.Key.LastIndexOf('/')); if (!Directory.Exists(outputPathPrefix + dir)) { Directory.CreateDirectory(outputPathPrefix + dir); } } string path = outputPathPrefix + entry.Key; while (File.Exists(path)) { int sep = path.LastIndexOf('.'); path = path.Substring(0, sep) + "_" + path.Substring(sep); } entry.Value.Save(path, ImageFileFormat.Png); } } catch (Exception er) { Log.Instance.Print("Failed to unpack TXD. Exception occured: " + er.Message, MessageType.Error); } }
/// <summary> /// Распаковывает TXD архив. /// В случае ошибки НЕ кидает дальше исключение, выводит ErrorMessage в лог. /// </summary> /// <param name="txdPath">TXD архив, который нужно распаковать</param> /// <param name="outputPathPrefix">Папка, в которую проихводится распаковка. Должна существовать!</param> public static void UnpackTxd(string txdPath, string outputPathPrefix) { try { if (!outputPathPrefix.EndsWith(Path.DirectorySeparatorChar.ToString())) outputPathPrefix += Path.DirectorySeparatorChar; var archive = new TXDArchive(txdPath); var textures = archive.Load(); foreach (var entry in textures) { if (entry.Key.Contains('/')) // имя текстуры в TXD может иметь вид <имя TXD-файла>/<имя текстуры>.gtatexture { string dir = entry.Key.Substring(0, entry.Key.LastIndexOf('/')); if (!Directory.Exists(outputPathPrefix + dir)) Directory.CreateDirectory(outputPathPrefix + dir); } string path = outputPathPrefix + entry.Key; while (File.Exists(path)) { int sep = path.LastIndexOf('.'); path = path.Substring(0, sep) + "_" + path.Substring(sep); } entry.Value.Save(path, ImageFileFormat.Png); } } catch (Exception er) { Log.Instance.Print("Failed to unpack TXD. Exception occured: " + er.Message, MessageType.Error); } }