mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-13 11:38:15 +07:00
Merge branch 'dev'
This commit is contained in:
12
README.md
12
README.md
@@ -34,7 +34,6 @@ ON_SET :: fragment
|
||||
ON_ASSIGN :: fragment
|
||||
ON_INSERT :: fragment
|
||||
ON_REMOVE :: fragment
|
||||
ON_DESTROY :: fragment
|
||||
|
||||
PHASE :: fragment
|
||||
AFTER :: fragment
|
||||
@@ -45,8 +44,9 @@ EXECUTE :: fragment
|
||||
PROLOGUE :: fragment
|
||||
EPILOGUE :: fragment
|
||||
|
||||
DESTROY_ENTITY_POLICY :: id
|
||||
REMOVE_FRAGMENT_POLICY :: id
|
||||
DESTROY_POLICY :: fragment
|
||||
DESTROY_POLICY_DESTROY_ENTITY :: id
|
||||
DESTROY_POLICY_REMOVE_FRAGMENT :: id
|
||||
```
|
||||
|
||||
## Functions
|
||||
@@ -104,6 +104,10 @@ execute :: query -> {execute_state? -> chunk?, entity[]?, integer?}, execute_sta
|
||||
process :: phase... -> ()
|
||||
```
|
||||
|
||||
```
|
||||
debug :: boolean -> ()
|
||||
```
|
||||
|
||||
```
|
||||
spawn_at :: chunk?, fragment[]?, component[]? -> entity, boolean
|
||||
spawn_with :: fragment[]?, component[]? -> entity, boolean
|
||||
@@ -126,7 +130,7 @@ fragment_builder:on_set :: {entity, fragment, component, component?} -> fragment
|
||||
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:on_destroy :: id -> fragment_builder
|
||||
fragment_builder:destroy_policy :: id -> fragment_builder
|
||||
fragment_builder:build :: fragment, boolean
|
||||
```
|
||||
|
||||
|
||||
10
ROADMAP.md
10
ROADMAP.md
@@ -2,15 +2,7 @@
|
||||
|
||||
## Backlog
|
||||
|
||||
- add manual gc for unreachable chunks
|
||||
- add destroing policies (fragments, phases, systems)
|
||||
- add debug view for chunks with help of NAME fragment traits
|
||||
|
||||
## Known issues
|
||||
|
||||
- destroying of fragments leave chunks with dead fragments (destroing policies)
|
||||
- destroying of systems can leave dead systems in the library state (destroying policies)
|
||||
- destroying of phases can leave dead phases in the library state (destroying policies)
|
||||
- collect unreachable chunks
|
||||
|
||||
## After first release
|
||||
|
||||
|
||||
@@ -2,11 +2,38 @@ require 'develop.unload' 'evolved'
|
||||
|
||||
local evo = require 'evolved'
|
||||
|
||||
evo.debug(true)
|
||||
|
||||
do
|
||||
local e1, e2 = evo.id(), evo.id()
|
||||
assert(e1 ~= e2)
|
||||
end
|
||||
|
||||
do
|
||||
local i = evo.id()
|
||||
|
||||
for _ = 1, 0xFFE do
|
||||
local _, v0 = evo.unpack(i)
|
||||
evo.destroy(i)
|
||||
i = evo.id()
|
||||
local _, v1 = evo.unpack(i)
|
||||
assert(v1 == v0 + 1)
|
||||
end
|
||||
|
||||
do
|
||||
local _, v = evo.unpack(i)
|
||||
assert(v == 0xFFF)
|
||||
end
|
||||
|
||||
evo.destroy(i)
|
||||
i = evo.id()
|
||||
|
||||
do
|
||||
local _, v = evo.unpack(i)
|
||||
assert(v == 1)
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
do
|
||||
local i0 = evo.id(0)
|
||||
@@ -5055,9 +5082,9 @@ do
|
||||
end
|
||||
|
||||
do
|
||||
local id = evo.pack(0xFFFFF, 0x7FF)
|
||||
local id = evo.pack(0xFFFFF, 0xFFF)
|
||||
local index, version = evo.unpack(id)
|
||||
assert(index == 0xFFFFF and version == 0x7FF)
|
||||
assert(index == 0xFFFFF and version == 0xFFF)
|
||||
end
|
||||
|
||||
do
|
||||
@@ -6726,7 +6753,7 @@ do
|
||||
local c1 = assert(evo.chunk(f1))
|
||||
local c2 = assert(evo.chunk(f2))
|
||||
local c12 = assert(evo.chunk(f1, f2))
|
||||
assert(evo.set(f1, evo.ON_DESTROY, evo.REMOVE_FRAGMENT_POLICY))
|
||||
assert(evo.set(f1, evo.DESTROY_POLICY, evo.DESTROY_POLICY_REMOVE_FRAGMENT))
|
||||
assert(evo.set(f1, f1))
|
||||
assert(evo.set(f2, f1))
|
||||
assert(evo.set(f2, f2))
|
||||
@@ -6760,7 +6787,7 @@ do
|
||||
local c1 = assert(evo.chunk(f1))
|
||||
local c2 = assert(evo.chunk(f2))
|
||||
local c12 = assert(evo.chunk(f1, f2))
|
||||
assert(evo.set(f1, evo.ON_DESTROY, evo.DESTROY_ENTITY_POLICY))
|
||||
assert(evo.set(f1, evo.DESTROY_POLICY, evo.DESTROY_POLICY_DESTROY_ENTITY))
|
||||
assert(evo.set(f1, f1))
|
||||
assert(evo.set(f2, f1))
|
||||
assert(evo.set(f2, f2))
|
||||
@@ -6818,7 +6845,7 @@ do
|
||||
local f1, f2, f3 = evo.id(3)
|
||||
local c1 = assert(evo.chunk(f1))
|
||||
local c2 = assert(evo.chunk(f2))
|
||||
assert(evo.set(f1, evo.ON_DESTROY, evo.REMOVE_FRAGMENT_POLICY))
|
||||
assert(evo.set(f1, evo.DESTROY_POLICY, evo.DESTROY_POLICY_REMOVE_FRAGMENT))
|
||||
assert(evo.set(f2, f1))
|
||||
assert(evo.set(f3, f2))
|
||||
do
|
||||
@@ -6845,7 +6872,7 @@ do
|
||||
local f1, f2, f3 = evo.id(3)
|
||||
local c1 = assert(evo.chunk(f1))
|
||||
local c2 = assert(evo.chunk(f2))
|
||||
assert(evo.set(f1, evo.ON_DESTROY, evo.DESTROY_ENTITY_POLICY))
|
||||
assert(evo.set(f1, evo.DESTROY_POLICY, evo.DESTROY_POLICY_DESTROY_ENTITY))
|
||||
assert(evo.set(f2, f1))
|
||||
assert(evo.set(f3, f2))
|
||||
do
|
||||
@@ -6872,7 +6899,7 @@ do
|
||||
assert(evo.set(f1, ft))
|
||||
assert(evo.set(f2, ft))
|
||||
assert(evo.set(f3, ft))
|
||||
assert(evo.set(f3, evo.ON_DESTROY, evo.DESTROY_ENTITY_POLICY))
|
||||
assert(evo.set(f3, evo.DESTROY_POLICY, evo.DESTROY_POLICY_DESTROY_ENTITY))
|
||||
local qt = evo.query():include(ft):build()
|
||||
|
||||
local c4 = assert(evo.chunk(f4))
|
||||
@@ -6907,7 +6934,7 @@ end
|
||||
|
||||
do
|
||||
local f1 = evo.id()
|
||||
assert(evo.set(f1, evo.ON_DESTROY, evo.DESTROY_ENTITY_POLICY))
|
||||
assert(evo.set(f1, evo.DESTROY_POLICY, evo.DESTROY_POLICY_DESTROY_ENTITY))
|
||||
assert(evo.set(f1, f1, f1))
|
||||
|
||||
local remove_count = 0
|
||||
@@ -6933,7 +6960,7 @@ end
|
||||
|
||||
do
|
||||
local f1 = evo.id()
|
||||
assert(evo.set(f1, evo.ON_DESTROY, evo.REMOVE_FRAGMENT_POLICY))
|
||||
assert(evo.set(f1, evo.DESTROY_POLICY, evo.DESTROY_POLICY_REMOVE_FRAGMENT))
|
||||
assert(evo.set(f1, f1, f1))
|
||||
|
||||
local remove_count = 0
|
||||
@@ -7016,7 +7043,7 @@ do
|
||||
local f1, f2 = evo.id(2)
|
||||
evo.set(f1, f1)
|
||||
evo.set(f2, f1)
|
||||
evo.set(f1, evo.ON_DESTROY, evo.DESTROY_ENTITY_POLICY)
|
||||
evo.set(f1, evo.DESTROY_POLICY, evo.DESTROY_POLICY_DESTROY_ENTITY)
|
||||
assert(evo.destroy(f1))
|
||||
assert(not evo.is_alive(f1))
|
||||
assert(not evo.is_alive(f2))
|
||||
@@ -7026,7 +7053,7 @@ do
|
||||
local f1, f2 = evo.id(2)
|
||||
evo.set(f1, f1)
|
||||
evo.set(f2, f1)
|
||||
evo.set(f1, evo.ON_DESTROY, evo.REMOVE_FRAGMENT_POLICY)
|
||||
evo.set(f1, evo.DESTROY_POLICY, evo.DESTROY_POLICY_REMOVE_FRAGMENT)
|
||||
assert(evo.destroy(f1))
|
||||
assert(not evo.is_alive(f1))
|
||||
assert(evo.is_alive(f2) and evo.is_empty(f2))
|
||||
@@ -7036,7 +7063,7 @@ end
|
||||
do
|
||||
local f1, f2 = evo.id(2)
|
||||
|
||||
evo.set(f1, evo.ON_DESTROY, evo.DESTROY_ENTITY_POLICY)
|
||||
evo.set(f1, evo.DESTROY_POLICY, evo.DESTROY_POLICY_DESTROY_ENTITY)
|
||||
|
||||
local e12a = evo.entity():set(f1, 1):set(f2, 2):build()
|
||||
local e12b = evo.entity():set(f1, 3):set(f2, 4):build()
|
||||
@@ -7081,7 +7108,7 @@ do
|
||||
assert(c12, c123)
|
||||
end
|
||||
|
||||
evo.set(f1, evo.ON_DESTROY, evo.REMOVE_FRAGMENT_POLICY)
|
||||
evo.set(f1, evo.DESTROY_POLICY, evo.DESTROY_POLICY_REMOVE_FRAGMENT)
|
||||
|
||||
local e12a = evo.entity():set(f1, 1):set(f2, 2):build()
|
||||
local e12b = evo.entity():set(f1, 3):set(f2, 4):build()
|
||||
@@ -7112,12 +7139,12 @@ do
|
||||
local fb = evo.fragment()
|
||||
|
||||
local f1 = fb:build()
|
||||
local f2 = fb:on_destroy(evo.DESTROY_ENTITY_POLICY):build()
|
||||
local f3 = fb:on_destroy(evo.REMOVE_FRAGMENT_POLICY):build()
|
||||
local f2 = fb:destroy_policy(evo.DESTROY_POLICY_DESTROY_ENTITY):build()
|
||||
local f3 = fb:destroy_policy(evo.DESTROY_POLICY_REMOVE_FRAGMENT):build()
|
||||
|
||||
assert(evo.get(f1, evo.ON_DESTROY) == nil)
|
||||
assert(evo.get(f2, evo.ON_DESTROY) == evo.DESTROY_ENTITY_POLICY)
|
||||
assert(evo.get(f3, evo.ON_DESTROY) == evo.REMOVE_FRAGMENT_POLICY)
|
||||
assert(evo.get(f1, evo.DESTROY_POLICY) == nil)
|
||||
assert(evo.get(f2, evo.DESTROY_POLICY) == evo.DESTROY_POLICY_DESTROY_ENTITY)
|
||||
assert(evo.get(f3, evo.DESTROY_POLICY) == evo.DESTROY_POLICY_REMOVE_FRAGMENT)
|
||||
end
|
||||
|
||||
do
|
||||
|
||||
802
evolved.lua
802
evolved.lua
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user