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);
        }