1
0
Fork 0
mirror of https://github.com/Reuh/ubiquitousse.git synced 2025-10-27 17:19:31 +00:00
ubiquitousse/signal/signal.lua

226 lines
10 KiB
Lua

local signal -- ./signal/signal.can:30
local registry_mt -- ./signal/signal.can:36
registry_mt = { -- ./signal/signal.can:36
["signals"] = {}, -- ./signal/signal.can:39
["chained"] = {}, -- ./signal/signal.can:43
["bind"] = function(self, name, fn) -- ./signal/signal.can:48
assert(not self:has(name, fn), ("function %s already bound to signal %s"):format(fn, name)) -- ./signal/signal.can:49
if not self["signals"][name] then -- ./signal/signal.can:50
self["signals"][name] = {} -- ./signal/signal.can:51
end -- ./signal/signal.can:51
table["insert"](self["signals"][name], fn) -- ./signal/signal.can:53
return self -- ./signal/signal.can:54
end, -- ./signal/signal.can:54
["has"] = function(self, name, fn) -- ./signal/signal.can:60
if not self["signals"][name] then -- ./signal/signal.can:61
return false -- ./signal/signal.can:62
end -- ./signal/signal.can:62
for _, f in ipairs(self["signals"][name]) do -- ./signal/signal.can:64
if f == fn then -- ./signal/signal.can:65
return true -- ./signal/signal.can:66
end -- ./signal/signal.can:66
end -- ./signal/signal.can:66
return false -- ./signal/signal.can:69
end, -- ./signal/signal.can:69
["unbind"] = function(self, name, fn) -- ./signal/signal.can:75
if not self["signals"][name] then -- ./signal/signal.can:76
self["signals"][name] = {} -- ./signal/signal.can:77
end -- ./signal/signal.can:77
for i = # self["signals"][name], 1, - 1 do -- ./signal/signal.can:79
local f = self["signals"][name][i] -- ./signal/signal.can:80
if f == fn then -- ./signal/signal.can:81
table["remove"](self["signals"][name], i) -- ./signal/signal.can:82
return self -- ./signal/signal.can:83
end -- ./signal/signal.can:83
end -- ./signal/signal.can:83
error(("function %s not bound to signal %s"):format(fn, name)) -- ./signal/signal.can:86
end, -- ./signal/signal.can:86
["unbindPattern"] = function(self, pat, fn) -- ./signal/signal.can:91
return self:_patternize("unbind", pat, fn) -- ./signal/signal.can:92
end, -- ./signal/signal.can:92
["clear"] = function(self, name) -- ./signal/signal.can:97
self["signals"][name] = nil -- ./signal/signal.can:98
end, -- ./signal/signal.can:98
["clearPattern"] = function(self, pat) -- ./signal/signal.can:102
return self:_patternize("clear", pat) -- ./signal/signal.can:103
end, -- ./signal/signal.can:103
["emit"] = function(self, name, ...) -- ./signal/signal.can:109
if self["signals"][name] then -- ./signal/signal.can:110
for _, fn in ipairs(self["signals"][name]) do -- ./signal/signal.can:111
fn(...) -- ./signal/signal.can:112
end -- ./signal/signal.can:112
end -- ./signal/signal.can:112
for _, c in ipairs(self["chained"]) do -- ./signal/signal.can:115
c:emit(name, ...) -- ./signal/signal.can:116
end -- ./signal/signal.can:116
return self -- ./signal/signal.can:118
end, -- ./signal/signal.can:118
["emitPattern"] = function(self, pat, ...) -- ./signal/signal.can:123
return self:_patternize("emit", pat, ...) -- ./signal/signal.can:124
end, -- ./signal/signal.can:124
["chain"] = function(self, registry) -- ./signal/signal.can:131
if not registry then -- ./signal/signal.can:132
registry = signal["new"]() -- ./signal/signal.can:133
end -- ./signal/signal.can:133
table["insert"](self["chained"], registry) -- ./signal/signal.can:135
return registry -- ./signal/signal.can:136
end, -- ./signal/signal.can:136
["unchain"] = function(self, registry) -- ./signal/signal.can:141
for i = # self["chained"], 1, - 1 do -- ./signal/signal.can:142
if self["chained"][i] == registry then -- ./signal/signal.can:143
table["remove"](self["chained"], i) -- ./signal/signal.can:144
return self -- ./signal/signal.can:145
end -- ./signal/signal.can:145
end -- ./signal/signal.can:145
error("the givent registry is not chained with this registry") -- ./signal/signal.can:148
end, -- ./signal/signal.can:148
["_patternize"] = function(self, method, pat, ...) -- ./signal/signal.can:151
for name in pairs(self["signals"]) do -- ./signal/signal.can:152
if name:match(pat) then -- ./signal/signal.can:153
self[method](self, name, ...) -- ./signal/signal.can:154
end -- ./signal/signal.can:154
end -- ./signal/signal.can:154
end -- ./signal/signal.can:154
} -- ./signal/signal.can:154
registry_mt["__index"] = registry_mt -- ./signal/signal.can:159
local group_mt -- ./signal/signal.can:172
group_mt = { -- ./signal/signal.can:172
["paused"] = false, -- ./signal/signal.can:175
["binds"] = {}, -- ./signal/signal.can:179
["bind"] = function(self, registry, name, fn) -- ./signal/signal.can:187
table["insert"](self["binds"], { -- ./signal/signal.can:188
registry, -- ./signal/signal.can:188
name, -- ./signal/signal.can:188
fn -- ./signal/signal.can:188
}) -- ./signal/signal.can:188
if not self["paused"] then -- ./signal/signal.can:189
registry:bind(name, fn) -- ./signal/signal.can:189
end -- ./signal/signal.can:189
end, -- ./signal/signal.can:189
["clear"] = function(self) -- ./signal/signal.can:193
if not self["paused"] then -- ./signal/signal.can:194
for _, b in ipairs(self["binds"]) do -- ./signal/signal.can:195
b[1]:unbind(b[2], b[3]) -- ./signal/signal.can:196
end -- ./signal/signal.can:196
end -- ./signal/signal.can:196
self["binds"] = {} -- ./signal/signal.can:199
end, -- ./signal/signal.can:199
["pause"] = function(self) -- ./signal/signal.can:204
assert(not self["paused"], "event group is already paused") -- ./signal/signal.can:205
self["paused"] = true -- ./signal/signal.can:206
for _, b in ipairs(self["binds"]) do -- ./signal/signal.can:207
b[1]:unbind(b[2], b[3]) -- ./signal/signal.can:208
end -- ./signal/signal.can:208
end, -- ./signal/signal.can:208
["resume"] = function(self) -- ./signal/signal.can:214
assert(self["paused"], "event group is not paused") -- ./signal/signal.can:215
self["paused"] = false -- ./signal/signal.can:216
for _, b in ipairs(self["binds"]) do -- ./signal/signal.can:217
b[1]:bind(b[2], b[3]) -- ./signal/signal.can:218
end -- ./signal/signal.can:218
end -- ./signal/signal.can:218
} -- ./signal/signal.can:218
group_mt["__index"] = group_mt -- ./signal/signal.can:222
signal = { -- ./signal/signal.can:228
["new"] = function() -- ./signal/signal.can:231
return setmetatable({ -- ./signal/signal.can:232
["signals"] = {}, -- ./signal/signal.can:232
["chained"] = {} -- ./signal/signal.can:232
}, registry_mt) -- ./signal/signal.can:232
end, -- ./signal/signal.can:232
["group"] = function() -- ./signal/signal.can:237
return setmetatable({ ["binds"] = {} }, group_mt) -- ./signal/signal.can:238
end, -- ./signal/signal.can:238
["signals"] = {}, -- ./signal/signal.can:242
["bind"] = function(...) -- ./signal/signal.can:243
return registry_mt["bind"](signal, ...) -- ./signal/signal.can:244
end, -- ./signal/signal.can:244
["has"] = function(...) -- ./signal/signal.can:246
return registry_mt["has"](signal, ...) -- ./signal/signal.can:247
end, -- ./signal/signal.can:247
["unbind"] = function(...) -- ./signal/signal.can:249
return registry_mt["unbind"](signal, ...) -- ./signal/signal.can:250
end, -- ./signal/signal.can:250
["unbindPattern"] = function(...) -- ./signal/signal.can:252
return registry_mt["unbindPattern"](signal, ...) -- ./signal/signal.can:253
end, -- ./signal/signal.can:253
["clear"] = function(...) -- ./signal/signal.can:255
return registry_mt["clear"](signal, ...) -- ./signal/signal.can:256
end, -- ./signal/signal.can:256
["clearPattern"] = function(...) -- ./signal/signal.can:258
return registry_mt["clearPattern"](signal, ...) -- ./signal/signal.can:259
end, -- ./signal/signal.can:259
["emit"] = function(...) -- ./signal/signal.can:261
return registry_mt["emit"](signal, ...) -- ./signal/signal.can:262
end, -- ./signal/signal.can:262
["emitPattern"] = function(...) -- ./signal/signal.can:264
return registry_mt["emitPattern"](signal, ...) -- ./signal/signal.can:265
end, -- ./signal/signal.can:265
["event"] = nil, -- ./signal/signal.can:286
["registerEvents"] = function() -- ./signal/signal.can:291
local callbacks = { -- ./signal/signal.can:292
"displayrotated", -- ./signal/signal.can:293
"draw", -- ./signal/signal.can:293
"load", -- ./signal/signal.can:293
"lowmemory", -- ./signal/signal.can:293
"quit", -- ./signal/signal.can:293
"update", -- ./signal/signal.can:293
"directorydropped", -- ./signal/signal.can:294
"filedropped", -- ./signal/signal.can:294
"focus", -- ./signal/signal.can:294
"mousefocus", -- ./signal/signal.can:294
"resize", -- ./signal/signal.can:294
"visible", -- ./signal/signal.can:294
"keypressed", -- ./signal/signal.can:295
"keyreleased", -- ./signal/signal.can:295
"textedited", -- ./signal/signal.can:295
"textinput", -- ./signal/signal.can:295
"mousemoved", -- ./signal/signal.can:296
"mousepressed", -- ./signal/signal.can:296
"mousereleased", -- ./signal/signal.can:296
"wheelmoved", -- ./signal/signal.can:296
"gamepadaxis", -- ./signal/signal.can:297
"gamepadpressed", -- ./signal/signal.can:297
"gamepadreleased", -- ./signal/signal.can:297
"joystickadded", -- ./signal/signal.can:298
"joystickaxis", -- ./signal/signal.can:298
"joystickhat", -- ./signal/signal.can:298
"joystickpressed", -- ./signal/signal.can:298
"joystickreleased", -- ./signal/signal.can:298
"joystickremoved", -- ./signal/signal.can:298
"touchmoved", -- ./signal/signal.can:299
"touchpressed", -- ./signal/signal.can:299
"touchreleased" -- ./signal/signal.can:299
} -- ./signal/signal.can:299
local event = signal["event"] -- ./signal/signal.can:301
for _, callback in ipairs(callbacks) do -- ./signal/signal.can:302
if callback == "update" then -- ./signal/signal.can:303
if love[callback] then -- ./signal/signal.can:304
local old = love[callback] -- ./signal/signal.can:305
love[callback] = function(dt) -- ./signal/signal.can:306
old(dt) -- ./signal/signal.can:307
event:emit(callback, dt) -- ./signal/signal.can:308
end -- ./signal/signal.can:308
else -- ./signal/signal.can:308
love[callback] = function(dt) -- ./signal/signal.can:311
event:emit(callback, dt) -- ./signal/signal.can:312
end -- ./signal/signal.can:312
end -- ./signal/signal.can:312
else -- ./signal/signal.can:312
if love[callback] then -- ./signal/signal.can:316
local old = love[callback] -- ./signal/signal.can:317
love[callback] = function(...) -- ./signal/signal.can:318
old(...) -- ./signal/signal.can:319
event:emit(callback, ...) -- ./signal/signal.can:320
end -- ./signal/signal.can:320
else -- ./signal/signal.can:320
love[callback] = function(...) -- ./signal/signal.can:323
event:emit(callback, ...) -- ./signal/signal.can:324
end -- ./signal/signal.can:324
end -- ./signal/signal.can:324
end -- ./signal/signal.can:324
end -- ./signal/signal.can:324
end -- ./signal/signal.can:324
} -- ./signal/signal.can:324
signal["event"] = signal["new"]() -- ./signal/signal.can:332
return signal -- ./signal/signal.can:334