diff --git a/src/Ark.jl b/src/Ark.jl index 8c3d8a759..6db57d548 100644 --- a/src/Ark.jl +++ b/src/Ark.jl @@ -27,7 +27,7 @@ include("batch.jl") #include("docs.jl") # doctest setup export World -export is_alive, new_entity!, new_entities!, copy_entity! +export is_alive, new_entity!, new_entities!, collect_entities, collect_entities!, copy_entity! export remove_entity!, zero_entity, is_locked, reset! export get_components, set_components!, has_components export add_components!, remove_components! diff --git a/src/query.jl b/src/query.jl index 2e446cc2c..57ff7f803 100644 --- a/src/query.jl +++ b/src/query.jl @@ -242,6 +242,24 @@ function count_entities(q::Query) count end +function collect_entities!(q::Query, all_entities::AbstractVector{Entity}) + count = count_entities(q) + resize!(all_entities, count) + offset = 1 + for archetype in q._archetypes + if isempty(archetype.entities) + continue + end + if _contains_all(archetype.mask, q._mask) && + !(q._has_excluded && _contains_any(archetype.mask, q._exclude_mask)) + e = archetype.entities + unsafe_copyto!(all_entities, offset, e, 1, length(e)) + offset += length(e) + end + end + return all_entities +end + """ close!(q::Query)