Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
MapManager.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SKYFIRE_MAPMANAGER_H
7#define SKYFIRE_MAPMANAGER_H
8
9#include "GridStates.h"
10#include "Map.h"
11#include "MapUpdater.h"
12#include "Object.h"
13#include "Platform/Singleton.h"
14
15#include <mutex>
16
17
18class Transport;
19struct TransportCreatureProto;
20
22{
23 friend class Skyfire::Singleton<MapManager, Skyfire::Mutex>;
24
25public:
26 Map* CreateBaseMap(uint32 mapId);
27 Map* FindBaseNonInstanceMap(uint32 mapId) const;
28 Map* CreateMap(uint32 mapId, Player* player);
29 Map* FindMap(uint32 mapId, uint32 instanceId) const;
30
31 uint16 GetAreaFlag(uint32 mapid, float x, float y, float z) const
32 {
33 Map const* m = const_cast<MapManager*>(this)->CreateBaseMap(mapid);
34 return m->GetAreaFlag(x, y, z);
35 }
36 uint32 GetAreaId(uint32 mapid, float x, float y, float z) const
37 {
38 return Map::GetAreaIdByAreaFlag(GetAreaFlag(mapid, x, y, z), mapid);
39 }
40 uint32 GetZoneId(uint32 mapid, float x, float y, float z) const
41 {
42 return Map::GetZoneIdByAreaFlag(GetAreaFlag(mapid, x, y, z), mapid);
43 }
44 void GetZoneAndAreaId(uint32& zoneid, uint32& areaid, uint32 mapid, float x, float y, float z)
45 {
46 Map::GetZoneAndAreaIdByAreaFlag(zoneid, areaid, GetAreaFlag(mapid, x, y, z), mapid);
47 }
48
49 void Initialize(void);
50 void Update(uint32);
51
59
61 {
64
65 i_timer.SetInterval(t);
66 i_timer.Reset();
67 }
68
69 //void LoadGrid(int mapid, int instId, float x, float y, const WorldObject* obj, bool no_unload = false);
70 void UnloadAll();
71
72 static bool ExistMapAndVMap(uint32 mapid, float x, float y);
73 static bool IsValidMAP(uint32 mapid, bool startUp);
74
75 static bool IsValidMapCoord(uint32 mapid, float x, float y)
76 {
77 return IsValidMAP(mapid, false) && Skyfire::IsValidMapCoord(x, y);
78 }
79
80 static bool IsValidMapCoord(uint32 mapid, float x, float y, float z)
81 {
82 return IsValidMAP(mapid, false) && Skyfire::IsValidMapCoord(x, y, z);
83 }
84
85 static bool IsValidMapCoord(uint32 mapid, float x, float y, float z, float o)
86 {
87 return IsValidMAP(mapid, false) && Skyfire::IsValidMapCoord(x, y, z, o);
88 }
89
90 static bool IsValidMapCoord(WorldLocation const& loc)
91 {
92 return IsValidMapCoord(loc.GetMapId(), loc.GetPositionX(), loc.GetPositionY(), loc.GetPositionZ(), loc.GetOrientation());
93 }
94
96
97 bool CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck = false);
99
100 /* statistics */
103
104 // Instance ID management
105 void InitInstanceIds();
107 void RegisterInstanceId(uint32 instanceId);
108 void FreeInstanceId(uint32 instanceId);
109
111 void SetNextInstanceId(uint32 nextInstanceId) { _nextInstanceId = nextInstanceId; };
112
114
115private:
117 typedef std::vector<bool> InstanceIds;
118
119 // debugging code, should be deleted some day
120 void checkAndCorrectGridStatesArray(); // just for debugging to find some memory overwrites
121 GridState* i_GridStates[MAX_GRID_STATE] = { }; // shadow entries to the global array in Map.cpp
123
124 MapManager();
125 ~MapManager();
126
127 Map* FindBaseMap(uint32 mapId) const
128 {
129 MapMapType::const_iterator iter = i_maps.find(mapId);
130 return (iter == i_maps.end() ? NULL : iter->second);
131 }
132
135
136 std::mutex Lock;
140
144};
145#define sMapMgr Skyfire::Singleton<MapManager, Skyfire::Mutex>::instance()
146#endif
std::uint32_t uint32
Definition Define.h:77
std::uint16_t uint16
Definition Define.h:78
#define MIN_GRID_DELAY
Definition GridDefines.h:31
#define MIN_MAP_UPDATE_DELAY
Definition GridDefines.h:32
@ MAX_GRID_STATE
Definition NGrid.h:54
#define UNORDERED_MAP
Definition Map.h:238
static void GetZoneAndAreaIdByAreaFlag(uint32 &zoneid, uint32 &areaid, uint16 areaflag, uint32 map_id)
Definition Map.cpp:2223
static uint32 GetAreaIdByAreaFlag(uint16 areaflag, uint32 map_id)
Definition Map.cpp:2203
uint16 GetAreaFlag(float x, float y, float z, bool *isOutdoors=0) const
Definition Map.cpp:2063
static uint32 GetZoneIdByAreaFlag(uint16 areaflag, uint32 map_id)
Definition Map.cpp:2213
void RegisterInstanceId(uint32 instanceId)
Map * FindBaseNonInstanceMap(uint32 mapId) const
void SetNextInstanceId(uint32 nextInstanceId)
Definition MapManager.h:111
static bool IsValidMapCoord(uint32 mapid, float x, float y, float z, float o)
Definition MapManager.h:85
InstanceIds _instanceIds
Definition MapManager.h:141
uint32 GetNumPlayersInInstances()
static bool ExistMapAndVMap(uint32 mapid, float x, float y)
void SetMapUpdateInterval(uint32 t)
Definition MapManager.h:60
MapUpdater m_updater
Definition MapManager.h:143
void checkAndCorrectGridStatesArray()
GridState * i_GridStates[MAX_GRID_STATE]
Definition MapManager.h:121
static bool IsValidMapCoord(uint32 mapid, float x, float y)
Definition MapManager.h:75
Map * FindBaseMap(uint32 mapId) const
Definition MapManager.h:127
MapManager & operator=(const MapManager &)
uint32 i_gridCleanUpDelay
Definition MapManager.h:137
UNORDERED_MAP< uint32, Map * > MapMapType
Definition MapManager.h:116
void Initialize(void)
void Update(uint32)
void DoDelayedMovesAndRemoves()
Map * FindMap(uint32 mapId, uint32 instanceId) const
uint32 GetZoneId(uint32 mapid, float x, float y, float z) const
Definition MapManager.h:40
void InitializeVisibilityDistanceInfo()
void UnloadAll()
std::vector< bool > InstanceIds
Definition MapManager.h:117
void SetGridCleanUpDelay(uint32 t)
Definition MapManager.h:52
Map * CreateMap(uint32 mapId, Player *player)
uint32 GetNumInstances()
static bool IsValidMapCoord(WorldLocation const &loc)
Definition MapManager.h:90
uint32 GetNextInstanceId() const
Definition MapManager.h:110
MapUpdater * GetMapUpdater()
Definition MapManager.h:113
uint32 _nextInstanceId
Definition MapManager.h:142
MapManager(const MapManager &)
uint16 GetAreaFlag(uint32 mapid, float x, float y, float z) const
Definition MapManager.h:31
MapMapType i_maps
Definition MapManager.h:138
void InitInstanceIds()
int i_GridStateErrorCount
Definition MapManager.h:122
std::mutex Lock
Definition MapManager.h:136
bool CanPlayerEnter(uint32 mapid, Player *player, bool loginCheck=false)
void GetZoneAndAreaId(uint32 &zoneid, uint32 &areaid, uint32 mapid, float x, float y, float z)
Definition MapManager.h:44
Map * CreateBaseMap(uint32 mapId)
static bool IsValidMAP(uint32 mapid, bool startUp)
uint32 GetAreaId(uint32 mapid, float x, float y, float z) const
Definition MapManager.h:36
uint32 GenerateInstanceId()
IntervalTimer i_timer
Definition MapManager.h:139
void FreeInstanceId(uint32 instanceId)
static bool IsValidMapCoord(uint32 mapid, float x, float y, float z)
Definition MapManager.h:80
uint32 GetMapId() const
Definition Object.h:546
bool IsValidMapCoord(float c)
float GetPositionZ() const
Definition Object.h:330
float GetOrientation() const
Definition Object.h:331
float GetPositionX() const
Definition Object.h:328
float GetPositionY() const
Definition Object.h:329