mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-13 03:02:38 +00:00
## About The Pull Request Fixes #93359 Caused by #93165 Inventory screen elements were no longer considered reachable, which broke mousedrop handing on objects that check "is dragging into inventory slot" I don't know the best way to fix this yet but I figured the next best thing would be to make all of these use the `drag_pickup` element, which skips this reach-ability check Thus I refactored it slightly to accommodate for items which should contextually not be drag-pick-up-abble and bam, works like a charm ## Changelog 🆑 Melbert fix: Dragging defibs and modsuits off your back works again /🆑 --------- Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com>
38 lines
1.2 KiB
Plaintext
38 lines
1.2 KiB
Plaintext
/**
|
|
* drag_pickup element
|
|
*
|
|
* Allowing things to be picked up or unequipped by mouse-dragging.
|
|
* Useful for objects which have an interaction on click
|
|
*/
|
|
/datum/element/drag_pickup
|
|
|
|
/datum/element/drag_pickup/Attach(datum/target)
|
|
if(!ismovable(target))
|
|
return ELEMENT_INCOMPATIBLE
|
|
RegisterSignal(target, COMSIG_MOUSEDROP_ONTO, PROC_REF(pick_up))
|
|
return ..()
|
|
|
|
/datum/element/drag_pickup/Detach(datum/source)
|
|
UnregisterSignal(source, COMSIG_MOUSEDROP_ONTO)
|
|
return ..()
|
|
|
|
/datum/element/drag_pickup/proc/pick_up(atom/movable/source, atom/over, mob/user)
|
|
SIGNAL_HANDLER
|
|
|
|
if(!user.can_perform_action(source, FORBID_TELEKINESIS_REACH))
|
|
return NONE
|
|
if(source.anchored)
|
|
return NONE
|
|
if(source.loc == user && isitem(source))
|
|
var/obj/item/item_source = source
|
|
if(!item_source.can_mob_unequip(user))
|
|
return COMPONENT_CANCEL_MOUSEDROP_ONTO
|
|
|
|
if(over == user)
|
|
INVOKE_ASYNC(user, TYPE_PROC_REF(/mob, put_in_hands), source)
|
|
else if(istype(over, /atom/movable/screen/inventory/hand))
|
|
var/atom/movable/screen/inventory/hand/selected_hand = over
|
|
user.putItemFromInventoryInHandIfPossible(source, selected_hand.held_index)
|
|
source.add_fingerprint(user)
|
|
return COMPONENT_CANCEL_MOUSEDROP_ONTO
|