Fixes SendSignal()

This commit is contained in:
CitadelStationBot
2017-08-03 13:15:13 -05:00
parent 23ed5ba2a2
commit 3e96c59bb7
+63
View File
@@ -0,0 +1,63 @@
diff a/code/datums/components/component.dm b/code/datums/components/component.dm (rejected hunks)
@@ -26,7 +26,7 @@
//set up the typecache
var/our_type = type
- for(var/I in _GetInverseTypeListExceptRoot(our_type))
+ for(var/I in _GetInverseTypeList(our_type))
var/test = dc[I]
if(test) //already another component of this type here
var/list/components_of_type
@@ -66,7 +66,7 @@
if(P)
var/list/dc = P.datum_components
var/our_type = type
- for(var/I in _GetInverseTypeListExceptRoot(our_type))
+ for(var/I in _GetInverseTypeList(our_type))
var/list/components_of_type = dc[I]
if(islist(components_of_type)) //
var/list/subtracted = components_of_type - src
@@ -110,25 +110,33 @@
/datum/component/proc/OnTransfer(datum/new_parent)
return
-/datum/component/proc/_GetInverseTypeListExceptRoot(our_type_cached)
- var/datum/component/current_type = our_type_cached
- . = list()
+/datum/component/proc/_GetInverseTypeList(current_type)
+ . = list(current_type)
while (current_type != /datum/component)
- . += current_type
current_type = type2parent(current_type)
+ . += current_type
/datum/var/list/datum_components //special typecache of /datum/component
/datum/proc/SendSignal(sigtype, ...)
var/list/comps = datum_components
. = FALSE
- for(var/I in comps)
- var/datum/component/C = I
- if(!C.enabled)
- continue
- if(C.ReceiveSignal(arglist(args)))
+ if(!comps)
+ return
+ var/target = comps[/datum/component]
+ if(!islist(target))
+ var/datum/component/C = target
+ if(C.enabled && C.ReceiveSignal(arglist(args)))
ComponentActivated(C)
- . = TRUE
+ return TRUE
+ else
+ for(var/I in target)
+ var/datum/component/C = I
+ if(!C.enabled)
+ continue
+ if(C.ReceiveSignal(arglist(args)))
+ ComponentActivated(C)
+ . = TRUE
/datum/proc/ComponentActivated(datum/component/C)
return