Did work on events

This commit is contained in:
Justin van der Leij 2018-03-06 13:59:25 +01:00
parent fa22f6f6f6
commit 8810005217
3 changed files with 21 additions and 18 deletions

View file

@ -22,7 +22,9 @@ function EventManager:emit(name, ...)
return self return self
end end
function EventManager:register(name, listener, callback) function EventManager:register(name, listener, callback, enabled)
enabled = enabled == nil and true
local listeners = self.listeners[name] local listeners = self.listeners[name]
if not listeners then if not listeners then

View file

@ -9,9 +9,7 @@ Instance.__index = Instance
function Instance.new() function Instance.new()
local instance = setmetatable({ local instance = setmetatable({
entities = List(), entities = List(),
systems = List(), systems = {},
systemCount = {},
eventManager = EventManager(),
}, Instance) }, Instance)
return instance return instance
@ -38,23 +36,26 @@ function Instance:removeEntity(e)
end end
end end
function Instance:addSystem(system, eventName, callback) function Instance:addSystem(system, eventName, callback, enabled)
self.systemCount[system] = (self.systemCount[system] or 0) + 1 self.systems[eventName] = self.systems[eventName] or {}
self.systems:add(system)
self.eventManager:register(eventName, system, callback) 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 return self
end end
function Instance:removeSystem(system, callback) function Instance:enableSystem(system, eventName, callback)
self.systemCount[system] = self.systemCount[system] - 1
if self.systemCount[system] == 0 then
self.systemCount[system] = nil
self.eventManager:deregister(eventName, system, callback)
end end
return self function Instance:disableSystem(system, eventName, callback)
end end
function Instance:emit(...) function Instance:emit(...)

View file

@ -89,9 +89,9 @@ function RandomRemover:update(dt)
love.window.setTitle(love.timer.getFPS()) love.window.setTitle(love.timer.getFPS())
end end
Game:addSystem(RandomRemover(), "update") Game:addSystem(RandomRemover(), "update", nil, true)
Game:addSystem(RectangleRenderer(), "draw") Game:addSystem(RectangleRenderer(), "draw", nil, true)
Game:addSystem(CircleRenderer(), "draw") Game:addSystem(CircleRenderer(), "draw", nil, true)
for i = 1, 100 do for i = 1, 100 do
local e = Entity() local e = Entity()