Skip to content

Commit 9c81f3f

Browse files
committed
Merge branch 'feature/remove_multi_api' into dev
2 parents b7496bd + 5aa72e0 commit 9c81f3f

10 files changed

Lines changed: 3174 additions & 7676 deletions

File tree

README.md

Lines changed: 45 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
```
3030
TAG :: fragment
3131
NAME :: fragment
32+
3233
DEFAULT :: fragment
3334
DUPLICATE :: fragment
3435
@@ -66,17 +67,20 @@ unpack :: id -> integer, integer
6667
defer :: boolean
6768
commit :: boolean
6869
69-
is_alive :: chunk | entity -> boolean
70-
is_alive_all :: chunk | entity... -> boolean
71-
is_alive_any :: chunk | entity... -> boolean
70+
spawn :: <fragment, component>? -> entity
71+
clone :: entity -> <fragment, component>? -> entity
72+
73+
alive :: entity -> boolean
74+
alive_all :: entity... -> boolean
75+
alive_any :: entity... -> boolean
7276
73-
is_empty :: chunk | entity -> boolean
74-
is_empty_all :: chunk | entity... -> boolean
75-
is_empty_any :: chunk | entity... -> boolean
77+
empty :: entity -> boolean
78+
empty_all :: entity... -> boolean
79+
empty_any :: entity... -> boolean
7680
77-
has :: chunk | entity, fragment -> boolean
78-
has_all :: chunk | entity, fragment... -> boolean
79-
has_any :: chunk | entity, fragment... -> boolean
81+
has :: entity, fragment -> boolean
82+
has_all :: entity, fragment... -> boolean
83+
has_any :: entity, fragment... -> boolean
8084
8185
get :: entity, fragment... -> component...
8286
@@ -85,67 +89,80 @@ remove :: entity, fragment... -> ()
8589
clear :: entity... -> ()
8690
destroy :: entity... -> ()
8791
88-
multi_set :: entity, fragment[], component[]? -> ()
89-
multi_remove :: entity, fragment[] -> ()
90-
9192
batch_set :: query, fragment, component -> ()
9293
batch_remove :: query, fragment... -> ()
9394
batch_clear :: query... -> ()
9495
batch_destroy :: query... -> ()
9596
96-
batch_multi_set :: query, fragment[], component[]? -> ()
97-
batch_multi_remove :: query, fragment[] -> ()
98-
99-
chunk :: fragment, fragment... -> chunk, entity[], integer
100-
101-
entities :: chunk -> entity[], integer
102-
fragments :: chunk -> fragment[], integer
103-
components :: chunk, fragment... -> component[]...
104-
10597
each :: entity -> {each_state? -> fragment?, component?}, each_state?
10698
execute :: query -> {execute_state? -> chunk?, entity[]?, integer?}, execute_state?
10799
108100
process :: system... -> ()
109101
110-
spawn_at :: chunk?, fragment[]?, component[]? -> entity
111-
spawn_as :: entity?, fragment[]?, component[]? -> entity
112-
spawn_with :: fragment[]?, component[]? -> entity
113-
114102
debug_mode :: boolean -> ()
115103
collect_garbage :: ()
116104
```
117105

106+
## Chunk
107+
108+
```
109+
chunk :: fragment, fragment... -> chunk, entity[], integer
110+
111+
chunk:alive :: boolean
112+
chunk:empty :: boolean
113+
114+
chunk:has :: fragment -> boolean
115+
chunk:has_all :: fragment... -> boolean
116+
chunk:has_any :: fragment... -> boolean
117+
118+
chunk:entities :: entity[], integer
119+
chunk:fragments :: fragment[], integer
120+
chunk:components :: fragment... -> component[]...
121+
```
122+
118123
## Builder
119124

120125
```
121126
builder :: builder
127+
128+
builder:spawn :: entity
129+
builder:clone :: entity -> entity
130+
122131
builder:has :: fragment -> boolean
123132
builder:has_all :: fragment... -> boolean
124133
builder:has_any :: fragment... -> boolean
134+
125135
builder:get :: fragment... -> component...
136+
126137
builder:set :: fragment, component -> builder
127138
builder:remove :: fragment... -> builder
128139
builder:clear :: builder
140+
129141
builder:tag :: builder
130142
builder:name :: string -> builder
131-
builder:prefab :: entity -> builder
132-
builder:single :: component -> builder
143+
133144
builder:default :: component -> builder
134145
builder:duplicate :: {component -> component} -> builder
146+
135147
builder:include :: fragment... -> builder
136148
builder:exclude :: fragment... -> builder
149+
137150
builder:on_set :: {entity, fragment, component, component?} -> builder
138151
builder:on_assign :: {entity, fragment, component, component} -> builder
139152
builder:on_insert :: {entity, fragment, component} -> builder
140153
builder:on_remove :: {entity, fragment} -> builder
154+
141155
builder:group :: system -> builder
156+
142157
builder:query :: query -> builder
143158
builder:execute :: {chunk, entity[], integer} -> builder
159+
144160
builder:prologue :: {} -> builder
145161
builder:epilogue :: {} -> builder
162+
146163
builder:disabled :: builder
164+
147165
builder:destroy_policy :: id -> builder
148-
builder:build :: boolean -> entity
149166
```
150167

151168
## [License (MIT)](./LICENSE.md)

ROADMAP.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
## Backlog
44

5-
- builders should be rewritten :/
65
- add PREFAB entity trait
76
- is/has_all/any for lists?
87

develop/all.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ require 'develop.usbench'
55

66
local basics = require 'develop.basics'
77

8+
print '----------------------------------------'
89
basics.describe_fuzz 'develop.fuzzing.destroy_fuzz'
10+
print '----------------------------------------'
911
basics.describe_fuzz 'develop.fuzzing.batch_destroy_fuzz'

develop/example.lua

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,28 @@ local function vector2(x, y)
1717
return { x = x, y = y }
1818
end
1919

20-
local groups = {
21-
awake = evo.builder():build(),
22-
physics = evo.builder():build(),
23-
graphics = evo.builder():build(),
24-
shutdown = evo.builder():build(),
20+
local consts = {
21+
delta_time = 0.016,
22+
physics_gravity = vector2(0, 9.81),
2523
}
2624

27-
local singles = {
28-
delta_time = evo.builder():single(0.016):build(),
29-
physics_gravity = evo.builder():single(vector2(0, 9.81)):build(),
25+
local groups = {
26+
awake = evo.spawn(),
27+
physics = evo.spawn(),
28+
graphics = evo.spawn(),
29+
shutdown = evo.spawn(),
3030
}
3131

3232
local fragments = {
33-
force = evo.builder():build(),
34-
position = evo.builder():build(),
35-
velocity = evo.builder():build(),
33+
force = evo.spawn(),
34+
position = evo.spawn(),
35+
velocity = evo.spawn(),
3636
}
3737

3838
local queries = {
3939
physics_bodies = evo.builder()
4040
:include(fragments.force, fragments.position, fragments.velocity)
41-
:build(),
41+
:spawn(),
4242
}
4343

4444
local awake_system = evo.builder()
@@ -49,20 +49,18 @@ local awake_system = evo.builder()
4949
:set(fragments.force, vector2(0, 0))
5050
:set(fragments.position, vector2(0, 0))
5151
:set(fragments.velocity, vector2(0, 0))
52-
:build()
53-
end):build()
52+
:spawn()
53+
end):spawn()
5454

5555
local integrate_forces_system = evo.builder()
5656
:group(groups.physics)
5757
:query(queries.physics_bodies)
5858
:execute(function(chunk, entities, entity_count)
59-
---@type number, evolved.vector2
6059
local delta_time, physics_gravity =
61-
evo.get(singles.delta_time, singles.delta_time),
62-
evo.get(singles.physics_gravity, singles.physics_gravity)
60+
consts.delta_time, consts.physics_gravity
6361

6462
---@type evolved.vector2[], evolved.vector2[]
65-
local forces, velocities = evo.components(chunk,
63+
local forces, velocities = chunk:components(
6664
fragments.force, fragments.velocity)
6765

6866
for i = 1, entity_count do
@@ -71,18 +69,17 @@ local integrate_forces_system = evo.builder()
7169
velocity.x = velocity.x + (physics_gravity.x + force.x) * delta_time
7270
velocity.y = velocity.y + (physics_gravity.y + force.y) * delta_time
7371
end
74-
end):build()
72+
end):spawn()
7573

7674
local integrate_velocities_system = evo.builder()
7775
:group(groups.physics)
7876
:query(queries.physics_bodies)
7977
:execute(function(chunk, entities, entity_count)
80-
---@type number
8178
local delta_time =
82-
evo.get(singles.delta_time, singles.delta_time)
79+
consts.delta_time
8380

8481
---@type evolved.vector2[], evolved.vector2[], evolved.vector2[]
85-
local forces, positions, velocities = evo.components(chunk,
82+
local forces, positions, velocities = chunk:components(
8683
fragments.force, fragments.position, fragments.velocity)
8784

8885
for i = 1, entity_count do
@@ -94,14 +91,14 @@ local integrate_velocities_system = evo.builder()
9491
force.x = 0
9592
force.y = 0
9693
end
97-
end):build()
94+
end):spawn()
9895

9996
local graphics_system = evo.builder()
10097
:group(groups.graphics)
10198
:query(queries.physics_bodies)
10299
:execute(function(chunk, entities, entity_count)
103100
---@type evolved.vector2[]
104-
local positions = evo.components(chunk,
101+
local positions = chunk:components(
105102
fragments.position)
106103

107104
for i = 1, entity_count do
@@ -111,14 +108,14 @@ local graphics_system = evo.builder()
111108
'|-> {entity %d} at {%.4f, %.4f}',
112109
entity, position.x, position.y))
113110
end
114-
end):build()
111+
end):spawn()
115112

116113
local shutdown_system = evo.builder()
117114
:group(groups.shutdown)
118115
:epilogue(function()
119116
print '-= | Shutdown | =-'
120117
evo.batch_destroy(queries.physics_bodies)
121-
end):build()
118+
end):spawn()
122119

123120
do
124121
evo.process(groups.awake)

develop/fuzzing/batch_destroy_fuzz.lua

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ end
8181

8282
do
8383
local r = math.random(1, 2)
84-
local q = evo.builder():include(__table_unpack(destroying_include_list)):build()
84+
local q = evo.builder():include(__table_unpack(destroying_include_list)):spawn()
8585

8686
if r == 1 then
8787
evo.batch_destroy(q)
@@ -98,17 +98,17 @@ end
9898
---
9999
---
100100

101-
local all_chunk_query = evo.builder():build()
101+
local all_chunk_query = evo.spawn()
102102

103103
for chunk in evo.execute(all_chunk_query) do
104-
assert(not evo.has_any(chunk, __table_unpack(should_be_destroyed_entity_list)))
105-
for _, fragment in ipairs(evo.fragments(chunk)) do
104+
assert(not chunk:has_any(__table_unpack(should_be_destroyed_entity_list)))
105+
for _, fragment in ipairs(chunk:fragments()) do
106106
assert(not evo.has_all(fragment, __table_unpack(destroying_include_list)))
107107
end
108108
end
109109

110110
for _, destroyed_entity in ipairs(should_be_destroyed_entity_list) do
111-
assert(not evo.is_alive(destroyed_entity))
111+
assert(not evo.alive(destroyed_entity))
112112
end
113113

114114
---

develop/fuzzing/destroy_fuzz.lua

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,19 +102,19 @@ end
102102
---
103103
---
104104

105-
local all_chunk_query = evo.builder():build()
105+
local all_chunk_query = evo.spawn()
106106

107107
for chunk in evo.execute(all_chunk_query) do
108-
assert(not evo.has_any(chunk, __table_unpack(destroying_entity_list)))
109-
assert(not evo.has_any(chunk, __table_unpack(should_be_destroyed_entity_list)))
108+
assert(not chunk:has_any(__table_unpack(destroying_entity_list)))
109+
assert(not chunk:has_any(__table_unpack(should_be_destroyed_entity_list)))
110110
end
111111

112112
for _, destroying_entity in ipairs(destroying_entity_list) do
113-
assert(not evo.is_alive(destroying_entity))
113+
assert(not evo.alive(destroying_entity))
114114
end
115115

116116
for _, destroyed_entity in ipairs(should_be_destroyed_entity_list) do
117-
assert(not evo.is_alive(destroyed_entity))
117+
assert(not evo.alive(destroyed_entity))
118118
end
119119

120120
---

0 commit comments

Comments
 (0)