ref: 7c048380f031876d58902db59c0673547f7d3a37
parent: 60643a184fafa1d2e092b1cd141a60b90de920a2
author: Andrew Apted <ajapted@gmail.com>
date: Fri Dec 8 19:08:54 EST 2023
fleshed out logic for BSP_SubdivideSegs(). Lots of pieces missing though....
--- a/nano_bsp.c
+++ b/nano_bsp.c
@@ -81,6 +81,7 @@
nsubsec_t * BSP_NewSubsector (void)
{nsubsec_t * sub = Z_Malloc (sizeof(nsubsec_t), PU_LEVEL, NULL);
+ memset (sub, 0, sizeof(*sub));
return sub;
}
@@ -136,11 +137,42 @@
}
+nnode_t * BSP_SubdivideSegs (seg_t * soup)
+{+ seg_t * part = BSP_PickNode_Fast (soup);
+
+ if (part == NULL)
+ part = BSP_PickNode_Normal (soup);
+
+ if (part == NULL)
+ return BSP_CreateLeaf (soup);
+
+ nnode_t * N = BSP_NewNode ();
+
+ N->x = part->v1->x;
+ N->y = part->v1->y;
+ N->dx = part->v2->x - N->x;
+ N->dy = part->v2->y - N->y;
+
+ // these are the new lists (after splitting)
+ seg_t * lefts = NULL;
+ seg_t * rights = NULL;
+
+ BSP_SplitSegs (part, soup, &lefts, &rights);
+
+ N->right = BSP_SubdivideSegs (rights);
+ N->left = BSP_SubdivideSegs (lefts);
+
+ return N;
+}
+
//----------------------------------------------------------------------------
void Nano_BuildBSP (void)
{seg_t * list = BSP_CreateSegs ();
+
+ nnode_t * node = BSP_SubdivideSegs (list);
// TODO
}
--
⑨