summaryrefslogtreecommitdiffstats
path: root/src/MapManager.h
blob: 05673c6942119e615b24dd4060fd5e5af1fbda82 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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;

};