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