/// <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;
        }
Ejemplo n.º 2
0
        /// <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);
             }
        }