mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-10 23:54:14 +01:00
[MIRROR] Fixes SS13.register_signal throwing unclear errors when called on deleted datums (#27293)
* 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>
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
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
|
||||
Reference in New Issue
Block a user