Пример #1
0
        public MainForm()
        {
            InitializeComponent();


            CreateMenus();
            if (Properties.Settings.Default.CarmaDirectory != "" && Directory.Exists(Path.Combine(Properties.Settings.Default.CarmaDirectory, "ZAD_VT")))
            {
                CarmaFolder = Properties.Settings.Default.CarmaDirectory;
            }
            else
            {
                InitialFindFolder();
            }
            ZAD modelsZAD = ZAD.Load(Path.Combine(Environment.CurrentDirectory, "models.zad"));
            //modelsZAD.AddEntryFromBuffer(File.ReadAllBytes("vteffect.fx"), "Data_Core/Content/Models/an_effect.fx");
            var entryToRemove = modelsZAD.Contents[5];

            modelsZAD.ReplaceEntryFromBuffer(entryToRemove, File.ReadAllBytes("vteffect.fx"));
            modelsZAD = ZAD.Load(Path.Combine(Environment.CurrentDirectory, "models.zad")); //*/
            foreach (var entry in modelsZAD.Contents)
            {
                Logger.LogToFile(Logger.LogLevel.Info, "{0}: {1}", modelsZAD.Contents.IndexOf(entry), entry.Name);
            }
            PageType.SelectedIndex   = 0;
            PageNumSelect.DataSource = pageNumSource;
            TileListBox.DataSource   = tileListSource;
            GetVTList();
        }
Пример #2
0
 public TDX LoadTDXFromZADEntry(ZADEntry entry, ZAD zadFile)
 {
     using (MemoryStream stream = new MemoryStream(zadFile.ExtractToBuffer(entry)))
     {
         TDX output = TDX.Load(stream, entry.Name);
         return(output);
     }
 }
Пример #3
0
        public VirtualTextureDef LoadVT(string inputFolder)
        {
            var zadFiles = Directory.EnumerateFiles(inputFolder, "*.zad");
            //bool firstZad = true;
            ZAD EnvironmentsZAD = ZAD.Load(Path.Combine(inputFolder, "Environments.zad"));
            TDX DiffuseTDX      = null;
            TDX SpecularTDX     = null;
            TDX NormalTDX       = null;

            //Console.WriteLine("Loading dictionary TDX files...");
            foreach (ZADEntry entry in EnvironmentsZAD.Contents)
            {
                //Console.WriteLine(entry.Name);
                switch (Path.GetFileName(entry.Name).ToLower())
                {
                case "diffuse_d.tdx":
                    DiffuseTDX = LoadTDXFromZADEntry(entry, EnvironmentsZAD);
                    break;

                case "specular_s.tdx":
                    SpecularTDX = LoadTDXFromZADEntry(entry, EnvironmentsZAD);
                    break;

                case "normal_n.tdx":
                    NormalTDX = LoadTDXFromZADEntry(entry, EnvironmentsZAD);
                    break;
                }
            }

            VirtualTextureDef vtDef = new VirtualTextureDef
            {
                DiffuseMap   = (VTMap)DiffuseTDX.ExtraData,
                SpecularMap  = (VTMap)SpecularTDX.ExtraData,
                NormalMap    = (VTMap)NormalTDX.ExtraData,
                DiffusePages = new List <VTPage>()
            };

            for (int i = 0; i < vtDef.DiffuseMap.PageCount + 1; i++)
            {
                int pageWidth  = vtDef.DiffuseMap.GetWidth(i);
                int pageHeight = vtDef.DiffuseMap.GetHeight(i);
                vtDef.DiffusePages.Add(new VTPage(pageWidth, pageHeight, i, vtDef.DiffuseMap));
                //Console.WriteLine("\tDiffuse Page {0} created", i);
            }

            vtDef.SpecularPages = new List <VTPage>();

            for (int i = 0; i < vtDef.SpecularMap.PageCount + 1; i++)
            {
                int pageWidth  = vtDef.SpecularMap.GetWidth(i);
                int pageHeight = vtDef.SpecularMap.GetHeight(i);
                vtDef.SpecularPages.Add(new VTPage(pageWidth, pageHeight, i, vtDef.SpecularMap));
                //Console.WriteLine("\tSpecular Page {0} created", i);
            }

            vtDef.NormalPages = new List <VTPage>();

            for (int i = 0; i < vtDef.NormalMap.PageCount + 1; i++)
            {
                int pageWidth  = vtDef.NormalMap.GetWidth(i);
                int pageHeight = vtDef.NormalMap.GetHeight(i);
                vtDef.NormalPages.Add(new VTPage(pageWidth, pageHeight, i, vtDef.NormalMap));
                //Console.WriteLine("\tNormal Page {0} created", i);
            }

            foreach (string zadFile in zadFiles)
            {
                if (Path.GetFileNameWithoutExtension(zadFile).ToLower() == "environments")
                {
                    continue;
                }
                //Console.Write("Loading ZAD: " + zadFile);

                /*if(Path.GetFileNameWithoutExtension(zadFile).ToLower() == "pages_5")
                 * {
                 *  Console.WriteLine("This is page 5");
                 * }*/
                ZAD currentZAD = ZAD.Load(zadFile);

                foreach (ZADEntry entry in currentZAD.Contents)
                {
                    if (entry.CompressionMethod != CompressionMethods.LZ4)
                    {
                        //Console.WriteLine("This entry isnt compressed using lz4! wtf? {0}", entry.Name);
                    }

                    string tdxName  = Path.GetFileNameWithoutExtension(entry.Name).ToLower();
                    string tileName = tdxName.Split(new Char[] { '_' })[0].ToUpper();

                    /*if (tileName == "E4C7607E")
                     * {
                     *  Console.WriteLine("This is E4C7607E");
                     * }*/
                    if (vtDef.DiffuseMap.TilesByName.ContainsKey(tileName))
                    {
                        VTMapTileTDX tileTDX = vtDef.DiffuseMap.TilesByName[tileName];
                        //tileTDX.Texture = LoadTDXFromZADEntry(entry, currentZAD);
                        tileTDX.ZADFile          = zadFile;
                        tileTDX.ZADEntryLocation = entry.Name;
                        for (int i = 0; i < tileTDX.Coords.Count; i++)
                        {
                            VTMapTile tile = tileTDX.Coords[i];
                            tile.TDXTile = tileTDX;
                            //if (tile.Row < diffusePages[tile.Page].maxTilesToStitch && tile.Column < diffusePages[tile.Page].maxTilesToStitch)
                            {
                                vtDef.DiffusePages[tile.Page].Tiles[tile.Row][tile.Column] = tileTDX;// LoadTDXFromZADEntry(entry, currentZAD);
                            }
                        }
                    }

                    if (vtDef.SpecularMap.TilesByName.ContainsKey(tileName))
                    {
                        VTMapTileTDX tileTDX = vtDef.SpecularMap.TilesByName[tileName];
                        //tileTDX.Texture = LoadTDXFromZADEntry(entry, currentZAD);
                        tileTDX.ZADFile          = zadFile;
                        tileTDX.ZADEntryLocation = entry.Name;

                        for (int i = 0; i < tileTDX.Coords.Count; i++)
                        {
                            VTMapTile tile = tileTDX.Coords[i];
                            tile.TDXTile = tileTDX;

                            if (tile.Row < vtDef.SpecularPages[tile.Page].maxTilesToStitch && tile.Column < vtDef.SpecularPages[tile.Page].maxTilesToStitch)
                            {
                                vtDef.SpecularPages[tile.Page].Tiles[tile.Row][tile.Column] = tileTDX;// LoadTDXFromZADEntry(entry, currentZAD);
                            }
                        }
                    }

                    if (vtDef.NormalMap.TilesByName.ContainsKey(tileName))
                    {
                        //currentZAD.Extract(entry, Path.Combine(outputFolder, "Normal", "TDX")+"/");
                        VTMapTileTDX tileTDX = vtDef.NormalMap.TilesByName[tileName];
                        //tileTDX.Texture = LoadTDXFromZADEntry(entry, currentZAD);
                        tileTDX.ZADFile          = zadFile;
                        tileTDX.ZADEntryLocation = entry.Name;
                        for (int i = 0; i < tileTDX.Coords.Count; i++)
                        {
                            VTMapTile tile = tileTDX.Coords[i];
                            tile.TDXTile = tileTDX;
                            if (tile.Row < vtDef.NormalPages[tile.Page].maxTilesToStitch && tile.Column < vtDef.NormalPages[tile.Page].maxTilesToStitch)
                            {
                                vtDef.NormalPages[tile.Page].Tiles[tile.Row][tile.Column] = tileTDX;// LoadTDXFromZADEntry(entry, currentZAD);
                            }
                        }
                    }
                }

                continue;

                foreach (ZADEntry entry in currentZAD.Contents)
                {
                    if (entry.CompressionMethod != CompressionMethods.LZ4)
                    {
                        //Console.WriteLine("This entry isnt compressed using lz4! wtf? {0}", entry.Name);
                    }

                    string tdxName  = Path.GetFileNameWithoutExtension(entry.Name).ToLower();
                    string tileName = tdxName.Split(new Char[] { '_' })[0].ToUpper();

                    /*if (tileName == "E4C7607E")
                     * {
                     *  Console.WriteLine("This is E4C7607E");
                     * }*/
                    if (vtDef.DiffuseMap.TilesByName.ContainsKey(tileName))
                    {
                        VTMapTileTDX tileTDX = vtDef.DiffuseMap.TilesByName[tileName];
                        //tileTDX.Texture = LoadTDXFromZADEntry(entry, currentZAD);
                        tileTDX.ZADFile          = zadFile;
                        tileTDX.ZADEntryLocation = entry.Name;
                        for (int i = 0; i < tileTDX.Coords.Count; i++)
                        {
                            VTMapTile tile = tileTDX.Coords[i];
                            tile.TDXTile = tileTDX;
                            //if (tile.Row < diffusePages[tile.Page].maxTilesToStitch && tile.Column < diffusePages[tile.Page].maxTilesToStitch)
                            {
                                vtDef.DiffusePages[tile.Page].Tiles[tile.Row][tile.Column] =
                                    tileTDX; // LoadTDXFromZADEntry(entry, currentZAD);
                            }
                        }
                    }

                    if (vtDef.SpecularMap.TilesByName.ContainsKey(tileName))
                    {
                        VTMapTileTDX tileTDX = vtDef.SpecularMap.TilesByName[tileName];
                        //tileTDX.Texture = LoadTDXFromZADEntry(entry, currentZAD);
                        tileTDX.ZADFile          = zadFile;
                        tileTDX.ZADEntryLocation = entry.Name;
                        for (int i = 0; i < tileTDX.Coords.Count; i++)
                        {
                            VTMapTile tile = tileTDX.Coords[i];
                            tile.TDXTile = tileTDX;
                            if (tile.Row < vtDef.SpecularPages[tile.Page].maxTilesToStitch &&
                                tile.Column < vtDef.SpecularPages[tile.Page].maxTilesToStitch)
                            {
                                vtDef.SpecularPages[tile.Page].Tiles[tile.Row][tile.Column] =
                                    tileTDX; // LoadTDXFromZADEntry(entry, currentZAD);
                            }
                        }
                    }

                    if (vtDef.NormalMap.TilesByName.ContainsKey(tileName))
                    {
                        //currentZAD.Extract(entry, Path.Combine(outputFolder, "Normal", "TDX")+"/");
                        VTMapTileTDX tileTDX = vtDef.NormalMap.TilesByName[tileName];
                        //tileTDX.Texture = LoadTDXFromZADEntry(entry, currentZAD);
                        tileTDX.ZADFile          = zadFile;
                        tileTDX.ZADEntryLocation = entry.Name;
                        for (int i = 0; i < tileTDX.Coords.Count; i++)
                        {
                            VTMapTile tile = tileTDX.Coords[i];
                            tile.TDXTile = tileTDX;
                            if (tile.Row < vtDef.NormalPages[tile.Page].maxTilesToStitch &&
                                tile.Column < vtDef.NormalPages[tile.Page].maxTilesToStitch)
                            {
                                vtDef.NormalPages[tile.Page].Tiles[tile.Row][tile.Column] =
                                    tileTDX; // LoadTDXFromZADEntry(entry, currentZAD);
                            }
                        }
                    }
                }
            }

            return(vtDef);
        }
Пример #4
0
 TDX LoadTDXFromZADEntry(ZADEntry entry, ZAD zadFile)
 {
     using (MemoryStream stream = new MemoryStream(zadFile.ExtractToBuffer(entry)))
     {
         TDX output = TDX.LoadFromMemoryStream(stream, entry.Name);
         return output;
     }
 }
Пример #5
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            SceneManager.Current.OnProgress += scene_OnProgress;

            btnOK.Visible     = false;
            btnCancel.Visible = false;

            gbProgress.Visible = true;
            pbProgress.Visible = true;

            Application.DoEvents();
            timer.Start();

            if (!Directory.Exists(txtPath.Text))
            {
                Directory.CreateDirectory(txtPath.Text);
            }

            flump.Settings["level"]             = level;
            flump.Settings["level.pretty.name"] = txtPrettyLevelName.Text;
            flump.Settings["level.race.name"]   = txtRaceName.Text;

            lblInfo               = lblInfoMeshes;
            lblProgress           = lblProgressMeshes;
            lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
            progressMax           = 30;

            (new CNTExporter()).Export(SceneManager.Current.Models[0], Path.Combine(txtPath.Text, "level.cnt"));
            (new MDLExporter()).Export(SceneManager.Current.Models[0], txtPath.Text);

            lblProgress.Text      = "✓";
            lblProgress.ForeColor = Color.Green;
            lblInfo.Text          = "Meshes";
            pbProgress.Value      = progressMax;

            Application.DoEvents();

            lblInfo               = lblInfoTextures;
            lblProgress           = lblProgressTextures;
            lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
            progressMax           = 50;

            List <string> textures = new List <string>();

            foreach (Material material in SceneManager.Current.Materials)
            {
                string fileName = Path.Combine(txtPath.Text, "NON_VT", material.Texture.Name);

                if (!textures.Contains(material.Texture.Name))
                {
                    if (!File.Exists($"{fileName}.tdx"))
                    {
                        TDXExporter tx = new TDXExporter();
                        tx.ExportSettings.AddSetting("Format", ToxicRagers.Helpers.D3DFormat.DXT5);
                        tx.Export(material.Texture, Path.Combine(txtPath.Text, "NON_VT"));
                    }

                    textures.Add(material.Texture.Name);
                }
            }

            lblProgress.Text      = "✓";
            lblProgress.ForeColor = Color.Green;
            lblInfo.Text          = "Textures";
            pbProgress.Value      = progressMax;

            Application.DoEvents();

            lblInfo               = lblInfoMaterials;
            lblProgress           = lblProgressMaterials;
            lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
            progressMax           = 60;

            foreach (Material material in SceneManager.Current.Materials)
            {
                string fileName = Path.Combine(txtPath.Text, $"{material.Name}.mt2");

                if (!File.Exists(fileName))
                {
                    simple_base simple = new simple_base
                    {
                        DiffuseColour = material.Texture.Name,
                        Walkable      = Troolean.True
                    };

                    simple.Save(fileName);
                }
            }

            lblProgress.Text      = "✓";
            lblProgress.ForeColor = Color.Green;
            lblInfo.Text          = "Materials";
            pbProgress.Value      = progressMax;

            Application.DoEvents();

            lblInfo               = lblInfoPaperwork;
            lblProgress           = lblProgressPaperwork;
            lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
            progressMax           = 75;

            using (StreamWriter w = File.CreateText(Path.Combine(txtPath.Text, "audio.lol")))
            {
                w.WriteLine("audio:load(\"audio.sounds_peds_impact\")");
                w.WriteLine("audio:load(\"audio.sounds_impacts\")");
                w.WriteLine("audio:load(\"audio.sounds_misc\")");
                w.WriteLine("audio:load(\"audio.sounds_announcer\")");
                w.WriteLine("audio:load(\"audio.sounds_powerups\")");
                w.WriteLine("audio:load(\"audio.sounds_vehicles\")");
            }

            using (StreamWriter w = File.CreateText(Path.Combine(txtPath.Text, "environment.lol")))
            {
                w.WriteLine("module((...), environment_config, package.seeall)");
                w.WriteLine($@"txt[""fe_environment_{txtLevel.Text.ToLower()}""] = ""{txtPrettyLevelName.Text}""");
                w.WriteLine($"name = txt.fe_environment_{txtLevel.Text.ToLower()}");
            }

            using (StreamWriter w = File.CreateText(Path.Combine(txtPath.Text, "environment.txt")))
            {
                w.WriteLine("[LUMP]");
                w.WriteLine("environment");
            }

            using (StreamWriter w = File.CreateText(Path.Combine(txtPath.Text, "level.txt")))
            {
                w.WriteLine("[LUMP]");
                w.WriteLine("level");
                w.WriteLine();
                w.WriteLine("[ENVIRONMENT]");
                w.WriteLine(txtLevel.Text.ToLower().Replace(" ", "_"));
                w.WriteLine();
                w.WriteLine("[RACE_NAMES]");
                w.WriteLine(txtRaceName.Text);
                w.WriteLine();
                w.WriteLine("[RACE_WRITEUP]");
                w.WriteLine("Pretty sure this doesn't show up in the UI anymore");
                w.WriteLine();
                w.WriteLine("[RACE_IMAGES]");
                w.WriteLine($"race\\{level}_01");
                w.WriteLine();
                w.WriteLine("[RACE_BACKGROUNDS]");
                w.WriteLine($"race\\{level}_01");
                w.WriteLine();
                w.WriteLine("[VERSION]");
                w.WriteLine("2.500000");
                w.WriteLine();
                w.WriteLine("[RACE_LAYERS]");
                w.WriteLine("race01");
                w.WriteLine();
                w.WriteLine("[LUA_SCRIPTS]");
                w.WriteLine("setup.lua");
                w.WriteLine();
            }

            if (SceneManager.Current.Entities.Count > 0)
            {
                using (StreamWriter wacc = File.CreateText(Path.Combine(txtPath.Text, "level.lol")))
                    using (StreamWriter wpup = File.CreateText(Path.Combine(txtPath.Text, "powerups.lol")))
                    {
                        Dictionary <string, StreamWriter> streams = new Dictionary <string, StreamWriter>
                        {
                            { "StartingGrid", wacc },
                            { "Accessory", wacc },
                            { "Powerup", wpup }
                        };

                        wacc.WriteLine("module((...), level_accessory_setup)");
                        wacc.WriteLine("accessories = {");

                        wpup.WriteLine("module((...), level_powerup_setup)");
                        wpup.WriteLine("accessories = {");

                        for (int i = 0; i < SceneManager.Current.Entities.Count; i++)
                        {
                            IEntity entity = SceneManager.Current.Entities[i];

                            if (!streams.ContainsKey(entity.GetType().Name))
                            {
                                continue;
                            }

                            StreamWriter w = streams[entity.GetType().Name];

                            w.WriteLine($"\t{$"entity{i:0000}"} = {{");
                            w.WriteLine($"\t\ttype = \"{entity.Name}\",");
                            if (entity is Core.Entities.Powerup)
                            {
                                w.WriteLine($"\t\tname = \"{entity.Tag}\",");
                            }
                            w.WriteLine("\t\tlayer = \"race01\",");
                            w.WriteLine("\t\ttransform = {");
                            w.WriteLine($"\t\t\t{{{entity.Transform.M11},{entity.Transform.M21},{entity.Transform.M31}}},");
                            w.WriteLine($"\t\t\t{{{entity.Transform.M12},{entity.Transform.M22},{entity.Transform.M32}}},");
                            w.WriteLine($"\t\t\t{{{entity.Transform.M13},{entity.Transform.M23},{entity.Transform.M33}}},");
                            w.WriteLine($"\t\t\t{{{entity.Transform.M41},{entity.Transform.M42},{entity.Transform.M43}}},");
                            w.WriteLine("\t\t},");
                            w.WriteLine("\t\tcolour = { 255, 255, 255 }");
                            w.Write("\t}");
                            w.WriteLine((i + 1 < SceneManager.Current.Entities.Count ? "," : ""));
                        }

                        wacc.WriteLine("}");
                        wpup.WriteLine("}");
                    }
            }

            using (StreamWriter w = File.CreateText(Path.Combine(txtPath.Text, "minimap_definition.lol")))
            {
                w.WriteLine("module((...), minimap_definition)");
                w.WriteLine("bounds = {");
                w.WriteLine("  min_bound = {-640, -270},");
                w.WriteLine("  max_bound = {640, 450}");
                w.WriteLine("}");
                w.WriteLine("minimap_area = 200");
                w.WriteLine("max_minimap_area = 400");
                w.WriteLine("speed_for_max_minimap_area = 60");
            }

            using (StreamWriter w = File.CreateText(Path.Combine(txtPath.Text, "setup.lol")))
            {
                w.WriteLine("view:loadSky(\"sky\")");
                w.WriteLine("view:loadLight(\"sun\")");
                w.WriteLine($"view:loadPostFX(\"post_process.{txtLevel.Text.ToLower().Replace(" ", "_")}\")");
                //w.WriteLine("view:loadShProbes(\"Reprocessor\")");
                w.WriteLine(@"
                    if view.setBigShadowMapAutoFitEnabled ~= nil then
                      view:setBigShadowMapAutoFitEnabled(false)
                      view:setBigShadowMapResolution(2048, 2048)
                      view:setUseBigShadowMapBeyondShadowEnd(true)
                    end
                    view.VehicleAmbientShadowStrength = {
                      1,
                      1,
                      1
                    }
                    view.DynamicCubeMapClippingPlanes = {0.1, 120}
                    view.ClippingPlanes = {0.3, 700}
                    view.Ambient = {
                      28,
                      22,
                      16
                    }
                    view.SphericalHarmonicsScale = 0.25
                    view.FogEnabled = true
                    view.FogColour = {
                      120,
                      130,
                      150
                    }
                    view.FogStart = 0
                    view.FogEnd = 900
                    view.FogAlphaStart = 0
                    view.FogAlphaEnd = 0
                    view.UnderwaterAmbient = {
                      51,
                      102,
                      204
                    }
                    view.UnderwaterFogEnabled = true
                    view.UnderwaterFogColour = {
                      32,
                      96,
                      128
                    }
                    view.UnderwaterFogStart = 0
                    view.UnderwaterFogEnd = 120
                    view.UnderwaterFogAlphaStart = 0
                    view.UnderwaterFogAlphaEnd = 0
                    view.AOSampleOffset = 0.5
                    view.AOBlur = true
                    view.AOBilateralSensitivity = 8
                    view.AOBias = 0.01
                    view.AOScale = 0.5
                    view.AOPowerExponent = 6
                    view.ShadowBias = 0.0001
                    view.ShadowSlopeBias = 2
                    view.NumShadowMaps = 4
                    view.ShadowMapPoolStats = ""1:1024:1024:8""
                    view.ShadowSplitResolution = { 1024, 1024}
                    view.ShadowSplitManualUse = false
                    view.ShadowSplitDistribution = 0.8
                    view.ShadowEnd = 160
                    view.SunPos = {
                      0,
                      3536,
                      -3536
                    }
                    track:setSubstanceTyreParticles(""ROAD_TARMAC"", ""Effect"", ""w_kick_dusty_dirt_track"")
                    track:setSubstanceTyreParticles(""RACE_TARMAC"", ""Effect"", ""w_kick_dusty_dirt_track"")
                    track:setSplashColour("""", 255, 255, 255, 255)
                ");
            }

            if (!File.Exists(Path.Combine(txtPath.Text, "sun.light")))
            {
                LIGHT sun = new LIGHT
                {
                    Type              = LIGHT.LightType.Directional,
                    Range             = 100,
                    Inner             = 22.5f,
                    Outer             = 45,
                    R                 = 234 / 255.0f,
                    G                 = 202 / 255.0f,
                    B                 = 149 / 255.0f,
                    Intensity         = 1.0f,
                    Flags             = LIGHT.LightFlags.CastShadow | LIGHT.LightFlags.Unknown8,
                    SplitCount        = 4,
                    SplitDistribution = 0.8f,
                    ShadowResolutionX = 1024,
                    ShadowResolutionY = 1024,
                    ShadowIntensity   = 1,
                    GoboScaleX        = 1,
                    GoboScaleY        = 1,
                    ShadowBias        = 0.00001f,
                    LightNearClip     = 1,
                    ShadowDistance    = 160,
                    UseEdgeColour     = true,
                    EdgeColourR       = 121,
                    EdgeColourG       = 121,
                    EdgeColourB       = 121
                };

                sun.Save(Path.Combine(txtPath.Text, "sun.light"));
            }

            if (!File.Exists(Path.Combine(txtPath.Text, "sun.cnt")))
            {
                CNT cnt = new CNT
                {
                    Name      = "sun",
                    Transform = ToxicRagers.Helpers.Matrix3D.CreateRotationZ(-119.520f) *
                                ToxicRagers.Helpers.Matrix3D.CreateRotationY(46.042f) *
                                ToxicRagers.Helpers.Matrix3D.CreateRotationX(112.176f),
                    Section       = CNT.NodeType.LITg,
                    EmbeddedLight = false,
                    LightName     = "sun"
                };

                cnt.Save(Path.Combine(txtPath.Text, "sun.cnt"));
            }

            if (!Directory.Exists(Path.Combine(txtPath.Text, "post_process")))
            {
                Directory.CreateDirectory(Path.Combine(txtPath.Text, "post_process"));
            }

            if (!File.Exists(Path.Combine(txtPath.Text, "post_process", $"{txtLevel.Text.ToLower().Replace(" ", "_")}.lol")))
            {
                PostFX postFX = new PostFX();
                postFX.Save(Path.Combine(txtPath.Text, "post_process", $"{txtLevel.Text.ToLower().Replace(" ", "_")}.lol"));
            }

            lblProgress.Text      = "✓";
            lblProgress.ForeColor = Color.Green;
            lblInfo.Text          = "Paperwork";
            pbProgress.Value      = progressMax;

            Application.DoEvents();

            lblInfo               = lblInfoZAD;
            lblProgress           = lblProgressZAD;
            lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
            progressMax           = 100;

            MINGE minge = new MINGE
            {
                Name = txtPrettyLevelName.Text,
                //Author = Properties.Settings.Default.PersonalAuthor,
                //Website = Properties.Settings.Default.PersonalWebsite,
                Type = MINGE.ModType.Level
            };

            minge.Save(Path.Combine(txtPath.Text, $"{txtLevel.Text}.minge"));

            ZAD zad = ZAD.Create(Path.Combine(txtPath.Text, $"{txtLevel.Text}.zip"));

            zad.AddDirectory(Path.GetDirectoryName(txtPath.Text));

            lblProgress.Text      = "✓";
            lblProgress.ForeColor = Color.Green;
            lblInfo.Text          = "CarMODgeddon ZIP file";
            pbProgress.Value      = progressMax;

            flump.Save(Path.Combine(txtPath.Text, "level.flump"));

            timer.Stop();
            SceneManager.Current.OnProgress -= scene_OnProgress;

            btnClose.Visible = true;

            Application.DoEvents();

            SceneManager.Current.UpdateProgress($"Level '{level}' saved successfully!");
        }
Пример #6
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            SceneManager.Current.OnProgress += scene_OnProgress;

            btnOK.Visible     = false;
            btnCancel.Visible = false;

            gbProgress.Visible = true;
            pbProgress.Visible = true;

            Application.DoEvents();
            timer.Start();

            if (!Directory.Exists(txtPath.Text))
            {
                Directory.CreateDirectory(txtPath.Text);
            }

            flump.Settings["car"]         = car;
            flump.Settings["pretty.name"] = txtPrettyCarName.Text;

            lblInfo               = lblInfoMeshes;
            lblProgress           = lblProgressMeshes;
            lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
            progressMax           = 30;

            new CNTExporter().Export(SceneManager.Current.Models[0], Path.Combine(txtPath.Text, "car.cnt"));
            new MDLExporter().Export(SceneManager.Current.Models[0], txtPath.Text);

            lblProgress.Text      = "✓";
            lblProgress.ForeColor = Color.Green;
            lblInfo.Text          = "Meshes";
            pbProgress.Value      = progressMax;

            Application.DoEvents();

            lblInfo               = lblInfoTextures;
            lblProgress           = lblProgressTextures;
            lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
            progressMax           = 50;

            List <string> textures = new List <string>();

            foreach (Material material in SceneManager.Current.Materials)
            {
                foreach (Texture texture in material.Textures)
                {
                    if (texture.FileName == null)
                    {
                        continue;
                    }

                    string fileName = Path.Combine(txtPath.Text, texture.FileName);

                    if (!textures.Contains(fileName))
                    {
                        if (!File.Exists($"{fileName}.tdx"))
                        {
                            TDXExporter tx = new TDXExporter();
                            tx.ExportSettings.AddSetting("Format", ToxicRagers.Helpers.D3DFormat.DXT5);
                            tx.Export(texture, $"{fileName}.tdx");
                        }

                        textures.Add(texture.FileName);
                    }
                }
            }

            lblProgress.Text      = "✓";
            lblProgress.ForeColor = Color.Green;
            lblInfo.Text          = "Textures";
            pbProgress.Value      = progressMax;

            Application.DoEvents();

            lblInfo               = lblInfoMaterials;
            lblProgress           = lblProgressMaterials;
            lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
            progressMax           = 60;

            foreach (Material material in SceneManager.Current.Materials)
            {
                string fileName = Path.Combine(txtPath.Text, $"{material.Name}.mt2");

                if (material.SupportingDocuments.ContainsKey("Source"))
                {
                    (material.SupportingDocuments["Source"] as MT2).Save(fileName);
                }
                else
                {
                    if (!File.Exists(fileName) && material.Textures.Count > 0)
                    {
                        simple_base simple = new simple_base
                        {
                            DiffuseColour = material.Texture.Name
                        };

                        simple.Save(fileName);
                    }
                }
            }

            lblProgress.Text      = "✓";
            lblProgress.ForeColor = Color.Green;
            lblInfo.Text          = "Materials";
            pbProgress.Value      = progressMax;

            Application.DoEvents();

            lblInfo               = lblInfoPaperwork;
            lblProgress           = lblProgressPaperwork;
            lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
            progressMax           = 75;

            if (!File.Exists(Path.Combine(txtPath.Text, "setup.lol")))
            {
                Setup setup;

                if (!SceneManager.Current.Models[0].SupportingDocuments.ContainsKey("Setup"))
                {
                    setup = new Setup(SetupContext.Vehicle);

                    setup.Settings.SetParameterForMethod("PowerMultiplier", "Value", 1.35f);
                    setup.Settings.SetParameterForMethod("TractionFactor", "Factor", 1.2f);
                    setup.Settings.SetParameterForMethod("FinalDrive", "Factor", 0.8f);
                    setup.Settings.SetParameterForMethod("RearGrip", "Value", 1.68f);
                    setup.Settings.SetParameterForMethod("FrontGrip", "Value", 1.85f);
                    setup.Settings.SetParameterForMethod("CMPosY", "Value", 0.4f);
                    setup.Settings.SetParameterForMethod("FrontRoll", "Value", 0.45f);
                    setup.Settings.SetParameterForMethod("RearRoll", "Value", 0.4f);
                    setup.Settings.SetParameterForMethod("FrontSuspGive", "Value", 0.0667f);
                    setup.Settings.SetParameterForMethod("RearSuspGive", "Value", 0.0667f);
                    setup.Settings.SetParameterForMethod("SteerCentreMultiplier", "Value", 2);
                    setup.Settings.SetParameterForMethod("BrakeForce", "Value", 75);
                    setup.Settings.SetParameterForMethod("HandBrakeStrength", "Value", 20);
                    setup.Settings.SetParameterForMethod("DragCoefficient", "Value", 0.2f);
                    setup.Settings.SetParameterForMethod("Mass", "Value", 1300);
                    setup.Settings.SetParameterForMethod("TorqueCurve", "1", 160);
                    setup.Settings.SetParameterForMethod("TorqueCurve", "2", 232);
                    setup.Settings.SetParameterForMethod("TorqueCurve", "3", 280);
                    setup.Settings.SetParameterForMethod("TorqueCurve", "4", 312);
                    setup.Settings.SetParameterForMethod("TorqueCurve", "5", 280);
                }
                else
                {
                    setup = SceneManager.Current.Models[0].GetSupportingDocument <Setup>("Setup");
                }

                SceneManager.Current.Models[0].SupportingDocuments["Setup"] = setup;

                SetupLOLExporter sx = new SetupLOLExporter();
                sx.ExportSettings.AddSetting("Context", SetupContext.Vehicle);
                sx.Export(SceneManager.Current.Models[0], txtPath.Text);
            }

            if (!File.Exists(Path.Combine(txtPath.Text, "Structure.xml")))
            {
                new StructureXMLExporter().Export(SceneManager.Current.Models[0], txtPath.Text);
            }

            if (!File.Exists(Path.Combine(txtPath.Text, "SystemsDamage.xml")))
            {
                new SystemsDamageXMLExporter().Export(SceneManager.Current.Models[0], txtPath.Text);
            }

            if (!File.Exists(Path.Combine(txtPath.Text, "vehicle_setup.cfg")))
            {
                VehicleSetupCFGExporter cfgx = new VehicleSetupCFGExporter();
                cfgx.ExportSettings.AddSetting("VehicleName", txtCarName.Text);
                cfgx.Export(SceneManager.Current.Models[0], txtPath.Text);
            }

            if (!File.Exists(Path.Combine(txtPath.Text, "vehicle_setup.lol")))
            {
                new VehicleSetupLOLExporter().Export(SceneManager.Current.Models[0], txtPath.Text);
            }

            if (SceneManager.Current.Models[0].SupportingDocuments.ContainsKey("VFXAnchors"))
            {
                SceneManager.Current.Models[0].GetSupportingDocument <VFXAnchors>("VFXAnchors").Save(txtPath.Text);
            }

            if (SceneManager.Current.Models[0].SupportingDocuments.ContainsKey("Collision"))
            {
                new CNTExporter().Export(SceneManager.Current.Models[0].GetSupportingDocument <Model>("Collision"), Path.Combine(txtPath.Text, "collision.cnt"));
                new MDLExporter().Export(SceneManager.Current.Models[0].GetSupportingDocument <Model>("Collision"), txtPath.Text);
            }

            if (SceneManager.Current.Models[0].SupportingDocuments.ContainsKey("OpponentCollision"))
            {
                new CNTExporter().Export(SceneManager.Current.Models[0].GetSupportingDocument <Model>("OpponentCollision"), Path.Combine(txtPath.Text, "opponent_collision.cnt"));
                new MDLExporter().Export(SceneManager.Current.Models[0].GetSupportingDocument <Model>("OpponentCollision"), txtPath.Text);
            }

            lblProgress.Text      = "✓";
            lblProgress.ForeColor = Color.Green;
            lblInfo.Text          = "Paperwork";
            pbProgress.Value      = progressMax;

            Application.DoEvents();

            lblInfo               = lblInfoZAD;
            lblProgress           = lblProgressZAD;
            lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
            progressMax           = 100;

            MINGE minge = new MINGE
            {
                Name = txtPrettyCarName.Text,
                //Author = Properties.Settings.Default.PersonalAuthor,
                //Website = Properties.Settings.Default.PersonalWebsite,
                Type = MINGE.ModType.Vehicle
            };

            minge.Save(Path.Combine(txtPath.Text, $"{txtCarName.Text}.minge"));

            ZAD zad = ZAD.Create(Path.Combine(txtPath.Text, $"{txtCarName.Text}.zip"));

            zad.AddDirectory(Path.GetDirectoryName(txtPath.Text));

            lblProgress.Text      = "✓";
            lblProgress.ForeColor = Color.Green;
            lblInfo.Text          = "CarMODgeddon ZIP file";
            pbProgress.Value      = progressMax;

            flump.Save(Path.Combine(txtPath.Text, "car.flump"));

            timer.Stop();
            SceneManager.Current.OnProgress -= scene_OnProgress;

            btnClose.Visible = true;

            Application.DoEvents();

            SceneManager.Current.UpdateProgress($"Vehicle '{car}' saved successfully!");
        }
Пример #7
0
        void LoadVT(string inputFolder)
        {
            var  zadFiles        = Directory.EnumerateFiles(inputFolder, "*.zad");
            bool firstZad        = true;
            ZAD  EnvironmentsZAD = ZAD.Load(Path.Combine(inputFolder, "Environments.zad"));
            TDX  DiffuseTDX      = null;
            TDX  SpecularTDX     = null;
            TDX  NormalTDX       = null;

            Console.WriteLine("Loading dictionary TDX files...");
            foreach (ZADEntry entry in EnvironmentsZAD.Contents)
            {
                Console.WriteLine(entry.Name);
                switch (Path.GetFileName(entry.Name).ToLower())
                {
                case "diffuse_d.tdx":
                    DiffuseTDX = LoadTDXFromZADEntry(entry, EnvironmentsZAD);
                    break;

                case "specular_s.tdx":
                    SpecularTDX = LoadTDXFromZADEntry(entry, EnvironmentsZAD);
                    break;

                case "normal_n.tdx":
                    NormalTDX = LoadTDXFromZADEntry(entry, EnvironmentsZAD);
                    break;
                }
            }

            DiffuseMap = (crVTMap)DiffuseTDX.ExtraData;

            SpecularMap = (crVTMap)SpecularTDX.ExtraData;

            NormalMap = (crVTMap)NormalTDX.ExtraData;

            textureListSource.DataSource = DiffuseMap.Entries;
            TextureList.DataSource       = textureListSource;
            diffusePages = new List <crVTPage>();
            for (int i = 0; i < DiffuseMap.PageCount + 1; i++)
            {
                int pageWidth  = DiffuseMap.GetWidth(i);
                int pageHeight = DiffuseMap.GetHeight(i);
                diffusePages.Add(new crVTPage(pageWidth, pageHeight, i, DiffuseMap));
                Console.WriteLine("\tDiffuse Page {0} created", i);
            }
            specularPages = new List <crVTPage>();
            for (int i = 0; i < SpecularMap.PageCount + 1; i++)
            {
                int pageWidth  = SpecularMap.GetWidth(i);
                int pageHeight = SpecularMap.GetHeight(i);
                specularPages.Add(new crVTPage(pageWidth, pageHeight, i, SpecularMap));
                Console.WriteLine("\tDiffuse Page {0} created", i);
            }
            normalPages = new List <crVTPage>();
            for (int i = 0; i < NormalMap.PageCount + 1; i++)
            {
                int pageWidth  = NormalMap.GetWidth(i);
                int pageHeight = NormalMap.GetHeight(i);
                normalPages.Add(new crVTPage(pageWidth, pageHeight, i, NormalMap));
                Console.WriteLine("\tDiffuse Page {0} created", i);
            }
            if (PageType.SelectedItem == "Diffuse")
            {
                pageNumSource.DataSource = diffusePages;
            }
            else if (PageType.SelectedItem == "Specular")
            {
                pageNumSource.DataSource = specularPages;
            }
            else if (PageType.SelectedItem == "Normal")
            {
                pageNumSource.DataSource = normalPages;
            }
            PageNumSelect.SelectedIndex = 1;

            foreach (string zadFile in zadFiles)
            {
                if (Path.GetFileNameWithoutExtension(zadFile).ToLower() == "environments")
                {
                    continue;
                }
                //Console.Write("Loading ZAD: " + zadFile);

                /*if(Path.GetFileNameWithoutExtension(zadFile).ToLower() == "pages_5")
                 * {
                 *  Console.WriteLine("This is page 5");
                 * }*/
                ZAD currentZAD = ZAD.Load(zadFile);

                foreach (ZADEntry entry in currentZAD.Contents)
                {
                    if (entry.CompressionMethod != CompressionMethods.LZ4)
                    {
                        //Console.WriteLine("This entry isnt compressed using lz4! wtf? {0}", entry.Name);
                    }
                    string tdxName  = Path.GetFileNameWithoutExtension(entry.Name).ToLower();
                    string tileName = tdxName.Split(new Char[] { '_' })[0].ToUpper();

                    /*if (tileName == "E4C7607E")
                     * {
                     *  Console.WriteLine("This is E4C7607E");
                     * }*/
                    if (DiffuseMap.TilesByName.ContainsKey(tileName))
                    {
                        crVTMapTileTDX tileTDX = DiffuseMap.TilesByName[tileName];
                        //tileTDX.Texture = LoadTDXFromZADEntry(entry, currentZAD);
                        tileTDX.ZADFile          = zadFile;
                        tileTDX.ZADEntryLocation = entry.Name;
                        for (int i = 0; i < tileTDX.Coords.Count; i++)
                        {
                            crVTMapTile tile = tileTDX.Coords[i];
                            tile.TDXTile = tileTDX;
                            //if (tile.Row < diffusePages[tile.Page].maxTilesToStitch && tile.Column < diffusePages[tile.Page].maxTilesToStitch)
                            {
                                diffusePages[tile.Page].Tiles[tile.Row][tile.Column] = tileTDX;// LoadTDXFromZADEntry(entry, currentZAD);
                            }
                        }
                    }
                    if (SpecularMap.TilesByName.ContainsKey(tileName))
                    {
                        crVTMapTileTDX tileTDX = SpecularMap.TilesByName[tileName];
                        //tileTDX.Texture = LoadTDXFromZADEntry(entry, currentZAD);
                        tileTDX.ZADFile          = zadFile;
                        tileTDX.ZADEntryLocation = entry.Name;
                        for (int i = 0; i < tileTDX.Coords.Count; i++)
                        {
                            crVTMapTile tile = tileTDX.Coords[i];
                            tile.TDXTile = tileTDX;
                            if (tile.Row < specularPages[tile.Page].maxTilesToStitch && tile.Column < specularPages[tile.Page].maxTilesToStitch)
                            {
                                specularPages[tile.Page].Tiles[tile.Row][tile.Column] = tileTDX;// LoadTDXFromZADEntry(entry, currentZAD);
                            }
                        }
                    }
                    if (NormalMap.TilesByName.ContainsKey(tileName))
                    {
                        //currentZAD.Extract(entry, Path.Combine(outputFolder, "Normal", "TDX")+"/");
                        crVTMapTileTDX tileTDX = NormalMap.TilesByName[tileName];
                        //tileTDX.Texture = LoadTDXFromZADEntry(entry, currentZAD);
                        tileTDX.ZADFile          = zadFile;
                        tileTDX.ZADEntryLocation = entry.Name;
                        for (int i = 0; i < tileTDX.Coords.Count; i++)
                        {
                            crVTMapTile tile = tileTDX.Coords[i];
                            tile.TDXTile = tileTDX;
                            if (tile.Row < normalPages[tile.Page].maxTilesToStitch && tile.Column < normalPages[tile.Page].maxTilesToStitch)
                            {
                                normalPages[tile.Page].Tiles[tile.Row][tile.Column] = tileTDX;// LoadTDXFromZADEntry(entry, currentZAD);
                            }
                        }
                    }
                }

                if (firstZad && 1 == 0)
                {
                    firstZad = false;
                    foreach (var vtentry in DiffuseMap.Entries)
                    {
                        bool breakloops = false;
                        foreach (var vtpage in diffusePages)
                        {
                            var tiles = vtpage.GetTiles(vtentry);
                            foreach (var vttile in tiles)
                            {
                                if (vttile.TDXTile.ZADFile == zadFile)
                                {
                                    Logger.LogToFile(Logger.LogLevel.Debug, "{0} = {1} (Diffuse / Page {2})", vttile.TDXTile.ZADEntryLocation, vtentry.FileName, vttile.Page);
                                    // breakloops = true;
                                    //break;
                                }
                            }
                            //if (breakloops) break;
                        }
                        //if (breakloops) break;
                    }

                    foreach (var vtentry in SpecularMap.Entries)
                    {
                        bool breakloops = false;
                        foreach (var vtpage in specularPages)
                        {
                            var tiles = vtpage.GetTiles(vtentry);
                            foreach (var vttile in tiles)
                            {
                                if (vttile.TDXTile.ZADFile == zadFile)
                                {
                                    Logger.LogToFile(Logger.LogLevel.Debug, "{0} = {1} (Specular / Page {2})", vttile.TDXTile.ZADEntryLocation, vtentry.FileName, vttile.Page);
                                    //breakloops = true;
                                    //break;
                                }
                            }
                            //if (breakloops) break;
                        }
                        //if (breakloops) break;
                    }

                    foreach (var vtentry in NormalMap.Entries)
                    {
                        bool breakloops = false;
                        foreach (var vtpage in normalPages)
                        {
                            var tiles = vtpage.GetTiles(vtentry);
                            foreach (var vttile in tiles)
                            {
                                if (vttile.TDXTile.ZADFile == zadFile)
                                {
                                    Logger.LogToFile(Logger.LogLevel.Debug, "{0} = {1} (Normal / Page {2})", vttile.TDXTile.ZADEntryLocation, vtentry.FileName, vttile.Page);
                                    //breakloops = true;
                                    //break;
                                }
                            }
                            // if (breakloops) break;
                        }
                        //if (breakloops) break;
                    }
                }
                //Thread zadThread = new Thread(Program.ExtractZADContent);
                //zadThread.Start(currentZAD);
                //Threads.Add(zadThread);
                //ThreadsAlive++;
                //break;
            }
            TextureList.SetSelected(0, true);
        }
Пример #8
0
        void ReplaceSelectedTexture_Click(object sender, EventArgs e)
        {
            var            textureToReplace = (crVTMapEntry)TextureList.SelectedItem;
            OpenFileDialog dialog           = new OpenFileDialog();

            dialog.InitialDirectory = Properties.Settings.Default.LastImportDirectory;
            dialog.Title            = "Export Texture";
            dialog.Filter           = "PNG Image (*.PNG)|*.png|JPEG Image (*.JPG, *.JPEG)|*.jpg;*.jpeg|BMP Image (*.BMP)|*.bmp|TIFF Image (*.TIF, *.TIFF)|*.tif;*.tiff|TGA Image (*.TGA)|*.tga|TDX Texture (*.TDX)|*.tdx";
            dialog.FileName         = Path.GetFileName(textureToReplace.FileName);
            var result = dialog.ShowDialog();

            if (result == System.Windows.Forms.DialogResult.OK && Directory.Exists(Path.GetDirectoryName(dialog.FileName)))
            {
                Properties.Settings.Default.LastImportDirectory = Path.GetDirectoryName(dialog.FileName);
                Properties.Settings.Default.Save();
                var         vtPage    = (crVTPage)PageNumSelect.SelectedItem;
                var         fileType  = Path.GetExtension(dialog.FileName).ToUpper();
                ImageFormat imgFormat = ImageFormat.Png;
                Bitmap      image     = null;
                if (fileType == ".TGA")
                {
                    image = Paloma.TargaImage.LoadTargaImage(dialog.FileName);
                }
                else if (fileType == ".TDX")
                {
                    image = TDX.Load(dialog.FileName).Decompress();
                }
                else
                {
                    image = (Bitmap)Bitmap.FromFile(dialog.FileName);
                }
                //if (image.Width != textureToReplace.GetWidth(vtPage.PageNum) || image.Height != textureToReplace.GetHeight(vtPage.PageNum)) MessageBox.Show("Error: Image dimensions need to match the original texture!", "Texture Size Mismatch", MessageBoxButtons.OK, MessageBoxIcon.Error);
                //else
                {
                    List <crVTPage> pages = null;
                    if (PageType.SelectedItem == "Diffuse")
                    {
                        pages = diffusePages;
                    }
                    else if (PageType.SelectedItem == "Specular")
                    {
                        pages = specularPages;
                    }
                    else if (PageType.SelectedItem == "Normal")
                    {
                        pages = normalPages;
                    }
                    foreach (var page in pages)
                    {
                        if (page.PageNum == 0)
                        {
                            continue;
                        }
                        int    targetWidth  = textureToReplace.GetWidth(page.PageNum);
                        int    targetHeight = textureToReplace.GetHeight(page.PageNum);
                        Bitmap mipimage     = null;
                        if (image.Width != targetWidth || image.Height != targetHeight)
                        {
                            mipimage = new Bitmap(targetWidth, targetHeight);
                            var      srcRect  = new RectangleF(0, 0, image.Width, image.Height);
                            var      destRect = new RectangleF(0, 0, targetWidth, targetHeight);
                            Graphics grfx     = Graphics.FromImage(mipimage);
                            grfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                            grfx.DrawImage(image, destRect, srcRect, GraphicsUnit.Pixel);
                        }
                        else
                        {
                            mipimage = image;
                        }
                        var tiles = page.ImportTexture(mipimage, textureToReplace);
                        foreach (var tile in tiles)
                        {
                            ZAD      currentZAD = ZAD.Load(tile.ZADFile);
                            ZADEntry tileEntry  = currentZAD.Contents.Find(possibleEntry => possibleEntry.Name == tile.ZADEntryLocation);
                            currentZAD.ReplaceEntryFromBuffer(tileEntry, tile.Texture.SaveToBuffer());
                        }

                        /*foreach(var tile in tiles)
                         * {
                         *  using (ZipArchive zip = ZipFile.Open(tile.ZADFile, ZipArchiveMode.Update))
                         *  {
                         *
                         *      var zipentry = zip.GetEntry(tile.ZADEntryLocation);
                         *      zipentry.Delete();
                         *      zipentry = zip.CreateEntry(tile.ZADEntryLocation, CompressionLevel.NoCompression);
                         *      using (Stream stream = zipentry.Open())
                         *      {
                         *          tile.Texture.Save(stream);
                         *      }
                         *
                         *  }
                         * }*/
                    }
                }
            }
        }
Пример #9
0
        private void SaveTextureTiles(crVTMapEntry textureToExport, String FileName)
        {
            Properties.Settings.Default.LastExportDirectory = Path.GetDirectoryName(FileName);
            Properties.Settings.Default.Save();

            var fileType = Path.GetExtension(FileName).ToUpper();

            var         path           = Path.GetDirectoryName(FileName);
            var         filenameprefix = Path.GetFileNameWithoutExtension(FileName);
            ImageFormat imgFormat      = ImageFormat.Png;

            List <crVTPage> vtPages = diffusePages;

            if (PageType.SelectedItem == "Specular")
            {
                vtPages = specularPages;
            }
            else if (PageType.SelectedItem == "Normal")
            {
                vtPages = normalPages;
            }

            foreach (var vtPage in vtPages)
            {
                var tiles   = vtPage.GetTiles(textureToExport);
                int tileNum = 0;
                foreach (var tile in tiles)
                {
                    if (tile.TDXTile.Texture == null)
                    {
                        tile.TDXTile.GetTextureFromZAD();
                    }
                    tileNum++;
                    string tileFileName = Path.Combine(path, filenameprefix + "_p" + vtPage.PageNum + "_t" + String.Format("{0}", tileNum) + fileType);
                    if (fileType == ".TGA")
                    {
                        //vtPage.SaveTexture(textureToExport, FileName, false, true, false, ImageFormat.Png);
                    }
                    else if (fileType == ".TDX")
                    {
                        ZAD tilezad = ZAD.Load(tile.TDXTile.ZADFile);
                        tilezad.Extract(tilezad.Contents.Find(entry => entry.Name == tile.TDXTile.ZADEntryLocation), path + "/");
                        //tile.TDXTile.Texture.Save(tileFileName);
                        //vtPage.SaveTexture(textureToExport, FileName, true, false, false, ImageFormat.Png);
                    }
                    else
                    {
                        switch (fileType)
                        {
                        case ".JPG":
                            imgFormat = ImageFormat.Jpeg;
                            break;

                        case ".JPEG":
                            imgFormat = ImageFormat.Jpeg;
                            break;

                        case ".TIFF":
                            imgFormat = ImageFormat.Tiff;
                            break;

                        case ".TIF":
                            imgFormat = ImageFormat.Tiff;
                            break;

                        case ".BMP":
                            imgFormat = ImageFormat.Bmp;
                            break;

                        case ".PNG":
                            imgFormat = ImageFormat.Png;
                            break;
                        }
                        Bitmap b = tile.TDXTile.Texture.Decompress(0, false);
                        b.Save(tileFileName);
                    }
                }
            }
        }