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 && (
-