| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | /* * MapOverlayLogVisualizer.cpp, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */#include "StdInc.h"#include "MapOverlayLogVisualizer.h"#include "MapViewModel.h"#include "../../lib/logging/VisualLogger.h"#include "../render/Canvas.h"#include "../render/Colors.h"#include "../render/EFont.h"#include "../render/IFont.h"#include "../render/Graphics.h"#include "../gui/TextAlignment.h"MapOverlayLogVisualizer::MapOverlayLogVisualizer(Canvas & target, std::shared_ptr<MapViewModel> model)	: target(target), model(model){}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;	pStart += offset;	pEnd += offset;	if(viewPort.isInside(pStart) && viewPort.isInside(pEnd))	{		target.drawLine(pStart, pEnd, ColorRGBA(255, 255, 0), ColorRGBA(255, 0, 0));	}}void MapOverlayLogVisualizer::drawText(	int3 tile,	int lineNumber,	std::string text,	std::optional<ColorRGBA> background){	const Point offset = Point(6, 6);	auto level = model->getLevel();	if(tile.z != level)		return;	auto pStart = offset + model->getTargetTileArea(tile).topLeft();	auto viewPort = target.getRenderArea();	ColorRGBA color = Colors::YELLOW;		if(background)	{		color = ((background->b + background->r + background->g) < 300)			? Colors::WHITE			: Colors::BLACK;	}	if(viewPort.isInside(pStart))	{		int w = graphics->fonts[EFonts::FONT_TINY]->getStringWidth(text);		int h = graphics->fonts[EFonts::FONT_TINY]->getLineHeight();		pStart.y += h * lineNumber;		if(background)		{			target.drawColor(Rect(pStart, Point(w + 4, h)), *background);			pStart.x += 2;		}		target.drawText(pStart, EFonts::FONT_TINY, color, ETextAlignment::TOPLEFT, text);	}}
 |