diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm index 550e570d058..8bed01b6abe 100644 --- a/code/game/machinery/air_alarm.dm +++ b/code/game/machinery/air_alarm.dm @@ -682,7 +682,7 @@ var/list/selected = TLV["temperature"] var/max_temperature = min(selected[3] - T0C, MAX_TEMPERATURE) var/min_temperature = max(selected[2] - T0C, MIN_TEMPERATURE) - var/input_temperature = tgui_input_number(usr, "What temperature would you like the system to mantain? (Capped between [min_temperature] and [max_temperature]C)", "Thermostat Controls", target_temperature - T0C, max_temperature, min_temperature) + var/input_temperature = tgui_input_number(usr, "What temperature would you like the system to mantain? (Capped between [min_temperature] and [max_temperature]C)", "Thermostat Controls", target_temperature - T0C, max_temperature, min_temperature, round_value = FALSE) if(isnum(input_temperature)) if(input_temperature > max_temperature || input_temperature < min_temperature) to_chat(usr, "Temperature must be between [min_temperature]C and [max_temperature]C") @@ -736,7 +736,7 @@ var/env = params["env"] var/name = params["var"] - var/value = tgui_input_number(usr, "New [name] for [env]:", name, TLV[env][name]) + var/value = tgui_input_number(usr, "New [name] for [env]:", name, TLV[env][name], round_value = FALSE) if(!isnull(value) && !..()) if(value < 0) TLV[env][name] = -1 diff --git a/code/game/machinery/airconditioner_vr.dm b/code/game/machinery/airconditioner_vr.dm index 60104c83c80..9ee2ccca295 100644 --- a/code/game/machinery/airconditioner_vr.dm +++ b/code/game/machinery/airconditioner_vr.dm @@ -47,7 +47,7 @@ turn_off() return if(istype(I, /obj/item/device/multitool)) - var/new_temp = tgui_input_number(usr, "Input a new target temperature, in degrees C.","Target Temperature", 20) + var/new_temp = tgui_input_number(usr, "Input a new target temperature, in degrees C.","Target Temperature", convert_k2c(target_temp), round_value = FALSE) if(!Adjacent(user) || user.incapacitated()) return new_temp = convert_c2k(new_temp) @@ -157,4 +157,4 @@ #undef MODE_IDLE #undef MODE_HEATING -#undef MODE_COOLING \ No newline at end of file +#undef MODE_COOLING diff --git a/code/modules/reagents/machinery/distillery.dm b/code/modules/reagents/machinery/distillery.dm index 5966f415fd8..64475faa062 100644 --- a/code/modules/reagents/machinery/distillery.dm +++ b/code/modules/reagents/machinery/distillery.dm @@ -204,7 +204,7 @@ OutputBeaker = null if("adjust temp") - target_temp = tgui_input_number(usr, "Choose a target temperature.", "Temperature.", T20C) + target_temp = tgui_input_number(usr, "Choose a target temperature.", "Temperature.", T20C, round_value = FALSE) target_temp = CLAMP(target_temp, min_temp, max_temp) update_icon() diff --git a/code/modules/tgui/modules/overmap.dm b/code/modules/tgui/modules/overmap.dm index 2bdca28b939..af3f2b6c8f0 100644 --- a/code/modules/tgui/modules/overmap.dm +++ b/code/modules/tgui/modules/overmap.dm @@ -438,7 +438,7 @@ /* END ENGINES */ /* SENSORS */ if("range") - var/nrange = tgui_input_number(usr, "Set new sensors range", "Sensor range", sensors.range) + var/nrange = tgui_input_number(usr, "Set new sensors range", "Sensor range", sensors.range, round_value = FALSE) if(nrange) sensors.set_range(CLAMP(nrange, 1, world.view)) . = TRUE diff --git a/code/modules/tgui_input/number.dm b/code/modules/tgui_input/number.dm index dfcfc73570d..f45eaad5c03 100644 --- a/code/modules/tgui_input/number.dm +++ b/code/modules/tgui_input/number.dm @@ -15,7 +15,7 @@ * * timeout - The timeout of the number input, after which the modal will close and qdel itself. Set to zero for no timeout. * * round_value - whether the inputted number is rounded down into an integer. */ -/proc/tgui_input_number(mob/user, message, title = "Number Input", default = 0, max_value = INFINITY, min_value = -INFINITY, timeout = 0, round_value = FALSE) +/proc/tgui_input_number(mob/user, message, title = "Number Input", default = 0, max_value = INFINITY, min_value = -INFINITY, timeout = 0, round_value = TRUE, ui_state = GLOB.tgui_always_state) if (!user) user = usr if (!istype(user)) @@ -23,12 +23,16 @@ var/client/client = user user = client.mob else - return + return null + + if (isnull(user.client)) + return null + // Client does NOT have tgui_input on: Returns regular input if(!user.client.prefs.tgui_input_mode) var/input_number = input(user, message, title, default) as null|num return clamp(round_value ? round(input_number) : input_number, min_value, max_value) - var/datum/tgui_input_number/number_input = new(user, message, title, default, max_value, min_value, timeout, round_value) + var/datum/tgui_input_number/number_input = new(user, message, title, default, max_value, min_value, timeout, round_value, ui_state) number_input.tgui_interact(user) number_input.wait() if (number_input) @@ -62,14 +66,17 @@ var/timeout /// The title of the TGUI window var/title + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/tgui_state/state -/datum/tgui_input_number/New(mob/user, message, title, default, max_value, min_value, timeout, round_value) +/datum/tgui_input_number/New(mob/user, message, title, default, max_value, min_value, timeout, round_value, ui_state) src.default = default src.max_value = max_value src.message = message src.min_value = min_value src.title = title src.round_value = round_value + src.state = ui_state if (timeout) src.timeout = timeout start_time = world.time @@ -85,8 +92,9 @@ if(default > max_value) CRASH("Default value is greater than max value.") -/datum/tgui_input_number/Destroy(force, ...) +/datum/tgui_input_number/Destroy(force) SStgui.close_uis(src) + state = null return ..() /** @@ -108,7 +116,7 @@ closed = TRUE /datum/tgui_input_number/tgui_state(mob/user) - return GLOB.tgui_always_state + return state /datum/tgui_input_number/tgui_static_data(mob/user) var/list/data = list() @@ -119,6 +127,7 @@ data["min_value"] = min_value data["swapped_buttons"] = !user.client.prefs.tgui_swapped_buttons data["title"] = title + data["round_value"] = round_value return data /datum/tgui_input_number/tgui_data(mob/user) @@ -135,8 +144,7 @@ if("submit") if(!isnum(params["entry"])) CRASH("A non number was input into tgui input number by [usr]") - //var/choice = round_value ? round(params["entry"]) : params["entry"] - var/choice = params["entry"] + var/choice = round_value ? round(params["entry"]) : params["entry"] if(choice > max_value) CRASH("A number greater than the max value was input into tgui input number by [usr]") if(choice < min_value) diff --git a/tgui/packages/tgui/interfaces/NumberInputModal.tsx b/tgui/packages/tgui/interfaces/NumberInputModal.tsx index 5c4db255e76..6c5e4af7b7c 100644 --- a/tgui/packages/tgui/interfaces/NumberInputModal.tsx +++ b/tgui/packages/tgui/interfaces/NumberInputModal.tsx @@ -1,6 +1,6 @@ +import { KEY } from 'common/keys'; import { useState } from 'react'; -import { KEY_ENTER, KEY_ESCAPE } from '../../common/keycodes'; import { useBackend } from '../backend'; import { Box, Button, RestrictedInput, Section, Stack } from '../components'; import { Window } from '../layouts'; @@ -15,24 +15,21 @@ type NumberInputData = { min_value: number | null; timeout: number; title: string; + round_value: boolean; }; export const NumberInputModal = (props) => { const { act, data } = useBackend(); const { init_value, large_buttons, message = '', timeout, title } = data; const [input, setInput] = useState(init_value); - const onChange = (value: number) => { - if (value === input) { - return; - } - setInput(value); - }; - const onClick = (value: number) => { + + const setValue = (value: number) => { if (value === input) { return; } setInput(value); }; + // Dynamically changes the window height based on the message. const windowHeight = 140 + @@ -44,11 +41,10 @@ export const NumberInputModal = (props) => { {timeout && } { - const keyCode = window.event ? event.which : event.keyCode; - if (keyCode === KEY_ENTER) { + if (event.key === KEY.Enter) { act('submit', { entry: input }); } - if (keyCode === KEY_ESCAPE) { + if (event.key === KEY.Escape) { act('cancel'); } }} @@ -59,7 +55,7 @@ export const NumberInputModal = (props) => { {message} - + @@ -74,7 +70,7 @@ export const NumberInputModal = (props) => { /** Gets the user input and invalidates if there's a constraint. */ const InputArea = (props) => { const { act, data } = useBackend(); - const { min_value, max_value, init_value } = data; + const { min_value, max_value, init_value, round_value } = data; const { input, onClick, onChange } = props; return ( @@ -89,10 +85,10 @@ const InputArea = (props) => { onChange(value)}