shithub: nanobsp

Download patch

ref: 8af421c562e52ddef0a57cf2c02a739c43934e54
parent: 3bda65bfe8bc9583d30d9096d19b54c17d55ce94
author: Andrew Apted <ajapted@gmail.com>
date: Fri Dec 15 08:16:57 EST 2023

copied the modified `node_t` struct to nano_bsp.c, renamed `nanode_t`.

--- a/nano_bsp.c
+++ b/nano_bsp.c
@@ -56,6 +56,27 @@
 #define MIN(a, b)  ((a) < (b) ? (a) : (b))
 
 
+
+typedef struct Nanode  nanode_t;
+
+struct Nanode
+{
+	// when non-NULL, this is actually a leaf of the BSP tree
+	sector_t * sector;
+	seg_t    * segs;
+
+	// partition line (start coord, delta to end)
+	fixed_t  x, y, dx, dy;
+
+	// bounding box for this node / leaf    [ TODO: REMOVE ]
+	fixed_t  bbox[4];
+
+	// right and left children
+	struct Nanode * right;
+	struct Nanode * left;
+};
+
+
 vertex_t * BSP_NewVertex (fixed_t x, fixed_t y)
 {
 	vertex_t * vert = Z_Malloc(sizeof(vertex_t), PU_LEVEL, NULL);
@@ -71,23 +92,16 @@
 	return seg;
 }
 
-subsector_t * BSP_NewSubsector (void)
+nanode_t * BSP_NewNode (void)
 {
-	subsector_t * sub = Z_Malloc (sizeof(subsector_t), PU_LEVEL, NULL);
-	memset (sub, 0, sizeof(*sub));
-	return sub;
-}
-
-node_t * BSP_NewNode (void)
-{
-	node_t * node = Z_Malloc (sizeof(node_t), PU_LEVEL, NULL);
+	nanode_t * node = Z_Malloc (sizeof(nanode_t), PU_LEVEL, NULL);
 	memset (node, 0, sizeof(*node));
 	return node;
 }
 
 
-/* DEBUG:
-void DumpNode (node_t * N, int lev)
+// DEBUG:
+void DumpNode (nanode_t * N, int lev)
 {
 	char spaces[256];
 
@@ -105,7 +119,7 @@
 		N->bbox[BOXLEFT] >> 16, N->bbox[BOXBOTTOM] >> 16,
 		N->bbox[BOXRIGHT] >> 16, N->bbox[BOXTOP] >> 16);
 
-	if (N->sub == NULL)
+	if (N->sector == NULL)
 	{
 		printf ("%spartition (%d %d) --> (%d %d)\n", spaces,
 			N->x >> 16, N->y >> 16,
@@ -123,12 +137,10 @@
 	}
 	else
 	{
-		subsector_t * sub = N->sub;
+		printf ("%ssector #%d\n", spaces, (int)(N->sector - sectors));
 
-		printf ("%ssector #%d\n", spaces, (int)(sub->sector - sectors));
-
 		seg_t * S;
-		for (S = sub->segs ; S != NULL ; S = S->next)
+		for (S = N->segs ; S != NULL ; S = S->next)
 		{
 			printf ("%s  line #%d, side %d : (%d %d) --> (%d %d)\n", spaces,
 				(int) (S->linedef - lines), S->side,
@@ -137,7 +149,7 @@
 		}
 	}
 }
-*/
+//
 
 //----------------------------------------------------------------------------
 
@@ -175,7 +187,7 @@
 	}
 }
 
-void BSP_MergeBounds (node_t * node)
+void BSP_MergeBounds (nanode_t * node)
 {
 	fixed_t * L_bbox = node->left ->bbox;
 	fixed_t * R_bbox = node->right->bbox;
@@ -229,12 +241,11 @@
 	return list;
 }
 
-node_t * BSP_CreateLeaf (seg_t * soup)
+nanode_t * BSP_CreateLeaf (seg_t * soup)
 {
-	subsector_t * sub  = BSP_NewSubsector ();
-	node_t      * node = BSP_NewNode ();
+	nanode_t * node = BSP_NewNode ();
 
-	sub->segs = soup;
+	node->segs = soup;
 
 	// to determine the sector, avoid self-referencing lines
 	// since they are often used for special effects.
@@ -244,15 +255,14 @@
 	{
 		if (S->frontsector != S->backsector)
 		{
-			sub->sector = S->frontsector;
+			node->sector = S->frontsector;
 			break;
 		}
 	}
 
-	if (sub->sector == NULL)
-		sub->sector = soup->frontsector;
+	if (node->sector == NULL)
+		node->sector = soup->frontsector;
 
-	node->sub = sub;
 	BSP_BoundingBox (soup, node->bbox);
 
 	return node;
@@ -665,7 +675,7 @@
 	}
 }
 
-node_t * BSP_SubdivideSegs (seg_t * soup)
+nanode_t * BSP_SubdivideSegs (seg_t * soup)
 {
 	seg_t * part = BSP_PickNode_Fast (soup);
 
@@ -675,7 +685,7 @@
 	if (part == NULL)
 		return BSP_CreateLeaf (soup);
 
-	node_t * N = BSP_NewNode ();
+	nanode_t * N = BSP_NewNode ();
 
 	N->x  = part->v1->x;
 	N->y  = part->v1->y;
@@ -714,9 +724,9 @@
 {
 	seg_t * list = BSP_CreateSegs ();
 
-	root_node = BSP_SubdivideSegs (list);
+	nanode_t * root = BSP_SubdivideSegs (list);
 
 /* DEBUG:
-	DumpNode (root_node, 0);
+	DumpNode (root, 0);
 */
 }
--- a/nano_bsp.h
+++ b/nano_bsp.h
@@ -26,8 +26,6 @@
 #ifndef __NANO_BSP_H__
 #define __NANO_BSP_H__
 
-node_t * BSP_NewNode (void);
-
 void Nano_BuildBSP (void);
 
 #endif
--