NanoUI power monitor/AI subsystem, mapfix

This commit is contained in:
Markolie
2015-08-03 03:38:38 +02:00
parent b1b2f4ae92
commit a2f8141036
11 changed files with 209 additions and 126 deletions
@@ -144,6 +144,7 @@
/obj/item/weapon/robot_module/engineering
name = "engineering robot module"
subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor)
stacktypes = list(
/obj/item/stack/sheet/metal = 50,
+20 -1
View File
@@ -3,6 +3,7 @@
var/datum/nano_module/alarm_monitor/all/alarm_monitor
var/datum/nano_module/atmos_control/atmos_control
var/datum/nano_module/crew_monitor/crew_monitor
var/datum/nano_module/power_monitor/silicon/power_monitor
/mob/living/silicon
var/list/silicon_subsystems = list(
@@ -13,7 +14,14 @@
silicon_subsystems = list(
/mob/living/silicon/proc/subsystem_alarm_monitor,
/mob/living/silicon/proc/subsystem_atmos_control,
/mob/living/silicon/proc/subsystem_crew_monitor
/mob/living/silicon/proc/subsystem_crew_monitor,
/mob/living/silicon/proc/subsystem_power_monitor
)
/mob/living/silicon/robot/drone
silicon_subsystems = list(
/mob/living/silicon/proc/subsystem_alarm_monitor,
/mob/living/silicon/proc/subsystem_power_monitor
)
/mob/living/silicon/robot/syndicate
@@ -23,6 +31,7 @@
alarm_monitor = new(src)
atmos_control = new(src)
crew_monitor = new(src)
power_monitor = new(src)
if(!register_alarms)
return
@@ -58,3 +67,13 @@
set name = "Crew Monitor"
crew_monitor.ui_interact(usr, state = self_state)
/********************
* Power Monitor *
********************/
/mob/living/silicon/proc/subsystem_power_monitor()
set category = "Subsystems"
set name = "Power Monitor"
power_monitor.ui_interact(usr, state = self_state)
+2 -1
View File
@@ -3,7 +3,8 @@
var/list/tracked = new
/datum/nano_module/crew_monitor/Topic(href, href_list)
if(..()) return
if(..())
return 1
var/turf/T = get_turf(nano_host())
if (!T || !(T.z in config.player_levels))
usr << "<span class='warning'>Unable to establish a connection<span>: You're too far away from the station!"
@@ -0,0 +1,64 @@
/datum/nano_module/power_monitor
name = "Power monitor"
var/select_monitor = 0
var/obj/machinery/computer/monitor/powermonitor
/datum/nano_module/power_monitor/silicon
select_monitor = 1
/datum/nano_module/power_monitor/New()
..()
if(!select_monitor)
powermonitor = nano_host()
/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"] = pMonData
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
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)
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
/datum/nano_module/power_monitor/Topic(href, href_list)
if(..())
return 1
if(href_list["selectmonitor"])
if(issilicon(usr))
powermonitor = locate(href_list["selectmonitor"])
return 1
if(href_list["return"])
if(issilicon(usr))
powermonitor = null
return 1