diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 077c0a463aaa..4a66901398de 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -828,15 +828,16 @@ cases. Override_icon_state should be a list.*/ INVOKE_ASYNC(user, TYPE_PROC_REF(/atom, visible_message), SPAN_NOTICE("[user] looks up from [zoom_device]."), SPAN_NOTICE("You look up from [zoom_device].")) zoom = !zoom + COOLDOWN_START(user, zoom_cooldown, 20) SEND_SIGNAL(user, COMSIG_LIVING_ZOOM_OUT, src) SEND_SIGNAL(src, COMSIG_ITEM_UNZOOM, user) UnregisterSignal(src, list( COMSIG_ITEM_DROPPED, COMSIG_ITEM_UNWIELD, - COMSIG_PARENT_QDELETING, )) UnregisterSignal(user, COMSIG_MOB_MOVE_OR_LOOK) + user.UnregisterSignal(src, COMSIG_PARENT_QDELETING) //General reset in case anything goes wrong, the view will always reset to default unless zooming in. if(user.client) user.client.change_view(world_view_size, src) @@ -867,9 +868,9 @@ cases. Override_icon_state should be a list.*/ RegisterSignal(src, list( COMSIG_ITEM_DROPPED, COMSIG_ITEM_UNWIELD, - COMSIG_PARENT_QDELETING, ), PROC_REF(unzoom_dropped_callback)) RegisterSignal(user, COMSIG_MOB_MOVE_OR_LOOK, PROC_REF(zoom_handle_mob_move_or_look)) + user.RegisterSignal(src, COMSIG_PARENT_QDELETING, TYPE_PROC_REF(/mob/living, zoomable_item_destroyed)) zoom_initial_mob_dir = user.dir @@ -896,6 +897,17 @@ cases. Override_icon_state should be a list.*/ SPAN_NOTICE("You peer through \the [zoom_device].")) zoom = !zoom +/mob/living/proc/zoomable_item_destroyed(datum/destroying_zoomable) + SIGNAL_HANDLER + + SEND_SIGNAL(src, COMSIG_LIVING_ZOOM_OUT, destroying_zoomable) + SEND_SIGNAL(destroying_zoomable, COMSIG_ITEM_UNZOOM, src) + + if(client) + client.change_view(world_view_size, destroying_zoomable) + client.pixel_x = 0 + client.pixel_y = 0 + /obj/item/proc/get_icon_state(mob/user_mob, slot) var/mob_state var/item_state_slot_state = LAZYACCESS(item_state_slots, slot)