Merge pull request #3 from BlackMATov/dev

Dev
This commit is contained in:
2025-04-09 00:58:14 +07:00
committed by GitHub
6 changed files with 233 additions and 724 deletions

View File

@@ -40,9 +40,7 @@ ON_ASSIGN :: fragment
ON_INSERT :: fragment
ON_REMOVE :: fragment
PHASE :: fragment
GROUP :: fragment
AFTER :: fragment
QUERY :: fragment
EXECUTE :: fragment
@@ -107,7 +105,7 @@ components :: chunk, fragment... -> component[]...
each :: entity -> {each_state? -> fragment?, component?}, each_state?
execute :: query -> {execute_state? -> chunk?, entity[]?, integer?}, execute_state?
process :: phase... -> ()
process :: system... -> ()
spawn_at :: chunk?, fragment[]?, component[]? -> entity
spawn_as :: entity?, fragment[]?, component[]? -> entity
@@ -149,38 +147,16 @@ query_builder:exclude :: fragment... -> query_builder
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_builder:name :: string -> system_builder
system_builder:single :: component -> system_builder
system_builder:disable :: system_builder
system_builder:group :: group -> system_builder
system_builder:group :: system -> system_builder
system_builder:query :: query -> system_builder
system_builder:execute :: {chunk, entity[], integer} -> system_builder
system_builder:prologue :: {} -> system_builder
system_builder:epilogue :: {} -> system_builder
system_builder:disabled :: system_builder
system_builder:build :: system
```

View File

@@ -2,15 +2,12 @@
## Backlog
- can we pass systems and groups to the process function?
- builders should be rewritten :/
- is/has_all/any for lists?
## After first release
- cached queries
- multi-phase groups
- multi-group systems
- observers and events
- add INDEX fragment trait
- add REQUIRES fragment trait

View File

@@ -15,18 +15,11 @@ local function vector2(x, y)
return { x = x, y = y }
end
local phases = {
awake = evo.phase():build(),
physics = evo.phase():build(),
graphics = evo.phase():build(),
shutdown = evo.phase():build(),
}
local groups = {
awake = evo.group():phase(phases.awake):build(),
physics = evo.group():phase(phases.physics):build(),
graphics = evo.group():phase(phases.graphics):build(),
shutdown = evo.group():phase(phases.shutdown):build(),
awake = evo.system():build(),
physics = evo.system():build(),
graphics = evo.system():build(),
shutdown = evo.system():build(),
}
local singles = {
@@ -126,12 +119,12 @@ local shutdown_system = evo.system()
end):build()
do
evo.process(phases.awake)
evo.process(groups.awake)
for _ = 1, 10 do
evo.process(phases.physics)
evo.process(phases.graphics)
evo.process(groups.physics)
evo.process(groups.graphics)
end
evo.process(phases.shutdown)
evo.process(groups.shutdown)
end

View File

@@ -610,28 +610,6 @@ basics.describe_bench(string.format('create and destroy %d entities with 5 compo
print '----------------------------------------'
basics.describe_bench(string.format('create and destroy %d entities / spawn_at', N),
---@param entities evolved.id[]
function(entities)
local destroy = evo.destroy
local spawn_at = evo.spawn_at
local fragments = {}
local components = {}
local chunk = nil
for i = 1, N do
entities[i] = spawn_at(chunk, fragments, components)
end
for i = #entities, 1, -1 do
destroy(entities[i])
end
end, function()
return {}
end)
basics.describe_bench(string.format('create and destroy %d entities with 1 components / spawn_at', N),
---@param entities evolved.id[]
function(entities)
@@ -729,26 +707,103 @@ basics.describe_bench(string.format('create and destroy %d entities with 5 compo
print '----------------------------------------'
basics.describe_bench(string.format('create and destroy %d entities / spawn_with', N),
basics.describe_bench(string.format('create and destroy %d entities with 1 components / spawn_as', N),
---@param entities evolved.id[]
function(entities)
local destroy = evo.destroy
local spawn_with = evo.spawn_with
local spawn_as = evo.spawn_as
local fragments = {}
local components = {}
local fragments = { F1 }
local components = { true }
local prefab = evo.spawn_with(fragments, components)
for i = 1, N do
entities[i] = spawn_with(fragments, components)
entities[i] = spawn_as(prefab, fragments, components)
end
for i = #entities, 1, -1 do
destroy(entities[i])
end
evo.batch_destroy(Q1)
end, function()
return {}
end)
basics.describe_bench(string.format('create and destroy %d entities with 2 components / spawn_as', N),
---@param entities evolved.id[]
function(entities)
local spawn_as = evo.spawn_as
local fragments = { F1, F2 }
local components = { true, true }
local prefab = evo.spawn_with(fragments, components)
for i = 1, N do
entities[i] = spawn_as(prefab, fragments, components)
end
evo.batch_destroy(Q1)
end, function()
return {}
end)
basics.describe_bench(string.format('create and destroy %d entities with 3 components / spawn_as', N),
---@param entities evolved.id[]
function(entities)
local spawn_as = evo.spawn_as
local fragments = { F1, F2, F3 }
local components = { true, true, true }
local prefab = evo.spawn_with(fragments, components)
for i = 1, N do
entities[i] = spawn_as(prefab, fragments, components)
end
evo.batch_destroy(Q1)
end, function()
return {}
end)
basics.describe_bench(string.format('create and destroy %d entities with 4 components / spawn_as', N),
---@param entities evolved.id[]
function(entities)
local spawn_as = evo.spawn_as
local fragments = { F1, F2, F3, F4 }
local components = { true, true, true, true }
local prefab = evo.spawn_with(fragments, components)
for i = 1, N do
entities[i] = spawn_as(prefab, fragments, components)
end
evo.batch_destroy(Q1)
end, function()
return {}
end)
basics.describe_bench(string.format('create and destroy %d entities with 5 components / spawn_as', N),
---@param entities evolved.id[]
function(entities)
local spawn_as = evo.spawn_as
local fragments = { F1, F2, F3, F4, F5 }
local components = { true, true, true, true, true }
local prefab = evo.spawn_with(fragments, components)
for i = 1, N do
entities[i] = spawn_as(prefab, fragments, components)
end
evo.batch_destroy(Q1)
end, function()
return {}
end)
print '----------------------------------------'
basics.describe_bench(string.format('create and destroy %d entities with 1 components / spawn_with', N),
---@param entities evolved.id[]
function(entities)

View File

@@ -5929,9 +5929,6 @@ do
local q = evo.query():build()
assert(evo.get(q, evo.NAME) == nil)
local p = evo.phase():build()
assert(evo.get(p, evo.NAME) == nil)
local s = evo.system():build()
assert(evo.get(s, evo.NAME) == nil)
end
@@ -5939,7 +5936,6 @@ end
do
local fb = evo.fragment()
local qb = evo.query()
local pb = evo.phase()
local sb = evo.system()
do
@@ -5949,9 +5945,6 @@ do
local q = qb:name('query'):build()
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()
assert(evo.get(s, evo.NAME) == 'system')
end
@@ -5963,9 +5956,6 @@ do
local q = qb:build()
assert(evo.get(q, evo.NAME) == nil)
local p = pb:build()
assert(evo.get(p, evo.NAME) == nil)
local s = sb:build()
assert(evo.get(s, evo.NAME) == nil)
end
@@ -5974,7 +5964,6 @@ end
do
local fb = evo.fragment()
local qb = evo.query()
local pb = evo.phase()
local sb = evo.system()
do
@@ -5984,9 +5973,6 @@ do
local q = qb:single(false):build()
assert(evo.get(q, q) == false)
local p = pb:single(false):build()
assert(evo.get(p, p) == false)
local s = sb:single(false):build()
assert(evo.get(s, s) == false)
end
@@ -5998,9 +5984,6 @@ do
local q = qb:build()
assert(evo.get(q, q) == nil)
local p = pb:build()
assert(evo.get(p, p) == nil)
local s = sb:build()
assert(evo.get(s, s) == nil)
end
@@ -7315,7 +7298,7 @@ do
end
do
local gb = evo.group()
local gb = evo.system()
local g1 = gb:build()
local g2 = gb:name('g2'):build()
@@ -7329,31 +7312,11 @@ do
end
do
local g = evo.group():build()
local g = evo.system():build()
local s = evo.system():group(g):build()
assert(evo.get(s, evo.GROUP) == g)
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
local f1 = evo.id()
local c1 = evo.chunk(f1)

File diff suppressed because it is too large Load Diff