30 #include "ext/tinyxml/fife_tinyxml.h"
31 #include "model/structures/map.h"
32 #include "model/structures/layer.h"
33 #include "model/structures/instance.h"
34 #include "model/metamodel/object.h"
35 #include "model/metamodel/grids/cellgrid.h"
36 #include "util/structures/point.h"
37 #include "util/structures/rect.h"
38 #include "view/visual.h"
39 #include "view/camera.h"
44 static Logger _log(LM_NATIVE_SAVERS);
58 m_objectSaver = objectSaver;
63 m_animationSaver = animationSaver;
68 m_atlasSaver = atlasSaver;
71 void MapSaver::save(
const Map& map,
const std::string& filename,
const std::vector<std::string>& importFiles) {
84 for (std::vector<std::string>::const_iterator iter = importFiles.begin(); iter != importFiles.end(); ++iter)
93 typedef std::list<Layer*> LayerList;
95 for (LayerList::iterator iter = layers.begin(); iter != layers.end(); ++iter)
98 CellGrid* grid = (*iter)->getCellGrid();
106 layerElement->
SetAttribute(
"grid_type", grid->getType());
107 layerElement->
SetAttribute(
"transparency", (*iter)->getLayerTransparency());
109 std::string pathingStrategy;
110 switch ((*iter)->getPathingStrategy())
112 case CELL_EDGES_ONLY:
114 pathingStrategy =
"cell_edges_only";
117 case CELL_EDGES_AND_DIAGONALS:
119 pathingStrategy =
"cell_edges_and_diagonals";
124 pathingStrategy =
"freeform";
129 pathingStrategy =
"cell_edges_only";
142 std::string currentNamespace =
"";
143 typedef std::vector<Instance*> InstancesContainer;
144 InstancesContainer instances = (*iter)->getInstances();
145 for (InstancesContainer::iterator iter = instances.begin(); iter != instances.end(); ++iter)
150 Object* obj = (*iter)->getObject();
151 if (!obj->getNamespace().empty() && currentNamespace != obj->getNamespace())
153 instanceElement->
SetAttribute(
"ns", obj->getNamespace());
156 currentNamespace = obj->getNamespace();
159 if (!(*iter)->getId().empty())
170 instanceElement->
SetAttribute(
"r", (*iter)->getRotation());
172 if ((*iter)->isBlocking())
174 instanceElement->
SetAttribute(
"blocking", (*iter)->isBlocking());
184 typedef std::vector<Camera*> CameraContainer;
186 for (CameraContainer::iterator iter = cameras.begin(); iter != cameras.end(); ++iter)
188 if ((*iter)->getLocationRef().getMap()->getId() == map.
getId())
193 cameraElement->
SetAttribute(
"ref_layer_id", (*iter)->getLocation().getLayer()->getId());
198 Rect viewport = (*iter)->getViewPort();
199 std::ostringstream viewportString;
200 viewportString << viewport.
x <<
","
205 cameraElement->
SetAttribute(
"viewport", viewportString.str());
207 Point p = (*iter)->getCellImageDimensions();
211 std::vector<float> lightingColor = (*iter)->getLightingColor();
212 bool writeLightingColor =
false;
213 for (uint32_t i=0; i < lightingColor.size(); ++i)
215 if (lightingColor[i] < 1.0)
217 writeLightingColor =
true;
222 if (writeLightingColor)
224 std::ostringstream lightingColorString;
225 for (uint32_t i=0; i < lightingColor.size(); ++i)
229 lightingColorString <<
",";
232 lightingColorString << lightingColor[i];
234 cameraElement->
SetAttribute(
"light_color", lightingColorString.str());