From 697a04183238c9785030956f18e292937a3edcbb Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Mon, 16 Jun 2025 21:36:20 +0700 Subject: [PATCH] has/get function set for pairs --- develop/testing/pairs_tests.lua | 12 ++++++++++++ evolved.lua | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/develop/testing/pairs_tests.lua b/develop/testing/pairs_tests.lua index d80ea93..2204a9d 100644 --- a/develop/testing/pairs_tests.lua +++ b/develop/testing/pairs_tests.lua @@ -87,3 +87,15 @@ do assert(evo.empty_all(evo.pair(p1, s1), evo.pair(p2, s2), s2)) assert(evo.empty_any(evo.pair(p1, s1), evo.pair(p2, s2), s2)) end + +do + local p1, s1 = evo.id(2) + evo.set(p1, s1) + evo.set(s1, p1) + assert(not evo.has(evo.pair(p1, s1), p1)) + assert(not evo.has(evo.pair(p1, s1), s1)) + assert(not evo.has_all(evo.pair(p1, s1), p1, s1)) + assert(not evo.has_any(evo.pair(p1, s1), p1, s1)) + assert(evo.get(evo.pair(p1, s1), p1) == nil) + assert(evo.get(evo.pair(p1, s1), s1) == nil) +end diff --git a/evolved.lua b/evolved.lua index 00f4a3e..9c34a26 100644 --- a/evolved.lua +++ b/evolved.lua @@ -4284,6 +4284,11 @@ end ---@return boolean ---@nodiscard function __evolved_has(entity, fragment) + if entity < 0 then + -- pairs are always empty + return false + end + local entity_index = entity % 0x100000 if __freelist_ids[entity_index] ~= entity then @@ -4304,6 +4309,11 @@ end ---@return boolean ---@nodiscard function __evolved_has_all(entity, ...) + if entity < 0 then + -- pairs are always empty + return __lua_select('#', ...) == 0 + end + local entity_index = entity % 0x100000 if __freelist_ids[entity_index] ~= entity then @@ -4324,6 +4334,11 @@ end ---@return boolean ---@nodiscard function __evolved_has_any(entity, ...) + if entity < 0 then + -- pairs are always empty + return false + end + local entity_index = entity % 0x100000 if __freelist_ids[entity_index] ~= entity then @@ -4344,6 +4359,11 @@ end ---@return evolved.component ... components ---@nodiscard function __evolved_get(entity, ...) + if entity < 0 then + -- pairs are always empty + return + end + local entity_index = entity % 0x100000 if __freelist_ids[entity_index] ~= entity then