#include #include namespace { void serialize_entity(Archive& ar, uint16 /*version*/, void* payload) { Assert(payload); Entity* entity = static_cast(payload); SERIALIZE(ar, id, entity->ID); SERIALIZE(ar, position, entity->position); } } // namespace DEFINE_CLASS_VERSIONED(Entity, 1, nullptr, serialize_entity) DEFINE_ENTITY_VERSIONED(Inert, 1, nullptr) void serialize(Archive& ar, NonNullPtr entity) { // Entity fields serialize(ar, Entity::kind, entity.Get()); // Derived fields if (entity->derived_kind != nullptr && entity->derived != nullptr) { serialize(ar, entity->derived_kind, entity->derived); } }