mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 20:16:55 +01:00
Add caching to air alarms, apcs and power monitoring computers
This commit is contained in:
Vendored
+22
@@ -0,0 +1,22 @@
|
||||
var/global/datum/repository/air_alarm/air_alarm_repository = new()
|
||||
|
||||
/datum/repository/air_alarm/proc/air_alarm_data(var/list/monitored_alarms)
|
||||
var/alarms[0]
|
||||
|
||||
var/datum/cache_entry/cache_entry = cache_data
|
||||
if(!cache_entry)
|
||||
cache_entry = new/datum/cache_entry
|
||||
cache_data = cache_entry
|
||||
|
||||
if(world.time < cache_entry.timestamp)
|
||||
return cache_entry.data
|
||||
|
||||
for(var/obj/machinery/alarm/alarm in sortAtom((monitored_alarms.len ? monitored_alarms : machines)))
|
||||
if(!monitored_alarms.len && alarm.z != ZLEVEL_STATION && alarm.z != ZLEVEL_ASTEROID)
|
||||
continue
|
||||
alarms[++alarms.len] = alarm.get_nano_data_console()
|
||||
|
||||
cache_entry.timestamp = world.time + 10 SECONDS
|
||||
cache_entry.data = alarms
|
||||
return alarms
|
||||
|
||||
Vendored
+28
@@ -0,0 +1,28 @@
|
||||
var/global/datum/repository/apc/apc_repository = new()
|
||||
|
||||
/datum/repository/apc/proc/apc_data(var/obj/machinery/computer/monitor/powermonitor)
|
||||
var/apcData[0]
|
||||
|
||||
var/datum/cache_entry/cache_entry = cache_data
|
||||
if(!cache_entry)
|
||||
cache_entry = new/datum/cache_entry
|
||||
cache_data = cache_entry
|
||||
|
||||
if(world.time < cache_entry.timestamp)
|
||||
return cache_entry.data
|
||||
|
||||
if (powermonitor && !isnull(powermonitor.powernet))
|
||||
var/list/L = list()
|
||||
for(var/obj/machinery/power/terminal/term in powermonitor.powernet.nodes)
|
||||
if(istype(term.master, /obj/machinery/power/apc))
|
||||
var/obj/machinery/power/apc/A = term.master
|
||||
L += A
|
||||
|
||||
var/list/Status = list(0,0,1,1) // Status: off, auto-off, on, auto-on
|
||||
var/list/chg = list(0,1,1) // Charging: no, charging, full
|
||||
for(var/obj/machinery/power/apc/A in L)
|
||||
apcData[++apcData.len] = list("Name" = html_encode(A.area.name), "Equipment" = Status[A.equipment+1], "Lights" = Status[A.lighting+1], "Environment" = Status[A.environ+1], "CellPct" = A.cell ? round(A.cell.percent(),1) : -1, "CellStatus" = A.cell ? chg[A.charging+1] : 0)
|
||||
|
||||
cache_entry.timestamp = world.time + 5 SECONDS
|
||||
cache_entry.data = apcData
|
||||
return apcData
|
||||
Vendored
+6
@@ -0,0 +1,6 @@
|
||||
/datum/cache_entry
|
||||
var/timestamp
|
||||
var/data
|
||||
|
||||
/datum/repository
|
||||
var/cache_data
|
||||
@@ -1,12 +1,5 @@
|
||||
var/global/datum/repository/crew/crew_repository = new()
|
||||
|
||||
/datum/cache_entry
|
||||
var/timestamp
|
||||
var/data
|
||||
|
||||
/datum/repository/crew
|
||||
var/list/cache_data
|
||||
|
||||
/datum/repository/crew/New()
|
||||
cache_data = list()
|
||||
..()
|
||||
Vendored
+24
@@ -0,0 +1,24 @@
|
||||
var/global/datum/repository/powermonitor/powermonitor_repository = new()
|
||||
|
||||
/datum/repository/powermonitor/proc/powermonitor_data(var/refresh = 0)
|
||||
var/pMonData[0]
|
||||
|
||||
var/datum/cache_entry/cache_entry = cache_data
|
||||
if(!cache_entry)
|
||||
cache_entry = new/datum/cache_entry
|
||||
cache_data = cache_entry
|
||||
|
||||
if(!refresh)
|
||||
return cache_entry.data
|
||||
|
||||
for(var/obj/machinery/computer/monitor/pMon in world)
|
||||
if( !(pMon.stat & (NOPOWER|BROKEN)) )
|
||||
pMonData[++pMonData.len] = list ("Name" = pMon.name, "ref" = "\ref[pMon]")
|
||||
|
||||
cache_entry.timestamp = world.time //+ 30 SECONDS
|
||||
cache_entry.data = pMonData
|
||||
return pMonData
|
||||
|
||||
/datum/repository/powermonitor/proc/update_cache()
|
||||
return powermonitor_data(1)
|
||||
|
||||
@@ -14,9 +14,13 @@
|
||||
/obj/machinery/computer/monitor/New()
|
||||
power_monitor = new(src)
|
||||
powernet = find_powernet()
|
||||
|
||||
powermonitor_repository.update_cache()
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/monitor/Destroy()
|
||||
powermonitor_repository.update_cache()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/monitor/process()
|
||||
if(!powernet)
|
||||
powernet = find_powernet()
|
||||
|
||||
@@ -31,14 +31,7 @@
|
||||
|
||||
/datum/nano_module/atmos_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/master_ui = null, var/datum/topic_state/state = default_state)
|
||||
var/data[0]
|
||||
var/alarms[0]
|
||||
|
||||
// TODO: Move these to a cache, similar to cameras
|
||||
for(var/obj/machinery/alarm/alarm in sortAtom((monitored_alarms.len ? monitored_alarms : machines)))
|
||||
if(!monitored_alarms.len && alarm.z != ZLEVEL_STATION && alarm.z != ZLEVEL_ASTEROID)
|
||||
continue
|
||||
alarms[++alarms.len] = alarm.get_nano_data_console()
|
||||
data["alarms"] = alarms
|
||||
data["alarms"] = air_alarm_repository.air_alarm_data(monitored_alarms)
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if(!ui)
|
||||
|
||||
@@ -13,34 +13,17 @@
|
||||
|
||||
/datum/nano_module/power_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
|
||||
var/data[0]
|
||||
var/pMonData[0]
|
||||
var/apcData[0]
|
||||
|
||||
data["powermonitor"] = powermonitor
|
||||
if(select_monitor)
|
||||
data["select_monitor"] = 1
|
||||
for(var/obj/machinery/computer/monitor/pMon in world)
|
||||
if( !(pMon.stat & (NOPOWER|BROKEN)) )
|
||||
pMonData[++pMonData.len] = list ("Name" = pMon.name, "ref" = "\ref[pMon]")
|
||||
data["powermonitors"] = powermonitor_repository.powermonitor_data()
|
||||
|
||||
data["powermonitors"] = pMonData
|
||||
|
||||
if (powermonitor && !isnull(powermonitor.powernet))
|
||||
if (powermonitor && !isnull(powermonitor.powernet))
|
||||
data["poweravail"] = powermonitor.powernet.avail
|
||||
data["powerload"] = num2text(powermonitor.powernet.viewload,10)
|
||||
var/list/L = list()
|
||||
for(var/obj/machinery/power/terminal/term in powermonitor.powernet.nodes)
|
||||
if(istype(term.master, /obj/machinery/power/apc))
|
||||
var/obj/machinery/power/apc/A = term.master
|
||||
L += A
|
||||
|
||||
var/list/Status = list(0,0,1,1) // Status: off, auto-off, on, auto-on
|
||||
var/list/chg = list(0,1,1) // Charging: nope, charging, full
|
||||
for(var/obj/machinery/power/apc/A in L)
|
||||
apcData[++apcData.len] = list("Name" = html_encode(A.area.name), "Equipment" = Status[A.equipment+1], "Lights" = Status[A.lighting+1], "Environment" = Status[A.environ+1], "CellPct" = A.cell ? round(A.cell.percent(),1) : -1, "CellStatus" = A.cell ? chg[A.charging+1] : 0)
|
||||
|
||||
data["apcs"] = apcData
|
||||
|
||||
data["powerload"] = num2text(powermonitor.powernet.viewload,10)
|
||||
data["apcs"] = apc_repository.apc_data(powermonitor)
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "power_monitor.tmpl", "Power Monitoring Console", 800, 700, state = state)
|
||||
|
||||
+5
-1
@@ -174,7 +174,6 @@
|
||||
#include "code\datums\browser.dm"
|
||||
#include "code\datums\cargoprofile.dm"
|
||||
#include "code\datums\computerfiles.dm"
|
||||
#include "code\datums\crew.dm"
|
||||
#include "code\datums\datacore.dm"
|
||||
#include "code\datums\datumvars.dm"
|
||||
#include "code\datums\gas_mixture.dm"
|
||||
@@ -188,6 +187,11 @@
|
||||
#include "code\datums\spell.dm"
|
||||
#include "code\datums\supplypacks.dm"
|
||||
#include "code\datums\uplink_item.dm"
|
||||
#include "code\datums\cache\air_alarm.dm"
|
||||
#include "code\datums\cache\apc.dm"
|
||||
#include "code\datums\cache\cache.dm"
|
||||
#include "code\datums\cache\crew.dm"
|
||||
#include "code\datums\cache\powermonitor.dm"
|
||||
#include "code\datums\helper_datums\construction_datum.dm"
|
||||
#include "code\datums\helper_datums\events.dm"
|
||||
#include "code\datums\helper_datums\global_iterator.dm"
|
||||
|
||||
Reference in New Issue
Block a user