mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-13 11:38:15 +07:00
empty query
This commit is contained in:
@@ -12,3 +12,9 @@ do
|
|||||||
entity:insert(fragments.position)
|
entity:insert(fragments.position)
|
||||||
entity:insert(fragments.velocity)
|
entity:insert(fragments.velocity)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
do
|
||||||
|
local query = registry:query(
|
||||||
|
fragments.position,
|
||||||
|
fragments.velocity)
|
||||||
|
end
|
||||||
|
|||||||
62
evolved.lua
62
evolved.lua
@@ -18,6 +18,12 @@ local evolved = {}
|
|||||||
local evolved_chunk_mt = {}
|
local evolved_chunk_mt = {}
|
||||||
evolved_chunk_mt.__index = evolved_chunk_mt
|
evolved_chunk_mt.__index = evolved_chunk_mt
|
||||||
|
|
||||||
|
---@class evolved.query
|
||||||
|
---@field owner evolved.registry
|
||||||
|
---@field id integer
|
||||||
|
local evolved_query_mt = {}
|
||||||
|
evolved_query_mt.__index = evolved_query_mt
|
||||||
|
|
||||||
---@class evolved.entity
|
---@class evolved.entity
|
||||||
---@field owner evolved.registry
|
---@field owner evolved.registry
|
||||||
---@field id integer
|
---@field id integer
|
||||||
@@ -29,6 +35,8 @@ evolved_entity_mt.__index = evolved_entity_mt
|
|||||||
---@class evolved.registry
|
---@class evolved.registry
|
||||||
---@field nextid integer
|
---@field nextid integer
|
||||||
---@field chunks evolved.chunk[]
|
---@field chunks evolved.chunk[]
|
||||||
|
---@field queries evolved.query[]
|
||||||
|
---@field entities evolved.entity[]
|
||||||
local evolved_registry_mt = {}
|
local evolved_registry_mt = {}
|
||||||
evolved_registry_mt.__index = evolved_registry_mt
|
evolved_registry_mt.__index = evolved_registry_mt
|
||||||
|
|
||||||
@@ -38,6 +46,30 @@ evolved_registry_mt.__index = evolved_registry_mt
|
|||||||
---
|
---
|
||||||
---
|
---
|
||||||
|
|
||||||
|
---@param owner evolved.registry
|
||||||
|
---@param chunk evolved.chunk
|
||||||
|
local function on_new_chunk(owner, chunk)
|
||||||
|
owner.chunks[#owner.chunks + 1] = chunk
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param owner evolved.registry
|
||||||
|
---@param query evolved.query
|
||||||
|
local function on_new_query(owner, query)
|
||||||
|
owner.queries[#owner.queries + 1] = query
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param owner evolved.registry
|
||||||
|
---@param entity evolved.entity
|
||||||
|
local function on_new_entity(owner, entity)
|
||||||
|
owner.entities[#owner.entities + 1] = entity
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
---
|
||||||
|
---
|
||||||
|
---
|
||||||
|
---
|
||||||
|
|
||||||
---@param owner evolved.registry
|
---@param owner evolved.registry
|
||||||
---@param parent? evolved.chunk
|
---@param parent? evolved.chunk
|
||||||
---@param fragment? evolved.entity
|
---@param fragment? evolved.entity
|
||||||
@@ -65,6 +97,18 @@ local function create_chunk(owner, parent, fragment)
|
|||||||
return setmetatable(chunk, evolved_chunk_mt)
|
return setmetatable(chunk, evolved_chunk_mt)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param owner evolved.registry
|
||||||
|
---@param id integer
|
||||||
|
---@return evolved.query
|
||||||
|
local function create_query(owner, id)
|
||||||
|
---@type evolved.query
|
||||||
|
local query = {
|
||||||
|
owner = owner,
|
||||||
|
id = id,
|
||||||
|
}
|
||||||
|
return setmetatable(query, evolved_query_mt)
|
||||||
|
end
|
||||||
|
|
||||||
---@param owner evolved.registry
|
---@param owner evolved.registry
|
||||||
---@param id integer
|
---@param id integer
|
||||||
---@return evolved.entity
|
---@return evolved.entity
|
||||||
@@ -86,9 +130,12 @@ local function create_registry()
|
|||||||
local registry = {
|
local registry = {
|
||||||
nextid = 1,
|
nextid = 1,
|
||||||
chunks = {},
|
chunks = {},
|
||||||
|
queries = {},
|
||||||
|
entities = {},
|
||||||
}
|
}
|
||||||
|
|
||||||
registry.chunks[1] = create_chunk(registry)
|
local chunk = create_chunk(registry)
|
||||||
|
on_new_chunk(registry, chunk)
|
||||||
|
|
||||||
return setmetatable(registry, evolved_registry_mt)
|
return setmetatable(registry, evolved_registry_mt)
|
||||||
end
|
end
|
||||||
@@ -121,7 +168,7 @@ function evolved_chunk_mt:with(fragment)
|
|||||||
|
|
||||||
if not self.fragment or self.fragment.id < fragment.id then
|
if not self.fragment or self.fragment.id < fragment.id then
|
||||||
local new_chunk = create_chunk(self.owner, self, fragment)
|
local new_chunk = create_chunk(self.owner, self, fragment)
|
||||||
self.owner.chunks[#self.owner.chunks + 1] = new_chunk
|
on_new_chunk(self.owner, new_chunk)
|
||||||
|
|
||||||
self.with_cache[fragment] = new_chunk
|
self.with_cache[fragment] = new_chunk
|
||||||
new_chunk.without_cache[fragment] = self
|
new_chunk.without_cache[fragment] = self
|
||||||
@@ -264,11 +311,22 @@ function evolved_registry_mt:root()
|
|||||||
return self.chunks[1]
|
return self.chunks[1]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param ... evolved.entity
|
||||||
|
---@return evolved.query
|
||||||
|
function evolved_registry_mt:query(...)
|
||||||
|
local id = self.nextid
|
||||||
|
self.nextid = self.nextid + 1
|
||||||
|
local query = create_query(self, id)
|
||||||
|
on_new_query(self, query)
|
||||||
|
return query
|
||||||
|
end
|
||||||
|
|
||||||
---@return evolved.entity
|
---@return evolved.entity
|
||||||
function evolved_registry_mt:entity()
|
function evolved_registry_mt:entity()
|
||||||
local id = self.nextid
|
local id = self.nextid
|
||||||
self.nextid = self.nextid + 1
|
self.nextid = self.nextid + 1
|
||||||
local entity = create_entity(self, id)
|
local entity = create_entity(self, id)
|
||||||
|
on_new_entity(self, entity)
|
||||||
return entity
|
return entity
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user