‹ Back to My Code
modules lua
local Signal = {}
Signal.__index = Signal

function Signal.new()
	return setmetatable({ _listeners = {} }, Signal)
end

function Signal:Connect(callback)
	table.insert(self._listeners, callback)

	return {
		Disconnect = function()
			local index = table.find(self._listeners, callback)
			if index then
				table.remove(self._listeners, index)
			end
		end,
	}
end

function Signal:Fire(...)
	for _, callback in ipairs(self._listeners) do
		callback(...)
	end
end

return Signal