map.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIFE_MAP_MAP_H
00023 #define FIFE_MAP_MAP_H
00024
00025
00026 #include <list>
00027 #include <string>
00028 #include <vector>
00029
00030
00031
00032
00033
00034
00035
00036 #include "util/base/resourceclass.h"
00037 #include "util/resource/resource.h"
00038 #include "model/metamodel/timeprovider.h"
00039 #include "util/structures/rect.h"
00040
00041 #include "location.h"
00042
00043 namespace FIFE {
00044
00045 class RendererBase;
00046 class RenderBackend;
00047 class ImagePool;
00048 class AnimationPool;
00049 class Layer;
00050 class CellGrid;
00051 class Map;
00052 class Camera;
00053
00056 class MapChangeListener {
00057 public:
00058 virtual ~MapChangeListener() {};
00059
00067 virtual void onMapChanged(Map* map, std::vector<Layer*>& changedLayers) = 0;
00068
00073 virtual void onLayerCreate(Map* map, Layer* layer) = 0;
00074
00080 virtual void onLayerDelete(Map* map, Layer* layer) = 0;
00081 };
00082
00088 class Map : public ResourceClass {
00089 public:
00090
00095 Map(const std::string& identifier, RenderBackend* renderbackend,
00096 const std::vector<RendererBase*>& renderers, ImagePool* imagepool,
00097 AnimationPool* animpool, TimeProvider* tp_master=NULL);
00098
00101 ~Map();
00102
00105 const std::string& getId() const { return m_id; }
00106
00109 void setId(const std::string& id) { m_id = id; }
00110
00113 Layer* createLayer(const std::string& identifier, CellGrid* grid);
00114
00117 void deleteLayer(Layer*);
00118
00121 const std::list<Layer*>& getLayers() const { return m_layers; }
00122
00125 Layer* getLayer(const std::string& identifier);
00126
00129 uint32_t getNumLayers() const;
00130
00133 void deleteLayers();
00134
00137 void getMatchingCoordinates(const ModelCoordinate& coord_to_map, const Layer* from_layer,
00138 const Layer* to_layer, std::vector<ModelCoordinate>& matching_coords) const;
00139
00143 bool update();
00144
00147 void setTimeMultiplier(float multip) { m_timeprovider.setMultiplier(multip); }
00148
00151 float getTimeMultiplier() const { return m_timeprovider.getMultiplier(); }
00152
00155 TimeProvider* getTimeProvider() { return &m_timeprovider; }
00156
00160 void addChangeListener(MapChangeListener* listener);
00161
00165 void removeChangeListener(MapChangeListener* listener);
00166
00169 bool isChanged() { return !m_changedlayers.empty(); }
00170
00173 std::vector<Layer*>& getChangedLayers() { return m_changedlayers; }
00174
00178 Camera* addCamera(const std::string& id, Layer *layer, const Rect& viewport);
00179
00182 void removeCamera(const std::string& id);
00183
00186 Camera* getCamera(const std::string& id);
00187
00190 std::vector<Camera*>& getCameras();
00191
00192 private:
00193 std::string m_id;
00194
00195 std::list<Layer*> m_layers;
00196 TimeProvider m_timeprovider;
00197
00198 Map(const Map& map);
00199 Map& operator=(const Map& map);
00200
00201
00202 std::vector<MapChangeListener*> m_changelisteners;
00203
00204
00205 std::vector<Layer*> m_changedlayers;
00206
00207
00208 std::vector<Camera*> m_cameras;
00209
00210 RenderBackend* m_renderbackend;
00211 ImagePool* m_imagepool;
00212 AnimationPool* m_animpool;
00213
00214
00215 std::vector<RendererBase*> m_renderers;
00216
00217
00218 bool m_changed;
00219 };
00220
00221 }
00222
00223 #endif
00224