Thread safe cMap manager
This commit is contained in:
76
src/MapManager.h
Normal file
76
src/MapManager.h
Normal file
@@ -0,0 +1,76 @@
|
||||
|
||||
// MapManager.h
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#include "Map.h"
|
||||
|
||||
|
||||
|
||||
|
||||
typedef cItemCallback<cMap> cMapCallback;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Manages the in-game maps of a single world - Thread safe. */
|
||||
class cMapManager
|
||||
{
|
||||
public:
|
||||
|
||||
cMapManager(cWorld * a_World);
|
||||
|
||||
/** Returns the map with the specified ID, NULL if out of range.
|
||||
*
|
||||
* WARNING: The returned map object is not thread safe.
|
||||
*/
|
||||
cMap * GetMapData(unsigned int a_ID);
|
||||
|
||||
/** Creates a new map. Returns NULL on error */
|
||||
cMap * CreateMap(int a_CenterX, int a_CenterY, int a_Scale = 3);
|
||||
|
||||
/** Calls the callback for the map with the specified ID.
|
||||
*
|
||||
* Returns true if the map was found and the callback called, false if map not found.
|
||||
* Callback return ignored.
|
||||
*/
|
||||
bool DoWithMap(unsigned int a_ID, cMapCallback & a_Callback);
|
||||
|
||||
/** Calls the callback for each map.
|
||||
*
|
||||
* Returns true if all maps processed, false if the callback aborted by returning true.
|
||||
*/
|
||||
bool ForEachMap(cMapCallback & a_Callback);
|
||||
|
||||
unsigned int GetNumMaps(void) const;
|
||||
|
||||
/** Loads the map data from the disk */
|
||||
void LoadMapData(void);
|
||||
|
||||
/** Saves the map data to the disk */
|
||||
void SaveMapData(void);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
typedef std::vector<cMap> cMapList;
|
||||
|
||||
cCriticalSection m_CS;
|
||||
|
||||
cMapList m_MapData;
|
||||
|
||||
cWorld * m_World;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user