Files
Bubberstation/code/datums/elements/drag_pickup.dm
MrMelbert 373cd851d8 Fix mousedrop handling on some atoms (#83971)
## About The Pull Request

One should really err on the side of caution when preventing all humans
from being mousedroppable entirely

## Changelog

🆑 Melbert
fix: Human mousedropping
/🆑
2024-06-13 23:45:58 -06:00

31 lines
972 B
Plaintext

/**
* drag_pickup element; for allowing things to be picked up by dragging.
*
* Used for paper bins.
*/
/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/source, atom/over, mob/user)
SIGNAL_HANDLER
var/mob/living/picker = user
if(!istype(picker) || !user.can_perform_action(source, FORBID_TELEKINESIS_REACH))
return
if(over == picker)
INVOKE_ASYNC(picker, 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
picker.putItemFromInventoryInHandIfPossible(source, Selected_hand.held_index)
return COMPONENT_CANCEL_MOUSEDROP_ONTO