diff --git a/README.md b/README.md index 4dd158e..2aea55f 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ # evolved.lua (work in progress) ``` -id :: id -alive :: id -> boolean +id :: integer? -> id... pack :: integer, integer -> id unpack :: id -> integer, integer @@ -10,6 +9,9 @@ unpack :: id -> integer, integer defer :: boolean commit :: boolean +alive :: entity -> boolean +empty :: entity -> boolean + get :: entity, fragment... -> component... has :: entity, fragment -> boolean has_all :: entity, fragment... -> boolean diff --git a/ROADMAP.md b/ROADMAP.md index d737261..0014cc3 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -6,3 +6,4 @@ - should insert/assign throw errors on failure? - add auto chunk count reducing - batching api for set/assign/insert/remove/clear/destroy +- every chunk can hold has_on_assign/has_on_insert/has_on_remove tags diff --git a/develop/untests.lua b/develop/untests.lua index f0f0cdf..6ed9a3e 100644 --- a/develop/untests.lua +++ b/develop/untests.lua @@ -552,6 +552,32 @@ do assert(not evo.alive(e)) end +do + local f = evo.id() + + do + local e = evo.id() + assert(evo.empty(e)) + + evo.insert(e, f, 42) + assert(not evo.empty(e)) + + evo.clear(e) + assert(evo.empty(e)) + end + + do + local e = evo.id() + assert(evo.empty(e)) + + evo.insert(e, f, 42) + assert(not evo.empty(e)) + + evo.destroy(e) + assert(evo.empty(e)) + end +end + do local f1, f2, f3 = evo.id(3) diff --git a/evolved.lua b/evolved.lua index a11700b..408154f 100644 --- a/evolved.lua +++ b/evolved.lua @@ -1009,13 +1009,6 @@ function evolved.id(count) end end ----@param id evolved.id ----@return boolean ----@nodiscard -function evolved.alive(id) - return __alive_id(id) -end - ---@param index integer ---@param version integer ---@return evolved.id @@ -1042,6 +1035,21 @@ function evolved.commit() return __defer_commit() end +---@param entity evolved.entity +---@return boolean +---@nodiscard +function evolved.alive(entity) + return __alive_id(entity) +end + +---@param entity evolved.entity +---@return boolean +---@nodiscard +function evolved.empty(entity) + return not __alive_id(entity) + or not __entity_chunks[__unpack_id(entity)] +end + ---@param entity evolved.entity ---@param ... evolved.fragment fragments ---@return evolved.component ... components