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