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."