Files
Aurora.3/code/modules/power/sensors/powernet_sensor.dm
Matt Atlas 31956c7eb0 Rock the UI Away - Removes VueUI and adds TGUI (#16509)
* 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>
2023-06-25 19:03:33 +02:00

188 lines
6.5 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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