shithub: nanobsp

Download patch

ref: 712ec411c9e9aafb1fb6e1de942c0f437548f677
parent: 5a0b85926a68e47864e57c7b96b858a3eec37e7e
author: Andrew Apted <ajapted@gmail.com>
date: Sat Dec 9 06:17:15 EST 2023

implemented BSP_SameDirection().

--- a/nano_bsp.c
+++ b/nano_bsp.c
@@ -216,6 +216,19 @@
 	return 0;
 }
 
+boolean BSP_SameDirection (seg_t * part, seg_t * seg)
+{
+	fixed_t	pdx = part->v2->x - part->v1->x;
+	fixed_t	pdy = part->v2->y - part->v1->y;
+
+	fixed_t sdx = seg->v2->x - seg->v1->x;
+	fixed_t sdy = seg->v2->y - seg->v1->y;
+
+	int64_t n = (int64_t)sdx * (int64_t)pdx + (int64_t)sdy * (int64_t)pdy;
+
+	return (n > 0);
+}
+
 int BSP_SegOnSide (seg_t * part, seg_t * seg)
 {
 	int side1 = BSP_PointOnSide (part, seg->v1->x, seg->v1->y);
@@ -222,12 +235,7 @@
 	int side2 = BSP_PointOnSide (part, seg->v2->x, seg->v2->y);
 
 	if (side1 == 0 && side2 == 0)
-	{
-		// FIXME
-		boolean on_right = false;
-
-		return on_right ? +1 : -1;
-	}
+		return BSP_SameDirection (part, seg) ? +1 : -1;
 
 	// splits the seg?
 	if ((side1 *= side2) < 0)
--