mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 02:01:22 +00:00
## About The Pull Request - Wrapping a crate with package wrapping while pulling it will now automatically make you grab it - You can now open the crate while dragging it with the H.A.U.L. gauntlets if you're the one who's pulling it. Also applies to other items (including MOD modules) that have the component https://github.com/user-attachments/assets/7b4743c8-855d-4274-89ca-b0507f6d3e0e ## Why It's Good For The Game QOL for cargo technicians - having to constantly grab and let go of crates is very annoying
59 lines
2.1 KiB
Plaintext
59 lines
2.1 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)
|
|
if(strongpulling)
|
|
lose_strong_grip()
|
|
return ..()
|
|
|
|
/datum/component/strong_pull/RegisterWithParent()
|
|
. = ..()
|
|
RegisterSignal(parent, COMSIG_LIVING_START_PULL, PROC_REF(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_REF(reject_further_pulls))
|
|
RegisterSignal(strongpulling, COMSIG_ATOM_NO_LONGER_PULLED, PROC_REF(on_no_longer_pulled))
|
|
if(istype(strongpulling, /obj/structure/closet) && !istype(strongpulling, /obj/structure/closet/body_bag))
|
|
var/obj/structure/closet/grabbed_closet = strongpulling
|
|
ADD_TRAIT(grabbed_closet, TRAIT_STRONGPULL, REF(src))
|
|
|
|
/**
|
|
* 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
|
|
strongpulling.balloon_alert(puller, "gripped too tightly!")
|
|
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
|
|
REMOVE_TRAIT(ungrabbed_closet, TRAIT_STRONGPULL, REF(src))
|
|
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()
|