Files
Bubberstation/code/datums/elements/drag_pickup.dm
SkyratBot 1f886c53f2 [MIRROR] Fix mousedrop handling on some atoms (#28167)
Fix mousedrop handling on some atoms

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
2024-06-15 18:11:53 +01: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