Jelajahi Sumber

Implemented grayscale filter for map

Ivan Savenko 2 tahun lalu
induk
melakukan
f6cf8b23c2

+ 10 - 0
client/mapRenderer/MapRenderer.cpp

@@ -503,6 +503,16 @@ void MapRendererObjects::renderImage(const IMapRendererContext & context, Canvas
 	if ( offsetPixels.x < image->dimensions().x && offsetPixels.y < image->dimensions().y)
 	{
 		Point imagePos = image->dimensions() - offsetPixels - Point(32, 32);
+
+		//if (transparency == 255)
+		//{
+		//	Canvas intermediate(Point(32,32));
+		//	intermediate.enableTransparency(true);
+		//	image->setBlitMode(EImageBlitMode::OPAQUE);
+		//	intermediate.draw(image, Point(0, 0), Rect(imagePos, Point(32,32)));
+		//	target.draw(intermediate, Point(0,0));
+		//	return;
+		//}
 		target.draw(image, Point(0, 0), Rect(imagePos, Point(32,32)));
 	}
 }

+ 5 - 0
client/mapRenderer/MapRendererContext.cpp

@@ -142,6 +142,11 @@ bool MapRendererContext::tileAnimated(const int3 & coordinates) const
 	return false;
 }
 
+bool MapRendererContext::filterGrayscale() const
+{
+	return false;//true;
+}
+
 bool MapRendererContext::showOverlay() const
 {
 	return worldViewModeActive;

+ 1 - 0
client/mapRenderer/MapRendererContext.h

@@ -121,6 +121,7 @@ public:
 	size_t terrainImageIndex(size_t groupSize) const override;
 	size_t overlayImageIndex(const int3 & coordinates) const override;
 
+	bool filterGrayscale() const override;
 	bool showOverlay() const override;
 	bool showGrid() const override;
 	bool showVisitable() const override;

+ 3 - 0
client/mapRenderer/MapViewCache.cpp

@@ -88,6 +88,9 @@ void MapViewCache::updateTile(const std::shared_ptr<const IMapRendererContext> &
 		target.drawScaled(*intermediate, Point(0, 0), model->getSingleTileSize());
 	}
 
+	if (context->filterGrayscale())
+		target.applyGrayscale();
+
 	oldCacheEntry = newCacheEntry;
 	tilesUpToDate[cacheX][cacheY] = false;
 }