]> git.localhorst.tv Git - l2e.git/blobdiff - src/map/Entity.cpp
store complete entity in hero
[l2e.git] / src / map / Entity.cpp
index 610e58551510a556db8c6045db23ae9de81ddc15..e1f970bea644103be655e27a094ffa478c4a3169 100644 (file)
@@ -7,7 +7,11 @@
 
 #include "Entity.h"
 
+#include "../loader/TypeDescription.h"
+
 using geometry::Vector;
+using loader::FieldDescription;
+using loader::TypeDescription;
 
 namespace map {
 
@@ -109,4 +113,29 @@ void Entity::Render(SDL_Surface *dest, const Vector<int> &offset) const {
        }
 }
 
+
+void Entity::CreateTypeDescription() {
+       Entity e;
+
+       int animationId(TypeDescription::GetTypeId("Animation"));
+       int vectorId(TypeDescription::GetTypeId("Vector"));
+
+       TypeDescription &td(TypeDescription::CreateOrGet("Entity"));
+       td.SetConstructor(&Construct);
+       td.SetLoader(&Load);
+       td.SetSize(sizeof(Entity));
+
+       td.AddField("animation", FieldDescription(((char *)&e.animation) - ((char *)&e), animationId, true));
+       td.AddField("spriteOffset", FieldDescription(((char *)&e.spriteOffset) - ((char *)&e), vectorId, false));
+}
+
+void Entity::Construct(void *data) {
+       new (data) Entity;
+}
+
+void Entity::Load(void *data) {
+       Entity *entity(reinterpret_cast<Entity *>(data));
+       entity->runner.ChangeAnimation(entity->animation);
+}
+
 }