Quellcode durchsuchen

Fixed some calculation to resolve edge tiles being partially cut-off in advmap world view mode;

Fay vor 10 Jahren
Ursprung
Commit
dbedf245a0
1 geänderte Dateien mit 9 neuen und 8 gelöschten Zeilen
  1. 9 8
      client/mapHandler.cpp

+ 9 - 8
client/mapHandler.cpp

@@ -710,11 +710,11 @@ void CMapHandler::CMapWorldViewBlitter::init(const MapDrawingInfo * drawingInfo)
 	tileSize = (int) floorf(32.0f * info->scale);
 	halfTileSizeCeil = (int)ceilf(tileSize / 2.0f);
 
-	tileCount.x = (int) ceilf((float)info->drawBounds->w / tileSize) + 1;
-	tileCount.y = (int) ceilf((float)info->drawBounds->h / tileSize) + 1;
+	tileCount.x = (int) ceilf((float)info->drawBounds->w / tileSize);
+	tileCount.y = (int) ceilf((float)info->drawBounds->h / tileSize);
 
-	initPos.x = parent->offsetX + info->drawBounds->x;
-	initPos.y = parent->offsetY + info->drawBounds->y;
+	initPos.x = info->drawBounds->x;
+	initPos.y = info->drawBounds->y;
 
 	realTileRect = Rect(initPos.x, initPos.y, tileSize, tileSize);
 	defaultTileRect = Rect(0, 0, tileSize, tileSize);
@@ -729,10 +729,11 @@ SDL_Rect CMapHandler::CMapWorldViewBlitter::clip(SDL_Surface * targetSurf) const
 
 	SDL_FillRect(targetSurf, info->drawBounds, SDL_MapRGB(targetSurf->format, 0, 0, 0));
 	// makes the clip area smaller if the map is smaller than the screen frame
-	Rect clipRect(std::max(info->drawBounds->x, -topTile.x * tileSize),
-				  std::max(info->drawBounds->y, -topTile.y * tileSize),
-				  std::min(info->drawBounds->w, parent->sizes.x * tileSize),
-				  std::min(info->drawBounds->h, parent->sizes.y * tileSize));
+	// (actually, it could be made 1 tile bigger so that overlay icons on edge tiles could be drawn partly outside)
+	Rect clipRect(std::max(info->drawBounds->x, info->drawBounds->x - topTile.x * tileSize),
+				  std::max(info->drawBounds->y, info->drawBounds->y - topTile.y * tileSize),
+				  std::min(info->drawBounds->x + info->drawBounds->w, parent->sizes.x * tileSize),
+				  std::min(info->drawBounds->y + info->drawBounds->h, parent->sizes.y * tileSize));
 	SDL_GetClipRect(targetSurf, &prevClip);
 	SDL_SetClipRect(targetSurf, &clipRect); //preventing blitting outside of that rect
 	return prevClip;