From 37637bc56a69444f8625b438704007453d74adfd Mon Sep 17 00:00:00 2001
From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com>
Date: Thu, 28 Jul 2022 00:41:47 +0200
Subject: [PATCH] Properly fix cylinder, circle and arrow debug draw for
 Recast.

---
 r5dev/naveditor/CrowdTool.cpp                 |  6 +-
 .../recast/DebugUtils/Source/DebugDraw.cpp    | 64 +++++++++----------
 2 files changed, 35 insertions(+), 35 deletions(-)

diff --git a/r5dev/naveditor/CrowdTool.cpp b/r5dev/naveditor/CrowdTool.cpp
index d219fb34..9febf8e5 100644
--- a/r5dev/naveditor/CrowdTool.cpp
+++ b/r5dev/naveditor/CrowdTool.cpp
@@ -358,7 +358,7 @@ void CrowdToolState::handleRender()
 				if (dtTriArea2D(pos, s, s+3) < 0.0f)
 					col = duDarkenCol(col);
 				
-				duAppendArrow(&dd, s[0],s[1],s[2]+0.2f, s[3],s[4],s[5]+0.2f, 0.0f, 0.3f, col);
+				duAppendArrow(&dd, s[0],s[1],s[2]+0.2f, s[3],s[4],s[5]+0.2f, 0.0f, 30.0f, col);
 			}
 			dd.end();
 		}
@@ -494,11 +494,11 @@ void CrowdToolState::handleRender()
 		
 		duDebugDrawArrow(&dd, pos[0],pos[1],pos[2]+height,
 						 pos[0]+dvel[0],pos[1]+dvel[1],pos[2]+height+dvel[2],
-						 0.0f, 0.4f, duRGBA(0,192,255,192), (m_agentDebug.idx == i) ? 2.0f : 1.0f);
+						 0.0f, 30.0f, duRGBA(0,192,255,192), (m_agentDebug.idx == i) ? 2.0f : 1.0f);
 		
 		duDebugDrawArrow(&dd, pos[0],pos[1],pos[2]+height,
 						 pos[0]+vel[0],pos[1]+vel[1],pos[2]+height+vel[2],
-						 0.0f, 0.4f, duRGBA(0,0,0,160), 2.0f);
+						 0.0f, 30.0f, duRGBA(0,0,0,160), 2.0f);
 	}
 	
 	dd.depthMask(true);
diff --git a/r5dev/thirdparty/recast/DebugUtils/Source/DebugDraw.cpp b/r5dev/thirdparty/recast/DebugUtils/Source/DebugDraw.cpp
index d99cf1b2..854ad56e 100644
--- a/r5dev/thirdparty/recast/DebugUtils/Source/DebugDraw.cpp
+++ b/r5dev/thirdparty/recast/DebugUtils/Source/DebugDraw.cpp
@@ -82,7 +82,7 @@ void duDebugDrawCylinderWire(struct duDebugDraw* dd, float minx, float miny, flo
 	if (!dd) return;
 	
 	dd->begin(DU_DRAW_LINES, lineWidth);
-	duAppendCylinderWire(dd, minx,minz,miny, maxx,maxz,maxy, col);
+	duAppendCylinderWire(dd, minx,miny,minz, maxx,maxy,maxz, col);
 	dd->end();
 }
 
@@ -124,7 +124,7 @@ void duDebugDrawCircle(struct duDebugDraw* dd, const float x, const float y, con
 	if (!dd) return;
 	
 	dd->begin(DU_DRAW_LINES, lineWidth);
-	duAppendCircle(dd, x,z,y, r, col);
+	duAppendCircle(dd, x,y,z, r, col);
 	dd->end();
 }
 
@@ -154,7 +154,7 @@ void duDebugDrawCylinder(struct duDebugDraw* dd, float minx, float miny, float m
 	if (!dd) return;
 	
 	dd->begin(DU_DRAW_TRIS);
-	duAppendCylinder(dd, minx,minz,miny, maxx,maxz,maxy, col);
+	duAppendCylinder(dd, minx,miny,minz, maxx,maxy,maxz, col);
 	dd->end();
 }
 
@@ -237,21 +237,21 @@ void duAppendCylinderWire(struct duDebugDraw* dd, float minx, float miny, float
 	}
 	
 	const float cx = (maxx + minx)/2;
-	const float cz = (maxz + minz)/2;
+	const float cy = (maxy + miny)/2;
 	const float rx = (maxx - minx)/2;
-	const float rz = (maxz - minz)/2;
+	const float ry = (maxy - miny)/2;
 	
 	for (int i = 0, j = NUM_SEG-1; i < NUM_SEG; j = i++)
 	{
-		dd->vertex(cx+dir[j*2+0]*rx, cz+dir[j*2+1]*rz, miny, col);
-		dd->vertex(cx+dir[i*2+0]*rx, cz+dir[i*2+1]*rz, miny, col);
-		dd->vertex(cx+dir[j*2+0]*rx, cz+dir[j*2+1]*rz, maxy, col);
-		dd->vertex(cx+dir[i*2+0]*rx, cz+dir[i*2+1]*rz, maxy, col);
+		dd->vertex(cx+dir[j*2+0]*rx, cy+dir[j*2+1]*ry, minz, col);
+		dd->vertex(cx+dir[i*2+0]*rx, cy+dir[i*2+1]*ry, minz, col);
+		dd->vertex(cx+dir[j*2+0]*rx, cy+dir[j*2+1]*ry, maxz, col);
+		dd->vertex(cx+dir[i*2+0]*rx, cy+dir[i*2+1]*ry, maxz, col);
 	}
 	for (int i = 0; i < NUM_SEG; i += NUM_SEG/4)
 	{
-		dd->vertex(cx+dir[i*2+0]*rx, cz+dir[i*2+1]*rz, miny, col);
-		dd->vertex(cx+dir[i*2+0]*rx, cz+dir[i*2+1]*rz, maxy, col);
+		dd->vertex(cx+dir[i*2+0]*rx, cy+dir[i*2+1]*ry, minz, col);
+		dd->vertex(cx+dir[i*2+0]*rx, cy+dir[i*2+1]*ry, maxz, col);
 	}
 }
 
@@ -372,33 +372,33 @@ void duAppendCylinder(struct duDebugDraw* dd, float minx, float miny, float minz
 	unsigned int col2 = duMultCol(col, 160);
 	
 	const float cx = (maxx + minx)/2;
-	const float cz = (maxz + minz)/2;
+	const float cy = (maxy + miny)/2;
 	const float rx = (maxx - minx)/2;
-	const float rz = (maxz - minz)/2;
+	const float ry = (maxy - miny)/2;
 
 	for (int i = 2; i < NUM_SEG; ++i)
 	{
 		const int a = 0, b = i-1, c = i;
-		dd->vertex(cx+dir[a*2+0]*rx, cz+dir[a*2+1]*rz, miny, col2);
-		dd->vertex(cx+dir[b*2+0]*rx, cz+dir[b*2+1]*rz, miny, col2);
-		dd->vertex(cx+dir[c*2+0]*rx, cz+dir[c*2+1]*rz, miny, col2);
+		dd->vertex(cx+dir[a*2+0]*rx, cy+dir[a*2+1]*ry, minz, col2);
+		dd->vertex(cx+dir[b*2+0]*rx, cy+dir[b*2+1]*ry, minz, col2);
+		dd->vertex(cx+dir[c*2+0]*rx, cy+dir[c*2+1]*ry, minz, col2);
 	}
 	for (int i = 2; i < NUM_SEG; ++i)
 	{
 		const int a = 0, b = i, c = i-1;
-		dd->vertex(cx+dir[a*2+0]*rx, cz+dir[a*2+1]*rz, maxy, col);
-		dd->vertex(cx+dir[b*2+0]*rx, cz+dir[b*2+1]*rz, maxy, col);
-		dd->vertex(cx+dir[c*2+0]*rx, cz+dir[c*2+1]*rz, maxy, col);
+		dd->vertex(cx+dir[a*2+0]*rx, cy+dir[a*2+1]*ry, maxz, col);
+		dd->vertex(cx+dir[b*2+0]*rx, cy+dir[b*2+1]*ry, maxz, col);
+		dd->vertex(cx+dir[c*2+0]*rx, cy+dir[c*2+1]*ry, maxz, col);
 	}
 	for (int i = 0, j = NUM_SEG-1; i < NUM_SEG; j = i++)
 	{
-		dd->vertex(cx+dir[i*2+0]*rx, cz+dir[i*2+1]*rz, miny, col2);
-		dd->vertex(cx+dir[j*2+0]*rx, cz+dir[j*2+1]*rz, miny, col2);
-		dd->vertex(cx+dir[j*2+0]*rx, cz+dir[j*2+1]*rz, maxy, col);
+		dd->vertex(cx+dir[i*2+0]*rx, cy+dir[i*2+1]*ry, minz, col2);
+		dd->vertex(cx+dir[j*2+0]*rx, cy+dir[j*2+1]*ry, minz, col2);
+		dd->vertex(cx+dir[j*2+0]*rx, cy+dir[j*2+1]*ry, maxz, col);
 
-		dd->vertex(cx+dir[i*2+0]*rx, cz+dir[i*2+1]*rz, miny, col2);
-		dd->vertex(cx+dir[j*2+0]*rx, cz+dir[j*2+1]*rz, maxy, col);
-		dd->vertex(cx+dir[i*2+0]*rx, cz+dir[i*2+1]*rz, maxy, col);
+		dd->vertex(cx+dir[i*2+0]*rx, cy+dir[i*2+1]*ry, minz, col2);
+		dd->vertex(cx+dir[j*2+0]*rx, cy+dir[j*2+1]*ry, maxz, col);
+		dd->vertex(cx+dir[i*2+0]*rx, cy+dir[i*2+1]*ry, maxz, col);
 	}
 }
 
@@ -408,7 +408,7 @@ inline void evalArc(const float x0, const float y0, const float z0,
 {
 	res[0] = x0 + dx * u;
 	res[1] = y0 + dy * u;
-	res[2] = z0 + dz * u + h * (1 - (u * 2 - 1) * (u * 2 - 1));
+	res[2] = z0 + dz * u + h * (1-(u*2-1)*(u*2-1));
 }
 
 
@@ -457,12 +457,12 @@ void appendArrowHead(struct duDebugDraw* dd, const float* p, const float* q,
 	vnormalize(ay);
 
 	dd->vertex(p, col);
-//	dd->vertex(p[0]+az[0]*s+ay[0]*s/2, p[1]+az[1]*s+ay[1]*s/2, p[2]+az[2]*s+ay[2]*s/2, col);
-	dd->vertex(p[0]+az[0]*s+ax[0]*s/3, p[1]+az[1]*s+ax[1]*s/3, p[2]+az[2]*s+ax[2]*s/3, col);
+	dd->vertex(p[0]+az[0]*s+ay[0]*s/2, p[1]+az[1]*s+ay[1]*s/2, p[2]+az[2]*s+ay[2]*s/2, col);
+//	dd->vertex(p[0]+az[0]*s+ax[0]*s/3, p[1]+az[1]*s+ax[1]*s/3, p[2]+az[2]*s+ax[2]*s/3, col);
 
 	dd->vertex(p, col);
-//	dd->vertex(p[0]+az[0]*s-ay[0]*s/2, p[1]+az[1]*s-ay[1]*s/2, p[2]+az[2]*s-ay[2]*s/2, col);
-	dd->vertex(p[0]+az[0]*s-ax[0]*s/3, p[1]+az[1]*s-ax[1]*s/3, p[2]+az[2]*s-ax[2]*s/3, col);
+	dd->vertex(p[0]+az[0]*s-ay[0]*s/2, p[1]+az[1]*s-ay[1]*s/2, p[2]+az[2]*s-ay[2]*s/2, col);
+//	dd->vertex(p[0]+az[0]*s-ax[0]*s/3, p[1]+az[1]*s-ax[1]*s/3, p[2]+az[2]*s-ax[2]*s/3, col);
 	
 }
 
@@ -545,8 +545,8 @@ void duAppendCircle(struct duDebugDraw* dd, const float x, const float y, const
 	
 	for (int i = 0, j = NUM_SEG-1; i < NUM_SEG; j = i++)
 	{
-		dd->vertex(x+dir[j*2+0]*r, z+dir[j*2+1]*r, y, col);
-		dd->vertex(x+dir[i*2+0]*r, z+dir[i*2+1]*r, y, col);
+		dd->vertex(x+dir[j*2+0]*r, y+dir[j*2+1]*r, z, col);
+		dd->vertex(x+dir[i*2+0]*r, y+dir[i*2+1]*r, z, col);
 	}
 }