From a2df4e14a72d04fdc21cbe8fe32c4ecf74bb567f Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Fri, 22 Nov 2024 09:36:58 +0700 Subject: [PATCH] has fragments entity functions --- evolved/registry.lua | 77 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 3 deletions(-) diff --git a/evolved/registry.lua b/evolved/registry.lua index 04f4fd6..4bda1f5 100644 --- a/evolved/registry.lua +++ b/evolved/registry.lua @@ -2,6 +2,7 @@ local registry = {} ---@class evolved.entity +---@field chunk? evolved.chunk local evolved_entity_mt = {} evolved_entity_mt.__index = evolved_entity_mt @@ -15,6 +16,68 @@ evolved_query_mt.__index = evolved_query_mt local evolved_chunk_mt = {} evolved_chunk_mt.__index = evolved_chunk_mt +--- +--- +--- +--- +--- + +---@param chunk evolved.chunk +---@param fragment evolved.entity +---@return boolean +---@nodiscard +local function __chunk_has_fragment(chunk, fragment) + return chunk.components[fragment] ~= nil +end + +---@param chunk evolved.chunk +---@param fragment evolved.entity +---@param ... evolved.entity +---@return boolean +---@nodiscard +local function __chunk_has_all_fragments(chunk, fragment, ...) + local components = chunk.components + + if components[fragment] == nil then + return false + end + + for i = 1, select('#', ...) do + if components[select(i, ...)] == nil then + return false + end + end + + return true +end + +---@param chunk evolved.chunk +---@param fragment evolved.entity +---@param ... evolved.entity +---@return boolean +---@nodiscard +local function __chunk_has_any_fragments(chunk, fragment, ...) + local components = chunk.components + + if components[fragment] ~= nil then + return true + end + + for i = 1, select('#', ...) do + if components[select(i, ...)] ~= nil then + return true + end + end + + return false +end + +--- +--- +--- +--- +--- + ---@return evolved.entity ---@nodiscard function registry.entity() end @@ -32,19 +95,27 @@ function registry.get(entity, fragment) end ---@param fragment evolved.entity ---@return boolean ---@nodiscard -function registry.has(entity, fragment) end +function registry.has(entity, fragment) + return entity.chunk ~= nil and __chunk_has_fragment(entity.chunk, fragment) +end ---@param entity evolved.entity +---@param fragment evolved.entity ---@param ... evolved.entity ---@return boolean ---@nodiscard -function registry.has_all(entity, ...) end +function registry.has_all(entity, fragment, ...) + return entity.chunk ~= nil and __chunk_has_all_fragments(entity.chunk, fragment, ...) +end ---@param entity evolved.entity +---@param fragment evolved.entity ---@param ... evolved.entity ---@return boolean ---@nodiscard -function registry.has_any(entity, ...) end +function registry.has_any(entity, fragment, ...) + return entity.chunk ~= nil and __chunk_has_any_fragments(entity.chunk, fragment, ...) +end ---@param entity evolved.entity ---@param fragment evolved.entity