mirror of
https://github.com/Citadel-Station-13/Citadel-Station-13-RP.git
synced 2026-08-20 14:06:41 +01:00
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>
112 lines
3.1 KiB
Plaintext
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
|