diff --git a/libs/util/include/psemek/util/ecs.hpp b/libs/util/include/psemek/util/ecs.hpp index a0debede..20b23201 100644 --- a/libs/util/include/psemek/util/ecs.hpp +++ b/libs/util/include/psemek/util/ecs.hpp @@ -550,7 +550,8 @@ namespace psemek::util static species_handle entity_species(entity_handle entity) { return {ecs_detail::unpack(entity.value).species}; } - entity_handle add_entity(species_handle species); + template + entity_handle add_entity(species_handle species, typename Components::data ... components); ecs_detail::entity_id entity_count(species_handle species) const; void remove_entity(entity_handle entity); bool entity_active(entity_handle entity); @@ -635,9 +636,11 @@ namespace psemek::util return {result}; } - inline ecs::entity_handle ecs::add_entity(species_handle species) + template + inline ecs::entity_handle ecs::add_entity(species_handle species, typename Components::data ... components) { entity_handle entity{species_[species.value]->add_entity()}; + ((get(entity) = std::move(components)), ...); for (auto const & ctor : constructors_) ctor(entity); for (auto const & ctor : species_constructors_[species.value])