Merge branch 'dev'

This commit is contained in:
BlackMATov
2025-03-27 15:36:58 +07:00
6 changed files with 3215 additions and 4817 deletions

View File

@@ -22,10 +22,9 @@
```
TAG :: fragment
NAME :: fragment
DEFAULT :: fragment
CONSTRUCT :: fragment
DUPLICATE :: fragment
INCLUDES :: fragment
EXCLUDES :: fragment
@@ -45,6 +44,8 @@ EXECUTE :: fragment
PROLOGUE :: fragment
EPILOGUE :: fragment
DISABLED :: fragment
DESTROY_POLICY :: fragment
DESTROY_POLICY_DESTROY_ENTITY :: id
DESTROY_POLICY_REMOVE_FRAGMENT :: id
@@ -75,29 +76,21 @@ has_any :: chunk | entity, fragment... -> boolean
get :: entity, fragment... -> component...
set :: entity, fragment, any... -> boolean, boolean
assign :: entity, fragment, any... -> boolean, boolean
insert :: entity, fragment, any... -> boolean, boolean
remove :: entity, fragment... -> boolean, boolean
clear :: entity... -> boolean, boolean
destroy :: entity... -> boolean, boolean
set :: entity, fragment, component -> ()
remove :: entity, fragment... -> ()
clear :: entity... -> ()
destroy :: entity... -> ()
multi_set :: entity, fragment[], component[]? -> boolean, boolean
multi_assign :: entity, fragment[], component[]? -> boolean, boolean
multi_insert :: entity, fragment[], component[]? -> boolean, boolean
multi_remove :: entity, fragment[] -> boolean, boolean
multi_set :: entity, fragment[], component[]? -> ()
multi_remove :: entity, fragment[] -> ()
batch_set :: chunk | query, fragment, any... -> integer, boolean
batch_assign :: chunk | query, fragment, any... -> integer, boolean
batch_insert :: chunk | query, fragment, any... -> integer, boolean
batch_remove :: chunk | query, fragment... -> integer, boolean
batch_clear :: chunk | query... -> integer, boolean
batch_destroy :: chunk | query... -> integer, boolean
batch_set :: query, fragment, component -> ()
batch_remove :: query, fragment... -> ()
batch_clear :: query... -> ()
batch_destroy :: query... -> ()
batch_multi_set :: chunk | query, fragment[], component[]? -> integer, boolean
batch_multi_assign :: chunk | query, fragment[], component[]? -> integer, boolean
batch_multi_insert :: chunk | query, fragment[], component[]? -> integer, boolean
batch_multi_remove :: chunk | query, fragment[] -> integer, boolean
batch_multi_set :: query, fragment[], component[]? -> ()
batch_multi_remove :: query, fragment[] -> ()
chunk :: fragment, fragment... -> chunk, entity[], integer
@@ -110,19 +103,19 @@ execute :: query -> {execute_state? -> chunk?, entity[]?, integer?}, execute_sta
process :: phase... -> ()
spawn_at :: chunk?, fragment[]?, component[]? -> entity, boolean
spawn_with :: fragment[]?, component[]? -> entity, boolean
spawn_at :: chunk?, fragment[]?, component[]? -> entity
spawn_with :: fragment[]?, component[]? -> entity
debug_mode :: boolean -> ()
collect_garbage :: boolean, boolean
collect_garbage :: ()
```
## Builders
```
entity :: entity_builder
entity_builder:set :: fragment, any... -> entity_builder
entity_builder:build :: entity, boolean
entity_builder:set :: fragment, component -> entity_builder
entity_builder:build :: entity
```
```
@@ -131,13 +124,13 @@ fragment_builder:tag :: fragment_builder
fragment_builder:name :: string -> fragment_builder
fragment_builder:single :: component -> fragment_builder
fragment_builder:default :: component -> fragment_builder
fragment_builder:construct :: {any... -> component} -> fragment_builder
fragment_builder:duplicate :: {component -> component} -> fragment_builder
fragment_builder:on_set :: {entity, fragment, component, component?} -> fragment_builder
fragment_builder:on_assign :: {entity, fragment, component, component} -> fragment_builder
fragment_builder:on_insert :: {entity, fragment, component} -> fragment_builder
fragment_builder:on_remove :: {entity, fragment} -> fragment_builder
fragment_builder:destroy_policy :: id -> fragment_builder
fragment_builder:build :: fragment, boolean
fragment_builder:build :: fragment
```
```
@@ -146,35 +139,42 @@ query_builder:name :: string -> query_builder
query_builder:single :: component -> query_builder
query_builder:include :: fragment... -> query_builder
query_builder:exclude :: fragment... -> query_builder
query_builder:build :: query, boolean
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:build :: group, boolean
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:build :: phase, boolean
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:query :: query -> system_builder
system_builder:execute :: {chunk, entity[], integer} -> system_builder
system_builder:prologue :: {} -> system_builder
system_builder:epilogue :: {} -> system_builder
system_builder:build :: system, boolean
system_builder:build :: system
```
## [License (MIT)](./LICENSE.md)

View File

@@ -2,14 +2,15 @@
## Backlog
- should set/assign/insert return a constructed component?
- enable/disable systems and groups
- should systems support multiple groups?
- should groups support multiple phases?
- can we pass systems and groups to the process function?
- builders should be rewritten :/
- add evolved.spawn_as function
## After first release
- cached queries
- multi-phase groups
- multi-group systems
- observers and events
- add INDEX fragment trait
- add REQUIRES fragment trait

View File

@@ -1,12 +1,14 @@
local basics = {}
local __table_pack = (function()
---@diagnostic disable-next-line: deprecated
return table.pack or function(...)
return { n = select('#', ...), ... }
end
end)()
local __table_unpack = (function()
---@diagnostic disable-next-line: deprecated
return table.unpack or unpack
end)()

View File

@@ -236,11 +236,11 @@ basics.describe_bench(string.format('create and destroy %d entities with 1 compo
---@param entities evolved.id[]
function(entities)
local id = evo.id
local insert = evo.insert
local set = evo.set
for i = 1, N do
local e = id()
insert(e, F1)
set(e, F1)
entities[i] = e
end
@@ -253,12 +253,12 @@ basics.describe_bench(string.format('create and destroy %d entities with 2 compo
---@param entities evolved.id[]
function(entities)
local id = evo.id
local insert = evo.insert
local set = evo.set
for i = 1, N do
local e = id()
insert(e, F1)
insert(e, F2)
set(e, F1)
set(e, F2)
entities[i] = e
end
@@ -271,13 +271,13 @@ basics.describe_bench(string.format('create and destroy %d entities with 3 compo
---@param entities evolved.id[]
function(entities)
local id = evo.id
local insert = evo.insert
local set = evo.set
for i = 1, N do
local e = id()
insert(e, F1)
insert(e, F2)
insert(e, F3)
set(e, F1)
set(e, F2)
set(e, F3)
entities[i] = e
end
@@ -290,14 +290,14 @@ basics.describe_bench(string.format('create and destroy %d entities with 4 compo
---@param entities evolved.id[]
function(entities)
local id = evo.id
local insert = evo.insert
local set = evo.set
for i = 1, N do
local e = id()
insert(e, F1)
insert(e, F2)
insert(e, F3)
insert(e, F4)
set(e, F1)
set(e, F2)
set(e, F3)
set(e, F4)
entities[i] = e
end
@@ -310,15 +310,15 @@ basics.describe_bench(string.format('create and destroy %d entities with 5 compo
---@param entities evolved.id[]
function(entities)
local id = evo.id
local insert = evo.insert
local set = evo.set
for i = 1, N do
local e = id()
insert(e, F1)
insert(e, F2)
insert(e, F3)
insert(e, F4)
insert(e, F5)
set(e, F1)
set(e, F2)
set(e, F3)
set(e, F4)
set(e, F5)
entities[i] = e
end
@@ -333,12 +333,12 @@ basics.describe_bench(string.format('create and destroy %d entities with 1 compo
---@param entities evolved.id[]
function(entities)
local id = evo.id
local insert = evo.insert
local set = evo.set
evo.defer()
for i = 1, N do
local e = id()
insert(e, F1)
set(e, F1)
entities[i] = e
end
evo.commit()
@@ -352,13 +352,13 @@ basics.describe_bench(string.format('create and destroy %d entities with 2 compo
---@param entities evolved.id[]
function(entities)
local id = evo.id
local insert = evo.insert
local set = evo.set
evo.defer()
for i = 1, N do
local e = id()
insert(e, F1)
insert(e, F2)
set(e, F1)
set(e, F2)
entities[i] = e
end
evo.commit()
@@ -372,14 +372,14 @@ basics.describe_bench(string.format('create and destroy %d entities with 3 compo
---@param entities evolved.id[]
function(entities)
local id = evo.id
local insert = evo.insert
local set = evo.set
evo.defer()
for i = 1, N do
local e = id()
insert(e, F1)
insert(e, F2)
insert(e, F3)
set(e, F1)
set(e, F2)
set(e, F3)
entities[i] = e
end
evo.commit()
@@ -393,15 +393,15 @@ basics.describe_bench(string.format('create and destroy %d entities with 4 compo
---@param entities evolved.id[]
function(entities)
local id = evo.id
local insert = evo.insert
local set = evo.set
evo.defer()
for i = 1, N do
local e = id()
insert(e, F1)
insert(e, F2)
insert(e, F3)
insert(e, F4)
set(e, F1)
set(e, F2)
set(e, F3)
set(e, F4)
entities[i] = e
end
evo.commit()
@@ -415,16 +415,16 @@ basics.describe_bench(string.format('create and destroy %d entities with 5 compo
---@param entities evolved.id[]
function(entities)
local id = evo.id
local insert = evo.insert
local set = evo.set
evo.defer()
for i = 1, N do
local e = id()
insert(e, F1)
insert(e, F2)
insert(e, F3)
insert(e, F4)
insert(e, F5)
set(e, F1)
set(e, F2)
set(e, F3)
set(e, F4)
set(e, F5)
entities[i] = e
end
evo.commit()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff