mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-14 20:11:27 +07:00
groups and phases are just systems now
This commit is contained in:
30
README.md
30
README.md
@@ -40,9 +40,7 @@ ON_ASSIGN :: fragment
|
|||||||
ON_INSERT :: fragment
|
ON_INSERT :: fragment
|
||||||
ON_REMOVE :: fragment
|
ON_REMOVE :: fragment
|
||||||
|
|
||||||
PHASE :: fragment
|
|
||||||
GROUP :: fragment
|
GROUP :: fragment
|
||||||
AFTER :: fragment
|
|
||||||
|
|
||||||
QUERY :: fragment
|
QUERY :: fragment
|
||||||
EXECUTE :: fragment
|
EXECUTE :: fragment
|
||||||
@@ -107,7 +105,7 @@ components :: chunk, fragment... -> component[]...
|
|||||||
each :: entity -> {each_state? -> fragment?, component?}, each_state?
|
each :: entity -> {each_state? -> fragment?, component?}, each_state?
|
||||||
execute :: query -> {execute_state? -> chunk?, entity[]?, integer?}, execute_state?
|
execute :: query -> {execute_state? -> chunk?, entity[]?, integer?}, execute_state?
|
||||||
|
|
||||||
process :: phase... -> ()
|
process :: system... -> ()
|
||||||
|
|
||||||
spawn_at :: chunk?, fragment[]?, component[]? -> entity
|
spawn_at :: chunk?, fragment[]?, component[]? -> entity
|
||||||
spawn_as :: entity?, fragment[]?, component[]? -> entity
|
spawn_as :: entity?, fragment[]?, component[]? -> entity
|
||||||
@@ -149,38 +147,16 @@ query_builder:exclude :: fragment... -> query_builder
|
|||||||
query_builder:build :: query
|
query_builder:build :: query
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
|
||||||
group :: group_builder
|
|
||||||
group_builder:name :: string -> group_builder
|
|
||||||
group_builder:single :: component -> group_builder
|
|
||||||
group_builder:disable :: group_builder
|
|
||||||
group_builder:phase :: phase -> group_builder
|
|
||||||
group_builder:after :: group... -> group_builder
|
|
||||||
group_builder:prologue :: {} -> group_builder
|
|
||||||
group_builder:epilogue :: {} -> group_builder
|
|
||||||
group_builder:build :: group
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
phase :: phase_builder
|
|
||||||
phase_builder:name :: string -> phase_builder
|
|
||||||
phase_builder:single :: component -> phase_builder
|
|
||||||
phase_builder:disable :: phase_builder
|
|
||||||
phase_builder:prologue :: {} -> phase_builder
|
|
||||||
phase_builder:epilogue :: {} -> phase_builder
|
|
||||||
phase_builder:build :: phase
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
```
|
||||||
system :: system_builder
|
system :: system_builder
|
||||||
system_builder:name :: string -> system_builder
|
system_builder:name :: string -> system_builder
|
||||||
system_builder:single :: component -> system_builder
|
system_builder:single :: component -> system_builder
|
||||||
system_builder:disable :: system_builder
|
system_builder:group :: system -> system_builder
|
||||||
system_builder:group :: group -> system_builder
|
|
||||||
system_builder:query :: query -> system_builder
|
system_builder:query :: query -> system_builder
|
||||||
system_builder:execute :: {chunk, entity[], integer} -> system_builder
|
system_builder:execute :: {chunk, entity[], integer} -> system_builder
|
||||||
system_builder:prologue :: {} -> system_builder
|
system_builder:prologue :: {} -> system_builder
|
||||||
system_builder:epilogue :: {} -> system_builder
|
system_builder:epilogue :: {} -> system_builder
|
||||||
|
system_builder:disabled :: system_builder
|
||||||
system_builder:build :: system
|
system_builder:build :: system
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -15,18 +15,11 @@ local function vector2(x, y)
|
|||||||
return { x = x, y = y }
|
return { x = x, y = y }
|
||||||
end
|
end
|
||||||
|
|
||||||
local phases = {
|
|
||||||
awake = evo.phase():build(),
|
|
||||||
physics = evo.phase():build(),
|
|
||||||
graphics = evo.phase():build(),
|
|
||||||
shutdown = evo.phase():build(),
|
|
||||||
}
|
|
||||||
|
|
||||||
local groups = {
|
local groups = {
|
||||||
awake = evo.group():phase(phases.awake):build(),
|
awake = evo.system():build(),
|
||||||
physics = evo.group():phase(phases.physics):build(),
|
physics = evo.system():build(),
|
||||||
graphics = evo.group():phase(phases.graphics):build(),
|
graphics = evo.system():build(),
|
||||||
shutdown = evo.group():phase(phases.shutdown):build(),
|
shutdown = evo.system():build(),
|
||||||
}
|
}
|
||||||
|
|
||||||
local singles = {
|
local singles = {
|
||||||
@@ -126,12 +119,12 @@ local shutdown_system = evo.system()
|
|||||||
end):build()
|
end):build()
|
||||||
|
|
||||||
do
|
do
|
||||||
evo.process(phases.awake)
|
evo.process(groups.awake)
|
||||||
|
|
||||||
for _ = 1, 10 do
|
for _ = 1, 10 do
|
||||||
evo.process(phases.physics)
|
evo.process(groups.physics)
|
||||||
evo.process(phases.graphics)
|
evo.process(groups.graphics)
|
||||||
end
|
end
|
||||||
|
|
||||||
evo.process(phases.shutdown)
|
evo.process(groups.shutdown)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5929,9 +5929,6 @@ do
|
|||||||
local q = evo.query():build()
|
local q = evo.query():build()
|
||||||
assert(evo.get(q, evo.NAME) == nil)
|
assert(evo.get(q, evo.NAME) == nil)
|
||||||
|
|
||||||
local p = evo.phase():build()
|
|
||||||
assert(evo.get(p, evo.NAME) == nil)
|
|
||||||
|
|
||||||
local s = evo.system():build()
|
local s = evo.system():build()
|
||||||
assert(evo.get(s, evo.NAME) == nil)
|
assert(evo.get(s, evo.NAME) == nil)
|
||||||
end
|
end
|
||||||
@@ -5939,7 +5936,6 @@ end
|
|||||||
do
|
do
|
||||||
local fb = evo.fragment()
|
local fb = evo.fragment()
|
||||||
local qb = evo.query()
|
local qb = evo.query()
|
||||||
local pb = evo.phase()
|
|
||||||
local sb = evo.system()
|
local sb = evo.system()
|
||||||
|
|
||||||
do
|
do
|
||||||
@@ -5949,9 +5945,6 @@ do
|
|||||||
local q = qb:name('query'):build()
|
local q = qb:name('query'):build()
|
||||||
assert(evo.get(q, evo.NAME) == 'query')
|
assert(evo.get(q, evo.NAME) == 'query')
|
||||||
|
|
||||||
local p = pb:name('phase'):build()
|
|
||||||
assert(evo.get(p, evo.NAME) == 'phase')
|
|
||||||
|
|
||||||
local s = sb:name('system'):build()
|
local s = sb:name('system'):build()
|
||||||
assert(evo.get(s, evo.NAME) == 'system')
|
assert(evo.get(s, evo.NAME) == 'system')
|
||||||
end
|
end
|
||||||
@@ -5963,9 +5956,6 @@ do
|
|||||||
local q = qb:build()
|
local q = qb:build()
|
||||||
assert(evo.get(q, evo.NAME) == nil)
|
assert(evo.get(q, evo.NAME) == nil)
|
||||||
|
|
||||||
local p = pb:build()
|
|
||||||
assert(evo.get(p, evo.NAME) == nil)
|
|
||||||
|
|
||||||
local s = sb:build()
|
local s = sb:build()
|
||||||
assert(evo.get(s, evo.NAME) == nil)
|
assert(evo.get(s, evo.NAME) == nil)
|
||||||
end
|
end
|
||||||
@@ -5974,7 +5964,6 @@ end
|
|||||||
do
|
do
|
||||||
local fb = evo.fragment()
|
local fb = evo.fragment()
|
||||||
local qb = evo.query()
|
local qb = evo.query()
|
||||||
local pb = evo.phase()
|
|
||||||
local sb = evo.system()
|
local sb = evo.system()
|
||||||
|
|
||||||
do
|
do
|
||||||
@@ -5984,9 +5973,6 @@ do
|
|||||||
local q = qb:single(false):build()
|
local q = qb:single(false):build()
|
||||||
assert(evo.get(q, q) == false)
|
assert(evo.get(q, q) == false)
|
||||||
|
|
||||||
local p = pb:single(false):build()
|
|
||||||
assert(evo.get(p, p) == false)
|
|
||||||
|
|
||||||
local s = sb:single(false):build()
|
local s = sb:single(false):build()
|
||||||
assert(evo.get(s, s) == false)
|
assert(evo.get(s, s) == false)
|
||||||
end
|
end
|
||||||
@@ -5998,9 +5984,6 @@ do
|
|||||||
local q = qb:build()
|
local q = qb:build()
|
||||||
assert(evo.get(q, q) == nil)
|
assert(evo.get(q, q) == nil)
|
||||||
|
|
||||||
local p = pb:build()
|
|
||||||
assert(evo.get(p, p) == nil)
|
|
||||||
|
|
||||||
local s = sb:build()
|
local s = sb:build()
|
||||||
assert(evo.get(s, s) == nil)
|
assert(evo.get(s, s) == nil)
|
||||||
end
|
end
|
||||||
@@ -7315,7 +7298,7 @@ do
|
|||||||
end
|
end
|
||||||
|
|
||||||
do
|
do
|
||||||
local gb = evo.group()
|
local gb = evo.system()
|
||||||
|
|
||||||
local g1 = gb:build()
|
local g1 = gb:build()
|
||||||
local g2 = gb:name('g2'):build()
|
local g2 = gb:name('g2'):build()
|
||||||
@@ -7329,31 +7312,11 @@ do
|
|||||||
end
|
end
|
||||||
|
|
||||||
do
|
do
|
||||||
local g = evo.group():build()
|
local g = evo.system():build()
|
||||||
local s = evo.system():group(g):build()
|
local s = evo.system():group(g):build()
|
||||||
assert(evo.get(s, evo.GROUP) == g)
|
assert(evo.get(s, evo.GROUP) == g)
|
||||||
end
|
end
|
||||||
|
|
||||||
do
|
|
||||||
local s1 = evo.group():build()
|
|
||||||
do
|
|
||||||
local after = evo.get(s1, evo.AFTER)
|
|
||||||
assert(after == nil)
|
|
||||||
end
|
|
||||||
|
|
||||||
local g2 = evo.group():after(s1):build()
|
|
||||||
do
|
|
||||||
local after = evo.get(g2, evo.AFTER)
|
|
||||||
assert(#after == 1 and after[1] == s1)
|
|
||||||
end
|
|
||||||
|
|
||||||
local g3 = evo.group():after(s1, g2):build()
|
|
||||||
do
|
|
||||||
local after = evo.get(g3, evo.AFTER)
|
|
||||||
assert(#after == 2 and after[1] == s1 and after[2] == g2)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
do
|
do
|
||||||
local f1 = evo.id()
|
local f1 = evo.id()
|
||||||
local c1 = evo.chunk(f1)
|
local c1 = evo.chunk(f1)
|
||||||
|
|||||||
659
evolved.lua
659
evolved.lua
@@ -32,8 +32,6 @@ 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.system evolved.id
|
---@alias evolved.system evolved.id
|
||||||
|
|
||||||
---@alias evolved.component any
|
---@alias evolved.component any
|
||||||
@@ -116,9 +114,7 @@ local __entity_places = {} ---@type table<integer, integer>
|
|||||||
|
|
||||||
local __structural_changes = 0 ---@type integer
|
local __structural_changes = 0 ---@type integer
|
||||||
|
|
||||||
local __phase_groups = {} ---@type table<evolved.phase, evolved.assoc_list>
|
local __group_subsystems = {} ---@type table<evolved.system, evolved.assoc_list>
|
||||||
local __group_systems = {} ---@type table<evolved.group, evolved.assoc_list>
|
|
||||||
local __group_dependencies = {} ---@type table<evolved.group, evolved.assoc_list>
|
|
||||||
|
|
||||||
local __query_sorted_includes = {} ---@type table<evolved.query, evolved.assoc_list>
|
local __query_sorted_includes = {} ---@type table<evolved.query, evolved.assoc_list>
|
||||||
local __query_sorted_excludes = {} ---@type table<evolved.query, evolved.assoc_list>
|
local __query_sorted_excludes = {} ---@type table<evolved.query, evolved.assoc_list>
|
||||||
@@ -360,17 +356,15 @@ end
|
|||||||
local __table_pool_tag = {
|
local __table_pool_tag = {
|
||||||
bytecode = 1,
|
bytecode = 1,
|
||||||
chunk_stack = 2,
|
chunk_stack = 2,
|
||||||
each_state = 3,
|
system_list = 3,
|
||||||
execute_state = 4,
|
each_state = 4,
|
||||||
entity_set = 5,
|
execute_state = 5,
|
||||||
entity_list = 6,
|
entity_set = 6,
|
||||||
fragment_set = 7,
|
entity_list = 7,
|
||||||
fragment_list = 8,
|
fragment_set = 8,
|
||||||
component_list = 9,
|
fragment_list = 9,
|
||||||
group_list = 10,
|
component_list = 10,
|
||||||
sorting_stack = 11,
|
__count = 10,
|
||||||
sorting_marks = 12,
|
|
||||||
__count = 12,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
---@class (exact) evolved.table_pool
|
---@class (exact) evolved.table_pool
|
||||||
@@ -661,9 +655,7 @@ local __ON_ASSIGN = __acquire_id()
|
|||||||
local __ON_INSERT = __acquire_id()
|
local __ON_INSERT = __acquire_id()
|
||||||
local __ON_REMOVE = __acquire_id()
|
local __ON_REMOVE = __acquire_id()
|
||||||
|
|
||||||
local __PHASE = __acquire_id()
|
|
||||||
local __GROUP = __acquire_id()
|
local __GROUP = __acquire_id()
|
||||||
local __AFTER = __acquire_id()
|
|
||||||
|
|
||||||
local __QUERY = __acquire_id()
|
local __QUERY = __acquire_id()
|
||||||
local __EXECUTE = __acquire_id()
|
local __EXECUTE = __acquire_id()
|
||||||
@@ -1051,20 +1043,20 @@ function __debug_fns.validate_query(query)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param phase evolved.phase
|
---@param system evolved.system
|
||||||
function __debug_fns.validate_phase(phase)
|
function __debug_fns.validate_system(system)
|
||||||
local phase_index = phase % 0x100000
|
local system_index = system % 0x100000
|
||||||
|
|
||||||
if __freelist_ids[phase_index] ~= phase then
|
if __freelist_ids[system_index] ~= system then
|
||||||
__error_fmt('the phase (%s) is not alive and cannot be used',
|
__error_fmt('the system (%s) is not alive and cannot be used',
|
||||||
__id_name(phase))
|
__id_name(system))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param ... evolved.phase phases
|
---@param ... evolved.system systems
|
||||||
function __debug_fns.validate_phases(...)
|
function __debug_fns.validate_systems(...)
|
||||||
for i = 1, __lua_select('#', ...) do
|
for i = 1, __lua_select('#', ...) do
|
||||||
__debug_fns.validate_phase(__lua_select(i, ...))
|
__debug_fns.validate_system(__lua_select(i, ...))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -3463,6 +3455,29 @@ local function __system_process(system)
|
|||||||
__evolved_commit()
|
__evolved_commit()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
do
|
||||||
|
local group_subsystems = __group_subsystems[system]
|
||||||
|
local group_subsystem_list = group_subsystems and group_subsystems.__item_list --[=[@as evolved.system[]]=]
|
||||||
|
local group_subsystem_count = group_subsystems and group_subsystems.__item_count or 0 --[[@as integer]]
|
||||||
|
|
||||||
|
if group_subsystem_count > 0 then
|
||||||
|
local subsystem_list = __acquire_table(__table_pool_tag.system_list)
|
||||||
|
|
||||||
|
__lua_table_move(
|
||||||
|
group_subsystem_list, 1, group_subsystem_count,
|
||||||
|
1, subsystem_list)
|
||||||
|
|
||||||
|
for subsystem_index = 1, group_subsystem_count do
|
||||||
|
local subsystem = subsystem_list[subsystem_index]
|
||||||
|
if not __evolved_has(subsystem, __DISABLED) then
|
||||||
|
__system_process(subsystem)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
__release_table(__table_pool_tag.system_list, subsystem_list)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if epilogue then
|
if epilogue then
|
||||||
local success, result = __lua_pcall(epilogue)
|
local success, result = __lua_pcall(epilogue)
|
||||||
|
|
||||||
@@ -3472,165 +3487,6 @@ local function __system_process(system)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param group evolved.group
|
|
||||||
local function __group_process(group)
|
|
||||||
---@type evolved.prologue?, evolved.epilogue?
|
|
||||||
local prologue, epilogue = __evolved_get(group,
|
|
||||||
__PROLOGUE, __EPILOGUE)
|
|
||||||
|
|
||||||
if prologue then
|
|
||||||
local success, result = __lua_pcall(prologue)
|
|
||||||
|
|
||||||
if not success then
|
|
||||||
__error_fmt('group prologue failed: %s', result)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
do
|
|
||||||
local group_systems = __group_systems[group]
|
|
||||||
local group_system_list = group_systems and group_systems.__item_list --[=[@as evolved.system[]]=]
|
|
||||||
local group_system_count = group_systems and group_systems.__item_count or 0 --[[@as integer]]
|
|
||||||
|
|
||||||
for group_system_index = 1, group_system_count do
|
|
||||||
local group_system = group_system_list[group_system_index]
|
|
||||||
if not __evolved_has(group_system, __DISABLED) then
|
|
||||||
__system_process(group_system)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if epilogue then
|
|
||||||
local success, result = __lua_pcall(epilogue)
|
|
||||||
|
|
||||||
if not success then
|
|
||||||
__error_fmt('group epilogue failed: %s', result)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param phase evolved.phase
|
|
||||||
local function __phase_process(phase)
|
|
||||||
---@type evolved.prologue?, evolved.epilogue?
|
|
||||||
local prologue, epilogue = __evolved_get(phase,
|
|
||||||
__PROLOGUE, __EPILOGUE)
|
|
||||||
|
|
||||||
if prologue then
|
|
||||||
local success, result = __lua_pcall(prologue)
|
|
||||||
|
|
||||||
if not success then
|
|
||||||
__error_fmt('phase prologue failed: %s', result)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
do
|
|
||||||
local phase_groups = __phase_groups[phase]
|
|
||||||
local phase_group_set = phase_groups and phase_groups.__item_set --[[@as table<evolved.group, integer>]]
|
|
||||||
local phase_group_list = phase_groups and phase_groups.__item_list --[=[@as evolved.group[]]=]
|
|
||||||
local phase_group_count = phase_groups and phase_groups.__item_count or 0 --[[@as integer]]
|
|
||||||
|
|
||||||
---@type evolved.group[]
|
|
||||||
local sorted_group_list = __acquire_table(__table_pool_tag.group_list)
|
|
||||||
local sorted_group_count = 0
|
|
||||||
|
|
||||||
---@type integer[]
|
|
||||||
local sorting_marks = __acquire_table(__table_pool_tag.sorting_marks)
|
|
||||||
|
|
||||||
---@type evolved.group[]
|
|
||||||
local sorting_stack = __acquire_table(__table_pool_tag.sorting_stack)
|
|
||||||
local sorting_stack_size = phase_group_count
|
|
||||||
|
|
||||||
for phase_group_index = 1, phase_group_count do
|
|
||||||
sorting_marks[phase_group_index] = 0
|
|
||||||
local phase_group_rev_index = phase_group_count - phase_group_index + 1
|
|
||||||
sorting_stack[phase_group_index] = phase_group_list[phase_group_rev_index]
|
|
||||||
end
|
|
||||||
|
|
||||||
while sorting_stack_size > 0 do
|
|
||||||
local group = sorting_stack[sorting_stack_size]
|
|
||||||
|
|
||||||
local group_mark_index = phase_group_set[group]
|
|
||||||
local group_mark = sorting_marks[group_mark_index]
|
|
||||||
|
|
||||||
if not group_mark then
|
|
||||||
-- the group has already been added to the sorted list
|
|
||||||
sorting_stack[sorting_stack_size] = nil
|
|
||||||
sorting_stack_size = sorting_stack_size - 1
|
|
||||||
elseif group_mark == 0 then
|
|
||||||
sorting_marks[group_mark_index] = 1
|
|
||||||
|
|
||||||
local dependencies = __group_dependencies[group]
|
|
||||||
local dependency_list = dependencies and dependencies.__item_list --[=[@as evolved.group[]]=]
|
|
||||||
local dependency_count = dependencies and dependencies.__item_count or 0 --[[@as integer]]
|
|
||||||
|
|
||||||
for dependency_index = dependency_count, 1, -1 do
|
|
||||||
local dependency = dependency_list[dependency_index]
|
|
||||||
local dependency_mark_index = phase_group_set[dependency]
|
|
||||||
|
|
||||||
if not dependency_mark_index then
|
|
||||||
-- the dependency is not from this phase
|
|
||||||
else
|
|
||||||
local dependency_mark = sorting_marks[dependency_mark_index]
|
|
||||||
|
|
||||||
if not dependency_mark then
|
|
||||||
-- the dependency has already been added to the sorted list
|
|
||||||
elseif dependency_mark == 0 then
|
|
||||||
sorting_stack_size = sorting_stack_size + 1
|
|
||||||
sorting_stack[sorting_stack_size] = dependency
|
|
||||||
elseif dependency_mark == 1 then
|
|
||||||
local sorting_cycle_path = '' .. __id_name(dependency)
|
|
||||||
|
|
||||||
for cycled_group_index = sorting_stack_size, 1, -1 do
|
|
||||||
local cycled_group = sorting_stack[cycled_group_index]
|
|
||||||
|
|
||||||
local cycled_group_mark_index = phase_group_set[cycled_group]
|
|
||||||
local cycled_group_mark = sorting_marks[cycled_group_mark_index]
|
|
||||||
|
|
||||||
if cycled_group_mark == 1 then
|
|
||||||
sorting_cycle_path = string.format('%s -> %s',
|
|
||||||
sorting_cycle_path, __id_name(cycled_group))
|
|
||||||
|
|
||||||
if cycled_group == dependency then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
__error_fmt('cyclic dependency detected: %s', sorting_cycle_path)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
elseif group_mark == 1 then
|
|
||||||
sorting_marks[group_mark_index] = nil
|
|
||||||
|
|
||||||
sorted_group_count = sorted_group_count + 1
|
|
||||||
sorted_group_list[sorted_group_count] = group
|
|
||||||
|
|
||||||
sorting_stack[sorting_stack_size] = nil
|
|
||||||
sorting_stack_size = sorting_stack_size - 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
for sorted_group_index = 1, sorted_group_count do
|
|
||||||
local sorted_group = sorted_group_list[sorted_group_index]
|
|
||||||
if not __evolved_has(sorted_group, __DISABLED) then
|
|
||||||
__group_process(sorted_group)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
__release_table(__table_pool_tag.group_list, sorted_group_list)
|
|
||||||
__release_table(__table_pool_tag.sorting_marks, sorting_marks, true)
|
|
||||||
__release_table(__table_pool_tag.sorting_stack, sorting_stack, true)
|
|
||||||
end
|
|
||||||
|
|
||||||
if epilogue then
|
|
||||||
local success, result = __lua_pcall(epilogue)
|
|
||||||
|
|
||||||
if not success then
|
|
||||||
__error_fmt('phase epilogue failed: %s', result)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
---
|
---
|
||||||
---
|
---
|
||||||
---
|
---
|
||||||
@@ -6077,13 +5933,17 @@ __evolved_execute = function(query)
|
|||||||
return __execute_iterator, execute_state
|
return __execute_iterator, execute_state
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param ... evolved.phase phases
|
---@param ... evolved.system systems
|
||||||
__evolved_process = function(...)
|
__evolved_process = function(...)
|
||||||
|
if __debug_mode then
|
||||||
|
__debug_fns.validate_systems(...)
|
||||||
|
end
|
||||||
|
|
||||||
for i = 1, __lua_select('#', ...) do
|
for i = 1, __lua_select('#', ...) do
|
||||||
---@type evolved.phase
|
---@type evolved.system
|
||||||
local phase = __lua_select(i, ...)
|
local system = __lua_select(i, ...)
|
||||||
if not __evolved_has(phase, __DISABLED) then
|
if not __evolved_has(system, __DISABLED) then
|
||||||
__phase_process(phase)
|
__system_process(system)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -6324,35 +6184,15 @@ __builder_fns.fragment_builder.__index = __builder_fns.fragment_builder
|
|||||||
__builder_fns.query_builder = {}
|
__builder_fns.query_builder = {}
|
||||||
__builder_fns.query_builder.__index = __builder_fns.query_builder
|
__builder_fns.query_builder.__index = __builder_fns.query_builder
|
||||||
|
|
||||||
---@class evolved.group_builder
|
|
||||||
---@field package __name? string
|
|
||||||
---@field package __single? evolved.component
|
|
||||||
---@field package __disable? boolean
|
|
||||||
---@field package __phase? evolved.phase
|
|
||||||
---@field package __after? evolved.group[]
|
|
||||||
---@field package __prologue? evolved.prologue
|
|
||||||
---@field package __epilogue? evolved.epilogue
|
|
||||||
__builder_fns.group_builder = {}
|
|
||||||
__builder_fns.group_builder.__index = __builder_fns.group_builder
|
|
||||||
|
|
||||||
---@class evolved.phase_builder
|
|
||||||
---@field package __name? string
|
|
||||||
---@field package __single? evolved.component
|
|
||||||
---@field package __disable? boolean
|
|
||||||
---@field package __prologue? evolved.prologue
|
|
||||||
---@field package __epilogue? evolved.epilogue
|
|
||||||
__builder_fns.phase_builder = {}
|
|
||||||
__builder_fns.phase_builder.__index = __builder_fns.phase_builder
|
|
||||||
|
|
||||||
---@class evolved.system_builder
|
---@class evolved.system_builder
|
||||||
---@field package __name? string
|
---@field package __name? string
|
||||||
---@field package __single? evolved.component
|
---@field package __single? evolved.component
|
||||||
---@field package __disable? boolean
|
---@field package __group? evolved.system
|
||||||
---@field package __group? evolved.group
|
|
||||||
---@field package __query? evolved.query
|
---@field package __query? evolved.query
|
||||||
---@field package __execute? evolved.execute
|
---@field package __execute? evolved.execute
|
||||||
---@field package __prologue? evolved.prologue
|
---@field package __prologue? evolved.prologue
|
||||||
---@field package __epilogue? evolved.epilogue
|
---@field package __epilogue? evolved.epilogue
|
||||||
|
---@field package __disabled? boolean
|
||||||
__builder_fns.system_builder = {}
|
__builder_fns.system_builder = {}
|
||||||
__builder_fns.system_builder.__index = __builder_fns.system_builder
|
__builder_fns.system_builder.__index = __builder_fns.system_builder
|
||||||
|
|
||||||
@@ -6735,263 +6575,6 @@ end
|
|||||||
---
|
---
|
||||||
---
|
---
|
||||||
|
|
||||||
---@return evolved.group_builder builder
|
|
||||||
---@nodiscard
|
|
||||||
__evolved_group = function()
|
|
||||||
return __lua_setmetatable({}, __builder_fns.group_builder)
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param name string
|
|
||||||
---@return evolved.group_builder builder
|
|
||||||
function __builder_fns.group_builder:name(name)
|
|
||||||
self.__name = name
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param single evolved.component
|
|
||||||
---@return evolved.group_builder builder
|
|
||||||
function __builder_fns.group_builder:single(single)
|
|
||||||
self.__single = single
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
---@return evolved.group_builder builder
|
|
||||||
function __builder_fns.group_builder:disable()
|
|
||||||
self.__disable = true
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param phase evolved.phase
|
|
||||||
---@return evolved.group_builder builder
|
|
||||||
function __builder_fns.group_builder:phase(phase)
|
|
||||||
self.__phase = phase
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param ... evolved.group groups
|
|
||||||
---@return evolved.group_builder builder
|
|
||||||
function __builder_fns.group_builder:after(...)
|
|
||||||
local group_count = __lua_select('#', ...)
|
|
||||||
|
|
||||||
if group_count == 0 then
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
local after = self.__after
|
|
||||||
|
|
||||||
if not after then
|
|
||||||
after = __lua_table_new(group_count, 0)
|
|
||||||
self.__after = after
|
|
||||||
end
|
|
||||||
|
|
||||||
local after_count = #after
|
|
||||||
|
|
||||||
for i = 1, group_count do
|
|
||||||
after_count = after_count + 1
|
|
||||||
after[after_count] = __lua_select(i, ...)
|
|
||||||
end
|
|
||||||
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param prologue evolved.prologue
|
|
||||||
---@return evolved.group_builder builder
|
|
||||||
function __builder_fns.group_builder:prologue(prologue)
|
|
||||||
self.__prologue = prologue
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param epilogue evolved.epilogue
|
|
||||||
---@return evolved.group_builder builder
|
|
||||||
function __builder_fns.group_builder:epilogue(epilogue)
|
|
||||||
self.__epilogue = epilogue
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
---@return evolved.group group
|
|
||||||
function __builder_fns.group_builder:build()
|
|
||||||
local name = self.__name
|
|
||||||
local single = self.__single
|
|
||||||
local disable = self.__disable
|
|
||||||
local phase = self.__phase
|
|
||||||
local after = self.__after
|
|
||||||
local prologue = self.__prologue
|
|
||||||
local epilogue = self.__epilogue
|
|
||||||
|
|
||||||
self.__name = nil
|
|
||||||
self.__single = nil
|
|
||||||
self.__disable = nil
|
|
||||||
self.__phase = nil
|
|
||||||
self.__after = nil
|
|
||||||
self.__prologue = nil
|
|
||||||
self.__epilogue = 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
|
|
||||||
|
|
||||||
if disable then
|
|
||||||
component_count = component_count + 1
|
|
||||||
fragment_list[component_count] = __DISABLED
|
|
||||||
component_list[component_count] = true
|
|
||||||
end
|
|
||||||
|
|
||||||
if phase then
|
|
||||||
component_count = component_count + 1
|
|
||||||
fragment_list[component_count] = __PHASE
|
|
||||||
component_list[component_count] = phase
|
|
||||||
end
|
|
||||||
|
|
||||||
if after then
|
|
||||||
component_count = component_count + 1
|
|
||||||
fragment_list[component_count] = __AFTER
|
|
||||||
component_list[component_count] = after
|
|
||||||
end
|
|
||||||
|
|
||||||
if prologue then
|
|
||||||
component_count = component_count + 1
|
|
||||||
fragment_list[component_count] = __PROLOGUE
|
|
||||||
component_list[component_count] = prologue
|
|
||||||
end
|
|
||||||
|
|
||||||
if epilogue then
|
|
||||||
component_count = component_count + 1
|
|
||||||
fragment_list[component_count] = __EPILOGUE
|
|
||||||
component_list[component_count] = epilogue
|
|
||||||
end
|
|
||||||
|
|
||||||
__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
|
|
||||||
end
|
|
||||||
|
|
||||||
---
|
|
||||||
---
|
|
||||||
---
|
|
||||||
---
|
|
||||||
---
|
|
||||||
|
|
||||||
---@return evolved.phase_builder builder
|
|
||||||
---@nodiscard
|
|
||||||
__evolved_phase = function()
|
|
||||||
return __lua_setmetatable({}, __builder_fns.phase_builder)
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param name string
|
|
||||||
---@return evolved.phase_builder builder
|
|
||||||
function __builder_fns.phase_builder:name(name)
|
|
||||||
self.__name = name
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param single evolved.component
|
|
||||||
---@return evolved.phase_builder builder
|
|
||||||
function __builder_fns.phase_builder:single(single)
|
|
||||||
self.__single = single
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
---@return evolved.phase_builder builder
|
|
||||||
function __builder_fns.phase_builder:disable()
|
|
||||||
self.__disable = true
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param prologue evolved.prologue
|
|
||||||
---@return evolved.phase_builder builder
|
|
||||||
function __builder_fns.phase_builder:prologue(prologue)
|
|
||||||
self.__prologue = prologue
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param epilogue evolved.epilogue
|
|
||||||
---@return evolved.phase_builder builder
|
|
||||||
function __builder_fns.phase_builder:epilogue(epilogue)
|
|
||||||
self.__epilogue = epilogue
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
---@return evolved.phase phase
|
|
||||||
function __builder_fns.phase_builder:build()
|
|
||||||
local name = self.__name
|
|
||||||
local single = self.__single
|
|
||||||
local disable = self.__disable
|
|
||||||
local prologue = self.__prologue
|
|
||||||
local epilogue = self.__epilogue
|
|
||||||
|
|
||||||
self.__name = nil
|
|
||||||
self.__single = nil
|
|
||||||
self.__disable = nil
|
|
||||||
self.__prologue = nil
|
|
||||||
self.__epilogue = nil
|
|
||||||
|
|
||||||
local phase = __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] = phase
|
|
||||||
component_list[component_count] = single
|
|
||||||
end
|
|
||||||
|
|
||||||
if disable then
|
|
||||||
component_count = component_count + 1
|
|
||||||
fragment_list[component_count] = __DISABLED
|
|
||||||
component_list[component_count] = true
|
|
||||||
end
|
|
||||||
|
|
||||||
if prologue then
|
|
||||||
component_count = component_count + 1
|
|
||||||
fragment_list[component_count] = __PROLOGUE
|
|
||||||
component_list[component_count] = prologue
|
|
||||||
end
|
|
||||||
|
|
||||||
if epilogue then
|
|
||||||
component_count = component_count + 1
|
|
||||||
fragment_list[component_count] = __EPILOGUE
|
|
||||||
component_list[component_count] = epilogue
|
|
||||||
end
|
|
||||||
|
|
||||||
__evolved_multi_set(phase, fragment_list, component_list)
|
|
||||||
|
|
||||||
__release_table(__table_pool_tag.fragment_list, fragment_list)
|
|
||||||
__release_table(__table_pool_tag.component_list, component_list)
|
|
||||||
|
|
||||||
return phase
|
|
||||||
end
|
|
||||||
|
|
||||||
---
|
|
||||||
---
|
|
||||||
---
|
|
||||||
---
|
|
||||||
---
|
|
||||||
|
|
||||||
---@return evolved.system_builder builder
|
---@return evolved.system_builder builder
|
||||||
---@nodiscard
|
---@nodiscard
|
||||||
__evolved_system = function()
|
__evolved_system = function()
|
||||||
@@ -7012,13 +6595,7 @@ function __builder_fns.system_builder:single(single)
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
---@return evolved.system_builder builder
|
---@param group evolved.system
|
||||||
function __builder_fns.system_builder:disable()
|
|
||||||
self.__disable = true
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param group evolved.group
|
|
||||||
---@return evolved.system_builder builder
|
---@return evolved.system_builder builder
|
||||||
function __builder_fns.system_builder:group(group)
|
function __builder_fns.system_builder:group(group)
|
||||||
self.__group = group
|
self.__group = group
|
||||||
@@ -7053,25 +6630,31 @@ function __builder_fns.system_builder:epilogue(epilogue)
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@return evolved.system_builder builder
|
||||||
|
function __builder_fns.system_builder:disabled()
|
||||||
|
self.__disabled = true
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
---@return evolved.system system
|
---@return evolved.system system
|
||||||
function __builder_fns.system_builder:build()
|
function __builder_fns.system_builder:build()
|
||||||
local name = self.__name
|
local name = self.__name
|
||||||
local single = self.__single
|
local single = self.__single
|
||||||
local disable = self.__disable
|
|
||||||
local group = self.__group
|
local group = self.__group
|
||||||
local query = self.__query
|
local query = self.__query
|
||||||
local execute = self.__execute
|
local execute = self.__execute
|
||||||
local prologue = self.__prologue
|
local prologue = self.__prologue
|
||||||
local epilogue = self.__epilogue
|
local epilogue = self.__epilogue
|
||||||
|
local disabled = self.__disabled
|
||||||
|
|
||||||
self.__name = nil
|
self.__name = nil
|
||||||
self.__single = nil
|
self.__single = nil
|
||||||
self.__disable = nil
|
|
||||||
self.__group = nil
|
self.__group = nil
|
||||||
self.__query = nil
|
self.__query = nil
|
||||||
self.__execute = nil
|
self.__execute = nil
|
||||||
self.__prologue = nil
|
self.__prologue = nil
|
||||||
self.__epilogue = nil
|
self.__epilogue = nil
|
||||||
|
self.__disabled = nil
|
||||||
|
|
||||||
local system = __evolved_id()
|
local system = __evolved_id()
|
||||||
|
|
||||||
@@ -7091,12 +6674,6 @@ function __builder_fns.system_builder:build()
|
|||||||
component_list[component_count] = single
|
component_list[component_count] = single
|
||||||
end
|
end
|
||||||
|
|
||||||
if disable then
|
|
||||||
component_count = component_count + 1
|
|
||||||
fragment_list[component_count] = __DISABLED
|
|
||||||
component_list[component_count] = true
|
|
||||||
end
|
|
||||||
|
|
||||||
if group then
|
if group then
|
||||||
component_count = component_count + 1
|
component_count = component_count + 1
|
||||||
fragment_list[component_count] = __GROUP
|
fragment_list[component_count] = __GROUP
|
||||||
@@ -7127,6 +6704,12 @@ function __builder_fns.system_builder:build()
|
|||||||
component_list[component_count] = epilogue
|
component_list[component_count] = epilogue
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if disabled then
|
||||||
|
component_count = component_count + 1
|
||||||
|
fragment_list[component_count] = __DISABLED
|
||||||
|
component_list[component_count] = true
|
||||||
|
end
|
||||||
|
|
||||||
__evolved_multi_set(system, fragment_list, component_list)
|
__evolved_multi_set(system, fragment_list, component_list)
|
||||||
|
|
||||||
__release_table(__table_pool_tag.fragment_list, fragment_list)
|
__release_table(__table_pool_tag.fragment_list, fragment_list)
|
||||||
@@ -7291,9 +6874,7 @@ __evolved_set(__ON_ASSIGN, __NAME, 'ON_ASSIGN')
|
|||||||
__evolved_set(__ON_INSERT, __NAME, 'ON_INSERT')
|
__evolved_set(__ON_INSERT, __NAME, 'ON_INSERT')
|
||||||
__evolved_set(__ON_REMOVE, __NAME, 'ON_REMOVE')
|
__evolved_set(__ON_REMOVE, __NAME, 'ON_REMOVE')
|
||||||
|
|
||||||
__evolved_set(__PHASE, __NAME, 'PHASE')
|
|
||||||
__evolved_set(__GROUP, __NAME, 'GROUP')
|
__evolved_set(__GROUP, __NAME, 'GROUP')
|
||||||
__evolved_set(__AFTER, __NAME, 'AFTER')
|
|
||||||
|
|
||||||
__evolved_set(__QUERY, __NAME, 'QUERY')
|
__evolved_set(__QUERY, __NAME, 'QUERY')
|
||||||
__evolved_set(__EXECUTE, __NAME, 'EXECUTE')
|
__evolved_set(__EXECUTE, __NAME, 'EXECUTE')
|
||||||
@@ -7321,9 +6902,6 @@ __evolved_set(__INCLUDES, __DUPLICATE, __list_copy)
|
|||||||
__evolved_set(__EXCLUDES, __DEFAULT, {})
|
__evolved_set(__EXCLUDES, __DEFAULT, {})
|
||||||
__evolved_set(__EXCLUDES, __DUPLICATE, __list_copy)
|
__evolved_set(__EXCLUDES, __DUPLICATE, __list_copy)
|
||||||
|
|
||||||
__evolved_set(__AFTER, __DEFAULT, {})
|
|
||||||
__evolved_set(__AFTER, __DUPLICATE, __list_copy)
|
|
||||||
|
|
||||||
__evolved_set(__DISABLED, __TAG)
|
__evolved_set(__DISABLED, __TAG)
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -7394,96 +6972,46 @@ end)
|
|||||||
---
|
---
|
||||||
---
|
---
|
||||||
|
|
||||||
---@param group evolved.group
|
|
||||||
---@param new_phase evolved.phase
|
|
||||||
---@param old_phase? evolved.phase
|
|
||||||
__evolved_set(__PHASE, __ON_SET, function(group, _, new_phase, old_phase)
|
|
||||||
if new_phase == old_phase then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if old_phase then
|
|
||||||
local old_phase_groups = __phase_groups[old_phase]
|
|
||||||
|
|
||||||
if old_phase_groups then
|
|
||||||
__assoc_list_remove(old_phase_groups, group)
|
|
||||||
|
|
||||||
if old_phase_groups.__item_count == 0 then
|
|
||||||
__phase_groups[old_phase] = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local new_phase_groups = __phase_groups[new_phase]
|
|
||||||
|
|
||||||
if not new_phase_groups then
|
|
||||||
new_phase_groups = __assoc_list_new(4)
|
|
||||||
__phase_groups[new_phase] = new_phase_groups
|
|
||||||
end
|
|
||||||
|
|
||||||
__assoc_list_insert(new_phase_groups, group)
|
|
||||||
end)
|
|
||||||
|
|
||||||
---@param group evolved.group
|
|
||||||
---@param old_phase evolved.phase
|
|
||||||
__evolved_set(__PHASE, __ON_REMOVE, function(group, _, old_phase)
|
|
||||||
local old_phase_groups = __phase_groups[old_phase]
|
|
||||||
|
|
||||||
if old_phase_groups then
|
|
||||||
__assoc_list_remove(old_phase_groups, group)
|
|
||||||
|
|
||||||
if old_phase_groups.__item_count == 0 then
|
|
||||||
__phase_groups[old_phase] = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
---
|
|
||||||
---
|
|
||||||
---
|
|
||||||
---
|
|
||||||
---
|
|
||||||
|
|
||||||
---@param system evolved.system
|
---@param system evolved.system
|
||||||
---@param new_group evolved.group
|
---@param new_group evolved.system
|
||||||
---@param old_group? evolved.group
|
---@param old_group? evolved.system
|
||||||
__evolved_set(__GROUP, __ON_SET, function(system, _, new_group, old_group)
|
__evolved_set(__GROUP, __ON_SET, function(system, _, new_group, old_group)
|
||||||
if new_group == old_group then
|
if new_group == old_group then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if old_group then
|
if old_group then
|
||||||
local old_group_systems = __group_systems[old_group]
|
local old_group_systems = __group_subsystems[old_group]
|
||||||
|
|
||||||
if old_group_systems then
|
if old_group_systems then
|
||||||
__assoc_list_remove(old_group_systems, system)
|
__assoc_list_remove(old_group_systems, system)
|
||||||
|
|
||||||
if old_group_systems.__item_count == 0 then
|
if old_group_systems.__item_count == 0 then
|
||||||
__group_systems[old_group] = nil
|
__group_subsystems[old_group] = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local new_group_systems = __group_systems[new_group]
|
local new_group_systems = __group_subsystems[new_group]
|
||||||
|
|
||||||
if not new_group_systems then
|
if not new_group_systems then
|
||||||
new_group_systems = __assoc_list_new(4)
|
new_group_systems = __assoc_list_new(4)
|
||||||
__group_systems[new_group] = new_group_systems
|
__group_subsystems[new_group] = new_group_systems
|
||||||
end
|
end
|
||||||
|
|
||||||
__assoc_list_insert(new_group_systems, system)
|
__assoc_list_insert(new_group_systems, system)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
---@param system evolved.system
|
---@param system evolved.system
|
||||||
---@param old_group evolved.group
|
---@param old_group evolved.system
|
||||||
__evolved_set(__GROUP, __ON_REMOVE, function(system, _, old_group)
|
__evolved_set(__GROUP, __ON_REMOVE, function(system, _, old_group)
|
||||||
local old_group_systems = __group_systems[old_group]
|
local old_group_systems = __group_subsystems[old_group]
|
||||||
|
|
||||||
if old_group_systems then
|
if old_group_systems then
|
||||||
__assoc_list_remove(old_group_systems, system)
|
__assoc_list_remove(old_group_systems, system)
|
||||||
|
|
||||||
if old_group_systems.__item_count == 0 then
|
if old_group_systems.__item_count == 0 then
|
||||||
__group_systems[old_group] = nil
|
__group_subsystems[old_group] = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
@@ -7494,37 +7022,6 @@ end)
|
|||||||
---
|
---
|
||||||
---
|
---
|
||||||
|
|
||||||
---@param group evolved.group
|
|
||||||
---@param new_after_list evolved.group[]
|
|
||||||
__evolved_set(__AFTER, __ON_SET, function(group, _, new_after_list)
|
|
||||||
local new_after_count = #new_after_list
|
|
||||||
|
|
||||||
if new_after_count == 0 then
|
|
||||||
__group_dependencies[group] = nil
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local new_dependencies = __assoc_list_new(new_after_count)
|
|
||||||
|
|
||||||
for new_after_index = 1, new_after_count do
|
|
||||||
local new_after = new_after_list[new_after_index]
|
|
||||||
__assoc_list_insert(new_dependencies, new_after)
|
|
||||||
end
|
|
||||||
|
|
||||||
__group_dependencies[group] = new_dependencies
|
|
||||||
end)
|
|
||||||
|
|
||||||
---@param group evolved.group
|
|
||||||
__evolved_set(__AFTER, __ON_REMOVE, function(group)
|
|
||||||
__group_dependencies[group] = nil
|
|
||||||
end)
|
|
||||||
|
|
||||||
---
|
|
||||||
---
|
|
||||||
---
|
|
||||||
---
|
|
||||||
---
|
|
||||||
|
|
||||||
evolved.TAG = __TAG
|
evolved.TAG = __TAG
|
||||||
evolved.NAME = __NAME
|
evolved.NAME = __NAME
|
||||||
evolved.DEFAULT = __DEFAULT
|
evolved.DEFAULT = __DEFAULT
|
||||||
@@ -7538,9 +7035,7 @@ evolved.ON_ASSIGN = __ON_ASSIGN
|
|||||||
evolved.ON_INSERT = __ON_INSERT
|
evolved.ON_INSERT = __ON_INSERT
|
||||||
evolved.ON_REMOVE = __ON_REMOVE
|
evolved.ON_REMOVE = __ON_REMOVE
|
||||||
|
|
||||||
evolved.PHASE = __PHASE
|
|
||||||
evolved.GROUP = __GROUP
|
evolved.GROUP = __GROUP
|
||||||
evolved.AFTER = __AFTER
|
|
||||||
|
|
||||||
evolved.QUERY = __QUERY
|
evolved.QUERY = __QUERY
|
||||||
evolved.EXECUTE = __EXECUTE
|
evolved.EXECUTE = __EXECUTE
|
||||||
|
|||||||
Reference in New Issue
Block a user