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