Skip to content

Commit 1f830a5

Browse files
committed
feat: get system caps as a list
1 parent aaa450a commit 1f830a5

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

ecsact/runtime/meta.hh

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,36 @@ ECSACT_ALWAYS_INLINE auto system_capabilities(SystemLikeID id) {
447447
return result;
448448
}
449449

450+
template<typename SystemLikeID>
451+
ECSACT_ALWAYS_INLINE auto system_capabilities_list(SystemLikeID id) {
452+
using result_t =
453+
std::vector<std::pair<ecsact_component_like_id, ecsact_system_capability>>;
454+
455+
const auto sys_like_id = ecsact_id_cast<ecsact_system_like_id>(id);
456+
auto count = ecsact_meta_system_capabilities_count(sys_like_id);
457+
std::vector<ecsact_component_like_id> components;
458+
std::vector<ecsact_system_capability> capabilities;
459+
components.resize(count);
460+
capabilities.resize(count);
461+
462+
ecsact_meta_system_capabilities(
463+
sys_like_id,
464+
count,
465+
components.data(),
466+
capabilities.data(),
467+
nullptr
468+
);
469+
470+
result_t result;
471+
result.reserve(count);
472+
473+
for(decltype(count) i = 0; count > i; ++i) {
474+
result.emplace_back(components[i], capabilities[i]);
475+
}
476+
477+
return result;
478+
}
479+
450480
template<typename SystemLikeID>
451481
ECSACT_ALWAYS_INLINE auto get_system_generates_ids(SystemLikeID id) {
452482
auto sys_like_id = ecsact_id_cast<ecsact_system_like_id>(id);

0 commit comments

Comments
 (0)