public long ParseBSP2DNodes(BSP bsp, BinaryReader reader, int count) { bsp.Bsp2dNodes = new List <BSP.Bsp2dNode>(); var originalPos = reader.BaseStream.Position; for (uint i = 0; i < count; ++i) { reader.BaseStream.Position = originalPos + (i * BSP2DNODE_SIZE); var plane_i = BitConverter.ToSingle(reader.ReadBytes(4).Reverse().ToArray(), 0); var plane_j = BitConverter.ToSingle(reader.ReadBytes(4).Reverse().ToArray(), 0); var plane_d = BitConverter.ToSingle(reader.ReadBytes(4).Reverse().ToArray(), 0); var left_child = BitConverter.ToInt32(reader.ReadBytes(4).Reverse().ToArray(), 0); var right_child = BitConverter.ToInt32(reader.ReadBytes(4).Reverse().ToArray(), 0); var bsp2dNode = new BSP.Bsp2dNode(); bsp2dNode.PlaneI = plane_i; bsp2dNode.PlaneJ = plane_j; bsp2dNode.PlaneD = plane_d; //sign-compress left and right children to int16 var uleft_child = left_child & 0x7fff; if (left_child < 0) { uleft_child |= 0x8000; } bsp2dNode.LeftChild = (short)uleft_child; var uright_child = right_child & 0x7fff; if (right_child < 0) { uright_child |= 0x8000; } bsp2dNode.RightChild = (short)uright_child; bsp.Bsp2dNodes.Add(bsp2dNode); } return(originalPos + (count * BSP2DNODE_SIZE)); }
public long ParseBSP2DNodes(BSP bsp, BinaryReader reader, int count) { bsp.Bsp2dNodes = new List<BSP.Bsp2dNode>(); var originalPos = reader.BaseStream.Position; for (uint i = 0; i < count; ++i) { reader.BaseStream.Position = originalPos + (i * BSP2DNODE_SIZE); var plane_i = BitConverter.ToSingle(reader.ReadBytes(4).Reverse().ToArray(), 0); var plane_j = BitConverter.ToSingle(reader.ReadBytes(4).Reverse().ToArray(), 0); var plane_d = BitConverter.ToSingle(reader.ReadBytes(4).Reverse().ToArray(), 0); var left_child = BitConverter.ToInt32(reader.ReadBytes(4).Reverse().ToArray(), 0); var right_child = BitConverter.ToInt32(reader.ReadBytes(4).Reverse().ToArray(), 0); var bsp2dNode = new BSP.Bsp2dNode(); bsp2dNode.PlaneI = plane_i; bsp2dNode.PlaneJ = plane_j; bsp2dNode.PlaneD = plane_d; //sign-compress left and right children to int16 var uleft_child = left_child & 0x7fff; if (left_child < 0) uleft_child |= 0x8000; bsp2dNode.LeftChild = (short)uleft_child; var uright_child = right_child & 0x7fff; if (right_child < 0) uright_child |= 0x8000; bsp2dNode.RightChild = (short)uright_child; bsp.Bsp2dNodes.Add(bsp2dNode); } return originalPos + (count * BSP2DNODE_SIZE); }