[Client] Avoid sending map tiles for Wilderness cells

0.6.3
David Cernat 7 years ago
parent 17c234d9ca
commit c23fc3446f

@ -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()

@ -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;
}
std::ostringstream ostream; 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;
}
osgDB::ReaderWriter::WriteResult result = readerwriter->writeImage(*imageDest.mImage, ostream); std::ostringstream ostream;
if (!result.success()) osgDB::ReaderWriter::WriteResult result = readerwriter->writeImage(*imageDest.mImage, ostream);
{
std::cerr << "Error: Can't write temporary map image: " << result.message() << " code " << result.status() << std::endl;
}
std::string stringData = ostream.str(); if (!result.success())
std::vector<char> vectorData = std::vector<char>(stringData.begin(), stringData.end()); {
std::cerr << "Error: Can't write temporary map image: " << result.message() << " code " << result.status() << std::endl;
}
worldstate->sendMapExplored(cellX, cellY, vectorData); std::string stringData = ostream.str();
std::vector<char> vectorData = std::vector<char>(stringData.begin(), stringData.end());
worldstate->sendMapExplored(cellX, cellY, vectorData);
}
} }
} }
/* /*

Loading…
Cancel
Save