@@ -65,22 +65,16 @@ auto provider::association::context_function_header(
65
65
);
66
66
}
67
67
68
+ static auto push_back_unique (auto & vec, const auto & element) -> void {
69
+ if (std::ranges::find (vec, element) == std::end (vec)) {
70
+ vec.push_back (element);
71
+ }
72
+ }
73
+
68
74
auto provider::association::after_make_view_or_group (
69
75
codegen_plugin_context& ctx,
70
76
const common_vars& names
71
77
) -> void {
72
- auto assoc_ids = ecsact::meta::system_assoc_ids (sys_like_id);
73
- for (auto assoc_id : assoc_ids) {
74
- auto assoc_caps =
75
- ecsact::meta::system_assoc_capabilities (sys_like_id, assoc_id);
76
- auto assoc_system_details =
77
- ecsact_entt_system_details::from_capabilities (assoc_caps);
78
- auto make_view_opts = util::make_view_options (assoc_system_details);
79
- make_view_opts.view_var_name = assoc_view_names.at (assoc_id);
80
- make_view_opts.registry_var_name = names.registry_var_name ;
81
-
82
- util::make_view (ctx, make_view_opts);
83
- }
84
78
}
85
79
86
80
auto provider::association::context_function_other (
@@ -107,11 +101,24 @@ auto provider::association::entity_iteration(
107
101
make_view_opts.registry_var_name = names.registry_var_name ;
108
102
109
103
for (auto compo_id : assoc_composites.at (assoc_id)) {
104
+ // TODO: At the time of writing this is safe. It's very possible we
105
+ // allow actions to be referenecd in association fields in the near
106
+ // future and at that point this must be addressed.
107
+ auto comp_like_id = static_cast <ecsact_component_like_id>(compo_id);
108
+ if (!assoc_system_details.get_comps .contains (comp_like_id)) {
109
+ auto comp_cpp_ident = cpp_identifier (decl_full_name (comp_like_id));
110
+ push_back_unique (
111
+ make_view_opts.additional_components ,
112
+ comp_cpp_ident
113
+ );
114
+ }
110
115
}
111
116
112
117
util::make_view (ctx, make_view_opts);
113
118
}
114
119
120
+ print_other_contexts (ctx, names);
121
+
115
122
for (auto && [assoc_id, compo_ids] : assoc_composites) {
116
123
for (auto compo_id : compo_ids) {
117
124
auto field_ids = assoc_fields.at (compo_id);
@@ -177,7 +184,6 @@ auto provider::association::pre_entity_iteration(
177
184
codegen_plugin_context& ctx,
178
185
const common_vars& names
179
186
) -> void {
180
- print_other_contexts (ctx, names);
181
187
}
182
188
183
189
auto provider::association::pre_exec_system_impl (
0 commit comments