summaryrefslogblamecommitdiffstats
path: root/src/MapManager.h
blob: 05673c6942119e615b24dd4060fd5e5af1fbda82 (plain) (tree)











































































                                                                                               

// 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;

};