private void changeTextureToolStripMenuItem_Click(object sender, EventArgs e) { ReplaceTexture form = new ReplaceTexture(); List <ushort> textureIds = new List <ushort>(); foreach (Texture texture in _scFile.GetTextures()) { textureIds.Add(texture.GetTextureId()); } ((ComboBox)form.Controls["comboBox1"]).DataSource = textureIds; if (form.ShowDialog() == DialogResult.OK) { if (treeView1.SelectedNode?.Tag != null) { ShapeChunk data = (ShapeChunk)treeView1.SelectedNode.Tag; data.SetTextureId(Convert.ToByte(((ComboBox)form.Controls["comboBox1"]).SelectedItem)); _scFile.AddChange(data); Render(); } } form.Dispose(); }
private void importToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); DialogResult result = dialog.ShowDialog(); if (result == DialogResult.OK) { try { Bitmap chunk = (Bitmap)Image.FromFile(dialog.FileName); if (treeView1.SelectedNode?.Tag != null) { ShapeChunk data = (ShapeChunk)treeView1.SelectedNode.Tag; data.Replace(chunk); _scFile.AddChange(_scFile.GetTextures()[data.GetTextureId()]); Render(); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } }
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); }
public void Load(byte[] data) { int dataOffset = 0; var header = new Header(); header.Load(data, ref dataOffset); for (int i = 0; i < header.ChunkCount; i++) { BaseChunk baseChunk; //Read the first four bytes to get the tag. string tagName = FSHelpers.ReadString(data, dataOffset, 4); switch (tagName) { case "INF1": baseChunk = new InfoChunk(); Info = baseChunk as InfoChunk; break; case "VTX1": baseChunk = new VertexChunk(); Vertexes = baseChunk as VertexChunk; break; case "EVP1": baseChunk = new EnvelopeChunk(); Envelopes = baseChunk as EnvelopeChunk; break; case "DRW1": baseChunk = new DrawChunk(); Draw = baseChunk as DrawChunk; break; case "JNT1": baseChunk = new JointChunk(); Joints = baseChunk as JointChunk; break; case "SHP1": baseChunk = new ShapeChunk(); Shapes = baseChunk as ShapeChunk; break; case "TEX1": baseChunk = new TextureChunk(); Textures = baseChunk as TextureChunk; break; case "MAT3": baseChunk = new Material3Chunk(); Materials = baseChunk as Material3Chunk; break; case "ANK1": default: Console.WriteLine("Found unknown chunk {0}!", tagName); baseChunk = new DefaultChunk(); break; } baseChunk.Load(data, ref dataOffset); } }
public static SceneContainer ReadFrom(Stream stream) { var container = new SceneContainer(); using (var r = new BinaryReader(stream)) { container.Header.Deserialize(stream); // CoreLib::Scene::CSceneGroup var chunkCount = r.ReadUInt32(); if (container.Header.Unk2 >= 0.2000000029802322f) { r.ReadByte(); // ToDo ReadString } for (var i = 0; i < chunkCount; i++) { var type = r.ReadEnum <ChunkType>(); var name = r.ReadCString(); var subName = r.ReadCString(); SceneChunk chunk; switch (type) { case ChunkType.ModelData: chunk = new ModelChunk(container) { Name = name, SubName = subName }; chunk.Deserialize(stream); container.Add(chunk); break; case ChunkType.Box: chunk = new BoxChunk(container) { Name = name, SubName = subName }; chunk.Deserialize(stream); container.Add(chunk); break; case ChunkType.Bone: chunk = new BoneChunk(container) { Name = name, SubName = subName }; chunk.Deserialize(stream); container.Add(chunk); break; case ChunkType.BoneSystem: chunk = new BoneSystemChunk(container) { Name = name, SubName = subName }; chunk.Deserialize(stream); container.Add(chunk); break; case ChunkType.Shape: chunk = new ShapeChunk(container) { Name = name, SubName = subName }; chunk.Deserialize(stream); container.Add(chunk); break; case ChunkType.SkyDirect1: chunk = new SkyDirect1Chunk(container) { Name = name, SubName = subName }; chunk.Deserialize(stream); container.Add(chunk); break; default: throw new Exception($"Unknown chunk type: 0x{(int)type:X4} StreamPosition: {r.BaseStream.Position}"); } } } return(container); }