diff --git a/fluid/eventManager.lua b/fluid/eventManager.lua index 0283a27..2362572 100644 --- a/fluid/eventManager.lua +++ b/fluid/eventManager.lua @@ -22,7 +22,9 @@ function EventManager:emit(name, ...) return self end -function EventManager:register(name, listener, callback) +function EventManager:register(name, listener, callback, enabled) + enabled = enabled == nil and true + local listeners = self.listeners[name] if not listeners then diff --git a/fluid/instance.lua b/fluid/instance.lua index 720a3ec..00fbce7 100644 --- a/fluid/instance.lua +++ b/fluid/instance.lua @@ -9,9 +9,7 @@ Instance.__index = Instance function Instance.new() local instance = setmetatable({ entities = List(), - systems = List(), - systemCount = {}, - eventManager = EventManager(), + systems = {}, }, Instance) return instance @@ -38,23 +36,26 @@ function Instance:removeEntity(e) end end -function Instance:addSystem(system, eventName, callback) - self.systemCount[system] = (self.systemCount[system] or 0) + 1 - self.systems:add(system) +function Instance:addSystem(system, eventName, callback, enabled) + self.systems[eventName] = self.systems[eventName] or {} - 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 end -function Instance:removeSystem(system, 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 +function Instance:enableSystem(system, eventName, callback) + +end + +function Instance:disableSystem(system, eventName, callback) - return self end function Instance:emit(...) diff --git a/main.lua b/main.lua index 1150623..2ec9616 100644 --- a/main.lua +++ b/main.lua @@ -89,9 +89,9 @@ function RandomRemover:update(dt) love.window.setTitle(love.timer.getFPS()) end -Game:addSystem(RandomRemover(), "update") -Game:addSystem(RectangleRenderer(), "draw") -Game:addSystem(CircleRenderer(), "draw") +Game:addSystem(RandomRemover(), "update", nil, true) +Game:addSystem(RectangleRenderer(), "draw", nil, true) +Game:addSystem(CircleRenderer(), "draw", nil, true) for i = 1, 100 do local e = Entity()