Exemplo n.º 1
0
        /// <summary>
        /// Exports a Motion List Asset
        /// </summary>
        private string ExportMotionList(Package.Entry entry, string name)
        {
            var scale   = float.TryParse(Settings["ModelScale", "1.0"], out var val) ? val : 1.0f;
            var motions = MotionList.Convert(ActivePackage.LoadEntry(entry));

            var path   = name.Split('.')[0];
            var folder = Path.Combine(path, motions.Item1);

            var result = path;

            Directory.CreateDirectory(folder);

            foreach (var motion in motions.Item2)
            {
                var motionPath = Path.Combine(folder, motion.Item1);

                if (Settings["ExportSEAnim", "Yes"] == "Yes")
                {
                    motion.Item2.Scale(scale);
                    motion.Item2.ToSEAnim(motionPath + ".seanim");
                }
            }

            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Exports the Image Asset
        /// </summary>
        private string ExportImage(Package.Entry entry, string name)
        {
            var path   = name.Split('.')[0];
            var result = path + ".png";

            bool requiresExport = false;

            // Determine if we should even bother loading
            foreach (var format in ImageFormats)
            {
                // PNG is default
                if (Settings["Export" + format.ToUpper(), format == "png" ? "Yes" : "No"] == "Yes")
                {
                    // Set our path to the last exported type
                    result = path + "." + format;

                    if (!File.Exists(path + "." + format))
                    {
                        requiresExport = true;
                    }
                }
            }

            if (requiresExport)
            {
                using (var image = Texture.Convert(ActivePackage.LoadEntry(entry)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(path));

                    foreach (var format in ImageFormats)
                    {
                        if (Settings["Export" + format.ToUpper(), format == "png" ? "Yes" : "No"] == "Yes" && !File.Exists(path + "." + format))
                        {
                            // Everything besides DDS we need to decompress & convert
                            if (format != "dds")
                            {
                                image.ConvertImage(ScratchImage.DXGIFormat.R8G8B8A8UNORM);
                            }

                            image.Save(path + "." + format);
                        }
                    }
                }
            }

            return(result);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Exports a Model Asset
        /// </summary>
        private void ExportModel(Package.Entry entry, string name)
        {
            var scale  = float.TryParse(Settings["ModelScale", "1.0"], out var val) ? val : 1.0f;
            var models = Mesh.Convert(ActivePackage.LoadEntry(entry));

            var path = name.Split('.')[0];

            var materials = new Dictionary <string, Model.Material>();

            // Attempt to load the materials file
            foreach (var prefix in FileSuffixes)
            {
                if (ActivePackage.Entries.TryGetValue(MurMur3.Calculate(Encoding.Unicode.GetBytes(path.Replace("exported_files\\", "") + prefix)), out var result))
                {
                    try
                    {
                        materials = MaterialDefs.Convert(ActivePackage.LoadEntry(result), prefix.Split('.').Last());
                        break;
                    }
                    catch
                    {
                        continue;
                    }
                }
            }


            var folder = Path.GetDirectoryName(path);

            Directory.CreateDirectory(folder);

            for (int mdl = 0; mdl < models.Count; mdl++)
            {
                for (int lod = 0; lod < models[mdl].Count; lod++)
                {
                    // Must generate for formats that need it
                    models[mdl][lod].GenerateGlobalBoneData();
                    models[mdl][lod].Scale(scale);

                    foreach (var material in models[mdl][lod].Materials)
                    {
                        if (materials.TryGetValue(material.Name, out var fileMtl))
                        {
                            material.Images   = fileMtl.Images;
                            material.Settings = fileMtl.Settings;

                            // Determine image keys as they change depending on shader/type
                            if (material.Images.ContainsKey("BaseMetalMap"))
                            {
                                material.DiffuseMapName = "BaseMetalMap";
                            }
                            else if (material.Images.ContainsKey("BaseMap"))
                            {
                                material.DiffuseMapName = "BaseMap";
                            }

                            if (material.Images.ContainsKey("NormalRoughnessMap"))
                            {
                                material.NormalMapName = "NormalRoughnessMap";
                            }
                            else if (material.Images.ContainsKey("NormalMap"))
                            {
                                material.NormalMapName = "NormalMap";
                            }
                        }
                    }

                    foreach (var material in models[mdl][lod].Materials)
                    {
                        if (Settings["ExportMaterialInfo", "Yes"] == "Yes")
                        {
                            ExportMaterialInfo(material, Path.Combine(folder, material.Name + ".txt"));
                        }

                        if (Settings["ExportImagesWithModel", "Yes"] == "Yes")
                        {
                            ExportMaterialImages(material, folder);
                        }
                    }

                    var result = Path.Combine(folder, string.Format("{0}_model{1}_lod{2}", Path.GetFileNameWithoutExtension(path), mdl, lod));

                    foreach (var format in ModelFormats)
                    {
                        // PNG is default
                        if (Settings["Export" + format.ToUpper(), format == "semodel" ? "Yes" : "No"] == "Yes")
                        {
                            models[mdl][lod].Save(result + "." + format);
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
        private void ExportUnknownFile(Package.Entry entry, string name)
        {
            Directory.CreateDirectory(Path.GetDirectoryName(name));

            File.WriteAllBytes(name, ActivePackage.LoadEntry(entry));
        }
Exemplo n.º 5
0
 /// <summary>
 /// Creates a new Asset for UI
 /// </summary>
 public Asset(string name, string type, Package.Entry entry)
 {
     Name         = name;
     Type         = type;
     PackageEntry = entry;
 }