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