shithub: nanobsp

Download patch

ref: 7596c0ec610b22d95cc12737133a1e20c8f5d805
parent: 5d21124b492e2614def17f6e95c27b5e6ddfae94
author: Andrew Apted <ajapted@gmail.com>
date: Sat Dec 9 11:08:56 EST 2023

fixed calculation of `offset` field of seg_t.

--- a/nano_bsp.c
+++ b/nano_bsp.c
@@ -78,6 +78,16 @@
 
 //----------------------------------------------------------------------------
 
+void BSP_CalcOffset (seg_t * seg)
+{
+	line_t * ld = seg->linedef;
+
+	viewx = seg->side ? ld->v2->x : ld->v1->x;
+	viewy = seg->side ? ld->v2->y : ld->v1->y;
+
+	seg->offset = R_PointToDist (seg->v1->x, seg->v1->y);
+}
+
 void BSP_SegForLineSide (int i, int side, seg_t ** list_var)
 {
 	line_t * ld = &lines[i];
@@ -91,15 +101,17 @@
 	seg->v1 = side ? ld->v2 : ld->v1;
 	seg->v2 = side ? ld->v1 : ld->v2;
 
-	seg->offset = 0;
-	seg->angle  = R_PointToAngle2 (seg->v1->x, seg->v1->y, seg->v2->x, seg->v2->y);
-
 	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;
 	seg->backsector  = side ? ld->frontsector : ld->backsector;
 
+	BSP_CalcOffset (seg);
+
 	// link into the list
 	seg->next   = (*list_var);
 	(*list_var) = seg;
@@ -518,6 +530,7 @@
 		T->v1 = iv;
 		S->v2 = iv;
 
+		T->side    = S->side;
 		T->angle   = S->angle;
 		T->sidedef = S->sidedef;
 		T->linedef = S->linedef;
@@ -525,11 +538,11 @@
 		T->frontsector = S->frontsector;
 		T->backsector  = S->backsector;
 
-		// compute offset for new seg
-		viewx = T->v1->x;
-		viewy = T->v1->y;
+		// compute offset for new seg, maybe old one too
+		BSP_CalcOffset (T);
 
-		T->offset = R_PointToDist (ix, iy);
+		if (S->side)
+			BSP_CalcOffset (S);
 
 		if (BSP_PointOnSide (part, S->v1->x, S->v1->y) < 0)
 		{
--- a/r_defs.h
+++ b/r_defs.h
@@ -217,9 +217,9 @@
     vertex_t*	v1;
     vertex_t*	v2;
 
-    fixed_t	offset;
-
-    angle_t	angle;
+    int      side;
+    fixed_t  offset;
+    angle_t  angle;
 
     side_t*	sidedef;
     line_t*	linedef;
--