Browse Source

Fix visualization of AI object graph

Ivan Savenko 10 months ago
parent
commit
9f1cd69480

+ 1 - 1
AI/Nullkiller/Pathfinding/AINodeStorage.h

@@ -11,7 +11,7 @@
 #pragma once
 
 #define NKAI_PATHFINDER_TRACE_LEVEL 0
-constexpr int NKAI_GRAPH_TRACE_LEVEL = 0;
+constexpr int NKAI_GRAPH_TRACE_LEVEL = 0; // To actually enable graph visualization, enter `/vslog graph` in game chat
 #define NKAI_TRACE_LEVEL 0
 
 #include "../../../lib/pathfinder/CGPathNode.h"

+ 8 - 11
client/mapView/MapOverlayLogVisualizer.cpp

@@ -17,6 +17,7 @@
 #include "../render/Colors.h"
 #include "../render/EFont.h"
 #include "../render/IFont.h"
+#include "../render/IScreenHandler.h"
 #include "../render/IRenderHandler.h"
 #include "../render/Graphics.h"
 #include "../gui/TextAlignment.h"
@@ -30,24 +31,20 @@ MapOverlayLogVisualizer::MapOverlayLogVisualizer(Canvas & target, std::shared_pt
 
 void MapOverlayLogVisualizer::drawLine(int3 start, int3 end)
 {
-	const Point offset = Point(30, 30);
-
 	auto level = model->getLevel();
 
 	if(start.z != level || end.z != level)
 		return;
 
-	auto pStart = model->getTargetTileArea(start).topLeft();
-	auto pEnd = model->getTargetTileArea(end).topLeft();
-	auto viewPort = target.getRenderArea();
-
-	pStart.x += 3;
-	pEnd.x -= 3;
+	int scaling = GH.screenHandler().getScalingFactor();
+	auto pStart = model->getTargetTileArea(start).center();
+	auto pEnd = model->getTargetTileArea(end).center();
+	Rect viewPortRaw = target.getRenderArea();
+	Rect viewPort(viewPortRaw.topLeft() / scaling, viewPortRaw.dimensions() / scaling );
 
-	pStart += offset;
-	pEnd += offset;
+	Point workaroundOffset(8,8); // not sure why it is needed. Removing leads to incorrect clipping near view edges
 
-	if(viewPort.isInside(pStart) && viewPort.isInside(pEnd))
+	if(viewPort.isInside(pStart + workaroundOffset) && viewPort.isInside(pEnd + workaroundOffset))
 	{
 		target.drawLine(pStart, pEnd, ColorRGBA(255, 255, 0), ColorRGBA(255, 0, 0));
 	}

+ 1 - 1
client/mapView/MapView.cpp

@@ -65,7 +65,7 @@ void BasicMapView::render(Canvas & target, bool fullUpdate)
 	tilesCache->update(controller->getContext());
 	tilesCache->render(controller->getContext(), targetClipped, fullUpdate);
 
-	MapOverlayLogVisualizer r(target, model);
+	MapOverlayLogVisualizer r(targetClipped, model);
 	logVisual->visualize(r);
 }