From bf35df42bfdee99664c1b38266259b9701e4b0b5 Mon Sep 17 00:00:00 2001 From: Tim Date: Tue, 25 Oct 2022 13:59:24 -0500 Subject: [PATCH] Add AltClick removes pAIs for tablets (#68251) * Add AltClick removes pAIs * Add context screentips for pAIs to tablets * Fix screentip context syntax error * Fix syntax error * Merge remote-tracking branch 'upstream/master' into patch-10 * Refactor contextual screentips to work * Fix runtimes * Apply code review changes Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> * Add balloon alert to tablet items * Refactor screentips to be more robust * Change add_context to be more robust * Add more balloon alerts * Some idiot set user to null so I gotta remove this * Change pen screentip to display inserted item * Add screentip to insert items Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> --- .../computers/item/computer.dm | 41 +++++++++++++++---- .../computers/item/tablet.dm | 17 +++++--- .../modular_computers/hardware/card_slot.dm | 1 + 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 4f8d3fe7e45..b8ac4256c73 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -172,8 +172,19 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar if(user.canUseTopic(src, be_close = TRUE)) var/obj/item/computer_hardware/card_slot/card_slot2 = all_components[MC_CARD2] var/obj/item/computer_hardware/card_slot/card_slot = all_components[MC_CARD] - if(card_slot2?.try_eject(user) || card_slot?.try_eject(user)) + + if(istype(card_slot) && card_slot.stored_card && card_slot?.try_eject(user)) return TRUE + + if(istype(card_slot2) && card_slot2?.stored_card && card_slot2?.try_eject(user)) + return TRUE + + if(istype(inserted_pai)) // Remove pAI + user.put_in_hands(inserted_pai) + balloon_alert(user, "removed pAI") + inserted_pai = null + return TRUE + if(!istype(src, /obj/item/modular_computer/tablet)) return FALSE @@ -359,13 +370,24 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar if(Adjacent(user)) . += span_notice("Paper level: [stored_paper] / [max_paper].") -/obj/item/modular_computer/add_context(atom/source, list/context, obj/item/held_item, mob/user) +/obj/item/modular_computer/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) . = ..() - context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove ID" - context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB] = "Remove Disk" + var/obj/item/computer_hardware/card_slot/card_slot = all_components[MC_CARD] + var/obj/item/computer_hardware/card_slot/card_slot2 = all_components[MC_CARD2] - return CONTEXTUAL_SCREENTIP_SET + if(card_slot?.stored_card || card_slot2?.stored_card) // IDs get removed first before pAIs + context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove ID" + . = CONTEXTUAL_SCREENTIP_SET + else if(inserted_pai) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove pAI" + . = CONTEXTUAL_SCREENTIP_SET + + if(all_components[MC_SDD]) + context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB] = "Remove SSD" + . = CONTEXTUAL_SCREENTIP_SET + + return . || NONE /obj/item/modular_computer/update_icon_state() if(!bypass_state) @@ -700,7 +722,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar if(!user.transferItemToLoc(attacking_item, src)) return inserted_pai = attacking_item - to_chat(user, span_notice("You slot \the [attacking_item] into [src].")) + balloon_alert(user, "inserted pai") return // Check if any Applications need it @@ -712,18 +734,18 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar if(istype(attacking_item, /obj/item/paper)) if(stored_paper >= max_paper) - to_chat(user, span_warning("You try to add \the [attacking_item] into [src], but it can't hold any more!")) + balloon_alert(user, "no more room!") return if(!user.temporarilyRemoveItemFromInventory(attacking_item)) return FALSE - to_chat(user, span_notice("You insert \the [attacking_item] into [src]'s paper recycler.")) + balloon_alert(user, "inserted paper") qdel(attacking_item) stored_paper++ return if(istype(attacking_item, /obj/item/paper_bin)) var/obj/item/paper_bin/bin = attacking_item if(bin.total_paper <= 0) - to_chat(user, span_notice("\The [bin] is empty!")) + balloon_alert(user, "empty bin!") return var/papers_added //just to keep track while((bin.total_paper > 0) && (stored_paper < max_paper)) @@ -732,6 +754,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar bin.remove_paper() if(!papers_added) return + balloon_alert(user, "inserted paper") to_chat(user, span_notice("Added in [papers_added] new sheets. You now have [stored_paper] / [max_paper] printing paper stored.")) bin.update_appearance() return diff --git a/code/modules/modular_computers/computers/item/tablet.dm b/code/modules/modular_computers/computers/item/tablet.dm index 7d3bd695c73..7ac26dc18d9 100644 --- a/code/modules/modular_computers/computers/item/tablet.dm +++ b/code/modules/modular_computers/computers/item/tablet.dm @@ -65,9 +65,14 @@ /obj/item/modular_computer/tablet/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() - context[SCREENTIP_CONTEXT_CTRL_LMB] = "Remove pen" + if(inserted_item) + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Remove [inserted_item]" + . = CONTEXTUAL_SCREENTIP_SET + else if(istype(held_item) && is_type_in_list(held_item, contained_item)) + context[SCREENTIP_CONTEXT_LMB] = "Insert [held_item]" + . = CONTEXTUAL_SCREENTIP_SET - return CONTEXTUAL_SCREENTIP_SET + return . || NONE /obj/item/modular_computer/tablet/attackby(obj/item/W, mob/user) . = ..() @@ -77,11 +82,11 @@ user.balloon_alert(user, "too big!") return if(inserted_item) - to_chat(user, span_warning("There is already \a [inserted_item] in \the [src]!")) + balloon_alert(user, "no room!") else if(!user.transferItemToLoc(W, src)) return - to_chat(user, span_notice("You insert \the [W] into \the [src].")) + balloon_alert(user, "inserted [W]") inserted_item = W playsound(src, 'sound/machines/pda_button1.ogg', 50, TRUE) @@ -120,13 +125,13 @@ return if(inserted_item) - to_chat(user, span_notice("You remove [inserted_item] from [src].")) + balloon_alert(user, "removed [inserted_item]") user.put_in_hands(inserted_item) inserted_item = null update_appearance() playsound(src, 'sound/machines/pda_button2.ogg', 50, TRUE) else - to_chat(user, span_warning("This tablet does not have a pen in it!")) + balloon_alert(user, "nothing to remove!") // Tablet 'splosion.. diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm index b6173ef9baa..f89680ceeb6 100644 --- a/code/modules/modular_computers/hardware/card_slot.dm +++ b/code/modules/modular_computers/hardware/card_slot.dm @@ -102,6 +102,7 @@ else stored_card.forceMove(drop_location()) + balloon_alert(user, "removed ID") to_chat(user, span_notice("You remove the card from \the [src].")) playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) holder?.update_appearance()