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());
                }
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }