mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-16 22:19:25 +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_ASSIGN :: fragment
|
||||||
ON_INSERT :: fragment
|
ON_INSERT :: fragment
|
||||||
ON_REMOVE :: fragment
|
ON_REMOVE :: fragment
|
||||||
ON_DESTROY :: fragment
|
|
||||||
|
|
||||||
PHASE :: fragment
|
PHASE :: fragment
|
||||||
AFTER :: fragment
|
AFTER :: fragment
|
||||||
@@ -45,8 +44,9 @@ EXECUTE :: fragment
|
|||||||
PROLOGUE :: fragment
|
PROLOGUE :: fragment
|
||||||
EPILOGUE :: fragment
|
EPILOGUE :: fragment
|
||||||
|
|
||||||
DESTROY_ENTITY_POLICY :: id
|
DESTROY_POLICY :: fragment
|
||||||
REMOVE_FRAGMENT_POLICY :: id
|
DESTROY_POLICY_DESTROY_ENTITY :: id
|
||||||
|
DESTROY_POLICY_REMOVE_FRAGMENT :: id
|
||||||
```
|
```
|
||||||
|
|
||||||
## Functions
|
## Functions
|
||||||
@@ -104,6 +104,10 @@ execute :: query -> {execute_state? -> chunk?, entity[]?, integer?}, execute_sta
|
|||||||
process :: phase... -> ()
|
process :: phase... -> ()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
debug :: boolean -> ()
|
||||||
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
spawn_at :: chunk?, fragment[]?, component[]? -> entity, boolean
|
spawn_at :: chunk?, fragment[]?, component[]? -> entity, boolean
|
||||||
spawn_with :: 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_assign :: {entity, fragment, component, component} -> fragment_builder
|
||||||
fragment_builder:on_insert :: {entity, fragment, component} -> fragment_builder
|
fragment_builder:on_insert :: {entity, fragment, component} -> fragment_builder
|
||||||
fragment_builder:on_remove :: {entity, fragment} -> 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
|
fragment_builder:build :: fragment, boolean
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
10
ROADMAP.md
10
ROADMAP.md
@@ -2,15 +2,7 @@
|
|||||||
|
|
||||||
## Backlog
|
## Backlog
|
||||||
|
|
||||||
- add manual gc for unreachable chunks
|
- collect 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)
|
|
||||||
|
|
||||||
## After first release
|
## After first release
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,38 @@ require 'develop.unload' 'evolved'
|
|||||||
|
|
||||||
local evo = require 'evolved'
|
local evo = require 'evolved'
|
||||||
|
|
||||||
|
evo.debug(true)
|
||||||
|
|
||||||
do
|
do
|
||||||
local e1, e2 = evo.id(), evo.id()
|
local e1, e2 = evo.id(), evo.id()
|
||||||
assert(e1 ~= e2)
|
assert(e1 ~= e2)
|
||||||
end
|
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
|
||||||
do
|
do
|
||||||
local i0 = evo.id(0)
|
local i0 = evo.id(0)
|
||||||
@@ -5055,9 +5082,9 @@ do
|
|||||||
end
|
end
|
||||||
|
|
||||||
do
|
do
|
||||||
local id = evo.pack(0xFFFFF, 0x7FF)
|
local id = evo.pack(0xFFFFF, 0xFFF)
|
||||||
local index, version = evo.unpack(id)
|
local index, version = evo.unpack(id)
|
||||||
assert(index == 0xFFFFF and version == 0x7FF)
|
assert(index == 0xFFFFF and version == 0xFFF)
|
||||||
end
|
end
|
||||||
|
|
||||||
do
|
do
|
||||||
@@ -6726,7 +6753,7 @@ do
|
|||||||
local c1 = assert(evo.chunk(f1))
|
local c1 = assert(evo.chunk(f1))
|
||||||
local c2 = assert(evo.chunk(f2))
|
local c2 = assert(evo.chunk(f2))
|
||||||
local c12 = assert(evo.chunk(f1, 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(f1, f1))
|
||||||
assert(evo.set(f2, f1))
|
assert(evo.set(f2, f1))
|
||||||
assert(evo.set(f2, f2))
|
assert(evo.set(f2, f2))
|
||||||
@@ -6760,7 +6787,7 @@ do
|
|||||||
local c1 = assert(evo.chunk(f1))
|
local c1 = assert(evo.chunk(f1))
|
||||||
local c2 = assert(evo.chunk(f2))
|
local c2 = assert(evo.chunk(f2))
|
||||||
local c12 = assert(evo.chunk(f1, 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(f1, f1))
|
||||||
assert(evo.set(f2, f1))
|
assert(evo.set(f2, f1))
|
||||||
assert(evo.set(f2, f2))
|
assert(evo.set(f2, f2))
|
||||||
@@ -6818,7 +6845,7 @@ do
|
|||||||
local f1, f2, f3 = evo.id(3)
|
local f1, f2, f3 = evo.id(3)
|
||||||
local c1 = assert(evo.chunk(f1))
|
local c1 = assert(evo.chunk(f1))
|
||||||
local c2 = assert(evo.chunk(f2))
|
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(f2, f1))
|
||||||
assert(evo.set(f3, f2))
|
assert(evo.set(f3, f2))
|
||||||
do
|
do
|
||||||
@@ -6845,7 +6872,7 @@ do
|
|||||||
local f1, f2, f3 = evo.id(3)
|
local f1, f2, f3 = evo.id(3)
|
||||||
local c1 = assert(evo.chunk(f1))
|
local c1 = assert(evo.chunk(f1))
|
||||||
local c2 = assert(evo.chunk(f2))
|
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(f2, f1))
|
||||||
assert(evo.set(f3, f2))
|
assert(evo.set(f3, f2))
|
||||||
do
|
do
|
||||||
@@ -6872,7 +6899,7 @@ do
|
|||||||
assert(evo.set(f1, ft))
|
assert(evo.set(f1, ft))
|
||||||
assert(evo.set(f2, ft))
|
assert(evo.set(f2, ft))
|
||||||
assert(evo.set(f3, 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 qt = evo.query():include(ft):build()
|
||||||
|
|
||||||
local c4 = assert(evo.chunk(f4))
|
local c4 = assert(evo.chunk(f4))
|
||||||
@@ -6907,7 +6934,7 @@ end
|
|||||||
|
|
||||||
do
|
do
|
||||||
local f1 = evo.id()
|
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))
|
assert(evo.set(f1, f1, f1))
|
||||||
|
|
||||||
local remove_count = 0
|
local remove_count = 0
|
||||||
@@ -6933,7 +6960,7 @@ end
|
|||||||
|
|
||||||
do
|
do
|
||||||
local f1 = evo.id()
|
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))
|
assert(evo.set(f1, f1, f1))
|
||||||
|
|
||||||
local remove_count = 0
|
local remove_count = 0
|
||||||
@@ -7016,7 +7043,7 @@ do
|
|||||||
local f1, f2 = evo.id(2)
|
local f1, f2 = evo.id(2)
|
||||||
evo.set(f1, f1)
|
evo.set(f1, f1)
|
||||||
evo.set(f2, 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(evo.destroy(f1))
|
||||||
assert(not evo.is_alive(f1))
|
assert(not evo.is_alive(f1))
|
||||||
assert(not evo.is_alive(f2))
|
assert(not evo.is_alive(f2))
|
||||||
@@ -7026,7 +7053,7 @@ do
|
|||||||
local f1, f2 = evo.id(2)
|
local f1, f2 = evo.id(2)
|
||||||
evo.set(f1, f1)
|
evo.set(f1, f1)
|
||||||
evo.set(f2, 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(evo.destroy(f1))
|
||||||
assert(not evo.is_alive(f1))
|
assert(not evo.is_alive(f1))
|
||||||
assert(evo.is_alive(f2) and evo.is_empty(f2))
|
assert(evo.is_alive(f2) and evo.is_empty(f2))
|
||||||
@@ -7036,7 +7063,7 @@ end
|
|||||||
do
|
do
|
||||||
local f1, f2 = evo.id(2)
|
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 e12a = evo.entity():set(f1, 1):set(f2, 2):build()
|
||||||
local e12b = evo.entity():set(f1, 3):set(f2, 4):build()
|
local e12b = evo.entity():set(f1, 3):set(f2, 4):build()
|
||||||
@@ -7081,7 +7108,7 @@ do
|
|||||||
assert(c12, c123)
|
assert(c12, c123)
|
||||||
end
|
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 e12a = evo.entity():set(f1, 1):set(f2, 2):build()
|
||||||
local e12b = evo.entity():set(f1, 3):set(f2, 4):build()
|
local e12b = evo.entity():set(f1, 3):set(f2, 4):build()
|
||||||
@@ -7112,12 +7139,12 @@ do
|
|||||||
local fb = evo.fragment()
|
local fb = evo.fragment()
|
||||||
|
|
||||||
local f1 = fb:build()
|
local f1 = fb:build()
|
||||||
local f2 = fb:on_destroy(evo.DESTROY_ENTITY_POLICY):build()
|
local f2 = fb:destroy_policy(evo.DESTROY_POLICY_DESTROY_ENTITY):build()
|
||||||
local f3 = fb:on_destroy(evo.REMOVE_FRAGMENT_POLICY):build()
|
local f3 = fb:destroy_policy(evo.DESTROY_POLICY_REMOVE_FRAGMENT):build()
|
||||||
|
|
||||||
assert(evo.get(f1, evo.ON_DESTROY) == nil)
|
assert(evo.get(f1, evo.DESTROY_POLICY) == nil)
|
||||||
assert(evo.get(f2, evo.ON_DESTROY) == evo.DESTROY_ENTITY_POLICY)
|
assert(evo.get(f2, evo.DESTROY_POLICY) == evo.DESTROY_POLICY_DESTROY_ENTITY)
|
||||||
assert(evo.get(f3, evo.ON_DESTROY) == evo.REMOVE_FRAGMENT_POLICY)
|
assert(evo.get(f3, evo.DESTROY_POLICY) == evo.DESTROY_POLICY_REMOVE_FRAGMENT)
|
||||||
end
|
end
|
||||||
|
|
||||||
do
|
do
|
||||||
|
|||||||
802
evolved.lua
802
evolved.lua
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user