#include "Tile.h"
#include "Trigger.h"
#include "../graphics/Sprite.h"
+#include "../loader/TypeDescription.h"
#include "../sdl/utility.h"
#include <stdexcept>
using geometry::Vector;
+using loader::FieldDescription;
+using loader::TypeDescription;
namespace map {
}
}
+
+void Map::CreateTypeDescription() {
+ Map m;
+
+ int areaId(TypeDescription::GetTypeId("Area"));
+ int entityId(TypeDescription::GetTypeId("Entity"));
+ int imageId(TypeDescription::GetTypeId("Image"));
+ int numberId(TypeDescription::GetTypeId("Number"));
+ int spriteId(TypeDescription::GetTypeId("Sprite"));
+ int triggerId(TypeDescription::GetTypeId("Trigger"));
+
+ TypeDescription &td(TypeDescription::CreateOrGet("Map"));
+ td.SetConstructor(&Construct);
+ td.SetSize(sizeof(Map));
+
+ td.AddField("tileset", FieldDescription(((char *)&m.tileset) - ((char *)&m), spriteId).SetReferenced());
+ td.AddField("battlebg", FieldDescription(((char *)&m.battlebg) - ((char *)&m), imageId).SetReferenced());
+ td.AddField("areas", FieldDescription(((char *)&m.areas) - ((char *)&m), areaId).SetReferenced().SetAggregate());
+ td.AddField("triggers", FieldDescription(((char *)&m.triggers) - ((char *)&m), triggerId).SetReferenced().SetAggregate());
+ td.AddField("entities", FieldDescription(((char *)&m.entities) - ((char *)&m), entityId).SetReferenced().SetAggregate());
+ td.AddField("width", FieldDescription(((char *)&m.width) - ((char *)&m), numberId));
+}
+
+void Map::Construct(void *data) {
+ new (data) Map;
+}
+
}