[Client] Avoid sending map tiles for Wilderness cells

This commit is contained in:
David Cernat 2018-07-06 03:54:34 +03:00
parent 17c234d9ca
commit c23fc3446f
2 changed files with 26 additions and 22 deletions

View file

@ -65,9 +65,6 @@ void Worldstate::sendMapExplored(int cellX, int cellY, const std::vector<char>&
getNetworking()->getWorldstatePacket(ID_WORLD_MAP)->setWorldstate(this); getNetworking()->getWorldstatePacket(ID_WORLD_MAP)->setWorldstate(this);
getNetworking()->getWorldstatePacket(ID_WORLD_MAP)->Send(); getNetworking()->getWorldstatePacket(ID_WORLD_MAP)->Send();
// Keep this tile marked as explored so we don't send any more packets for it
markExploredMapTile(mapTile.x, mapTile.y);
} }
void Worldstate::setMapExplored() void Worldstate::setMapExplored()

View file

@ -651,6 +651,7 @@ namespace MWRender
Send an ID_PLAYER_MAP packet with this map tile to the server, but only if: Send an ID_PLAYER_MAP packet with this map tile to the server, but only if:
1) We have recorded the exterior cell corresponding to this tile's coordinates 1) We have recorded the exterior cell corresponding to this tile's coordinates
2) The tile has not previously been marked as explored in this client's mwmp::Worldstate 2) The tile has not previously been marked as explored in this client's mwmp::Worldstate
3) The tile does not belong to a Wilderness cell
*/ */
if (originToCellX.count(imageDest.mX) > 0 && originToCellY.count(imageDest.mY) > 0) if (originToCellX.count(imageDest.mX) > 0 && originToCellY.count(imageDest.mY) > 0)
{ {
@ -661,28 +662,34 @@ namespace MWRender
if (!worldstate->containsExploredMapTile(cellX, cellY)) if (!worldstate->containsExploredMapTile(cellX, cellY))
{ {
LOG_MESSAGE_SIMPLE(Log::LOG_ERROR, "New global map tile corresponds to cell %i, %i", originToCellX.at(imageDest.mX), originToCellY.at(imageDest.mY)); // Keep this tile marked as explored so we don't send any more packets for it
worldstate->markExploredMapTile(cellX, cellY);
osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension("png"); if (MWBase::Environment::get().getWorld()->getExterior(cellX, cellY)->getCell()->mContextList.empty() == false)
if (!readerwriter)
{ {
std::cerr << "Error: Can't write temporary map image, no '" << "png" << "' readerwriter found" << std::endl; LOG_MESSAGE_SIMPLE(Log::LOG_ERROR, "New global map tile corresponds to cell %i, %i", originToCellX.at(imageDest.mX), originToCellY.at(imageDest.mY));
return;
osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension("png");
if (!readerwriter)
{
std::cerr << "Error: Can't write temporary map image, no '" << "png" << "' readerwriter found" << std::endl;
return;
}
std::ostringstream ostream;
osgDB::ReaderWriter::WriteResult result = readerwriter->writeImage(*imageDest.mImage, ostream);
if (!result.success())
{
std::cerr << "Error: Can't write temporary map image: " << result.message() << " code " << result.status() << std::endl;
}
std::string stringData = ostream.str();
std::vector<char> vectorData = std::vector<char>(stringData.begin(), stringData.end());
worldstate->sendMapExplored(cellX, cellY, vectorData);
} }
std::ostringstream ostream;
osgDB::ReaderWriter::WriteResult result = readerwriter->writeImage(*imageDest.mImage, ostream);
if (!result.success())
{
std::cerr << "Error: Can't write temporary map image: " << result.message() << " code " << result.status() << std::endl;
}
std::string stringData = ostream.str();
std::vector<char> vectorData = std::vector<char>(stringData.begin(), stringData.end());
worldstate->sendMapExplored(cellX, cellY, vectorData);
} }
} }
/* /*