From 07219f941ccabe8c4b40a4fb6eb1ab39e0e43cc8 Mon Sep 17 00:00:00 2001 From: Nathan Winters <100448493+CinnamonSnowball@users.noreply.github.com> Date: Wed, 20 Jul 2022 19:05:33 +0200 Subject: [PATCH] Adds special click actions for Toggle Suit Sensors and Set Transfer Amount (#18431) * Add AltClick action for setting container transfer amount * Move jumpsuit accessory removal to AltShiftClick * Add AltClick action for toggling jumpsuit sensors * Fix toggling transfer amounts/suit sensors remotely/through windows * HAS_TRAIR * Revert the jumpsuit AltClick-AltShiftClick action swap * Move adjacency checks into the main procs; fix whoopsie * Update reagent container/jumpsuit examine messages * Fix Set Transfer Amount verb catching items on the floor; spacing * Refine guard clauses * Use warning spans when mob moves away from item during dialog * Add post-`input()` sanity checks * Magic numbers begone --- code/modules/clothing/clothing.dm | 60 +++++++++++++-------- code/modules/reagents/reagent_containers.dm | 19 +++++-- 2 files changed, 54 insertions(+), 25 deletions(-) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 82c46884d1c..17525d0f52d 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -296,9 +296,8 @@ BLIND // can't see anything return TRUE /obj/item/clothing/under/proc/set_sensors(mob/user as mob) - var/mob/M = user - if(istype(M, /mob/dead/)) return - if(user.stat || user.restrained()) return + if(!user.Adjacent(src) || !ishuman(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) + return if(has_sensor >= 2) to_chat(user, "The controls are locked.") return 0 @@ -308,20 +307,25 @@ BLIND // can't see anything var/list/modes = list("Off", "Binary sensors", "Vitals tracker", "Tracking beacon") var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes - if(get_dist(user, src) > 1) - to_chat(user, "You have moved too far away.") + + if(!user.Adjacent(src)) + to_chat(user, "You have moved too far away!") return + if(!ishuman(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) + to_chat(user, "You can't use your hands!") + return + sensor_mode = modes.Find(switchMode) - 1 if(src.loc == user) switch(sensor_mode) - if(0) + if(SUIT_SENSOR_OFF) to_chat(user, "You disable your suit's remote sensing equipment.") - if(1) + if(SUIT_SENSOR_BINARY) to_chat(user, "Your suit will now report whether you are live or dead.") - if(2) + if(SUIT_SENSOR_VITAL) to_chat(user, "Your suit will now report your vital lifesigns.") - if(3) + if(SUIT_SENSOR_TRACKING) to_chat(user, "Your suit will now report your vital lifesigns as well as your coordinate position.") if(istype(user,/mob/living/carbon/human)) var/mob/living/carbon/human/H = user @@ -330,16 +334,16 @@ BLIND // can't see anything else if(istype(src.loc, /mob)) switch(sensor_mode) - if(0) + if(SUIT_SENSOR_OFF) for(var/mob/V in viewers(user, 1)) V.show_message("[user] disables [src.loc]'s remote sensing equipment.", 1) - if(1) + if(SUIT_SENSOR_BINARY) for(var/mob/V in viewers(user, 1)) V.show_message("[user] turns [src.loc]'s remote sensors to binary.", 1) - if(2) + if(SUIT_SENSOR_VITAL) for(var/mob/V in viewers(user, 1)) V.show_message("[user] sets [src.loc]'s sensors to track vitals.", 1) - if(3) + if(SUIT_SENSOR_TRACKING) for(var/mob/V in viewers(user, 1)) V.show_message("[user] sets [src.loc]'s sensors to maximum.", 1) if(istype(src,/mob/living/carbon/human)) @@ -351,8 +355,12 @@ BLIND // can't see anything set name = "Toggle Suit Sensors" set category = "Object" set src in usr + set_sensors(usr) +/obj/item/clothing/under/AltShiftClick(mob/user) + set_sensors(user) + //Head /obj/item/clothing/head name = "head" @@ -751,18 +759,26 @@ BLIND // can't see anything /obj/item/clothing/under/examine(mob/user) . = ..() - switch(sensor_mode) - if(0) - . += "Its sensors appear to be disabled." - if(1) - . += "Its binary life sensors appear to be enabled." - if(2) - . += "Its vital tracker appears to be enabled." - if(3) - . += "Its vital tracker and tracking beacon appear to be enabled." + + if(has_sensor >= 1) + switch(sensor_mode) + if(SUIT_SENSOR_OFF) + . += "Its sensors appear to be disabled." + if(SUIT_SENSOR_BINARY) + . += "Its binary life sensors appear to be enabled." + if(SUIT_SENSOR_VITAL) + . += "Its vital tracker appears to be enabled." + if(SUIT_SENSOR_TRACKING) + . += "Its vital tracker and tracking beacon appear to be enabled." + if(has_sensor == 1) + . += "Alt-shift-click to toggle the sensors mode." + else + . += "This suit does not have any sensors." + if(length(accessories)) for(var/obj/item/clothing/accessory/A in accessories) . += "\A [A] is attached to it." + . += "Alt-click to remove an accessory." /obj/item/clothing/under/verb/rollsuit() diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index d3caa041921..bf5e78f04e3 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -17,17 +17,29 @@ /obj/item/reagent_containers/verb/set_APTFT() //set amount_per_transfer_from_this set name = "Set transfer amount" set category = "Object" - set src in range(0) + set src in usr - if(usr.incapacitated()) + if(!usr.Adjacent(src) || !ishuman(usr) || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED)) return + var/default = null if(amount_per_transfer_from_this in possible_transfer_amounts) default = amount_per_transfer_from_this var/N = input("Amount per transfer from this:", "[src]", default) as null|anything in possible_transfer_amounts + + if(!usr.Adjacent(src)) + to_chat(usr, "You have moved too far away!") + return + if(!ishuman(usr) || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED)) + to_chat(usr, "You can't use your hands!") + return + if(N) amount_per_transfer_from_this = N +/obj/item/reagent_containers/AltClick() + set_APTFT() + /obj/item/reagent_containers/New() create_reagents(volume, temperature_min, temperature_max) ..() @@ -91,4 +103,5 @@ // Food has no valid possible_transfer_amounts, and we don't want to show // this message on examining food. if(possible_transfer_amounts) - . += "It will transfer [amount_per_transfer_from_this] unit[amount_per_transfer_from_this > 1 ? "s" : ""] at a time." + . += "It will transfer [amount_per_transfer_from_this] unit[amount_per_transfer_from_this > 1 ? "s" : ""] at a time." + . += "Alt-click to change the transfer amount."