From c23fc3446f2eab1e1a8962b4d0d8c880ab2fcccf Mon Sep 17 00:00:00 2001 From: David Cernat Date: Fri, 6 Jul 2018 03:54:34 +0300 Subject: [PATCH] [Client] Avoid sending map tiles for Wilderness cells --- apps/openmw/mwmp/Worldstate.cpp | 3 --- apps/openmw/mwrender/globalmap.cpp | 37 ++++++++++++++++++------------ 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/apps/openmw/mwmp/Worldstate.cpp b/apps/openmw/mwmp/Worldstate.cpp index 8b08a810b..1995f2b39 100644 --- a/apps/openmw/mwmp/Worldstate.cpp +++ b/apps/openmw/mwmp/Worldstate.cpp @@ -65,9 +65,6 @@ void Worldstate::sendMapExplored(int cellX, int cellY, const std::vector& getNetworking()->getWorldstatePacket(ID_WORLD_MAP)->setWorldstate(this); 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() diff --git a/apps/openmw/mwrender/globalmap.cpp b/apps/openmw/mwrender/globalmap.cpp index 0f6b0d47a..ebeccdbbe 100644 --- a/apps/openmw/mwrender/globalmap.cpp +++ b/apps/openmw/mwrender/globalmap.cpp @@ -651,6 +651,7 @@ namespace MWRender 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 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) { @@ -661,28 +662,34 @@ namespace MWRender 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 (!readerwriter) + if (MWBase::Environment::get().getWorld()->getExterior(cellX, cellY)->getCell()->mContextList.empty() == false) { - std::cerr << "Error: Can't write temporary map image, no '" << "png" << "' readerwriter found" << std::endl; - return; - } + LOG_MESSAGE_SIMPLE(Log::LOG_ERROR, "New global map tile corresponds to cell %i, %i", originToCellX.at(imageDest.mX), originToCellY.at(imageDest.mY)); - 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()) - { - std::cerr << "Error: Can't write temporary map image: " << result.message() << " code " << result.status() << std::endl; - } + osgDB::ReaderWriter::WriteResult result = readerwriter->writeImage(*imageDest.mImage, ostream); - std::string stringData = ostream.str(); - std::vector vectorData = std::vector(stringData.begin(), stringData.end()); + if (!result.success()) + { + 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 vectorData = std::vector(stringData.begin(), stringData.end()); + + worldstate->sendMapExplored(cellX, cellY, vectorData); + } } } /*