Пример #1
0
        public override void Unpack(BinaryReader reader, BSPType treeType)
        {
            Type = reader.ReadUInt32();

            SplittingPlane = new Plane();
            SplittingPlane.Unpack(reader);

            PosNode = BSPNode.ReadNode(reader, treeType);
            NegNode = BSPNode.ReadNode(reader, treeType);

            if (treeType == BSPType.Drawing)
            {
                Sphere = new Sphere();
                Sphere.Unpack(reader);

                var numPolys   = reader.ReadUInt32();
                var numPortals = reader.ReadUInt32();

                InPolys = new List <ushort>();
                for (uint i = 0; i < numPolys; i++)
                {
                    InPolys.Add(reader.ReadUInt16());
                }

                InPortals.Unpack(reader, numPortals);
            }
        }
Пример #2
0
        public virtual void Unpack(BinaryReader reader, BSPType treeType)
        {
            Type = Encoding.ASCII.GetString(reader.ReadBytes(4)).Reverse();

            switch (Type)
            {
            // These types will unpack the data completely, in their own classes
            case "PORT":
            case "LEAF":
                throw new Exception();
            }

            SplittingPlane = new Plane();
            SplittingPlane.Unpack(reader);

            switch (Type)
            {
            case "BPnn":
            case "BPIn":
                PosNode = BSPNode.ReadNode(reader, treeType);
                break;

            case "BpIN":
            case "BpnN":
                NegNode = BSPNode.ReadNode(reader, treeType);
                break;

            case "BPIN":
            case "BPnN":
                PosNode = BSPNode.ReadNode(reader, treeType);
                NegNode = BSPNode.ReadNode(reader, treeType);
                break;
            }

            if (treeType == BSPType.Cell)
            {
                return;
            }

            Sphere = new Sphere();
            Sphere.Unpack(reader);

            if (treeType == BSPType.Physics)
            {
                return;
            }

            InPolys = new List <ushort>();
            uint numPolys = reader.ReadUInt32();

            for (uint i = 0; i < numPolys; i++)
            {
                InPolys.Add(reader.ReadUInt16());
            }
        }
Пример #3
0
 public void Unpack(BinaryReader reader, BSPType treeType)
 {
     RootNode = BSPNode.ReadNode(reader, treeType);
 }