]> git.localhorst.tv Git - l2e.git/blobdiff - src/map/Entity.cpp
closed the gap between battle and map state (yay)
[l2e.git] / src / map / Entity.cpp
index 610e58551510a556db8c6045db23ae9de81ddc15..01a8e9c384012a81ce15d5fc872c4342f4fab893 100644 (file)
@@ -7,13 +7,20 @@
 
 #include "Entity.h"
 
+#include "../loader/TypeDescription.h"
+
 using geometry::Vector;
+using loader::FieldDescription;
+using loader::TypeDescription;
 
 namespace map {
 
 Entity::Entity()
 : follower(0)
 , animation(0)
+, partyLayout(0)
+, monsters(0)
+, numMonsters(0)
 , orientation(ORIENTATION_NORTH)
 , speed(0)
 , flags(0) {
@@ -109,4 +116,33 @@ void Entity::Render(SDL_Surface *dest, const Vector<int> &offset) const {
        }
 }
 
+
+void Entity::CreateTypeDescription() {
+       Entity e;
+
+       int animationId(TypeDescription::GetTypeId("Animation"));
+       int monsterId(TypeDescription::GetTypeId("Monster"));
+       int partyLayoutId(TypeDescription::GetTypeId("PartyLayout"));
+       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).SetReferenced());
+       td.AddField("partyLayout", FieldDescription(((char *)&e.partyLayout) - ((char *)&e), partyLayoutId).SetReferenced());
+       td.AddField("monsters", FieldDescription(((char *)&e.monsters) - ((char *)&e), monsterId).SetReferenced().SetAggregate());
+       td.AddField("spriteOffset", FieldDescription(((char *)&e.spriteOffset) - ((char *)&e), vectorId));
+}
+
+void Entity::Construct(void *data) {
+       new (data) Entity;
+}
+
+void Entity::Load(void *data) {
+       Entity *entity(reinterpret_cast<Entity *>(data));
+       entity->runner.ChangeAnimation(entity->animation);
+}
+
 }