diff --git a/BUILD.bazel b/BUILD.bazel index 3687282..6b601bd 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -132,6 +132,7 @@ ecsact_build_recipe( exports = [ # core "ecsact_execute_systems", + "ecsact_create_registry", "ecsact_destroy_registry", "ecsact_clear_registry", "ecsact_create_entity", @@ -163,6 +164,8 @@ ecsact_build_recipe( ], ) +exports_files(["build_recipe.yml"]) + ecsact_build_recipe_bundle( name = "ecsact_rt_entt", recipes = [":ecsact_rt_entt_recipe"], diff --git a/ecsact/entt/wrapper/core.hh b/ecsact/entt/wrapper/core.hh index b326d8e..9f3f7f0 100644 --- a/ecsact/entt/wrapper/core.hh +++ b/ecsact/entt/wrapper/core.hh @@ -32,6 +32,10 @@ inline auto get_component( [[maybe_unused]] ecsact_component_id component_id, ... ) -> const void* { + if constexpr(std::is_empty_v) { + static C emptyVal; + return &emptyVal; + } auto& reg = ecsact::entt::get_registry(registry_id); auto entity = ecsact::entt::entity_id{entity_id}; assert(C::id == component_id); diff --git a/rt_entt_codegen/rt_entt_codegen.cc b/rt_entt_codegen/rt_entt_codegen.cc index 3464ac1..bf4401b 100644 --- a/rt_entt_codegen/rt_entt_codegen.cc +++ b/rt_entt_codegen/rt_entt_codegen.cc @@ -195,19 +195,13 @@ void ecsact_codegen_plugin( return; } - auto non_tag_component_ids = - details.all_components | - std::views::filter([&](ecsact_component_id comp_id) -> bool { - return !ecsact::meta::get_field_ids(comp_id).empty(); - }); - ctx.write( "result.reserve(", - std::ranges::distance(non_tag_component_ids), + std::ranges::distance(details.all_components), ");\n" ); - for(auto comp_id : non_tag_component_ids) { + for(auto comp_id : details.all_components) { auto cpp_comp_name = cpp_identifier(decl_full_name(comp_id)); ctx.write( "result.insert({::",