コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
ファイル: QuakeReader.cs プロジェクト: marmalade/bsp4Airplay
        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;
        }