create entity without multi inserts

This commit is contained in:
BlackMATov
2024-11-14 03:11:26 +07:00
parent b421b1704f
commit 6317665321
3 changed files with 46 additions and 4 deletions

View File

@@ -7,6 +7,12 @@ local fragments = {
velocity = registry:entity(),
}
do
registry:entity(
fragments.position,
fragments.velocity)
end
do
local entity = registry:entity()
entity:insert(fragments.position)

View File

@@ -27,6 +27,31 @@ local function describe(name, func, ...)
collectgarbage('restart')
end
describe('entity:entity', function()
for _ = 1, 500 do
local registry = evolved.registry()
---@type evolved.entity[]
local all_fragments = {}
local all_fragment_count = math.random(1, 10)
for i = 1, all_fragment_count do all_fragments[i] = registry:entity() end
for _ = 1, 100 do
---@type evolved.entity[]
local insert_fragments = {}
local insert_fragment_count = math.random(1, 10)
for i = 1, insert_fragment_count do insert_fragments[i] = all_fragments[math.random(1, all_fragment_count)] end
local e1 = registry:entity()
for _, fragment in ipairs(insert_fragments) do e1:insert(fragment) end
local e2 = registry:entity(unpack(insert_fragments))
assert(e1.chunk == e2.chunk)
end
end
end)
describe('entity:chunk', function()
for _ = 1, 500 do
local registry = evolved.registry()

View File

@@ -276,6 +276,18 @@ end
---
---
---@param ... evolved.entity
---@return evolved.chunk
function evolved_registry_mt:chunk(...)
local chunk = self.chunks[1]
for i = 1, select('#', ...) do
chunk = chunk:with(select(i, ...))
end
return chunk
end
---@param ... evolved.entity
---@return evolved.query
function evolved_registry_mt:query(...)
@@ -318,8 +330,9 @@ function evolved_registry_mt:query(...)
return query
end
---@param ... evolved.entity
---@return evolved.entity
function evolved_registry_mt:entity()
function evolved_registry_mt:entity(...)
local id = self.nextid
self.nextid = self.nextid + 1
@@ -333,9 +346,7 @@ function evolved_registry_mt:entity()
setmetatable(entity, evolved_entity_mt)
self.entities[#self.entities + 1] = entity
do
self.chunks[1]:insert(entity)
end
self:chunk(...):insert(entity)
return entity
end