mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-10 17:52:36 +00:00
* Improves H.A.U.L. gauntlets and /datum/component/strong_pull code, fixing a couple of little issues in the process (#59550) Does a bit of a logic re-write on the cargo gauntlets and their strong_pull component. Cargo gauntlets themselves have been converted to use signals for equipping and unequipping. Their component reference has been changed to a weakref so if the component is ever Destroy()ed for any reason outside of the gauntlets it doesn't hard del. The strong_pull component now registers signals with parent in RegisterWithParent() instead of Init() and removing the strong grip is no longer a SIGNAL_HANDLER proc. It is now called by the signal handler for no longer pulling things and in Destroy(). This stops instances where pulling things and removing the gloves didn't remove the pull effect appropriately. * Improves H.A.U.L. gauntlets and /datum/component/strong_pull code, fixing a couple of little issues in the process Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
58 lines
2.0 KiB
Plaintext
58 lines
2.0 KiB
Plaintext
|
|
/*
|
|
This component attaches to mobs, and makes their pulls !strong!
|
|
Basically, the items they pull cannot be pulled (except by the puller)
|
|
*/
|
|
/datum/component/strong_pull
|
|
var/atom/movable/strongpulling
|
|
|
|
/datum/component/strong_pull/Initialize()
|
|
if(!isliving(parent))
|
|
return COMPONENT_INCOMPATIBLE
|
|
|
|
/datum/component/strong_pull/Destroy(force, silent)
|
|
if(strongpulling)
|
|
lose_strong_grip()
|
|
return ..()
|
|
|
|
/datum/component/strong_pull/RegisterWithParent()
|
|
. = ..()
|
|
RegisterSignal(parent, COMSIG_LIVING_START_PULL, .proc/on_pull)
|
|
|
|
/**
|
|
* Called when the parent grabs something, adds signals to the object to reject interactions
|
|
*/
|
|
/datum/component/strong_pull/proc/on_pull(datum/source, atom/movable/pulled, state, force)
|
|
SIGNAL_HANDLER
|
|
strongpulling = pulled
|
|
RegisterSignal(strongpulling, COMSIG_ATOM_CAN_BE_PULLED, .proc/reject_further_pulls)
|
|
RegisterSignal(strongpulling, COMSIG_ATOM_NO_LONGER_PULLED, .proc/on_no_longer_pulled)
|
|
if(istype(strongpulling, /obj/structure/closet) && !istype(strongpulling, /obj/structure/closet/body_bag))
|
|
var/obj/structure/closet/grabbed_closet = strongpulling
|
|
grabbed_closet.strong_grab = TRUE
|
|
|
|
/**
|
|
* Signal for rejecting further grabs
|
|
*/
|
|
/datum/component/strong_pull/proc/reject_further_pulls(datum/source, mob/living/puller)
|
|
SIGNAL_HANDLER
|
|
if(puller != parent) //for increasing grabs, you need to have a valid pull. thus, parent should be able to pull the same object again
|
|
return COMSIG_ATOM_CANT_PULL
|
|
|
|
/*
|
|
* Unregisters signals and stops any buffs to pulling.
|
|
*/
|
|
/datum/component/strong_pull/proc/lose_strong_grip()
|
|
UnregisterSignal(strongpulling, list(COMSIG_ATOM_CAN_BE_PULLED, COMSIG_ATOM_NO_LONGER_PULLED))
|
|
if(istype(strongpulling, /obj/structure/closet))
|
|
var/obj/structure/closet/ungrabbed_closet = strongpulling
|
|
ungrabbed_closet.strong_grab = FALSE
|
|
strongpulling = null
|
|
|
|
/**
|
|
* Called when the hooked object is no longer pulled and removes the strong grip.
|
|
*/
|
|
/datum/component/strong_pull/proc/on_no_longer_pulled(datum/source, atom/movable/last_puller)
|
|
SIGNAL_HANDLER
|
|
lose_strong_grip()
|