Allow systems to be disabled

This commit is contained in:
Tjakka5 2020-01-03 22:19:01 +01:00
parent 6eaf66308d
commit 04a35a117e
2 changed files with 36 additions and 6 deletions

View file

@ -9,6 +9,8 @@ System.mt = {
__index = System, __index = System,
__call = function(baseSystem, world) __call = function(baseSystem, world)
local system = setmetatable({ local system = setmetatable({
__enabled = true,
__pools = {}, __pools = {},
__world = world, __world = world,
@ -94,6 +96,32 @@ function System:clear()
end end
end end
function System:enable()
self:setEnabled(true)
end
function System:disable()
self:setEnabled(false)
end
function System:toggleEnable()
self:setEnabled(not self.__enabled)
end
function System:setEnabled(enable)
if (not self.__enabled and enable) then
self.__enabled = true
self:onEnabledCallback()
elseif (self.__enabled and not enable) then
self.__enabled = false
self:onDisabledCallback()
end
end
function System:isEnabled()
return self.__enabled
end
--- Returns the World the System is in. --- Returns the World the System is in.
-- @return The world the system is in -- @return The world the system is in
function System:getWorld() function System:getWorld()
@ -107,16 +135,16 @@ end
-- Default callback for when a System's callback is enabled. -- Default callback for when a System's callback is enabled.
-- @param callbackName The name of the callback that was enabled -- @param callbackName The name of the callback that was enabled
function System:enabledCallback(callbackName) -- luacheck: ignore function System:onEnabledCallback(callbackName) -- luacheck: ignore
end end
-- Default callback for when a System's callback is disabled. -- Default callback for when a System's callback is disabled.
-- @param callbackName The name of the callback that was disabled -- @param callbackName The name of the callback that was disabled
function System:disabledCallback(callbackName) -- luacheck: ignore function System:onDisabledCallback(callbackName) -- luacheck: ignore
end end
return setmetatable(System, { return setmetatable(System, {
__call = function(_, ...) __call = function(_, ...)
return System.new(...) return System.new(...)
end, end,
}) })

View file

@ -129,7 +129,7 @@ local blacklistedSystemMethods = {
function World:addSystem(baseSystem) function World:addSystem(baseSystem)
if (not Type.isBaseSystem(baseSystem)) then if (not Type.isBaseSystem(baseSystem)) then
error("bad argument #"..i.." to 'World:addSystems' (baseSystem expected, got "..type(baseSystem)..")", 2) error("bad argument #1 to 'World:addSystems' (baseSystem expected, got "..type(baseSystem)..")", 2)
end end
-- TODO: Check if baseSystem was already added -- TODO: Check if baseSystem was already added
@ -203,9 +203,11 @@ function World:emit(callbackName, ...)
for i = 1, #listeners do for i = 1, #listeners do
local listener = listeners[i] local listener = listeners[i]
self:__flush() if (listener.system.__enabled) then
self:__flush()
listener.callback(listener.system, ...) listener.callback(listener.system, ...)
end
end end
end end