Files
4ab234f10c maploader / overmaps update - struct system, overmaps location bindings, misc backend improvements (#6403)
tl;dr level collections that can easily be logically restructured/moved
as necessary

will eventually be used for radio and overmaps location resolution.

this is the last part of
https://github.com/Citadel-Station-13/Citadel-Station-13-RP/pull/4841
that has not yet been integrated.
this will be a draft for a while.

---------

Co-authored-by: LetterN <24603524+LetterN@users.noreply.github.com>
2025-11-06 17:49:23 -08:00

112 lines
3.1 KiB
Plaintext

/datum/computer_file/program/fission_monitor
filename = "fismon"
filedesc = "Fission Monitoring"
nanomodule_path = /datum/nano_module/fission_monitor/
program_icon_state = "smmon_0"
program_key_state = "tech_key"
program_menu_icon = "notice"
extended_desc = "This program connects to specially calibrated sensors to provide information on the status of a fission core."
ui_header = "smmon_0.gif"
required_access = ACCESS_ENGINEERING_MAIN
requires_ntnet = 1
network_destination = "fission monitoring system"
size = 5
var/last_status = 0
/datum/computer_file/program/fission_monitor/process_tick()
..()
var/datum/nano_module/fission_monitor/NMS = NM
var/new_status = istype(NMS) ? NMS.get_status() : 0
if(last_status != new_status)
last_status = new_status
ui_header = "smmon_[last_status].gif"
program_icon_state = "smmon_[last_status]"
if(istype(computer))
computer.update_icon()
/datum/nano_module/fission_monitor
name = "Fission monitor"
var/list/fissioncores
var/obj/machinery/power/fission/active = null // Currently selected fission core.
/datum/nano_module/fission_monitor/Destroy()
. = ..()
active = null
fissioncores = null
/datum/nano_module/fission_monitor/New()
..()
refresh()
// Refreshes list of active fission cores
/datum/nano_module/fission_monitor/proc/refresh()
fissioncores = list()
var/z = get_z(nano_host())
if(!z)
return
var/valid_z_levels = (LEGACY_MAP_DATUM).get_map_levels(z)
for(var/obj/machinery/power/fission/F in GLOB.machines)
// Unsecured, blown up, not within coverage, not on a tile.
if(!F.anchored || F.exploded || !(F.z in valid_z_levels) || !istype(F.loc, /turf/))
continue
fissioncores.Add(F)
if(!(active in fissioncores))
active = null
/datum/nano_module/fission_monitor/proc/get_status()
. = FALSE
for(var/obj/machinery/power/fission/F in fissioncores)
if(F.anchored && F.powered())
. = TRUE
break
/datum/nano_module/fission_monitor/nano_ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
var/list/data = host.initial_nano_data()
if(istype(active) && active.anchored)
data = data + active.ui_data(TRUE)
data["active"] = 1
else
var/list/FCS = list()
for(var/obj/machinery/power/fission/F in fissioncores)
var/area/A = get_area(F)
if(!A)
fissioncores = fissioncores - F
continue
FCS.Add(list(list(
"area_name" = A.name,
"core_temp" = round(F.temperature),
"uid" = F.uid
)))
data["active"] = 0
data["fissioncores"] = FCS
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "fission_monitor_prog.tmpl", "Nuclear Fission Core", 500, 600, state = state)
if(host.update_layout())
ui.auto_update_layout = 1
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
/datum/nano_module/fission_monitor/Topic(href, href_list)
if(..())
return 1
if( href_list["clear"] )
active = null
return 1
if( href_list["refresh"] )
refresh()
return 1
if( href_list["set"] )
var/newuid = text2num(href_list["set"])
for(var/obj/machinery/power/fission/F in fissioncores)
if(F.uid == newuid)
active = F
return 1