Beispiel #1
0
        public void Unpack(BinaryReader reader)
        {
            var numPolygons        = reader.ReadUInt32();
            var numPhysicsPolygons = reader.ReadUInt32();
            var numPortals         = reader.ReadUInt32();

            VertexArray.Unpack(reader);

            Polygons.Unpack(reader, numPolygons);

            for (uint i = 0; i < numPortals; i++)
            {
                Portals.Add(reader.ReadUInt16());
            }

            reader.AlignBoundary();

            CellBSP.Unpack(reader, BSPType.Cell);

            PhysicsPolygons.Unpack(reader, numPhysicsPolygons);

            PhysicsBSP.Unpack(reader, BSPType.Physics);

            uint hasDrawingBSP = reader.ReadUInt32();

            if (hasDrawingBSP != 0)
            {
                DrawingBSP = new BSPTree();
                DrawingBSP.Unpack(reader, BSPType.Drawing);
            }

            reader.AlignBoundary();
        }
Beispiel #2
0
        public static BSPTree Read(DatReader datReader, BSPType treeType)
        {
            BSPTree obj = new BSPTree();

            obj.RootNode = BSPNode.Read(datReader, treeType);
            return(obj);
        }
Beispiel #3
0
        public static CellStruct Read(DatReader datReader)
        {
            CellStruct obj = new CellStruct();

            uint numPolygons        = datReader.ReadUInt32();
            uint numPhysicsPolygons = datReader.ReadUInt32();
            uint numPortals         = datReader.ReadUInt32();

            obj.VertexArray = CVertexArray.Read(datReader);

            for (uint i = 0; i < numPolygons; i++)
            {
                ushort poly_id = datReader.ReadUInt16();
                obj.Polygons.Add(poly_id, Polygon.Read(datReader));
            }

            for (uint i = 0; i < numPortals; i++)
            {
                obj.Portals.Add(datReader.ReadUInt16());
            }

            datReader.AlignBoundary();

            obj.CellBSP = BSPTree.Read(datReader, BSPType.Cell);

            for (uint i = 0; i < numPhysicsPolygons; i++)
            {
                ushort poly_id = datReader.ReadUInt16();
                obj.PhysicsPolygons.Add(poly_id, Polygon.Read(datReader));
            }
            obj.PhysicsBSP = BSPTree.Read(datReader, BSPType.Physics);

            uint hasDrawingBSP = datReader.ReadUInt32();

            if (hasDrawingBSP != 0)
            {
                obj.DrawingBSP = BSPTree.Read(datReader, BSPType.Drawing);
            }

            datReader.AlignBoundary();

            return(obj);
        }