private static void AddTile(Mooege.Common.MPQ.FileFormats.World worldData, TileInfo tileInfo, Vector3D location) { var sceneChunk = new SceneChunk(); sceneChunk.SNOHandle = new SNOHandle(tileInfo.SNOScene); sceneChunk.PRTransform = new PRTransform(); sceneChunk.PRTransform.Quaternion = new Quaternion(); sceneChunk.PRTransform.Quaternion.W = 1.0f; sceneChunk.PRTransform.Quaternion.Vector3D = new Vector3D(0, 0, 0); sceneChunk.PRTransform.Vector3D = new Vector3D(); sceneChunk.PRTransform.Vector3D = location; var spec = new SceneSpecification(); //scene.Specification = spec; spec.Cell = new Vector2D() { X = 0, Y = 0 }; spec.CellZ = 0; spec.SNOLevelAreas = new int[] { -1, -1, -1, -1 }; spec.SNOMusic = -1; spec.SNONextLevelArea = -1; spec.SNONextWorld = -1; spec.SNOPresetWorld = -1; spec.SNOPrevLevelArea = -1; spec.SNOPrevWorld = -1; spec.SNOReverb = -1; spec.SNOWeather = 50542; spec.SNOCombatMusic = -1; spec.SNOAmbient = -1; spec.ClusterID = -1; spec.Unknown1 = 14; spec.Unknown3 = 5; spec.Unknown4 = -1; spec.Unknown5 = 0; spec.SceneCachedValues = new SceneCachedValues(); spec.SceneCachedValues.Unknown1 = 63; spec.SceneCachedValues.Unknown2 = 96; spec.SceneCachedValues.Unknown3 = 96; var sceneFile = MPQStorage.Data.Assets[SNOGroup.Scene][tileInfo.SNOScene]; var sceneData = (Mooege.Common.MPQ.FileFormats.Scene)sceneFile.Data; spec.SceneCachedValues.AABB1 = sceneData.AABBBounds; spec.SceneCachedValues.AABB2 = sceneData.AABBMarketSetBounds; spec.SceneCachedValues.Unknown4 = new int[4] { 0, 0, 0, 0 }; sceneChunk.SceneSpecification = spec; worldData.SceneParams.SceneChunks.Add(sceneChunk); worldData.SceneParams.ChunkCount++; }
private bool f_extract_obj(SceneChunk scene) { var exporter = new Obj_Exporter(); if (container == null) { return(false); } if (scene != null && scene.ChunkType == ChunkType.ModelData) { var folder = new FolderBrowserDialog(); if (folder.ShowDialog() == DialogResult.OK) { string file_name = scene.Name + ".obj"; exporter.Export(Path.Combine(folder.SelectedPath, file_name), scene as ModelChunk); return(true); } } return(false); }
private bool f_import_scene() { if (container == null) { return(false); } var file = new OpenFileDialog(); file.Multiselect = true; file.Filter = ".scn_part|*.scn_part"; if (file.ShowDialog() == DialogResult.OK) { for (int i = 0; i < file.FileNames.Length; i++) { using (var fs = new FileStream(file.FileName, FileMode.Open, FileAccess.Read, FileShare.None)) using (var br = new BinaryReader(fs)) { SceneChunk chunk = null; var type = br.ReadEnum <ChunkType>(); string name = br.ReadCString(); string subname = br.ReadCString(); switch (type) { case ChunkType.Bone: chunk = new BoneChunk(container) { Name = name, SubName = subname, Image = Properties.Resources.bone }; chunk.Deserialize(fs); container.Add(chunk); break; case ChunkType.BoneSystem: chunk = new BoneSystemChunk(container) { Name = name, SubName = subname, Image = Properties.Resources.bone_system }; chunk.Deserialize(fs); container.Add(chunk); break; case ChunkType.Box: chunk = new BoxChunk(container) { Name = name, SubName = subname, Image = Properties.Resources.box }; chunk.Deserialize(fs); container.Add(chunk); break; case ChunkType.ModelData: chunk = new ModelChunk(container) { Name = name, SubName = subname, Image = Properties.Resources.model }; chunk.Deserialize(fs); container.Add(chunk); break; case ChunkType.Shape: chunk = new ShapeChunk(container) { Name = name, SubName = subname, Image = Properties.Resources.shape }; chunk.Deserialize(fs); container.Add(chunk); break; case ChunkType.SkyDirect1: chunk = new SkyDirect1Chunk(container) { Name = name, SubName = subname, Image = Properties.Resources.sky }; chunk.Deserialize(fs); container.Add(chunk); break; default: return(false); } } } return(true); } return(false); }