diff options
Diffstat (limited to 'src/common/Collision/Maps')
| -rw-r--r-- | src/common/Collision/Maps/MapTree.cpp | 39 | ||||
| -rw-r--r-- | src/common/Collision/Maps/MapTree.h | 27 |
2 files changed, 30 insertions, 36 deletions
diff --git a/src/common/Collision/Maps/MapTree.cpp b/src/common/Collision/Maps/MapTree.cpp index d828326806c..086ef975f1f 100644 --- a/src/common/Collision/Maps/MapTree.cpp +++ b/src/common/Collision/Maps/MapTree.cpp @@ -22,7 +22,7 @@ #include "Metric.h" #include "ModelInstance.h" #include "VMapDefinitions.h" -#include "VMapManager2.h" +#include "VMapManager.h" #include "WorldModel.h" #include <limits> #include <string> @@ -35,7 +35,7 @@ namespace VMAP { public: MapRayCallback(ModelInstance const* val, ModelIgnoreFlags ignoreFlags) : prims(val), hit(false), flags(ignoreFlags) { } - bool operator()(const G3D::Ray& ray, uint32 entry, float& distance, bool pStopAtFirstHit = true) + bool operator()(G3D::Ray const& ray, uint32 entry, float& distance, bool pStopAtFirstHit = true) { bool result = prims[entry].intersectRay(ray, distance, pStopAtFirstHit, flags); if (result) @@ -69,11 +69,6 @@ namespace VMAP //========================================================= - std::string getTileFileName(uint32 mapID, uint32 tileX, uint32 tileY, std::string_view extension) - { - return Trinity::StringFormat("{:04}/{:04}_{:02}_{:02}.{}", mapID, mapID, tileY, tileX, extension); - } - bool StaticMapTree::GetLocationInfo(Vector3 const& pos, LocationInfo& info) const { LocationInfoCallback intersectionCallBack(iTreeValues.data(), info); @@ -84,10 +79,8 @@ namespace VMAP StaticMapTree::StaticMapTree(uint32 mapID, std::string const& basePath) : iMapID(mapID), iBasePath(basePath) { - if (iBasePath.length() > 0 && iBasePath[iBasePath.length() - 1] != '/' && iBasePath[iBasePath.length() - 1] != '\\') - { + if (!iBasePath.empty() && iBasePath.back() != '/' && iBasePath.back() != '\\') iBasePath.push_back('/'); - } } //========================================================= @@ -100,7 +93,7 @@ namespace VMAP Else, pMaxDist is not modified and returns false; */ - bool StaticMapTree::getIntersectionTime(const G3D::Ray& pRay, float& pMaxDist, bool pStopAtFirstHit, ModelIgnoreFlags ignoreFlags) const + bool StaticMapTree::getIntersectionTime(G3D::Ray const& pRay, float& pMaxDist, bool pStopAtFirstHit, ModelIgnoreFlags ignoreFlags) const { float distance = pMaxDist; MapRayCallback intersectionCallBack(iTreeValues.data(), ignoreFlags); @@ -206,19 +199,19 @@ namespace VMAP explicit operator bool() const { return TileFile && SpawnIndicesFile; } }; - TileFileOpenResult OpenMapTileFile(std::string const& basePath, uint32 mapID, uint32 tileX, uint32 tileY, VMapManager2* vm) + TileFileOpenResult OpenMapTileFile(std::string const& basePath, uint32 mapID, uint32 tileX, uint32 tileY, VMapManager* vm) { TileFileOpenResult result; - result.Name = basePath + getTileFileName(mapID, tileX, tileY, "vmtile"); + result.Name = basePath + VMapManager::getTileFileName(mapID, tileX, tileY, "vmtile"); result.TileFile.reset(fopen(result.Name.c_str(), "rb")); - result.SpawnIndicesFile.reset(fopen((basePath + getTileFileName(mapID, tileX, tileY, "vmtileidx")).c_str(), "rb")); + result.SpawnIndicesFile.reset(fopen((basePath + VMapManager::getTileFileName(mapID, tileX, tileY, "vmtileidx")).c_str(), "rb")); result.UsedMapId = mapID; if (!result.TileFile) { int32 parentMapId = vm->getParentMapId(mapID); while (parentMapId != -1) { - result.Name = basePath + getTileFileName(parentMapId, tileX, tileY, "vmtile"); + result.Name = basePath + VMapManager::getTileFileName(parentMapId, tileX, tileY, "vmtile"); result.TileFile.reset(fopen(result.Name.c_str(), "rb")); result.UsedMapId = parentMapId; if (result.TileFile) @@ -232,12 +225,13 @@ namespace VMAP } //========================================================= - LoadResult StaticMapTree::CanLoadMap(const std::string& vmapPath, uint32 mapID, uint32 tileX, uint32 tileY, VMapManager2* vm) + LoadResult StaticMapTree::CanLoadMap(std::string const& vmapPath, uint32 mapID, uint32 tileX, uint32 tileY, VMapManager* vm) { std::string basePath = vmapPath; - if (basePath.length() > 0 && basePath[basePath.length() - 1] != '/' && basePath[basePath.length() - 1] != '\\') + if (!basePath.empty() && basePath.back() != '/' && basePath.back() != '\\') basePath.push_back('/'); - std::string fullname = basePath + VMapManager2::getMapFileName(mapID); + + std::string fullname = basePath + VMapManager::getMapFileName(mapID); auto rf = Trinity::make_unique_ptr_with_deleter<&::fclose>(fopen(fullname.c_str(), "rb")); if (!rf) @@ -291,7 +285,7 @@ namespace VMAP //========================================================= - LoadResult StaticMapTree::LoadMapTile(uint32 tileX, uint32 tileY, VMapManager2* vm) + LoadResult StaticMapTree::LoadMapTile(uint32 tileX, uint32 tileY, VMapManager* vm) { if (iTreeValues.empty()) { @@ -375,7 +369,7 @@ namespace VMAP //========================================================= - void StaticMapTree::UnloadMapTile(uint32 tileX, uint32 tileY, VMapManager2* vm) + void StaticMapTree::UnloadMapTile(uint32 tileX, uint32 tileY, VMapManager* vm) { uint32 tileID = packTileID(tileX, tileY); loadedTileMap::iterator tile = iLoadedTiles.find(tileID); @@ -436,9 +430,8 @@ namespace VMAP "Map: " + std::to_string(iMapID) + " TileX: " + std::to_string(tileX) + " TileY: " + std::to_string(tileY)); } - void StaticMapTree::getModelInstances(ModelInstance*& models, uint32& count) + std::span<ModelInstance const> StaticMapTree::getModelInstances() const { - models = iTreeValues.data(); - count = iTreeValues.size(); + return iTreeValues; } } diff --git a/src/common/Collision/Maps/MapTree.h b/src/common/Collision/Maps/MapTree.h index 4c088a7bad2..049b1c416b5 100644 --- a/src/common/Collision/Maps/MapTree.h +++ b/src/common/Collision/Maps/MapTree.h @@ -20,13 +20,14 @@ #include "Define.h" #include "BoundingIntervalHierarchy.h" +#include <span> #include <unordered_map> namespace VMAP { class ModelInstance; class GroupModel; - class VMapManager2; + class VMapManager; enum class LoadResult : uint8; enum class ModelIgnoreFlags : uint32; @@ -60,27 +61,27 @@ namespace VMAP std::string iBasePath; private: - bool getIntersectionTime(const G3D::Ray& pRay, float &pMaxDist, bool pStopAtFirstHit, ModelIgnoreFlags ignoreFlags) const; + bool getIntersectionTime(G3D::Ray const& pRay, float& pMaxDist, bool pStopAtFirstHit, ModelIgnoreFlags ignoreFlags) const; //bool containsLoadedMapTile(unsigned int pTileIdent) const { return(iLoadedMapTiles.containsKey(pTileIdent)); } public: - static uint32 packTileID(uint32 tileX, uint32 tileY) { return tileX<<16 | tileY; } - static void unpackTileID(uint32 ID, uint32 &tileX, uint32 &tileY) { tileX = ID >> 16; tileY = ID & 0xFF; } - static LoadResult CanLoadMap(const std::string &basePath, uint32 mapID, uint32 tileX, uint32 tileY, VMapManager2* vm); + static uint32 packTileID(uint32 tileX, uint32 tileY) { return tileX << 16 | tileY; } + static void unpackTileID(uint32 ID, uint32& tileX, uint32& tileY) { tileX = ID >> 16; tileY = ID & 0xFF; } + static LoadResult CanLoadMap(std::string const& basePath, uint32 mapID, uint32 tileX, uint32 tileY, VMapManager* vm); - StaticMapTree(uint32 mapID, const std::string &basePath); + StaticMapTree(uint32 mapID, std::string const& basePath); ~StaticMapTree(); - bool isInLineOfSight(const G3D::Vector3& pos1, const G3D::Vector3& pos2, ModelIgnoreFlags ignoreFlags) const; - bool getObjectHitPos(const G3D::Vector3& pos1, const G3D::Vector3& pos2, G3D::Vector3& pResultHitPos, float pModifyDist) const; - float getHeight(const G3D::Vector3& pPos, float maxSearchDist) const; - bool GetLocationInfo(const G3D::Vector3 &pos, LocationInfo &info) const; + bool isInLineOfSight(G3D::Vector3 const& pos1, G3D::Vector3 const& pos2, ModelIgnoreFlags ignoreFlags) const; + bool getObjectHitPos(G3D::Vector3 const& pos1, G3D::Vector3 const& pos2, G3D::Vector3& pResultHitPos, float pModifyDist) const; + float getHeight(G3D::Vector3 const& pPos, float maxSearchDist) const; + bool GetLocationInfo(G3D::Vector3 const& pos, LocationInfo& info) const; LoadResult InitMap(std::string const& fname); void UnloadMap(); - LoadResult LoadMapTile(uint32 tileX, uint32 tileY, VMapManager2* vm); - void UnloadMapTile(uint32 tileX, uint32 tileY, VMapManager2* vm); + LoadResult LoadMapTile(uint32 tileX, uint32 tileY, VMapManager* vm); + void UnloadMapTile(uint32 tileX, uint32 tileY, VMapManager* vm); uint32 numLoadedTiles() const { return uint32(iLoadedTiles.size()); } - void getModelInstances(ModelInstance* &models, uint32 &count); + std::span<ModelInstance const> getModelInstances() const; private: StaticMapTree(StaticMapTree const& right) = delete; |
