From 63f3e357442b6b5c60d575532dfe67422cdfcaac Mon Sep 17 00:00:00 2001
From: Kashargul <144968721+Kashargul@users.noreply.github.com>
Date: Mon, 9 Mar 2026 00:36:28 +0100
Subject: [PATCH] GPS to tgui (#19263)
* GPS to tgui
* dead code
* lol
* default should always work
---
code/game/objects/items/devices/gps.dm | 313 +++++++-----------
code/game/objects/items/stacks/nanopaste.dm | 2 +-
.../types/character/pai/01_basic.dm | 2 +-
code/modules/compass/compass_holder.dm | 2 +-
.../silicon/robot/robot_modules/event.dm | 5 +
.../silicon/robot/robot_modules/station.dm | 7 +-
.../silicon/robot/robot_modules/syndicate.dm | 5 +
.../living/silicon/robot/sprites/command.dm | 2 +
code/modules/telesci/gps_advanced.dm | 77 -----
.../tgui/interfaces/ColorPickerModal.tsx | 2 +-
tgui/packages/tgui/interfaces/Gps.tsx | 292 +++++++++++-----
.../PreferencesMenu/elements/ColorInput.tsx | 18 +-
.../VorePanelElements/VorePanelEditColor.tsx | 2 +-
.../styles/interfaces/ColorMatrixEditor.scss | 2 +-
.../tgui/styles/interfaces/VorePanel.scss | 18 +-
vorestation.dme | 1 -
16 files changed, 365 insertions(+), 385 deletions(-)
delete mode 100644 code/modules/telesci/gps_advanced.dm
diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm
index 7dce82f98da..7810336ec92 100644
--- a/code/game/objects/items/devices/gps.dm
+++ b/code/game/objects/items/devices/gps.dm
@@ -23,6 +23,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
var/list/tracking_devices
var/list/showing_tracked_names
var/obj/compass_holder/compass
+ var/theme
pickup_sound = 'sound/items/pickup/device.ogg'
drop_sound = 'sound/items/drop/device.ogg'
@@ -91,7 +92,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
return PROCESS_KILL
update_holder()
if(holder)
- update_compass(TRUE)
+ update_compass(src, TRUE)
/obj/item/gps/Destroy()
STOP_PROCESSING(SSobj, src)
@@ -115,7 +116,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
reachable_z_levels = reachable_z_levels || using_map.get_map_levels(origin.z, long_range)
return (target.z in reachable_z_levels)
-/obj/item/gps/proc/update_compass(var/update_compass_icon)
+/obj/item/gps/proc/update_compass(atom/movable/source, var/update_compass_icon)
SIGNAL_HANDLER
compass.hide_waypoints(FALSE)
var/turf/my_turf = get_turf(src)
@@ -157,10 +158,11 @@ GLOBAL_LIST_EMPTY(GPS_list)
if(!is_in_processing_list)
is_in_processing_list = TRUE
START_PROCESSING(SSobj, src)
+ update_compass(src, TRUE)
else
is_in_processing_list = FALSE
STOP_PROCESSING(SSobj, src)
- update_compass()
+ update_compass(src)
update_holder()
update_icon()
@@ -190,173 +192,149 @@ GLOBAL_LIST_EMPTY(GPS_list)
return TRUE
if(special_handling)
return FALSE
- display(user)
+
+ tgui_interact(user)
+
+/obj/item/gps/tgui_state(mob/user)
+ return GLOB.tgui_inventory_state
+
+/obj/item/gps/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui, custom_state)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "Gps", name)
+ ui.open()
+
+/obj/item/gps/tgui_static_data(mob/user)
+ . = ..()
+ var/robot_theme
+ if(isrobot(loc))
+ var/mob/living/silicon/robot/robot_owner = loc
+ robot_theme = robot_owner.get_ui_theme()
+ .["theme"] = theme || robot_theme
// Compiles all the data not available directly from the GPS
// Like the positions and directions to all other GPS units
-/obj/item/gps/proc/display_list()
- var/list/dat = list()
+/obj/item/gps/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
var/turf/curr = get_turf(src)
var/area/my_area = get_area(src)
- dat["my_area_name"] = strip_improper(my_area.name)
- dat["curr_x"] = curr.x
- dat["curr_y"] = curr.y
- dat["curr_z"] = curr.z
- dat["curr_z_name"] = strip_improper(using_map.get_zlevel_name(curr.z))
- dat["z_level_detection"] = using_map.get_map_levels(curr.z, long_range)
+ var/list/data = list(
+ "currentArea" = strip_improper(my_area.name),
+ "power" = tracking,
+ "tag" = gps_tag,
+ "localMode" = local_mode,
+ "currentCoords" = "[curr.x], [curr.y], [curr.z]",
+ "currentZName" = strip_improper(using_map.get_zlevel_name(curr.z)),
+ "canHide" = can_hide_signal,
+ "isHidden" = hide_signal
+ )
+ var/z_level_det = using_map.get_map_levels(curr.z, long_range)
var/list/gps_list = list()
- for(var/obj/item/gps/G in GLOB.GPS_list - src)
+ for(var/obj/item/gps/current_gps in GLOB.GPS_list - src)
- if(!can_track(G, dat["z_level_detection"]))
+ if(!can_track(current_gps, z_level_det))
continue
- var/gps_data[0]
- gps_data["ref"] = G
- gps_data["gps_tag"] = G.gps_tag
+ var/area/gps_area = get_area(current_gps)
+ var/turf/gps_turf = get_turf(current_gps)
- var/area/A = get_area(G)
- gps_data["area_name"] = strip_improper(A.get_name())
+ var/is_local = (curr.z == gps_turf.z)
+ var/dist = get_dist(curr, gps_turf)
+ var/is_poi = istype(current_gps, /obj/item/gps/internal/poi)
- var/turf/T = get_turf(G)
- gps_data["z_name"] = strip_improper(using_map.get_zlevel_name(T.z))
- gps_data["direction"] = get_adir(curr, T)
- gps_data["degrees"] = round(Get_Angle(curr,T))
- gps_data["distX"] = T.x - curr.x
- gps_data["distY"] = T.y - curr.y
- gps_data["distance"] = get_dist(curr, T)
- gps_data["local"] = (curr.z == T.z)
- gps_data["x"] = T.x
- gps_data["y"] = T.y
+ if(is_poi && is_local)
+ dist = round(dist, 10)
- gps_list[++gps_list.len] = gps_data
+ var/list/gps_data = list(
+ "ref" = "\ref[current_gps]",
+ "gpsTag" = current_gps.gps_tag,
+ "areaName" = strip_improper(gps_area.get_name()),
+ "zName" = strip_improper(using_map.get_zlevel_name(gps_turf.z)),
+ "local" = is_local,
+ "trackingColor" = LAZYACCESS(tracking_devices, "\ref[current_gps]"),
+ "trackingName" = LAZYACCESS(showing_tracked_names, "\ref[current_gps]"),
+ )
- dat["gps_list"] = gps_list
+ if(!is_poi || is_local)
+ gps_data["degrees"] = round(Get_Angle(curr, gps_turf))
+ gps_data["coords"] = "[gps_turf.x], [gps_turf.y], [gps_turf.z]"
+ gps_data["dist"] = dist
- return dat
+ UNTYPED_LIST_ADD(gps_list, gps_data)
-/obj/item/gps/proc/display(mob/user)
+ data["signals"] = gps_list
- if(emped)
- to_chat(user, span_warning("It's busted!"))
+ return data
+
+/obj/item/gps/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
+ . = ..()
+ if(.)
return
- var/list/dat = list()
- var/list/gps_data = display_list()
-
- dat += "
"
- if(!tracking)
- dat += " | \[Switch On\]
"
- else
- dat += " | \[Switch Off\]
"
- dat += "| Current location | [gps_data["my_area_name"]] | ([gps_data["curr_x"]], [gps_data["curr_y"]], [gps_data["curr_z_name"]]) |
"
- dat += "| [hide_signal ? "Tagged" : "Broadcasting"] as '[gps_tag]'. | "
- dat += "\[Change Tag\]\[Toggle Scan Range\][can_hide_signal ? "\[Toggle Signal Visibility\]":""] |
"
-
- var/list/gps_list = gps_data["gps_list"]
- if(gps_list.len)
- dat += "| Detected signals |
"
- for(var/gps in gps_data["gps_list"])
- dat += ""
- var/gps_ref = "\ref[gps["ref"]]"
- dat += "| [gps["gps_tag"]] | [gps["area_name"]] | "
-
- if(istype(gps_data["ref"], /obj/item/gps/internal/poi))
- dat += "[gps["local"] ? "[gps["direction"]] Dist: [round(gps["distance"], 10)]m" : "[gps["z_name"]]"] | "
- else
- dat += "([gps["x"]], [gps["y"]], [gps["z_name"]]) | "
-
- if(gps["local"])
- dat += "[gps["distance"]]m | [gps["direction"]] | "
- else
- dat += "Non-local signal. | "
-
- if(LAZYACCESS(tracking_devices, gps_ref))
- dat += "\[Stop Tracking\] \[Colour [color_square(hex = LAZYACCESS(tracking_devices, gps_ref))]\] Show/Hide Label | "
- else
- dat += "\[Start Tracking\] | "
- dat += "
"
- else
- dat += "| No other signals detected. |
"
- dat += "
"
-
- var/datum/browser/popup = new(user, "gps_\ref[src]", "Global Positioning System", 700, 1000)
- popup.set_content(dat.Join(null))
- popup.open()
-
-/obj/item/gps/Topic(var/href, var/list/href_list)
- if(..())
- return TRUE
-
- if(href_list["toggle_power"])
- toggle_tracking()
- . = TRUE
-
- if(href_list["track_label"])
- var/gps_ref = href_list["track_label"]
- var/obj/item/gps/gps = locate(gps_ref)
- if(istype(gps) && !QDELETED(gps) && !LAZYACCESS(showing_tracked_names, gps_ref))
- LAZYSET(showing_tracked_names, gps_ref, TRUE)
- else
+ switch(action)
+ if("power")
+ toggle_tracking()
+ return TRUE
+ if("rename")
+ var/new_name = sanitize(params["value"], 11)
+ if(!new_name)
+ return FALSE
+ gps_tag = uppertext(new_name)
+ name = "global positioning system ([gps_tag])"
+ return TRUE
+ if("localMode")
+ local_mode = !local_mode
+ return TRUE
+ if("hideSignal")
+ if(!can_hide_signal)
+ return FALSE
+ hide_signal = !hide_signal
+ return TRUE
+ if("trackLabel")
+ var/gps_ref = params["ref"]
+ if(!gps_ref)
+ return FALSE
+ var/obj/item/gps/gps = locate(gps_ref)
+ if(istype(gps) && !QDELETED(gps) && !LAZYACCESS(showing_tracked_names, gps_ref))
+ LAZYSET(showing_tracked_names, gps_ref, TRUE)
+ else
+ LAZYREMOVE(showing_tracked_names, gps_ref)
+ return TRUE
+ if("stopTrack")
+ var/gps_ref = params["ref"]
+ if(!gps_ref)
+ return FALSE
+ compass.clear_waypoint(gps_ref)
+ LAZYREMOVE(tracking_devices, gps_ref)
LAZYREMOVE(showing_tracked_names, gps_ref)
- to_chat(usr, span_notice("\The [src] is [LAZYACCESS(showing_tracked_names, gps_ref) ? "now showing" : "no longer showing"] labels for [gps.gps_tag]."))
-
- if(href_list["stop_track"])
- var/gps_ref = href_list["stop_track"]
- var/obj/item/gps/gps = locate(gps_ref)
- compass.clear_waypoint(gps_ref)
- LAZYREMOVE(tracking_devices, gps_ref)
- LAZYREMOVE(showing_tracked_names, gps_ref)
- if(istype(gps) && !QDELETED(gps))
- to_chat(usr, span_notice("\The [src] is no longer tracking [gps.gps_tag]."))
- update_compass()
- . = TRUE
-
- if(href_list["start_track"])
- var/gps_ref = href_list["start_track"]
- var/obj/item/gps/gps = locate(gps_ref)
- if(istype(gps) && !QDELETED(gps))
+ update_compass(src, TRUE)
+ return TRUE
+ if("startTrack")
+ var/gps_ref = params["ref"]
+ if(!gps_ref)
+ return FALSE
+ var/obj/item/gps/gps = locate(gps_ref)
+ if(!istype(gps) || QDELETED(gps))
+ return FALSE
LAZYSET(tracking_devices, gps_ref, "#00ffff")
LAZYSET(showing_tracked_names, gps_ref, TRUE)
- to_chat(usr, span_notice("\The [src] is now tracking [gps.gps_tag]."))
- update_compass()
- . = TRUE
-
- if(href_list["track_color"])
- var/obj/item/gps/gps = locate(href_list["track_color"])
- if(istype(gps) && !QDELETED(gps))
- var/new_colour = tgui_color_picker(usr, "Enter a new tracking color.", "GPS Waypoint Color")
- if(new_colour && istype(gps) && !QDELETED(gps) && holder == usr && !usr.incapacitated())
- to_chat(usr, span_notice("You adjust the colour \the [src] is using to highlight [gps.gps_tag]."))
- LAZYSET(tracking_devices, href_list["track_color"], new_colour)
- update_compass()
- . = TRUE
-
- if(href_list["tag"])
- var/a = tgui_input_text(usr, "Please enter desired tag.", name, gps_tag, 10)
- a = uppertext(copytext(a, 1, 11))
- if(in_range(src, usr))
- gps_tag = a
- name = "global positioning system ([gps_tag])"
- to_chat(usr, "You set your GPS's tag to '[gps_tag]'.")
- . = TRUE
-
- if(href_list["range"])
- local_mode = !local_mode
- to_chat(usr, "You set the signal receiver to [local_mode ? "'NARROW'" : "'BROAD'"].")
- . = TRUE
-
- if(href_list["hide"])
- if(!can_hide_signal)
- return
- hide_signal = !hide_signal
- to_chat(usr, "You set the device to [hide_signal ? "not " : ""]broadcast a signal while scanning for other signals.")
- . = TRUE
-
- if(. && loc == usr)
- display(usr)
+ update_compass(src, TRUE)
+ return TRUE
+ if("trackColor")
+ var/gps_ref = params["ref"]
+ if(!gps_ref)
+ return FALSE
+ var/obj/item/gps/gps = locate(gps_ref)
+ if(!istype(gps) || QDELETED(gps))
+ return FALSE
+ var/new_colour = sanitize_hexcolor(params["color"])
+ if(!new_colour)
+ return FALSE
+ LAZYSET(tracking_devices, gps_ref, new_colour)
+ update_compass(src, TRUE)
+ return TRUE
/obj/item/gps/on // Defaults to off to avoid polluting the signal list with a bunch of GPSes without owners. If you need to spawn active ones, use these.
tracking = TRUE
@@ -478,45 +456,4 @@ GLOBAL_LIST_EMPTY(GPS_list)
long_range = TRUE
hide_signal = TRUE
can_hide_signal = TRUE
-
-/obj/item/gps/syndie/display(mob/user)
-
- if(emped)
- to_chat(user, "It's busted!")
- return
-
- var/list/dat = list()
- var/list/gps_data = display_list()
-
- dat += ""
-
- var/datum/browser/popup = new(user, "gps_\ref[src]", "Global Positioning System", 700, 1000)
- popup.set_content(dat.Join(null))
- popup.open()
+ theme = "syndicate"
diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm
index 81542d566b7..b5254e4f6ed 100644
--- a/code/game/objects/items/stacks/nanopaste.dm
+++ b/code/game/objects/items/stacks/nanopaste.dm
@@ -14,7 +14,7 @@
/obj/item/stack/nanopaste/attack(mob/living/M as mob, mob/user as mob)
if (!istype(M) || !istype(user))
return 0
- if (istype(M,/mob/living/silicon/robot)) //Repairing cyborgs
+ if (istype(M,/mob/living/silicon/robot) && can_use(1)) //Repairing cyborgs
var/mob/living/silicon/robot/R = M
if (R.getBruteLoss() || R.getFireLoss())
if(do_after(user, 7 * toolspeed, target = R))
diff --git a/code/modules/client/preferences/types/character/pai/01_basic.dm b/code/modules/client/preferences/types/character/pai/01_basic.dm
index b5df4c5c040..e73672fbe6f 100644
--- a/code/modules/client/preferences/types/character/pai/01_basic.dm
+++ b/code/modules/client/preferences/types/character/pai/01_basic.dm
@@ -89,7 +89,7 @@
return PAI_DEFAULT_CHASSIS
/datum/preference/text/pai_chassis/is_valid(value)
- if(!(value in SSpai.get_chassis_list()))
+ if(!(value in SSpai.get_chassis_list()) && value != PAI_DEFAULT_CHASSIS)
return FALSE
. = ..()
diff --git a/code/modules/compass/compass_holder.dm b/code/modules/compass/compass_holder.dm
index d11ceb9e5fd..fa8e9c3e80b 100644
--- a/code/modules/compass/compass_holder.dm
+++ b/code/modules/compass/compass_holder.dm
@@ -61,7 +61,7 @@
rebuild_overlay_lists(TRUE)
/obj/compass_holder/Destroy()
- QDEL_NULL_LIST(compass_waypoints)
+ QDEL_LIST_ASSOC_VAL(compass_waypoints)
. = ..()
/obj/compass_holder/proc/get_heading()
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event.dm b/code/modules/mob/living/silicon/robot/robot_modules/event.dm
index 80da91bb609..04a5e5020d4 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/event.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/event.dm
@@ -36,6 +36,11 @@
src.modules += new /obj/item/dogborg/sleeper/lost(src)
src.modules += new /obj/item/dogborg/pounce(src)
+/obj/item/robot_module/robot/lost/adjust_gps(obj/item/gps/robot/robot_gps)
+ robot_gps.long_range = TRUE
+ robot_gps.hide_signal = TRUE
+ robot_gps.can_hide_signal = TRUE
+
/obj/item/robot_module/robot/gravekeeper
name = "gravekeeper robot module"
hide_on_manifest = TRUE
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
index e0e94f38fd5..6e246d4b7be 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
@@ -174,7 +174,9 @@
// Cyborgs (non-drones), default loadout. This will be given to every module.
/obj/item/robot_module/robot/create_equipment(var/mob/living/silicon/robot/robot)
..()
- src.modules += new /obj/item/gps/robot(src)
+ var/obj/item/gps/robot/robot_gps = new /obj/item/gps/robot(src)
+ adjust_gps(robot_gps)
+ src.modules += robot_gps
src.modules += new /obj/item/boop_module(src)
src.modules += new /obj/item/robot_tongue(src)
src.modules += new /obj/item/flash/robot(src)
@@ -184,6 +186,9 @@
src.modules += new /obj/item/gripper/scene(src)
src.modules += new /obj/item/robo_dice(src)
+/obj/item/robot_module/robot/proc/adjust_gps(obj/item/gps/robot/robot_gps)
+ return
+
/obj/item/robot_module/robot/standard
name = "standard robot module"
pto_type = PTO_CIVILIAN
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm
index 0329c48e8a9..bccf32c0db2 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm
@@ -38,6 +38,11 @@
id.forceMove(src)
src.modules += id
+/obj/item/robot_module/robot/syndicate/adjust_gps(obj/item/gps/robot/robot_gps)
+ robot_gps.long_range = TRUE
+ robot_gps.hide_signal = TRUE
+ robot_gps.can_hide_signal = TRUE
+
/obj/item/robot_module/robot/syndicate/Destroy()
src.modules -= id
id = null
diff --git a/code/modules/mob/living/silicon/robot/sprites/command.dm b/code/modules/mob/living/silicon/robot/sprites/command.dm
index 9802d54a107..367c336b85b 100644
--- a/code/modules/mob/living/silicon/robot/sprites/command.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/command.dm
@@ -65,11 +65,13 @@
has_eye_light_sprites = TRUE
/datum/robot_sprite/dogborg/tall/command
+ sprite_hud_icon_state = "clerical"
module_type = "Command"
sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi'
pixel_x = 0
/datum/robot_sprite/dogborg/raptor/command
+ sprite_hud_icon_state = "clerical"
module_type = "Command"
sprite_icon = 'icons/mob/robot/raptor.dmi'
diff --git a/code/modules/telesci/gps_advanced.dm b/code/modules/telesci/gps_advanced.dm
deleted file mode 100644
index 4375102d5dd..00000000000
--- a/code/modules/telesci/gps_advanced.dm
+++ /dev/null
@@ -1,77 +0,0 @@
-
-// DEPRECATED - The normal GPS has the advanced features, now. This is obsolete.
-
-// These are distinguished from the ordinary "Relay Position Devices" that just print your location
-// In that they are also all networked with each other to show each other's locations.
-/obj/item/gps/advanced
- name = "global positioning system"
- desc = "Helping lost spacemen find their way through the planets since 1995."
- icon = 'icons/obj/telescience.dmi'
- icon_state = "gps-c"
- w_class = ITEMSIZE_SMALL
- slot_flags = SLOT_BELT
- origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
- gps_tag = "COM0"
- emped = 0
-
- special_handling = TRUE
-
-/obj/item/gps/advanced/Initialize(mapload)
- . = ..()
- add_overlay("working")
-
-/obj/item/gps/advanced/emp_act(severity, recursive)
- emped = TRUE
- cut_overlay("working")
- add_overlay("emp")
- spawn(300)
- emped = FALSE
- cut_overlay("emp")
- add_overlay("working")
-
-/obj/item/gps/advanced/attack_self(mob/user)
- . = ..(user)
- if(.)
- return TRUE
-
- var/obj/item/gps/advanced/t = ""
- if(emped)
- t += "ERROR"
- else
- t += "
Set Tag "
- t += "
Tag: [gps_tag]"
-
- for(var/obj/item/gps/advanced/G in GLOB.GPS_list)
- var/turf/pos = get_turf(G)
- var/area/gps_area = get_area(G)
- var/tracked_gpstag = G.gps_tag
- if(G.emped == 1)
- t += "
[tracked_gpstag]: ERROR"
- else
- t += "
[tracked_gpstag]: [strip_improper(gps_area.name)] ([pos.x], [pos.y], [pos.z])"
-
- var/datum/browser/popup = new(user, "GPS", name, 600, 450)
- popup.set_content(t)
- popup.open()
-
-/obj/item/gps/advanced/Topic(href, href_list)
- ..()
- if(href_list["advtag"] )
- var/a = tgui_input_text(usr, "Please enter desired tag.", name, gps_tag, 4)
- a = uppertext(copytext(a, 1, 5))
- if(src.loc == usr)
- gps_tag = a
- name = "global positioning system ([gps_tag])"
- attack_self(usr)
-
-/obj/item/gps/advanced/science
- icon_state = "gps-s"
- gps_tag = "SCI0"
-
-/obj/item/gps/advanced/engineering
- icon_state = "gps-e"
- gps_tag = "ENG0"
-
-/obj/item/gps/advanced/security
- icon_state = "gps-sec"
- gps_tag = "SEC0"
diff --git a/tgui/packages/tgui/interfaces/ColorPickerModal.tsx b/tgui/packages/tgui/interfaces/ColorPickerModal.tsx
index 0b9dbf0ab0a..b6097f3cb93 100644
--- a/tgui/packages/tgui/interfaces/ColorPickerModal.tsx
+++ b/tgui/packages/tgui/interfaces/ColorPickerModal.tsx
@@ -260,7 +260,7 @@ const ColorPresets: React.FC = React.memo(
))}
- {!!onAllowEditing && (
+ {!!onAllowEditing && presetList?.length && (
+ }
>
- {power ? 'On' : 'Off'}
-
- }
- >
-
-
-
-
-
-
-
-
-
-
-
-
- {!!power && (
- <>
-
-
- {currentArea} ({currentCoords})
-
-
-
-
-
- Name
- Direction
- Coordinates
-
- {signals.map((signal, index) => (
-
+
+ act('rename', { value })}
+ value={tag}
+ />
+
+
+
+ {!!canHide && (
+
+
- ))}
-
+ {isHidden ? 'HIDDEN' : 'VISIBLE'}
+
+
+ )}
+
- >
- )}
+
+ {!!power && (
+ <>
+
+
+
+ {currentArea} ({currentCoords} | {currentZName})
+
+
+
+
+
+
+
+ Name
+ Options
+ Direction
+ Coordinates
+
+ {signals.length ? (
+ signals.map((signal, index) => (
+
+
+ {signal.gpsTag}
+
+
+ {signal.trackingColor ? (
+
+
+
+
+
+ act('trackColor', {
+ ref: signal.ref,
+ color: value,
+ })
+ }
+ />
+
+
+
+
+ ) : (
+
+ )}
+
+ {signal.local ? (
+
+ {signal.degrees !== undefined && (
+
+ )}
+ {signal.dist !== undefined && `${signal.dist}m`}
+
+ ) : (
+ Non-local
+ )}
+
+ {signal.coords} | {signal.zName}
+
+
+ ))
+ ) : (
+ <>
+
+
+
+ No signals detetcted.
+
+
+ >
+ )}
+
+
+
+ >
+ )}
+
);
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/elements/ColorInput.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/elements/ColorInput.tsx
index eaf5d15285a..5a9c8a0a72c 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/elements/ColorInput.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/elements/ColorInput.tsx
@@ -145,7 +145,7 @@ export const PreferenceEditColor = (
-
-
-
+ {!!tooltip && (
+
+
+
+ )}
);
};
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditColor.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditColor.tsx
index 575ede52072..54c8112fe09 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditColor.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditColor.tsx
@@ -168,7 +168,7 @@ export const VorePanelEditColor = (