shithub: nanobsp

Download patch

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