mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-15 20:22:07 +00:00
* Cleans up the SS13_base lua file and adds a new lua file for easily handling multiple signals on different objects. (#82458) ## About The Pull Request Cleaned up the SS13.register_signal and SS13.unregister_signal, removing the weird list shifting. Also adds a new lua file that can be included for the use of registering different signals on various datums and being able to clear them all in 1 function. Removed the make_easy_clear_function option when registering a signal via lua because I don't think it's used by anyone and it lacks any sort of versatility. Users can just create their own function for clearing signals from a datum. Also updates the documentation for HARDDELETES.md as COMSIG_PARENT_QDELETING was renamed to COMSIG_QDELETING ## Why It's Good For The Game New handler file makes registering signals in batches a lot easier if you want to clear them in one go without clearing unrelated callbacks on the same datum. The list shifting in SS13.register_signal had pretty significant performance problems, so removing that will make registering and unregistering signals faster. ## Changelog 🆑 admin: LUA - Adds a new library called handler_group. Include it in your files by doing require('handler_group') /🆑 --------- Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> * Fixes SS13.register_signal throwing unclear errors when called on deleted datums (#82597) ## About The Pull Request See title ## Why It's Good For The Game More descriptive error message ## Changelog 🆑 fix: LUA: Registering a signal on a deleted datum will throw a more descriptive error message. /🆑 --------- Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> --------- Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com> Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
50 lines
1.3 KiB
Lua
50 lines
1.3 KiB
Lua
local SS13 = require('SS13')
|
|
local HandlerGroup = {}
|
|
HandlerGroup.__index = HandlerGroup
|
|
|
|
function HandlerGroup.new()
|
|
return setmetatable({
|
|
registered = {}
|
|
}, HandlerGroup)
|
|
end
|
|
|
|
-- Registers a signal on a datum for this handler group instance.
|
|
function HandlerGroup:register_signal(datum, signal, func)
|
|
local callback = SS13.register_signal(datum, signal, func)
|
|
if not callback then
|
|
return
|
|
end
|
|
table.insert(self.registered, { datum = datum, signal = signal, callback = callback })
|
|
end
|
|
|
|
-- Clears all the signals that have been registered on this HandlerGroup
|
|
function HandlerGroup:clear()
|
|
for _, data in self.registered do
|
|
if not data.callback or not data.datum then
|
|
continue
|
|
end
|
|
SS13.unregister_signal(data.datum, data.signal, data.callback)
|
|
end
|
|
table.clear(self.registered)
|
|
end
|
|
|
|
-- Clears all the signals that have been registered on this HandlerGroup when a specific signal is sent on a datum.
|
|
function HandlerGroup:clear_on(datum, signal, func)
|
|
SS13.register_signal(datum, signal, function(...)
|
|
if func then
|
|
func(...)
|
|
end
|
|
self:clear()
|
|
end)
|
|
end
|
|
|
|
-- Registers a signal on a datum and clears it after it is called once.
|
|
function HandlerGroup.register_once(datum, signal, func)
|
|
local callback = HandlerGroup.new()
|
|
callback:clear_on(datum, signal, func)
|
|
return callback
|
|
end
|
|
|
|
|
|
return HandlerGroup
|