Files
Yogstation/code/datums/elements/firestacker.dm
Ling c7226a179b Modernizes components (#17260)
* Part 1

* Refactor signals into different files

* Remove redundant file

* Add missing movable signals

* Add signals log

* Split signal registering with list into new proc

* Add comments to component.dm and remove signal_enabled

* Fix yogs code

* Not this one

* Hopefully make linter happy

* Remove duplicate file

* More duplicates signals
2023-01-04 22:29:34 +00:00

41 lines
1.5 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(!ismovable(target))
return ELEMENT_INCOMPATIBLE
RegisterSignal(target, COMSIG_MOVABLE_IMPACT, .proc/impact)
if(isitem(target))
RegisterSignal(target, COMSIG_ITEM_ATTACK, .proc/item_attack)
RegisterSignal(target, COMSIG_ITEM_ATTACK_SELF, .proc/item_attack_self)
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)