mirror of
https://github.com/Keyslam-Group/Concord.git
synced 2025-09-02 04:13:58 -04:00
69 lines
1.4 KiB
Lua
69 lines
1.4 KiB
Lua
local PATH = (...):gsub('%.[^%.]+$', '')
|
|
|
|
local List = require(PATH..".list")
|
|
local EventManager = require(PATH..".eventManager")
|
|
|
|
local Instance = {}
|
|
Instance.__index = Instance
|
|
|
|
function Instance.new()
|
|
local instance = setmetatable({
|
|
entities = List(),
|
|
systems = {},
|
|
}, Instance)
|
|
|
|
return instance
|
|
end
|
|
|
|
function Instance:addEntity(e)
|
|
e.instances:add(self)
|
|
self.entities:add(e)
|
|
self:checkEntity(e)
|
|
end
|
|
|
|
function Instance:checkEntity(e)
|
|
for i = 1, self.systems.size do
|
|
self.systems:get(i):__check(e)
|
|
end
|
|
end
|
|
|
|
function Instance:removeEntity(e)
|
|
e.instances:remove(self)
|
|
self.entities:remove(e)
|
|
|
|
for i = 1, self.systems.size do
|
|
self.systems:get(i):__remove(e)
|
|
end
|
|
end
|
|
|
|
function Instance:addSystem(system, eventName, callback, enabled)
|
|
self.systems[eventName] = self.systems[eventName] or {}
|
|
|
|
local i = #self.systems[eventName] + 1
|
|
self.systems[eventName][i] = {
|
|
system = system,
|
|
eventName = eventName,
|
|
callback = callback or eventName,
|
|
enabled = enabled == nil or true,
|
|
}
|
|
|
|
return self
|
|
end
|
|
|
|
function Instance:enableSystem(system, eventName, callback)
|
|
|
|
end
|
|
|
|
function Instance:disableSystem(system, eventName, callback)
|
|
|
|
end
|
|
|
|
function Instance:emit(...)
|
|
self.eventManager:emit(...)
|
|
|
|
return self
|
|
end
|
|
|
|
return setmetatable(Instance, {
|
|
__call = function(_, ...) return Instance.new(...) end,
|
|
})
|