mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2026-09-18 09:34:36 +07:00
support queries without fragments
This commit is contained in:
@@ -39,7 +39,7 @@ registry.assign -> entity -> entity -> any -> (boolean)
|
||||
registry.insert -> entity -> entity -> any -> (boolean)
|
||||
registry.remove -> entity -> entity... -> (boolean)
|
||||
registry.detach -> entity -> (entity)
|
||||
registry.query -> entity -> entity... -> (query)
|
||||
registry.query -> entity... -> (query)
|
||||
registry.include -> query -> entity... -> query
|
||||
registry.exclude -> query -> entity... -> query
|
||||
registry.execute -> query -> (() -> (chunk?))
|
||||
|
||||
+1
-1
@@ -10,4 +10,4 @@
|
||||
- [ ] cache matched chunks in queries
|
||||
- [x] cache transitions between chunks
|
||||
- [x] chunk's children should be stored in an array instead of a table
|
||||
- [ ] support queries without fragments
|
||||
- [x] support queries without fragments
|
||||
@@ -391,6 +391,7 @@ do
|
||||
local e5 = evo.registry.entity():set(f1):set(f2):set(f4)
|
||||
local e6 = evo.registry.entity():set(f1):set(f2):set(f3):set(f4)
|
||||
|
||||
local q0 = evo.registry.query()
|
||||
local q1 = evo.registry.query(f1)
|
||||
local q2 = evo.registry.query(f1, f2, f1)
|
||||
local q3 = evo.registry.query(f1, f2, f3, f3)
|
||||
@@ -427,10 +428,12 @@ do
|
||||
return true
|
||||
end
|
||||
|
||||
assert(is_array_equal(q0.__include_list, {}))
|
||||
assert(is_array_equal(q1.__include_list, { f1 }))
|
||||
assert(is_array_equal(q2.__include_list, { f1, f2 }))
|
||||
assert(is_array_equal(q3.__include_list, { f1, f2, f3 }))
|
||||
|
||||
assert(is_array_equal(collect_entity_sorted_list(q0), {}))
|
||||
assert(is_array_equal(collect_entity_sorted_list(q1), { e1, e2, e3, e4, e5, e6 }))
|
||||
assert(is_array_equal(collect_entity_sorted_list(q2), { e2, e3, e5, e6 }))
|
||||
assert(is_array_equal(collect_entity_sorted_list(q3), { e3, e6 }))
|
||||
@@ -523,9 +526,9 @@ for _ = 1, 100 do
|
||||
|
||||
for _ = 1, 100 do
|
||||
shuffle_array(all_fragments)
|
||||
local inc_fs = evo.compat.pack(evo.compat.unpack(all_fragments, 1, math.random(1, quarter_fragment_count)))
|
||||
local inc_fs = evo.compat.pack(evo.compat.unpack(all_fragments, 1, math.random(0, quarter_fragment_count)))
|
||||
shuffle_array(all_fragments)
|
||||
local exc_fs = evo.compat.pack(evo.compat.unpack(all_fragments, 1, math.random(1, quarter_fragment_count)))
|
||||
local exc_fs = evo.compat.pack(evo.compat.unpack(all_fragments, 1, math.random(0, quarter_fragment_count)))
|
||||
|
||||
local inc_q = evo.registry.query(evo.compat.unpack(inc_fs))
|
||||
local exc_q = evo.registry.query(evo.compat.unpack(inc_fs)):exclude(evo.compat.unpack(exc_fs))
|
||||
|
||||
+11
-12
@@ -576,31 +576,30 @@ function registry.detach(entity)
|
||||
return entity
|
||||
end
|
||||
|
||||
---@param fragment evolved.entity
|
||||
---@param ... evolved.entity
|
||||
---@param ... evolved.entity fragments
|
||||
---@return evolved.query
|
||||
---@nodiscard
|
||||
function registry.query(fragment, ...)
|
||||
local fragment_set = { [fragment] = true }
|
||||
local fragment_list = { fragment }
|
||||
function registry.query(...)
|
||||
local include_list = {}
|
||||
local include_set = {}
|
||||
|
||||
for i = 1, select('#', ...) do
|
||||
local f = select(i, ...)
|
||||
if not fragment_set[f] then
|
||||
fragment_set[f] = true
|
||||
fragment_list[#fragment_list + 1] = f
|
||||
if not include_set[f] then
|
||||
include_set[f] = true
|
||||
include_list[#include_list + 1] = f
|
||||
end
|
||||
end
|
||||
|
||||
table.sort(fragment_list, function(a, b)
|
||||
table.sort(include_list, function(a, b)
|
||||
return a.__guid < b.__guid
|
||||
end)
|
||||
|
||||
---@type evolved.query
|
||||
local query = {
|
||||
__include_list = fragment_list,
|
||||
__include_list = include_list,
|
||||
__exclude_list = {},
|
||||
__include_set = fragment_set,
|
||||
__include_set = include_set,
|
||||
__exclude_set = {},
|
||||
}
|
||||
|
||||
@@ -686,7 +685,7 @@ function registry.execute(query)
|
||||
end
|
||||
|
||||
---@param fragment evolved.entity
|
||||
---@param ... evolved.entity
|
||||
---@param ... evolved.entity fragments
|
||||
---@return evolved.chunk
|
||||
---@nodiscard
|
||||
function registry.chunk(fragment, ...)
|
||||
|
||||
Reference in New Issue
Block a user