diff --git a/README.md b/README.md index 40507d0..21318d1 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ registry.has_any -> entity -> entity... -> (boolean) registry.assign -> entity -> entity -> any -> (boolean) registry.insert -> entity -> entity -> any -> (boolean) registry.remove -> entity -> entity... -> (boolean) +registry.clear -> entity -> (boolean) registry.query -> entity -> entity... -> (query) registry.execute -> query -> (() -> (chunk?)) registry.chunk -> entity -> entity... -> (chunk) @@ -55,6 +56,7 @@ entity:has_any -> entity... -> (boolean) entity:assign -> entity -> any -> (boolean) entity:insert -> entity -> any -> (boolean) entity:remove -> entity... -> (boolean) +entity:clear -> (boolean) ``` ### Instance `query` diff --git a/develop/untests/registry_untests.lua b/develop/untests/registry_untests.lua index 7d67d26..5f37a49 100644 --- a/develop/untests/registry_untests.lua +++ b/develop/untests/registry_untests.lua @@ -97,6 +97,24 @@ do assert(e:get(f) == 21) end +do + local f1, f2 = evo.registry.entity(), evo.registry.entity() + local e = evo.registry.entity() + + assert(e:insert(f1)) + assert(e:insert(f2)) + assert(e:is_alive()) + assert(e.__chunk == evo.registry.chunk(f1, f2)) + + assert(e:clear()) + assert(e:is_alive()) + assert(e.__chunk == nil) + + assert(not e:clear()) + assert(e:is_alive()) + assert(e.__chunk == nil) +end + do local f1, f2 = evo.registry.entity(), evo.registry.entity() diff --git a/evolved/registry.lua b/evolved/registry.lua index 60307cd..debf672 100644 --- a/evolved/registry.lua +++ b/evolved/registry.lua @@ -439,6 +439,17 @@ function registry.remove(entity, ...) return true end +---@param entity evolved.entity +---@return boolean is_cleared +function registry.clear(entity) + if entity.__chunk == nil then + return false + end + + __detach_entity(entity) + return true +end + ---@param fragment evolved.entity ---@param ... evolved.entity ---@return evolved.query @@ -554,6 +565,7 @@ evolved_entity_mt.has_any = registry.has_any evolved_entity_mt.assign = registry.assign evolved_entity_mt.insert = registry.insert evolved_entity_mt.remove = registry.remove +evolved_entity_mt.clear = registry.clear function evolved_query_mt:__tostring() local fragment_ids = ''