mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-23 00:22:12 +00:00
* tgui the beginning * binaries and the like * Bring in the last of it * Example radio UI * delete example * NTOS Main Menu, start on manifest, tgui states * tasks.json * gunnery ui pt 1 * okay * fix everything * scss update * oops * manifest gigablast * downloader part 1 * download prt 2 * NTOSDownloader final * mfw committing to_worlds * gunnery console pt2 * i cooked * targeting (finished) * one vueui down * voting ui almost done * MY MIND FEELS LIKE AN ARCH ENEMYYYY * voting ui down * photocopier * ntos config + download fixes * photocopier 2 * refactor define * NTOS client manager + fixes * fax machine final (it also uses toner now) * marching forwards... left behind... * ntnrc part 1 * canister * add quotes * portable pumps pt1 + more backgrounds * oops * finish the portable pump * freezers so I'll keep on pushing forward... you haven't seen the last of me... oooooooh... * doors ui pt1 * finish doors UI (forgive me wildkins it's a bit of shitcode) * vitals monitor, make things use labeled lists, new backgrounds * mais j'envoyé aucun mayday... * maglock pt1 * pour ça je me suis perdu... * infrared * fix that * prox sensor pt1 * prox sensor * signaler (this was actually pretty hard) * atmos control pt1 * atmos control pt1.1 * atmos pt 2 * fuel injector * multitool UI * jammer * list viewer * APC * portgen * targeting console updates + SMES ui * new themes, shield generator * supermatter * Add ore detector and (shitty) NTNet Relay * orderterminal pt1 * orderterminal pt2 * smartfridge * Add (air-)tank GUI update ore detector size * Adds Transfer Valves * Add AtmoScrubber * analyzer pt1 * weapons analyzer pt2 * bodyscanner pt1 * bodyscanner pt2 * fix this shitcode * seed storage * appearance changer * appearance changer final * sleeper pt1 * sleeper * gps * vehicles * chem dispenser * lily request * holopad * tgui modules pt1 * ppanel * damage menu * fixes * im here too now * follow menu, search bars * quikpay * quikpay fixes * circuit printer * ppanel * ppanel updates * pai * turret controls (i want to kill myself) * tweak * remove the boardgame * guntracker * implant tracker * penal mechs come close to me, come close to me * chem codex * pai radio * doorjack * pai directives * signaler removal, sensors * ghost spawner * spawnpoint * fixes * teleporter * one more to the chopping block * account database * remove divider * scanner, atmos * latejoin ui pt1 * latejoin * records pt1 * RECORDS UI DONE * delete interpreter & records * CHAT FUCKING CLIENT * data updates * fix some things * final UI, log * basic nanoui fix * antag panel * remove vueui * atm update * vending update * warrants, cameras * ntmonitor * time comes for all * preserve this legacy * bring that back (oops) * rcon, ui auto update for computer UIs, remove rcon computers * alarm monitoring (a bit broke and also todo: add custom alarm monitoring programs to a few consoles) * A LIKE SUPREME * a * power monitor * lights on * fuck this code, fuck nanoui modules, and fuck nanoui * LEAVE IT OH SO FAR BEHIND * fix alarm monitoring for synths * I SAW IN YOU WHAT LIFE WAS MISSING * comms console * idcard and record updates * turn the light on * arcade * pt2 * news browser * static * crusher * f * COULD I JUST SLEIGH THE GOLD FROM THE BALLS? I'M SO FRUSTRATED OH COULD YOU TELL? IF I HEAR ONE MORE VUEUI OR ONE NANOUI I'M GONNA LOSE IT SO LET ME GOOOOOOOOOOOOOOOOO * codeowners & suit sensors * html ui style removal * make lint happy * resist and disorder * i slowly get up and turn off the noise, already fed up... * pleaseeeeeeeeeeeeeee * THE CREDIT LARP IS NECESSARY * i hold the keys * RISE UP * fix that? * harry's suggestions xoxo * runtime fix pt2 * You are the only thing that I still care about * adds build workflow * Update update_tgui.yml * adds some needed steps * ATM * misc fixes and tweaks * fixes 2 * make newscasters usable and fix use power on freezers * turret control is clearer --------- Co-authored-by: John Wildkins <john.wildkins@gmail.com> Co-authored-by: Matt Atlas <liermattia@gmail.com> Co-authored-by: harryob <55142896+harryob@users.noreply.github.com> Co-authored-by: Werner <Arrow768@users.noreply.github.com> Co-authored-by: Geeves <ggrobler447@gmail.com> Co-authored-by: harryob <me@harryob.live>
188 lines
6.5 KiB
Plaintext
188 lines
6.5 KiB
Plaintext
// POWERNET SENSOR
|
||
//
|
||
// Last Change 31.12.2014 by Atlantis
|
||
//
|
||
// Powernet sensors are devices which relay information about connected powernet. This information may be relayed
|
||
// via two procs. Proc return_reading_text will return fully HTML styled string which contains all information. This
|
||
// may be used in PDAs or similar applications. Second proc, return_reading_data will return list containing needed data.
|
||
// This is used in NanoUI, for example.
|
||
|
||
/obj/machinery/power/sensor
|
||
name = "Powernet Sensor"
|
||
desc = "Small machine which transmits data about specific powernet"
|
||
anchored = 1
|
||
density = 0
|
||
level = 1
|
||
icon = 'icons/obj/objects.dmi'
|
||
icon_state = "floor_beacon" // If anyone wants to make better sprite, feel free to do so without asking me.
|
||
|
||
var/name_tag = "#UNKN#" // ID tag displayed in list of powernet sensors. Each sensor should have it's own tag!
|
||
var/long_range = FALSE // If TRUE, sensor readings will show regardless of the zlevel being connected.
|
||
|
||
// Proc: New()
|
||
// Parameters: None
|
||
// Description: Automatically assigns name according to ID tag.
|
||
/obj/machinery/power/sensor/Initialize()
|
||
. = ..()
|
||
auto_set_name()
|
||
SSmachinery.all_sensors += src
|
||
|
||
/obj/machinery/power/sensor/Destroy()
|
||
. = ..()
|
||
SSmachinery.all_sensors -= src
|
||
|
||
// Proc: auto_set_name()
|
||
// Parameters: None
|
||
// Description: Sets name of this sensor according to the ID tag.
|
||
/obj/machinery/power/sensor/proc/auto_set_name()
|
||
name = "[name_tag] - Powernet Sensor"
|
||
|
||
// Proc: check_grid_warning()
|
||
// Parameters: None
|
||
// Description: Checks connected powernet for warnings. If warning is found returns 1
|
||
/obj/machinery/power/sensor/proc/check_grid_warning()
|
||
connect_to_network()
|
||
if(powernet)
|
||
if(powernet.problem)
|
||
return 1
|
||
return 0
|
||
|
||
// Proc: reading_to_text()
|
||
// Parameters: 1 (amount - Power in Watts to be converted to W, kW or MW)
|
||
// Description: Helper proc that converts reading in Watts to kW or MW (returns string version of amount parameter)
|
||
/obj/machinery/power/sensor/proc/reading_to_text(var/amount = 0)
|
||
var/units = ""
|
||
// 10kW and less - Watts
|
||
if(amount < 10000)
|
||
units = "W"
|
||
// 10MW and less - KiloWatts
|
||
else if(amount < 10000000)
|
||
units = "kW"
|
||
amount = (round(amount/100) / 10)
|
||
// More than 10MW - MegaWatts
|
||
else
|
||
units = "MW"
|
||
amount = (round(amount/10000) / 100)
|
||
if (units == "W")
|
||
return "[amount] W"
|
||
else
|
||
return "~[amount] [units]" //kW and MW are only approximate readings, therefore add "~"
|
||
|
||
// Proc: find_apcs()
|
||
// Parameters: None
|
||
// Description: Searches powernet for APCs and returns them in a list.
|
||
/obj/machinery/power/sensor/proc/find_apcs()
|
||
if(!powernet)
|
||
return
|
||
|
||
var/list/L = list()
|
||
for(var/obj/machinery/power/terminal/term in powernet.nodes)
|
||
if(istype(term.master, /obj/machinery/power/apc))
|
||
var/obj/machinery/power/apc/A = term.master
|
||
L += A
|
||
|
||
return L
|
||
|
||
|
||
// Proc: return_reading_text()
|
||
// Parameters: None
|
||
// Description: Generates string which contains HTML table with reading data.
|
||
/obj/machinery/power/sensor/proc/return_reading_text()
|
||
// No powernet. Try to connect to one first.
|
||
if(!powernet)
|
||
connect_to_network()
|
||
var/out = ""
|
||
if(!powernet) // No powernet.
|
||
out = "# SYSTEM ERROR - NO POWERNET #"
|
||
return out
|
||
|
||
|
||
var/list/L = find_apcs()
|
||
var/total_apc_load = 0
|
||
if(L.len <= 0) // No APCs found.
|
||
out = "<b>No APCs located in connected powernet!</b>"
|
||
else // APCs found. Create very ugly (but working!) HTML table.
|
||
|
||
out += "<table><tr><th>Name<th>EQUIP<th>LIGHT<th>ENVIRON<th>CELL<th>LOAD"
|
||
|
||
// These lists are used as replacement for number based APC settings
|
||
var/list/S = list("M-OFF","A-OFF","M-ON", "A-ON")
|
||
var/list/chg = list("N","C","F")
|
||
|
||
// Split to multiple lines to make it more readable
|
||
for(var/obj/machinery/power/apc/A in L)
|
||
out += "<tr><td>\The [A.area]" // Add area name
|
||
out += "<td>[S[A.equipment+1]]<td>[S[A.lighting+1]]<td>[S[A.environ+1]]" // Show status of channels
|
||
if(A.cell)
|
||
out += "<td>[round(A.cell.percent())]% - [chg[A.charging+1]]"
|
||
else
|
||
out += "<td>NO CELL"
|
||
var/load = A.lastused_total // Load.
|
||
total_apc_load += load
|
||
load = reading_to_text(load)
|
||
out += "<td>[load]"
|
||
|
||
out += "<br><b>TOTAL AVAILABLE: [reading_to_text(powernet.avail)]</b>"
|
||
out += "<br><b>APC LOAD: [reading_to_text(total_apc_load)]</b>"
|
||
out += "<br><b>OTHER LOAD: [reading_to_text(max(powernet.load - total_apc_load, 0))]</b>"
|
||
out += "<br><b>TOTAL GRID LOAD: [reading_to_text(powernet.viewload)] ([round((powernet.load / powernet.avail) * 100)]%)</b>"
|
||
|
||
if(powernet.problem)
|
||
out += "<br><b>WARNING: Abnormal grid activity detected!</b>"
|
||
return out
|
||
|
||
// Proc: return_reading_data()
|
||
// Parameters: None
|
||
// Description: Generates list containing all powernet data. Optimised for usage with NanoUI
|
||
/obj/machinery/power/sensor/proc/return_reading_data()
|
||
// No powernet. Try to connect to one first.
|
||
if(!powernet)
|
||
connect_to_network()
|
||
var/list/data = list()
|
||
data["name"] = name_tag
|
||
if(!powernet)
|
||
data["error"] = "# SYSTEM ERROR - NO POWERNET #"
|
||
data["alarm"] = 0 // Runtime Prevention
|
||
return data
|
||
|
||
var/list/L = find_apcs()
|
||
var/total_apc_load = 0
|
||
var/list/APC_data = list()
|
||
if(L.len > 0)
|
||
// These lists are used as replacement for number based APC settings
|
||
var/list/S = list("M-OFF","A-OFF","M-ON", "A-ON")
|
||
var/list/chg = list("N","C","F")
|
||
|
||
for(var/obj/machinery/power/apc/A in L)
|
||
var/list/APC_entry = list()
|
||
// Channel Statuses
|
||
APC_entry["s_equipment"] = S[A.equipment+1]
|
||
APC_entry["s_lighting"] = S[A.lighting+1]
|
||
APC_entry["s_environment"] = S[A.environ+1]
|
||
// Cell Status
|
||
APC_entry["cell_charge"] = A.cell ? round(A.cell.percent()) : 0
|
||
APC_entry["cell_status"] = A.cell ? chg[A.charging+1] : 0
|
||
// Other info
|
||
APC_entry["total_load"] = reading_to_text(A.lastused_total)
|
||
// Hopefully removes those goddamn \improper s which are screwing up the UI
|
||
var/N = A.area.name
|
||
if(findtext(N, "<22>"))
|
||
N = copytext(N, 3)
|
||
APC_entry["name"] = N
|
||
// Add data into main list of APC data.
|
||
APC_data += list(APC_entry)
|
||
// Add load of this APC to total APC load calculation
|
||
total_apc_load += A.lastused_total
|
||
data["apc_data"] = APC_data
|
||
data["total_avail"] = reading_to_text(max(powernet.avail, 0))
|
||
data["total_used_apc"] = reading_to_text(max(total_apc_load, 0))
|
||
data["total_used_other"] = reading_to_text(max(powernet.viewload - total_apc_load, 0))
|
||
data["total_used_all"] = reading_to_text(max(powernet.viewload, 0))
|
||
// Prevents runtimes when avail is 0 (division by zero)
|
||
if(powernet.avail)
|
||
data["load_percentage"] = round((powernet.viewload / powernet.avail) * 100)
|
||
else
|
||
data["load_percentage"] = 100
|
||
data["alarm"] = powernet.problem ? 1 : 0
|
||
return data
|