Merge pull request #2161 from yogstation13/upstream-merge-39612

[MIRROR] Makes the signal redirect component a bit more transfer proof
This commit is contained in:
Nich
2018-08-13 11:15:40 +02:00
committed by GitHub

View File

@@ -4,13 +4,20 @@
/datum/component/redirect
dupe_mode = COMPONENT_DUPE_ALLOWED
var/list/signals
var/datum/callback/turfchangeCB
/datum/component/redirect/Initialize(list/_signals, flags=NONE)
//It's not our job to verify the right signals are registered here, just do it.
if(!LAZYLEN(_signals))
return COMPONENT_INCOMPATIBLE
if(flags & REDIRECT_TRANSFER_WITH_TURF && isturf(parent))
RegisterSignal(parent, COMSIG_TURF_CHANGE, .proc/turf_change)
// If they also want to listen to the turf change then we need to set it up so both callbacks run
if(_signals[COMSIG_TURF_CHANGE])
turfchangeCB = _signals[COMSIG_TURF_CHANGE]
if(!istype(turfchangeCB))
. = COMPONENT_INCOMPATIBLE
CRASH("Redirect components must be given instanced callbacks, not proc paths.")
_signals[COMSIG_TURF_CHANGE] = CALLBACK(src, .proc/turf_change)
signals = _signals
@@ -23,3 +30,4 @@
/datum/component/redirect/proc/turf_change(path, new_baseturfs, flags, list/transfers)
transfers += src
return turfchangeCB?.InvokeAsync(arglist(args))