diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm index 0e7f012576b..430f931ecb2 100644 --- a/code/game/machinery/computer/launchpad_control.dm +++ b/code/game/machinery/computer/launchpad_control.dm @@ -1,14 +1,13 @@ /obj/machinery/computer/launchpad - name = "\improper launchpad control console" + name = "launchpad control console" desc = "Used to teleport objects to and from a launchpad." icon_screen = "teleport" icon_keyboard = "teleport_key" circuit = /obj/item/circuitboard/computer/launchpad_console - ui_x = 350 - ui_y = 470 + ui_x = 475 + ui_y = 260 - var/screen = "select" //current UI view - var/obj/machinery/launchpad/current_pad //current pad viewed on the screen + var/selected_id var/list/obj/machinery/launchpad/launchpads var/maximum_pads = 4 @@ -62,154 +61,66 @@ /obj/machinery/computer/launchpad/ui_data(mob/user) var/list/data = list() - if(!LAZYLEN(launchpads)) - data["screen"] = "empty" - return data - else - data["screen"] = screen - - if(screen == "select") - var/list/pad_list = list() - for(var/i in 1 to LAZYLEN(launchpads)) - if(pad_exists(i)) - var/obj/machinery/launchpad/pad = get_pad(i) - var/list/this_pad = list() - this_pad["name"] = pad.display_name - this_pad["id"] = i - if(pad.stat & NOPOWER) - this_pad["inactive"] = TRUE - pad_list += list(this_pad) - else - launchpads -= get_pad(i) - data["launchpads"] = pad_list - else if(screen == "control") + var/list/pad_list = list() + for(var/i in 1 to LAZYLEN(launchpads)) + if(pad_exists(i)) + var/obj/machinery/launchpad/pad = get_pad(i) + var/list/this_pad = list() + this_pad["name"] = pad.display_name + this_pad["id"] = i + if(pad.stat & NOPOWER) + this_pad["inactive"] = TRUE + pad_list += list(this_pad) + else + launchpads -= get_pad(i) + data["launchpads"] = pad_list + data["selected_id"] = selected_id + if(selected_id) + var/obj/machinery/launchpad/current_pad = launchpads[selected_id] + data["x"] = current_pad.x_offset + data["y"] = current_pad.y_offset + data["pad_name"] = current_pad.display_name + data["range"] = current_pad.range + data["selected_pad"] = current_pad if(QDELETED(current_pad) || (current_pad.stat & NOPOWER)) data["pad_active"] = FALSE return data data["pad_active"] = TRUE - data["pad_name"] = current_pad.display_name - data["abs_x"] = abs(current_pad.x_offset) - data["abs_y"] = abs(current_pad.y_offset) - data["north_south"] = current_pad.y_offset > 0 ? "N":"S" - data["east_west"] = current_pad.x_offset > 0 ? "E":"W" return data /obj/machinery/computer/launchpad/ui_act(action, params) if(..()) return + var/obj/machinery/launchpad/current_pad = launchpads[selected_id] switch(action) - if("return") - screen = "select" - . = TRUE if("select_pad") - current_pad = get_pad(text2num(params["id"])) - screen = "control" + selected_id = text2num(params["id"]) . = TRUE - if("right") - if(!current_pad.teleporting) - if(current_pad.x_offset < current_pad.range) - current_pad.x_offset++ - current_pad.update_indicator() + if("set_pos") + var/new_x = text2num(params["x"]) + var/new_y = text2num(params["y"]) + current_pad.set_offset(new_x, new_y) . = TRUE - - if("left") - if(!current_pad.teleporting) - if(current_pad.x_offset > (current_pad.range * -1)) - current_pad.x_offset-- - current_pad.update_indicator() + if("move_pos") + var/plus_x = text2num(params["x"]) + var/plus_y = text2num(params["y"]) + current_pad.set_offset( + x = current_pad.x_offset + plus_x, + y = current_pad.y_offset + plus_y + ) . = TRUE - - if("up") - if(!current_pad.teleporting) - if(current_pad.y_offset < current_pad.range) - current_pad.y_offset++ - current_pad.update_indicator() - . = TRUE - - if("down") - if(!current_pad.teleporting) - if(current_pad.y_offset > (current_pad.range * -1)) - current_pad.y_offset-- - current_pad.update_indicator() - . = TRUE - - if("up-right") - if(!current_pad.teleporting) - if(current_pad.y_offset < current_pad.range) - current_pad.y_offset++ - if(current_pad.x_offset < current_pad.range) - current_pad.x_offset++ - current_pad.update_indicator() - . = TRUE - - if("up-left") - if(!current_pad.teleporting) - if(current_pad.y_offset < current_pad.range) - current_pad.y_offset++ - if(current_pad.x_offset > (current_pad.range * -1)) - current_pad.x_offset-- - current_pad.update_indicator() - . = TRUE - - if("down-right") - if(!current_pad.teleporting) - if(current_pad.y_offset > (current_pad.range * -1)) - current_pad.y_offset-- - if(current_pad.x_offset < current_pad.range) - current_pad.x_offset++ - current_pad.update_indicator() - . = TRUE - - if("down-left") - if(!current_pad.teleporting) - if(current_pad.y_offset > (current_pad.range * -1)) - current_pad.y_offset-- - if(current_pad.x_offset > (current_pad.range * -1)) - current_pad.x_offset-- - current_pad.update_indicator() - . = TRUE - - if("reset") - if(!current_pad.teleporting) - current_pad.y_offset = 0 - current_pad.x_offset = 0 - current_pad.update_indicator() - . = TRUE - - if("manual_x") - if(!current_pad.teleporting) - var/new_x = input("Set the X offset (Horizontal)","X Offset", current_pad.x_offset) as null|num - if(!isnull(new_x)) - new_x = CLAMP(new_x, current_pad.range * -1, current_pad.range) - . = TRUE - current_pad.x_offset = new_x - current_pad.update_indicator() - . = TRUE - - if("manual_y") - if(!current_pad.teleporting) - var/new_y = input("Set the Y offset (Vertical)","Y Offset", current_pad.y_offset) as null|num - if(!isnull(new_y)) - new_y = CLAMP(new_y, current_pad.range * -1, current_pad.range) - . = TRUE - current_pad.y_offset = new_y - current_pad.update_indicator() - . = TRUE - if("rename") . = TRUE - var/new_name = stripped_input(usr, "How do you want to rename the launchpad?", "Launchpad", current_pad.display_name, 15) + var/new_name = params["name"] if(!new_name) return current_pad.display_name = new_name - if("remove") - . = TRUE if(usr && alert(usr, "Are you sure?", "Unlink Launchpad", "I'm Sure", "Abort") != "Abort") launchpads -= current_pad - current_pad = null - + selected_id = null + . = TRUE if("launch") teleport(usr, current_pad, TRUE) . = TRUE diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index c49a117e684..4f51b5dea14 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -98,6 +98,15 @@ else holder.icon_state = null +/obj/machinery/launchpad/proc/set_offset(x, y) + if(teleporting) + return + if(!isnull(x)) + x_offset = CLAMP(x, -range, range) + if(!isnull(y)) + y_offset = CLAMP(y, -range, range) + update_indicator() + /obj/machinery/launchpad/proc/doteleport(mob/user, sending) if(teleporting) to_chat(user, "ERROR: Launchpad busy.") @@ -315,7 +324,7 @@ /obj/item/launchpad_remote/ui_interact(mob/user, ui_key = "launchpad_remote", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "launchpad_remote", "Briefcase Launchpad Remote", 550, 400, master_ui, state) //width, height + ui = new(user, src, ui_key, "launchpad_remote", "Briefcase Launchpad Remote", 300, 240, master_ui, state) //width, height ui.set_style("syndicate") ui.open() @@ -330,10 +339,9 @@ return data data["pad_name"] = pad.display_name - data["abs_x"] = abs(pad.x_offset) - data["abs_y"] = abs(pad.y_offset) - data["north_south"] = pad.y_offset > 0 ? "N":"S" - data["east_west"] = pad.x_offset > 0 ? "E":"W" + data["range"] = pad.range + data["x"] = pad.x_offset + data["y"] = pad.y_offset return data /obj/item/launchpad_remote/proc/teleport(mob/user, obj/machinery/launchpad/pad) @@ -349,94 +357,33 @@ if(..()) return switch(action) - if("right") - if(!pad.teleporting) - if(pad.x_offset < pad.range) - pad.x_offset++ - pad.update_indicator() + if("set_pos") + var/new_x = text2num(params["x"]) + var/new_y = text2num(params["y"]) + pad.set_offset(new_x, new_y) . = TRUE - - if("left") - if(!pad.teleporting) - if(pad.x_offset > (pad.range * -1)) - pad.x_offset-- - pad.update_indicator() + if("move_pos") + var/plus_x = text2num(params["x"]) + var/plus_y = text2num(params["y"]) + pad.set_offset( + x = pad.x_offset + plus_x, + y = pad.y_offset + plus_y + ) . = TRUE - - if("up") - if(!pad.teleporting) - if(pad.y_offset < pad.range) - pad.y_offset++ - pad.update_indicator() - . = TRUE - - if("down") - if(!pad.teleporting) - if(pad.y_offset > (pad.range * -1)) - pad.y_offset-- - pad.update_indicator() - . = TRUE - - if("up-right") - if(!pad.teleporting) - if(pad.y_offset < pad.range) - pad.y_offset++ - if(pad.x_offset < pad.range) - pad.x_offset++ - pad.update_indicator() - . = TRUE - - if("up-left") - if(!pad.teleporting) - if(pad.y_offset < pad.range) - pad.y_offset++ - if(pad.x_offset > (pad.range * -1)) - pad.x_offset-- - pad.update_indicator() - . = TRUE - - if("down-right") - if(!pad.teleporting) - if(pad.y_offset > (pad.range * -1)) - pad.y_offset-- - if(pad.x_offset < pad.range) - pad.x_offset++ - pad.update_indicator() - . = TRUE - - if("down-left") - if(!pad.teleporting) - if(pad.y_offset > (pad.range * -1)) - pad.y_offset-- - if(pad.x_offset > (pad.range * -1)) - pad.x_offset-- - pad.update_indicator() - . = TRUE - - if("reset") - if(!pad.teleporting) - pad.y_offset = 0 - pad.x_offset = 0 - pad.update_indicator() - . = TRUE - if("rename") . = TRUE - var/new_name = stripped_input(usr, "How do you want to rename the launchpad?", "Launchpad", pad.display_name, 15) + var/new_name = params["name"] if(!new_name) return pad.display_name = new_name - if("remove") . = TRUE if(usr && alert(usr, "Are you sure?", "Unlink Launchpad", "I'm Sure", "Abort") != "Abort") pad = null - if("launch") sending = TRUE teleport(usr, pad) . = TRUE - if("pull") sending = FALSE teleport(usr, pad) diff --git a/tgui-next/README.md b/tgui-next/README.md index 49083181d5a..a8435efc30a 100644 --- a/tgui-next/README.md +++ b/tgui-next/README.md @@ -610,6 +610,9 @@ dragging the input. - `stepPixelSize: number` (default: 1) - Screen distance mouse needs to travel to adjust value by one `step`. - `width: string|number` - Width of the element, in `Box` units or pixels. +- `height: string|numer` - Height of the element, in `Box` units or pixels. +- `lineHeight: string|number` - lineHeight of the element, in `Box` units or pixels. +- `fontSize: string|number` - fontSize of the element, in `Box` units or pixels. - `format: value => value` - Format value using this function before displaying it. - `suppressFlicker: number` - A number in milliseconds, for which the input diff --git a/tgui-next/packages/tgui/components/Button.js b/tgui-next/packages/tgui/components/Button.js index 031098efe13..7fc52ac6f2c 100644 --- a/tgui-next/packages/tgui/components/Button.js +++ b/tgui-next/packages/tgui/components/Button.js @@ -21,6 +21,8 @@ export const Button = props => { tooltipPosition, ellipsis, content, + iconRotation, + iconSpin, children, onclick, onClick, @@ -78,7 +80,7 @@ export const Button = props => { }} {...rest}> {icon && ( - + )} {content} {children} diff --git a/tgui-next/packages/tgui/components/NumberInput.js b/tgui-next/packages/tgui/components/NumberInput.js index 77525388ad7..52f6a878652 100644 --- a/tgui-next/packages/tgui/components/NumberInput.js +++ b/tgui-next/packages/tgui/components/NumberInput.js @@ -144,7 +144,10 @@ export class NumberInput extends Component { unit, minValue, maxValue, + height, width, + lineHeight, + fontSize, format, onChange, onDrag, @@ -178,6 +181,9 @@ export class NumberInput extends Component { className, ])} minWidth={width} + minHeight={height} + lineHeight={lineHeight} + fontSize={fontSize} onMouseDown={this.handleDragStart}>
{ if (!editing) { diff --git a/tgui-next/packages/tgui/interfaces/Launchpad.js b/tgui-next/packages/tgui/interfaces/Launchpad.js new file mode 100644 index 00000000000..e96ab310f85 --- /dev/null +++ b/tgui-next/packages/tgui/interfaces/Launchpad.js @@ -0,0 +1,278 @@ +import { Fragment } from 'inferno'; +import { useBackend } from '../backend'; +import { Button, LabeledList, Section, Grid, Box, Input, NoticeBox, Table, NumberInput } from '../components'; + +export const LaunchpadButtonPad = props => { + const { act } = useBackend(props); + + return ( + + +