aboutsummaryrefslogtreecommitdiff
path: root/src/common/Collision/Management/MMapManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/Collision/Management/MMapManager.h')
-rw-r--r--src/common/Collision/Management/MMapManager.h51
1 files changed, 18 insertions, 33 deletions
diff --git a/src/common/Collision/Management/MMapManager.h b/src/common/Collision/Management/MMapManager.h
index 45c0466e687..9973f37d51c 100644
--- a/src/common/Collision/Management/MMapManager.h
+++ b/src/common/Collision/Management/MMapManager.h
@@ -19,40 +19,19 @@
#define _MMAP_MANAGER_H
#include "Define.h"
-#include "DetourNavMesh.h"
-#include "DetourNavMeshQuery.h"
-#include "Hash.h"
-#include <string>
+#include <DetourNavMesh.h>
+#include <DetourNavMeshQuery.h>
+#include <memory>
+#include <string_view>
#include <unordered_map>
#include <vector>
// move map related classes
namespace MMAP
{
- typedef std::unordered_map<uint32, dtTileRef> MMapTileSet;
- typedef std::unordered_map<std::pair<uint32, uint32>, dtNavMeshQuery*> NavMeshQuerySet;
+ struct MMapData;
- // dummy struct to hold map's mmap data
- struct TC_COMMON_API MMapData
- {
- MMapData(dtNavMesh* mesh) : navMesh(mesh) { }
- ~MMapData()
- {
- for (NavMeshQuerySet::iterator i = navMeshQueries.begin(); i != navMeshQueries.end(); ++i)
- dtFreeNavMeshQuery(i->second);
-
- if (navMesh)
- dtFreeNavMesh(navMesh);
- }
-
- // we have to use single dtNavMeshQuery for every instance, since those are not thread safe
- NavMeshQuerySet navMeshQueries; // instanceId to query
-
- dtNavMesh* navMesh;
- MMapTileSet loadedTileRefs; // maps [map grid coords] to [dtTile]
- };
-
- typedef std::unordered_map<uint32, MMapData*> MMapDataSet;
+ typedef std::unordered_map<uint32, std::unique_ptr<MMapData>> MMapDataSet;
enum class LoadResult : uint8
{
@@ -69,12 +48,18 @@ namespace MMAP
class TC_COMMON_API MMapManager
{
public:
- MMapManager() : loadedTiles(0), thread_safe_environment(true) {}
+ MMapManager();
+ MMapManager(MMapManager const& other) = delete;
+ MMapManager(MMapManager&& other) noexcept = delete;
+ MMapManager& operator=(MMapManager const& other) = delete;
+ MMapManager& operator=(MMapManager&& other) noexcept = delete;
~MMapManager();
+ static MMapManager* instance();
+
void InitializeThreadUnsafe(std::unordered_map<uint32, std::vector<uint32>> const& mapData);
- LoadResult loadMap(std::string const& basePath, uint32 mapId, int32 x, int32 y);
- bool loadMapInstance(std::string const& basePath, uint32 meshMapId, uint32 instanceMapId, uint32 instanceId);
+ LoadResult loadMap(std::string_view basePath, uint32 mapId, int32 x, int32 y);
+ bool loadMapInstance(std::string_view basePath, uint32 meshMapId, uint32 instanceMapId, uint32 instanceId);
bool unloadMap(uint32 mapId, int32 x, int32 y);
bool unloadMap(uint32 mapId);
bool unloadMapInstance(uint32 meshMapId, uint32 instanceMapId, uint32 instanceId);
@@ -86,13 +71,13 @@ namespace MMAP
uint32 getLoadedTilesCount() const { return loadedTiles; }
uint32 getLoadedMapsCount() const { return uint32(loadedMMaps.size()); }
private:
- LoadResult loadMapData(std::string const& basePath, uint32 mapId);
+ LoadResult loadMapData(std::string_view basePath, uint32 mapId);
uint32 packTileID(int32 x, int32 y);
MMapDataSet::const_iterator GetMMapData(uint32 mapId) const;
MMapDataSet loadedMMaps;
- uint32 loadedTiles;
- bool thread_safe_environment;
+ uint32 loadedTiles = 0;
+ bool thread_safe_environment = true;
std::unordered_map<uint32, uint32> parentMapData;
};