Beispiel #1
0
        public object Clone()
        {
            var container = new SceneContainer();

            container.AddRange(this);
            container.Header = Header;

            return(container);
        }
Beispiel #2
0
        public static SceneContainer ReadFrom(Stream stream)
        {
            var container = new SceneContainer();

            using (var r = new BinaryReader(stream))
            {
                container.Header.Deserialize(stream);

                // CoreLib::Scene::CSceneGroup
                uint chunkCount = r.ReadUInt32();

                if (container.Header.Unk2 >= 0.2000000029802322f)
                {
                    r.ReadByte(); // ToDo ReadString
                }
                for (int i = 0; i < chunkCount; i++)
                {
                    var    type    = r.ReadEnum <ChunkType>();
                    string name    = r.ReadCString();
                    string subName = r.ReadCString();

                    SceneChunk chunk;
                    switch (type)
                    {
                    case ChunkType.ModelData:
                        chunk = new ModelChunk(container)
                        {
                            Name    = name,
                            SubName = subName,
                            Image   = Properties.Resources.model
                        };
                        chunk.Deserialize(stream);
                        container.Add(chunk);
                        break;

                    case ChunkType.Box:
                        chunk = new BoxChunk(container)
                        {
                            Name    = name,
                            SubName = subName,
                            Image   = Properties.Resources.box
                        };
                        chunk.Deserialize(stream);
                        container.Add(chunk);
                        break;

                    case ChunkType.Bone:
                        chunk = new BoneChunk(container)
                        {
                            Name    = name,
                            SubName = subName,
                            Image   = Properties.Resources.bone
                        };
                        chunk.Deserialize(stream);
                        container.Add(chunk);
                        break;

                    case ChunkType.BoneSystem:
                        chunk = new BoneSystemChunk(container)
                        {
                            Name    = name,
                            SubName = subName,
                            Image   = Properties.Resources.bone_system
                        };
                        chunk.Deserialize(stream);
                        container.Add(chunk);
                        break;

                    case ChunkType.Shape:
                        chunk = new ShapeChunk(container)
                        {
                            Name    = name,
                            SubName = subName,
                            Image   = Properties.Resources.shape
                        };
                        chunk.Deserialize(stream);
                        container.Add(chunk);
                        break;

                    case ChunkType.SkyDirect1:
                        chunk = new SkyDirect1Chunk(container)
                        {
                            Name    = name,
                            SubName = subName,
                            Image   = Properties.Resources.sky
                        };
                        chunk.Deserialize(stream);
                        container.Add(chunk);
                        break;

                    default:
                        throw new Exception($"Unknown chunk type: 0x{(int)type:X4} StreamPosition: {r.BaseStream.Position}");
                    }
                }
            }

            return(container);
        }