shithub: nanobsp

Download patch

ref: bc2bd5bbcc873c314c40cc7fd67557586c9f425d
parent: ba8acdc36216e1fb76a5316f82a07593194eafa1
author: Andrew Apted <ajapted@gmail.com>
date: Sun Dec 17 07:33:16 EST 2023

removed `side` field in seg_t struct (which I added previously).

It was only needed by BSP_CalcOffset(), and it can be computed there
quite easily and quickly.

--- a/nano_bsp.c
+++ b/nano_bsp.c
@@ -158,9 +158,17 @@
 {
 	line_t * ld = seg->linedef;
 
-	viewx = seg->side ? ld->v2->x : ld->v1->x;
-	viewy = seg->side ? ld->v2->y : ld->v1->y;
+	// compute which side of the linedef the seg is on
+	int side;
 
+	if (abs (ld->dx) > abs (ld->dy))
+		side = ((ld->dx < 0) == (seg->v2->x - seg->v1->x < 0)) ? 0 : 1;
+	else
+		side = ((ld->dy < 0) == (seg->v2->y - seg->v1->y < 0)) ? 0 : 1;
+
+	viewx = side ? ld->v2->x : ld->v1->x;
+	viewy = side ? ld->v2->y : ld->v1->y;
+
 	seg->offset = R_PointToDist (seg->v1->x, seg->v1->y);
 }
 
@@ -209,7 +217,6 @@
 	seg->sidedef = &sides[ld->sidenum[side]];
 	seg->linedef = ld;
 
-	seg->side  = side;
 	seg->angle = R_PointToAngle2 (seg->v1->x, seg->v1->y, seg->v2->x, seg->v2->y);
 
 	seg->frontsector = side ? ld->backsector  : ld->frontsector;
@@ -616,7 +623,6 @@
 		T->v1 = iv;
 		S->v2 = iv;
 
-		T->side    = S->side;
 		T->angle   = S->angle;
 		T->sidedef = S->sidedef;
 		T->linedef = S->linedef;
@@ -624,11 +630,9 @@
 		T->frontsector = S->frontsector;
 		T->backsector  = S->backsector;
 
-		// compute offset for new seg, maybe old one too
+		// compute offsets for the split pieces
 		BSP_CalcOffset (T);
-
-		if (S->side)
-			BSP_CalcOffset (S);
+		BSP_CalcOffset (S);
 
 		if (BSP_PointOnSide (part, S->v1->x, S->v1->y) < 0)
 		{
--- a/r_defs.h
+++ b/r_defs.h
@@ -236,7 +236,6 @@
 
     fixed_t	offset;
     angle_t	angle;
-    int	side;
 
     side_t*	sidedef;
     line_t*	linedef;
--