NanoUI sources can now be datums instead of atom/movable.

Also accidentally fixes #7042 as the AI no longer cares about the machinery var.
This commit is contained in:
PsiOmegaDelta
2015-06-08 17:00:11 +02:00
parent 8d92b6cbe6
commit 20542bf84b
21 changed files with 89 additions and 95 deletions

View File

@@ -13,7 +13,7 @@
circuit = /obj/item/weapon/circuitboard/rcon_console
req_one_access = list(access_engine)
var/current_tag = null
var/obj/nano_module/rcon/rcon
var/datum/nano_module/rcon/rcon
/obj/machinery/computer/rcon/New()
..()

View File

@@ -12,7 +12,7 @@
circuit = "/obj/item/weapon/circuitboard/atmoscontrol"
req_access = list(access_ce)
var/list/monitored_alarm_ids = null
var/obj/nano_module/atmos_control/atmos_control
var/datum/nano_module/atmos_control/atmos_control
/obj/machinery/computer/atmoscontrol/New()
..()

View File

@@ -7,7 +7,7 @@
idle_power_usage = 250
active_power_usage = 500
circuit = "/obj/item/weapon/circuitboard/crew"
var/obj/nano_module/crew_monitor/crew_monitor
var/datum/nano_module/crew_monitor/crew_monitor
/obj/machinery/computer/crew/New()
crew_monitor = new(src)

View File

@@ -5,15 +5,15 @@
icon_state = "alert:0"
light_color = "#e6ffff"
circuit = /obj/item/weapon/circuitboard/stationalert_engineering
var/obj/nano_module/alarm_monitor/alarm_monitor
var/monitor_type = /obj/nano_module/alarm_monitor/engineering
var/datum/nano_module/alarm_monitor/alarm_monitor
var/monitor_type = /datum/nano_module/alarm_monitor/engineering
/obj/machinery/computer/station_alert/security
monitor_type = /obj/nano_module/alarm_monitor/security
monitor_type = /datum/nano_module/alarm_monitor/security
circuit = /obj/item/weapon/circuitboard/stationalert_security
/obj/machinery/computer/station_alert/all
monitor_type = /obj/nano_module/alarm_monitor/all
monitor_type = /datum/nano_module/alarm_monitor/all
circuit = /obj/item/weapon/circuitboard/stationalert_all
/obj/machinery/computer/station_alert/New()

View File

@@ -14,7 +14,7 @@
if(shattered) return
if(ishuman(user))
var/obj/nano_module/appearance_changer/AC = ui_users[user]
var/datum/nano_module/appearance_changer/AC = ui_users[user]
if(!AC)
AC = new(src, user)
AC.name = "SalonPro Nano-Mirror(TM)"

View File

@@ -735,7 +735,7 @@ var/list/admin_verbs_mentor = list(
var/mob/living/silicon/S = input("Select silicon.", "Manage Silicon Laws") as null|anything in silicon_mob_list
if(!S) return
var/obj/nano_module/law_manager/L = new(S)
var/datum/nano_module/law_manager/L = new(S)
L.ui_interact(usr, state = admin_state)
admin_log_and_message_admins("has opened [S]'s law manager.")
feedback_add_details("admin_verb","MSL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!

View File

@@ -1,5 +1,5 @@
/mob/living/carbon/human/proc/change_appearance(var/flags = APPEARANCE_ALL_HAIR, var/location = src, var/mob/user = src, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list(), var/datum/topic_state/state = default_state)
var/obj/nano_module/appearance_changer/AC = new(location, src, check_species_whitelist, species_whitelist, species_blacklist)
var/datum/nano_module/appearance_changer/AC = new(location, src, check_species_whitelist, species_whitelist, species_blacklist)
AC.flags = flags
AC.ui_interact(user, state = state)

View File

@@ -20,10 +20,6 @@
if(!psupply)
create_powersupply()
if (src.machine)
if (!( src.machine.check_eye(src) ))
src.reset_view(null)
// Handle power damage (oxy)
if(aiRestorePowerRoutine != 0 && !APU_power)
// Lose power

View File

@@ -1,11 +1,11 @@
/mob/living/silicon
var/register_alarms = 1
var/obj/nano_module/alarm_monitor/all/alarm_monitor
var/obj/nano_module/atmos_control/atmos_control
var/obj/nano_module/crew_monitor/crew_monitor
var/obj/nano_module/law_manager/law_manager
var/obj/nano_module/power_monitor/power_monitor
var/obj/nano_module/rcon/rcon
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/law_manager/law_manager
var/datum/nano_module/power_monitor/power_monitor
var/datum/nano_module/rcon/rcon
/mob/living/silicon
var/list/silicon_subsystems = list(

View File

@@ -1,7 +1,7 @@
/atom/proc/nano_host()
/datum/proc/nano_host()
return src
/atom/proc/CanUseTopic(var/mob/user, var/datum/topic_state/state)
/datum/proc/CanUseTopic(var/mob/user, var/datum/topic_state/state)
var/src_object = nano_host()
return state.can_use_topic(src_object, user)

View File

@@ -1,50 +1,50 @@
/obj/nano_module/alarm_monitor
/datum/nano_module/alarm_monitor
name = "Alarm monitor"
var/list_cameras = 0 // Whether or not to list camera references. A future goal would be to merge this with the enginering/security camera console. Currently really only for AI-use.
var/list/datum/alarm_handler/alarm_handlers // The particular list of alarm handlers this alarm monitor should present to the user.
/obj/nano_module/alarm_monitor/all/New()
/datum/nano_module/alarm_monitor/all/New()
..()
alarm_handlers = alarm_manager.all_handlers
/obj/nano_module/alarm_monitor/engineering/New()
/datum/nano_module/alarm_monitor/engineering/New()
..()
alarm_handlers = list(atmosphere_alarm, fire_alarm, power_alarm)
/obj/nano_module/alarm_monitor/security/New()
/datum/nano_module/alarm_monitor/security/New()
..()
alarm_handlers = list(camera_alarm, motion_alarm)
/obj/nano_module/alarm_monitor/proc/register(var/object, var/procName)
/datum/nano_module/alarm_monitor/proc/register(var/object, var/procName)
for(var/datum/alarm_handler/AH in alarm_handlers)
AH.register(object, procName)
/obj/nano_module/alarm_monitor/proc/unregister(var/object)
/datum/nano_module/alarm_monitor/proc/unregister(var/object)
for(var/datum/alarm_handler/AH in alarm_handlers)
AH.unregister(object)
/obj/nano_module/alarm_monitor/proc/all_alarms()
/datum/nano_module/alarm_monitor/proc/all_alarms()
var/list/all_alarms = new()
for(var/datum/alarm_handler/AH in alarm_handlers)
all_alarms += AH.alarms
return all_alarms
/obj/nano_module/alarm_monitor/proc/major_alarms()
/datum/nano_module/alarm_monitor/proc/major_alarms()
var/list/all_alarms = new()
for(var/datum/alarm_handler/AH in alarm_handlers)
all_alarms += AH.major_alarms()
return all_alarms
/obj/nano_module/alarm_monitor/proc/minor_alarms()
/datum/nano_module/alarm_monitor/proc/minor_alarms()
var/list/all_alarms = new()
for(var/datum/alarm_handler/AH in alarm_handlers)
all_alarms += AH.minor_alarms()
return all_alarms
/obj/nano_module/alarm_monitor/ai/Topic(ref, href_list)
/datum/nano_module/alarm_monitor/ai/Topic(ref, href_list)
if(..())
return 1
if(href_list["switchTo"])
@@ -56,7 +56,7 @@
usr.switch_to_camera(C)
return 1
/obj/nano_module/alarm_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
/datum/nano_module/alarm_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/categories[0]

View File

@@ -1,16 +1,14 @@
/obj/nano_module/atmos_control
/datum/nano_module/atmos_control
name = "Atmospherics Control"
var/ui_ref
var/obj/access = new()
var/emagged = 0
var/ui_ref
var/list/monitored_alarms = list()
var/datum/topic_state/atmos_state
/obj/nano_module/atmos_control/New(atmos_computer, req_access, req_one_access, monitored_alarm_ids)
/datum/nano_module/atmos_control/New(atmos_computer, req_access, req_one_access, monitored_alarm_ids)
..()
loc = atmos_computer
src.req_access = req_access
src.req_one_access = req_one_access
atmos_state = default_state
access.req_access = req_access
access.req_one_access = req_one_access
if(monitored_alarm_ids)
for(var/obj/machinery/alarm/alarm in machines)
@@ -19,7 +17,7 @@
// machines may not yet be ordered at this point
monitored_alarms = dd_sortedObjectList(monitored_alarms)
/obj/nano_module/atmos_control/Topic(href, href_list)
/datum/nano_module/atmos_control/Topic(href, href_list)
if(..())
return 1
@@ -31,7 +29,7 @@
alarm.ui_interact(usr, master_ui = ui_ref, state = TS)
return 1
/obj/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)
/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]
@@ -48,15 +46,15 @@
ui.set_auto_update(1)
ui_ref = ui
/obj/nano_module/atmos_control/proc/generate_state(air_alarm)
/datum/nano_module/atmos_control/proc/generate_state(air_alarm)
var/datum/topic_state/air_alarm/state = new()
state.atmos_control = src
state.air_alarm = air_alarm
return state
/datum/topic_state/air_alarm
var/obj/nano_module/atmos_control/atmos_control = null
var/obj/machinery/alarm/air_alarm = null
var/datum/nano_module/atmos_control/atmos_control = null
var/obj/machinery/alarm/air_alarm = null
/datum/topic_state/air_alarm/can_use_topic(var/src_object, var/mob/user)
if(has_access(user))
@@ -71,4 +69,4 @@
return extra_href
/datum/topic_state/air_alarm/proc/has_access(var/mob/user)
return user && (user.isAI() || atmos_control.allowed(user) || atmos_control.emagged || air_alarm.rcon_setting == RCON_YES || (air_alarm.alarm_area.atmosalm && air_alarm.rcon_setting == RCON_AUTO))
return user && (user.isAI() || atmos_control.access.allowed(user) || atmos_control.emagged || air_alarm.rcon_setting == RCON_YES || (air_alarm.alarm_area.atmosalm && air_alarm.rcon_setting == RCON_AUTO))

View File

@@ -1,8 +1,8 @@
/obj/nano_module/crew_monitor
/datum/nano_module/crew_monitor
name = "Crew monitor"
var/list/tracked = new
/obj/nano_module/crew_monitor/Topic(href, href_list)
/datum/nano_module/crew_monitor/Topic(href, href_list)
if(..()) return
var/turf/T = get_turf(src)
if (!T || !(T.z in config.player_levels))
@@ -14,9 +14,6 @@
usr.unset_machine()
ui.close()
return 0
if(href_list["update"])
src.updateDialog()
return 1
if(href_list["track"])
if(usr.isAI())
var/mob/living/silicon/ai/AI = usr
@@ -25,7 +22,7 @@
AI.ai_actual_track(H)
return 1
/obj/nano_module/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
/datum/nano_module/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
user.set_machine(src)
src.scan()
@@ -87,7 +84,7 @@
// should make the UI auto-update; doesn't seem to?
ui.set_auto_update(1)
/obj/nano_module/crew_monitor/proc/scan()
/datum/nano_module/crew_monitor/proc/scan()
for(var/mob/living/carbon/human/H in mob_list)
if(istype(H.w_uniform, /obj/item/clothing/under))
var/obj/item/clothing/under/C = H.w_uniform

View File

@@ -1,6 +1,6 @@
/obj/nano_module/appearance_changer
/datum/nano_module/appearance_changer
name = "Appearance Editor"
flags = APPEARANCE_ALL_HAIR
var/flags = APPEARANCE_ALL_HAIR
var/mob/living/carbon/human/owner = null
var/list/valid_species = list()
var/list/valid_hairstyles = list()
@@ -10,15 +10,14 @@
var/list/whitelist
var/list/blacklist
/obj/nano_module/appearance_changer/New(var/location, var/mob/living/carbon/human/H, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list())
/datum/nano_module/appearance_changer/New(var/location, var/mob/living/carbon/human/H, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list())
..()
loc = location
owner = H
src.check_whitelist = check_species_whitelist
src.whitelist = species_whitelist
src.blacklist = species_blacklist
/obj/nano_module/appearance_changer/Topic(ref, href_list, var/nowindow, var/datum/topic_state/state = default_state)
/datum/nano_module/appearance_changer/Topic(ref, href_list, var/nowindow, var/datum/topic_state/state = default_state)
if(..())
return 1
@@ -91,7 +90,7 @@
return 0
/obj/nano_module/appearance_changer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
/datum/nano_module/appearance_changer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
generate_data(check_whitelist, whitelist, blacklist)
var/data[0]
@@ -128,31 +127,31 @@
data["change_facial_hair_color"] = can_change(APPEARANCE_FACIAL_HAIR_COLOR)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "appearance_changer.tmpl", "[src.name]", 800, 450, state = state)
ui = new(user, src, ui_key, "appearance_changer.tmpl", "[src]", 800, 450, state = state)
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
/obj/nano_module/appearance_changer/proc/update_dna()
/datum/nano_module/appearance_changer/proc/update_dna()
if(owner && (flags & APPEARANCE_UPDATE_DNA))
owner.update_dna()
/obj/nano_module/appearance_changer/proc/can_change(var/flag)
/datum/nano_module/appearance_changer/proc/can_change(var/flag)
return owner && (flags & flag)
/obj/nano_module/appearance_changer/proc/can_change_skin_tone()
/datum/nano_module/appearance_changer/proc/can_change_skin_tone()
return owner && (flags & APPEARANCE_SKIN) && owner.species.flags & HAS_SKIN_TONE
/obj/nano_module/appearance_changer/proc/can_change_skin_color()
/datum/nano_module/appearance_changer/proc/can_change_skin_color()
return owner && (flags & APPEARANCE_SKIN) && owner.species.flags & HAS_SKIN_COLOR
/obj/nano_module/appearance_changer/proc/cut_and_generate_data()
/datum/nano_module/appearance_changer/proc/cut_and_generate_data()
// Making the assumption that the available species remain constant
valid_facial_hairstyles.Cut()
valid_facial_hairstyles.Cut()
generate_data()
/obj/nano_module/appearance_changer/proc/generate_data()
/datum/nano_module/appearance_changer/proc/generate_data()
if(!valid_species.len)
valid_species = owner.generate_valid_species(check_whitelist, whitelist, blacklist)
if(!valid_hairstyles.len || !valid_facial_hairstyles.len)

View File

@@ -1,6 +1,5 @@
/obj/nano_module/law_manager
/datum/nano_module/law_manager
name = "Law manager"
var/ion_law = "IonLaw"
var/zeroth_law = "ZerothLaw"
var/inherent_law = "InherentLaw"
@@ -13,9 +12,8 @@
var/global/list/datum/ai_laws/player_laws
var/mob/living/silicon/owner = null
/obj/nano_module/law_manager/New(var/mob/living/silicon/S)
/datum/nano_module/law_manager/New(var/mob/living/silicon/S)
..()
loc = S
owner = S
if(!admin_laws)
@@ -29,7 +27,7 @@
if(laws.selectable)
player_laws += laws
/obj/nano_module/law_manager/Topic(href, href_list)
/datum/nano_module/law_manager/Topic(href, href_list)
if(..())
return 1
@@ -149,7 +147,7 @@
return 0
/obj/nano_module/law_manager/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
/datum/nano_module/law_manager/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]
owner.lawsync()
@@ -185,14 +183,14 @@
ui.open()
ui.set_auto_update(1)
/obj/nano_module/law_manager/proc/package_laws(var/list/data, var/field, var/list/datum/ai_law/laws)
/datum/nano_module/law_manager/proc/package_laws(var/list/data, var/field, var/list/datum/ai_law/laws)
var/packaged_laws[0]
for(var/datum/ai_law/AL in laws)
packaged_laws[++packaged_laws.len] = list("law" = sanitize(AL.law), "index" = AL.get_index(), "state" = owner.laws.get_state_law(AL), "ref" = "\ref[AL]")
data[field] = packaged_laws
data["has_[field]"] = packaged_laws.len
/obj/nano_module/law_manager/proc/package_multiple_laws(var/list/datum/ai_laws/laws)
/datum/nano_module/law_manager/proc/package_multiple_laws(var/list/datum/ai_laws/laws)
var/law_sets[0]
for(var/datum/ai_laws/ALs in laws)
var/packaged_laws[0]
@@ -204,7 +202,7 @@
return law_sets
/obj/nano_module/law_manager/proc/is_malf(var/mob/user)
/datum/nano_module/law_manager/proc/is_malf(var/mob/user)
return (is_admin(user) && !owner.is_slaved()) || owner.is_malf_or_traitor()
/mob/living/silicon/proc/is_slaved()
@@ -213,7 +211,7 @@
/mob/living/silicon/robot/is_slaved()
return lawupdate && connected_ai ? sanitize(connected_ai.name) : null
/obj/nano_module/law_manager/proc/sync_laws(var/mob/living/silicon/ai/AI)
/datum/nano_module/law_manager/proc/sync_laws(var/mob/living/silicon/ai/AI)
if(!AI)
return
for(var/mob/living/silicon/robot/R in AI.connected_robots)

View File

@@ -1,5 +1,12 @@
/obj/nano_module/nano_host()
return loc
/datum/nano_module
var/name
var/host
/obj/nano_module/proc/can_still_topic(var/datum/topic_state/state = default_state)
/datum/nano_module/New(var/host)
src.host = host
/datum/nano_module/nano_host()
return host ? host : src
/datum/nano_module/proc/can_still_topic(var/datum/topic_state/state = default_state)
return CanUseTopic(usr, state) == STATUS_INTERACTIVE

View File

@@ -1,13 +1,13 @@
/obj/nano_module/power_monitor
/datum/nano_module/power_monitor
name = "Power monitor"
var/list/grid_sensors
var/active_sensor = null //name_tag of the currently selected sensor
/obj/nano_module/power_monitor/New()
/datum/nano_module/power_monitor/New()
..()
refresh_sensors()
/obj/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)
/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/list/data = list()
var/list/sensors = list()
// Focus: If it remains null if no sensor is selected and UI will display sensor list, otherwise it will display sensor reading.
@@ -34,7 +34,7 @@
ui.set_auto_update(1)
// Refreshes list of active sensors kept on this computer.
/obj/nano_module/power_monitor/proc/refresh_sensors()
/datum/nano_module/power_monitor/proc/refresh_sensors()
grid_sensors = list()
var/turf/T = get_turf(src)
for(var/obj/machinery/power/sensor/S in machines)
@@ -45,7 +45,7 @@
grid_sensors += S
// Allows us to process UI clicks, which are relayed in form of hrefs.
/obj/nano_module/power_monitor/Topic(href, href_list)
/datum/nano_module/power_monitor/Topic(href, href_list)
if(..())
return
if( href_list["clear"] )

View File

@@ -1,6 +1,5 @@
/obj/nano_module/rcon
/datum/nano_module/rcon
name = "Power RCON"
var/list/known_SMESs = null
var/list/known_breakers = null
// Allows you to hide specific parts of the UI
@@ -8,7 +7,7 @@
var/hide_SMES_details = 0
var/hide_breakers = 0
/obj/nano_module/rcon/ui_interact(mob/user, ui_key = "rcon", datum/nanoui/ui=null, force_open=1, var/datum/topic_state/state = default_state)
/datum/nano_module/rcon/ui_interact(mob/user, ui_key = "rcon", datum/nanoui/ui=null, force_open=1, var/datum/topic_state/state = default_state)
FindDevices() // Update our devices list
var/data[0]
@@ -49,7 +48,7 @@
// Proc: Topic()
// Parameters: 2 (href, href_list - allows us to process UI clicks)
// Description: Allows us to process UI clicks, which are relayed in form of hrefs.
/obj/nano_module/rcon/Topic(href, href_list)
/datum/nano_module/rcon/Topic(href, href_list)
if(..())
return
@@ -93,7 +92,7 @@
// Proc: GetSMESByTag()
// Parameters: 1 (tag - RCON tag of SMES we want to look up)
// Description: Looks up and returns SMES which has matching RCON tag
/obj/nano_module/rcon/proc/GetSMESByTag(var/tag)
/datum/nano_module/rcon/proc/GetSMESByTag(var/tag)
if(!tag)
return
@@ -104,7 +103,7 @@
// Proc: FindDevices()
// Parameters: None
// Description: Refreshes local list of known devices.
/obj/nano_module/rcon/proc/FindDevices()
/datum/nano_module/rcon/proc/FindDevices()
known_SMESs = new /list()
for(var/obj/machinery/power/smes/buildable/SMES in machines)
if(SMES.RCon_tag && (SMES.RCon_tag != "NO_TAG") && SMES.RCon)

View File

@@ -37,7 +37,7 @@
*
* @return nothing
*/
/atom/movable/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nano_ui/master_ui = null, var/datum/topic_state/state = default_state)
/datum/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nano_ui/master_ui = null, var/datum/topic_state/state = default_state)
return
// Used by the Nano UI Manager (/datum/nanomanager) to track UIs opened by this mob

View File

@@ -10,7 +10,7 @@ nanoui is used to open and update nano browser uis
// the user who opened this ui
var/mob/user
// the object this ui "belongs" to
var/atom/movable/src_object
var/datum/src_object
// the title of this ui
var/title
// the key of this ui, this is to allow multiple (different) uis for each src_object
@@ -176,7 +176,7 @@ nanoui is used to open and update nano browser uis
/datum/nanoui/proc/get_config_data()
var/list/config_data = list(
"title" = title,
"srcObject" = list("name" = src_object.name),
"srcObject" = list("name" = "[src_object]"),
"stateKey" = state_key,
"status" = status,
"autoUpdateLayout" = auto_update_layout,

View File

@@ -18,7 +18,7 @@
use_power = 1
idle_power_usage = 300
active_power_usage = 300
var/obj/nano_module/power_monitor/power_monitor
var/datum/nano_module/power_monitor/power_monitor
// Checks the sensors for alerts. If change (alerts cleared or detected) occurs, calls for icon update.
/obj/machinery/computer/power_monitor/process()