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); } }
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()); } }
public void Unpack(BinaryReader reader, BSPType treeType) { RootNode = BSPNode.ReadNode(reader, treeType); }