mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-13 11:38:15 +07:00
30
README.md
30
README.md
@@ -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
|
||||
```
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
743
evolved.lua
743
evolved.lua
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user