Makes passing arguments to elements work. (#9436)

The components port #8890 only partially implemented a later tg PR #49098 suggested by ninjanomnom here. Missing an important part that affected elements. The result of that was that it wasn't possible to pass any arguments other than the element datum to AddElement().

This PR adds the missing bit, which are the changes in the linked PR here and makes passing arguments to elements work properly.

And another unrelated missing bit that doesn't affect anything (yet)
This commit is contained in:
mikomyazaki
2020-07-24 09:14:04 +01:00
committed by GitHub
parent 469c15ec27
commit 6963ba6482
3 changed files with 24 additions and 8 deletions

View File

@@ -21,11 +21,13 @@
SHOULD_CALL_PARENT(1)
if(type == /datum/element)
return ELEMENT_INCOMPATIBLE
SEND_SIGNAL(target, COMSIG_ELEMENT_ATTACH, src)
if(element_flags & ELEMENT_DETACH)
RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/Detach, override = TRUE)
/// Deactivates the functionality defines by the element on the given datum
/datum/element/proc/Detach(datum/source, force)
SEND_SIGNAL(source, COMSIG_ELEMENT_DETACH, src)
SHOULD_CALL_PARENT(1)
UnregisterSignal(source, COMSIG_PARENT_QDELETING)
@@ -38,13 +40,16 @@
//DATUM PROCS
/// Finds the singleton for the element type given and attaches it to src
/datum/proc/_AddElement(eletype, ...)
var/datum/element/ele = SSdcs.GetElement(eletype)
args[1] = src
if(ele.Attach(arglist(args)) == ELEMENT_INCOMPATIBLE)
CRASH("Incompatible [eletype] assigned to a [type]! args: [json_encode(args)]")
/datum/proc/_AddElement(list/arguments)
var/datum/element/ele = SSdcs.GetElement(arguments)
arguments[1] = src
if(ele.Attach(arglist(arguments)) == ELEMENT_INCOMPATIBLE)
CRASH("Incompatible [arguments[1]] assigned to a [type]! args: [json_encode(args)]")
/// Finds the singleton for the element type given and detaches it from src
/datum/proc/_RemoveElement(eletype)
var/datum/element/ele = SSdcs.GetElement(eletype)
/**
* Finds the singleton for the element type given and detaches it from src
* You only need additional arguments beyond the type if you're using [ELEMENT_BESPOKE]
*/
/datum/proc/_RemoveElement(list/arguments)
var/datum/element/ele = SSdcs.GetElement(arguments)
ele.Detach(src)