wip entity deserialization phase 1. Unit test not passing because of globals that assume only one entity manager / game state.

This commit is contained in:
2026-09-10 22:50:18 -04:00
parent 615d36b09c
commit 58b79fb499
9 changed files with 518 additions and 259 deletions
+24 -1
View File
@@ -1,6 +1,7 @@
#include <Entity/EntityManager.h>
#include <Core/Common/EnumUtils.h>
#include <Core/Common/serialization.h>
#include <Data/World.h>
#include <Entity/Entity.h>
#include <Entity/entity_types.h>
@@ -67,7 +68,7 @@ EntityTemplate* RegisterEntity(EntityManager& manager, Entity* base, DerivedType
return ptr;
}
Entity* allocate_entity(EntityManager& manager, NonNullPtr<Class> derived_type_class)
Entity* allocate_entity(EntityManager& manager, NonNullPtr<const Class> derived_type_class)
{
Assert(derived_type_class->kind < ENTITY(Count));
Assert(derived_type_class->size_of >= sizeof(EntityTemplate));
@@ -76,6 +77,7 @@ Entity* allocate_entity(EntityManager& manager, NonNullPtr<Class> derived_type_c
Entity base_template = {};
base_template.derived_kind = derived_type_class;
base_template.is_dirty = true;
manager.Entities.PushBack(base_template);
Entity* base_ptr = manager.Entities.Back();
@@ -118,3 +120,24 @@ void UpdateEntityManager(EntityManager& manager)
}
}
}
Entity* deserialize_entity(Archive& ar, EntityManager& manager)
{
Assert(ar.loading);
String class_name;
SERIALIZE(ar, Class, class_name);
NonNullPtr<const Class> class_ptr = find_class_by_name(class_name);
NonNullPtr<Entity> entity_base = allocate_entity(manager, class_ptr);
serialize(ar, entity_base);
if (entity_base->ID >= EntityManager::ID)
{
EntityManager::ID = entity_base->ID + 1;
}
entity_base->is_dirty = false;
}