mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-16 22:19:25 +07:00
simple group builder
This commit is contained in:
@@ -148,6 +148,13 @@ query_builder:exclude :: fragment... -> query_builder
|
|||||||
query_builder:build :: query, boolean
|
query_builder:build :: query, boolean
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
group :: group_builder
|
||||||
|
group_builder:name :: string -> group_builder
|
||||||
|
group_builder:single :: component -> group_builder
|
||||||
|
group_builder:build :: group, boolean
|
||||||
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
phase :: phase_builder
|
phase :: phase_builder
|
||||||
phase_builder:name :: string -> phase_builder
|
phase_builder:name :: string -> phase_builder
|
||||||
|
|||||||
@@ -8202,3 +8202,17 @@ do
|
|||||||
assert(not evo.is_alive_any(e1a, e1b, e12a, e12b))
|
assert(not evo.is_alive_any(e1a, e1b, e12a, e12b))
|
||||||
assert(evo.is_empty_all(e1a, e1b, e12a, e12b))
|
assert(evo.is_empty_all(e1a, e1b, e12a, e12b))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
do
|
||||||
|
local gb = evo.group()
|
||||||
|
|
||||||
|
local g1 = gb:build()
|
||||||
|
local g2 = gb:name('g2'):build()
|
||||||
|
local g3 = gb:single(42):build()
|
||||||
|
local g4 = gb:name('g4'):single(43):build()
|
||||||
|
|
||||||
|
assert(not evo.has(g1, evo.NAME) and not evo.has(g1, g1))
|
||||||
|
assert(evo.get(g2, evo.NAME) == 'g2' and not evo.has(g2, g2))
|
||||||
|
assert(not evo.has(g3, evo.NAME) and evo.get(g3, g3) == 42)
|
||||||
|
assert(evo.get(g4, evo.NAME) == 'g4' and evo.get(g4, g4) == 43)
|
||||||
|
end
|
||||||
|
|||||||
78
evolved.lua
78
evolved.lua
@@ -32,6 +32,7 @@ local evolved = {
|
|||||||
---@alias evolved.entity evolved.id
|
---@alias evolved.entity evolved.id
|
||||||
---@alias evolved.fragment evolved.id
|
---@alias evolved.fragment evolved.id
|
||||||
---@alias evolved.query evolved.id
|
---@alias evolved.query evolved.id
|
||||||
|
---@alias evolved.group evolved.id
|
||||||
---@alias evolved.phase evolved.id
|
---@alias evolved.phase evolved.id
|
||||||
---@alias evolved.system evolved.id
|
---@alias evolved.system evolved.id
|
||||||
|
|
||||||
@@ -693,6 +694,7 @@ local __evolved_collect_garbage
|
|||||||
local __evolved_entity
|
local __evolved_entity
|
||||||
local __evolved_fragment
|
local __evolved_fragment
|
||||||
local __evolved_query
|
local __evolved_query
|
||||||
|
local __evolved_group
|
||||||
local __evolved_phase
|
local __evolved_phase
|
||||||
local __evolved_system
|
local __evolved_system
|
||||||
|
|
||||||
@@ -7900,6 +7902,81 @@ end
|
|||||||
---
|
---
|
||||||
---
|
---
|
||||||
|
|
||||||
|
---@class (exact) evolved.__group_builder
|
||||||
|
---@field package __name? string
|
||||||
|
---@field package __single? evolved.component
|
||||||
|
|
||||||
|
---@class evolved.group_builder : evolved.__group_builder
|
||||||
|
local evolved_group_builder = {}
|
||||||
|
evolved_group_builder.__index = evolved_group_builder
|
||||||
|
|
||||||
|
---@return evolved.group_builder builder
|
||||||
|
---@nodiscard
|
||||||
|
__evolved_group = function()
|
||||||
|
---@type evolved.__group_builder
|
||||||
|
local builder = {
|
||||||
|
__name = nil,
|
||||||
|
__single = nil,
|
||||||
|
}
|
||||||
|
---@cast builder evolved.group_builder
|
||||||
|
return setmetatable(builder, evolved_group_builder)
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param name string
|
||||||
|
---@return evolved.group_builder builder
|
||||||
|
function evolved_group_builder:name(name)
|
||||||
|
self.__name = name
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param single evolved.component
|
||||||
|
---@return evolved.group_builder builder
|
||||||
|
function evolved_group_builder:single(single)
|
||||||
|
self.__single = single
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
---@return evolved.group group
|
||||||
|
---@return boolean is_deferred
|
||||||
|
function evolved_group_builder:build()
|
||||||
|
local name = self.__name
|
||||||
|
local single = self.__single
|
||||||
|
|
||||||
|
self.__name = nil
|
||||||
|
self.__single = nil
|
||||||
|
|
||||||
|
local group = __evolved_id()
|
||||||
|
|
||||||
|
local fragment_list = __acquire_table(__table_pool_tag.fragment_list)
|
||||||
|
local component_list = __acquire_table(__table_pool_tag.component_list)
|
||||||
|
local component_count = 0
|
||||||
|
|
||||||
|
if name then
|
||||||
|
component_count = component_count + 1
|
||||||
|
fragment_list[component_count] = __NAME
|
||||||
|
component_list[component_count] = name
|
||||||
|
end
|
||||||
|
|
||||||
|
if single ~= nil then
|
||||||
|
component_count = component_count + 1
|
||||||
|
fragment_list[component_count] = group
|
||||||
|
component_list[component_count] = single
|
||||||
|
end
|
||||||
|
|
||||||
|
local _, is_deferred = __evolved_multi_set(group, fragment_list, component_list)
|
||||||
|
|
||||||
|
__release_table(__table_pool_tag.fragment_list, fragment_list)
|
||||||
|
__release_table(__table_pool_tag.component_list, component_list)
|
||||||
|
|
||||||
|
return group, is_deferred
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
---
|
||||||
|
---
|
||||||
|
---
|
||||||
|
---
|
||||||
|
|
||||||
---@class (exact) evolved.__phase_builder
|
---@class (exact) evolved.__phase_builder
|
||||||
---@field package __name? string
|
---@field package __name? string
|
||||||
---@field package __single? evolved.component
|
---@field package __single? evolved.component
|
||||||
@@ -8580,6 +8657,7 @@ evolved.collect_garbage = __evolved_collect_garbage
|
|||||||
evolved.entity = __evolved_entity
|
evolved.entity = __evolved_entity
|
||||||
evolved.fragment = __evolved_fragment
|
evolved.fragment = __evolved_fragment
|
||||||
evolved.query = __evolved_query
|
evolved.query = __evolved_query
|
||||||
|
evolved.group = __evolved_group
|
||||||
evolved.phase = __evolved_phase
|
evolved.phase = __evolved_phase
|
||||||
evolved.system = __evolved_system
|
evolved.system = __evolved_system
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user