private void Build(BspTreeNode node, Random rnd, Level level) { if (node.HasChildrens) { var c0 = node.Item0.GetCenter(); var c1 = node.Item1.GetCenter(); Build(node.Item0, rnd, level); Build(node.Item1, rnd, level); if (GeneratePath) { level.PlotLine(c0.X, c0.Y, c1.X, c1.Y, Floor); } } else { if (GenerateFloor) { level.FillRectangle(node.X, node.Y, node.Width, node.Height, Floor); } if (GenerateWall) { level.Rectangle(node.X, node.Y, node.Width, node.Height, Wall); } } }
private BspTreeNode BuildNode(node_t node) { var res = new BspTreeNode(); res.Mins = new Vector3(node.box.mins[0], node.box.mins[1], node.box.mins[2]); res.Maxs = new Vector3(node.box.maxs[0], node.box.maxs[1], node.box.maxs[2]); res.PlaneDistance = planes[node.planenum].dist; res.PlaneNormal = planes[node.planenum].normal; if (0 != (node.front & 0x8000)) res.Front = leaves[(ushort)~node.front]; else res.Front = BuildNode(nodes[node.front]); if (0 != (node.back & 0x8000)) res.Back = leaves[(ushort)~node.back]; else res.Back = BuildNode(nodes[node.back]); return res; }