Files
Bubberstation/code/datums/elements/firestacker.dm
Qustinnus a394ccdc2b Material datum chairs & tables and applies materials to all items (Now with less pain for mining & RnD) (#46525)
removes materials list from items, uses custom_materials instead. This might introduce some bugs so we should testmerge this for a while (and Ill test stuff locally as much as I can)

this also adds material crafting to sheets. Test case being chairs. In the future we can add stuff like tables, walls, doors etc.

also applies materials to everything, with fixes, which can close #46299
2019-10-08 11:06:02 -04:00

41 lines
1.6 KiB
Plaintext

/**
* Can be applied to /atom/movable subtypes to make them apply fire stacks to things they hit
*/
/datum/element/firestacker
element_flags = ELEMENT_DETACH
/// A list in format {atom/movable/owner, number}
/// Used to keep track of movables which want to apply a different number of fire stacks than default
var/list/amount_by_owner = list()
/datum/element/firestacker/Attach(datum/target, amount)
. = ..()
if(!ismovableatom(target))
return ELEMENT_INCOMPATIBLE
RegisterSignal(target, COMSIG_MOVABLE_IMPACT, .proc/impact, override = TRUE)
if(isitem(target))
RegisterSignal(target, COMSIG_ITEM_ATTACK, .proc/item_attack, override = TRUE)
RegisterSignal(target, COMSIG_ITEM_ATTACK_SELF, .proc/item_attack_self, override = TRUE)
if(amount) // If amount is not given we default to 1 and don't need to save it here
amount_by_owner[target] = amount
/datum/element/firestacker/Detach(datum/source, force)
. = ..()
UnregisterSignal(source, list(COMSIG_MOVABLE_IMPACT, COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_SELF))
amount_by_owner -= source
/datum/element/firestacker/proc/stack_on(datum/owner, mob/living/target)
target.adjust_fire_stacks(amount_by_owner[owner] || 1)
/datum/element/firestacker/proc/impact(datum/source, atom/hit_atom, datum/thrownthing/throwingdatum)
if(isliving(hit_atom))
stack_on(source, hit_atom)
/datum/element/firestacker/proc/item_attack(datum/source, atom/movable/target, mob/living/user)
if(isliving(target))
stack_on(source, target)
/datum/element/firestacker/proc/item_attack_self(datum/source, mob/user)
if(isliving(user))
stack_on(source, user)