|
|
@@ -67,7 +67,7 @@ void CPrivilegedInfoCallback::getTilesInRange(std::unordered_set<int3, ShashInt3
|
|
|
return;
|
|
|
}
|
|
|
if(radious == CBuilding::HEIGHT_SKYSHIP) //reveal entire map
|
|
|
- getAllTiles (tiles, player, -1, 0);
|
|
|
+ getAllTiles (tiles, player, -1, MapTerrainFilterMode::NONE);
|
|
|
else
|
|
|
{
|
|
|
const TeamState * team = !player ? nullptr : gs->getPlayerTeam(*player);
|
|
|
@@ -91,15 +91,15 @@ void CPrivilegedInfoCallback::getTilesInRange(std::unordered_set<int3, ShashInt3
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void CPrivilegedInfoCallback::getAllTiles(std::unordered_set<int3, ShashInt3> & tiles, boost::optional<PlayerColor> Player, int level, int surface) const
|
|
|
+void CPrivilegedInfoCallback::getAllTiles(std::unordered_set<int3, ShashInt3> & tiles, boost::optional<PlayerColor> Player, int level, MapTerrainFilterMode tileFilterMode) const
|
|
|
{
|
|
|
if(!!Player && *Player >= PlayerColor::PLAYER_LIMIT)
|
|
|
{
|
|
|
logGlobal->error("Illegal call to getAllTiles !");
|
|
|
return;
|
|
|
}
|
|
|
- bool water = surface == 0 || surface == 2,
|
|
|
- land = surface == 0 || surface == 1;
|
|
|
+// bool water = surface == 0 || surface == 2,
|
|
|
+// land = surface == 0 || surface == 1;
|
|
|
|
|
|
std::vector<int> floors;
|
|
|
if(level == -1)
|
|
|
@@ -114,13 +114,32 @@ void CPrivilegedInfoCallback::getAllTiles(std::unordered_set<int3, ShashInt3> &
|
|
|
|
|
|
for (auto zd : floors)
|
|
|
{
|
|
|
-
|
|
|
for (int xd = 0; xd < gs->map->width; xd++)
|
|
|
{
|
|
|
for (int yd = 0; yd < gs->map->height; yd++)
|
|
|
{
|
|
|
- if ((getTile (int3 (xd,yd,zd))->terType->isWater() && water)
|
|
|
- || (getTile (int3 (xd,yd,zd))->terType->isLand() && land))
|
|
|
+ bool isTileEligible = false;
|
|
|
+
|
|
|
+ switch(tileFilterMode)
|
|
|
+ {
|
|
|
+ case MapTerrainFilterMode::NONE:
|
|
|
+ isTileEligible = true;
|
|
|
+ break;
|
|
|
+ case MapTerrainFilterMode::WATER:
|
|
|
+ isTileEligible = getTile (int3 (xd,yd,zd))->terType->isWater();
|
|
|
+ break;
|
|
|
+ case MapTerrainFilterMode::LAND:
|
|
|
+ isTileEligible = getTile (int3 (xd,yd,zd))->terType->isLand();
|
|
|
+ break;
|
|
|
+ case MapTerrainFilterMode::LAND_CARTOGRAPHER:
|
|
|
+ isTileEligible = getTile(int3 (xd,yd,zd))->terType->isSurfaceCartographerCompatible();
|
|
|
+ break;
|
|
|
+ case MapTerrainFilterMode::UNDERGROUND_CARTOGRAPHER:
|
|
|
+ isTileEligible = getTile(int3 (xd,yd,zd))->terType->isUndergroundCartographerCompatible();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isTileEligible)
|
|
|
tiles.insert(int3(xd,yd,zd));
|
|
|
}
|
|
|
}
|