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 circuit = /obj/item/weapon/circuitboard/rcon_console
req_one_access = list(access_engine) req_one_access = list(access_engine)
var/current_tag = null var/current_tag = null
var/obj/nano_module/rcon/rcon var/datum/nano_module/rcon/rcon
/obj/machinery/computer/rcon/New() /obj/machinery/computer/rcon/New()
..() ..()

View File

@@ -12,7 +12,7 @@
circuit = "/obj/item/weapon/circuitboard/atmoscontrol" circuit = "/obj/item/weapon/circuitboard/atmoscontrol"
req_access = list(access_ce) req_access = list(access_ce)
var/list/monitored_alarm_ids = null 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() /obj/machinery/computer/atmoscontrol/New()
..() ..()

View File

@@ -7,7 +7,7 @@
idle_power_usage = 250 idle_power_usage = 250
active_power_usage = 500 active_power_usage = 500
circuit = "/obj/item/weapon/circuitboard/crew" 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() /obj/machinery/computer/crew/New()
crew_monitor = new(src) crew_monitor = new(src)

View File

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

View File

@@ -14,7 +14,7 @@
if(shattered) return if(shattered) return
if(ishuman(user)) 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) if(!AC)
AC = new(src, user) AC = new(src, user)
AC.name = "SalonPro Nano-Mirror(TM)" 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 var/mob/living/silicon/S = input("Select silicon.", "Manage Silicon Laws") as null|anything in silicon_mob_list
if(!S) return 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) L.ui_interact(usr, state = admin_state)
admin_log_and_message_admins("has opened [S]'s law manager.") 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! 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) /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.flags = flags
AC.ui_interact(user, state = state) AC.ui_interact(user, state = state)

View File

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

View File

@@ -1,11 +1,11 @@
/mob/living/silicon /mob/living/silicon
var/register_alarms = 1 var/register_alarms = 1
var/obj/nano_module/alarm_monitor/all/alarm_monitor var/datum/nano_module/alarm_monitor/all/alarm_monitor
var/obj/nano_module/atmos_control/atmos_control var/datum/nano_module/atmos_control/atmos_control
var/obj/nano_module/crew_monitor/crew_monitor var/datum/nano_module/crew_monitor/crew_monitor
var/obj/nano_module/law_manager/law_manager var/datum/nano_module/law_manager/law_manager
var/obj/nano_module/power_monitor/power_monitor var/datum/nano_module/power_monitor/power_monitor
var/obj/nano_module/rcon/rcon var/datum/nano_module/rcon/rcon
/mob/living/silicon /mob/living/silicon
var/list/silicon_subsystems = list( var/list/silicon_subsystems = list(

View File

@@ -1,7 +1,7 @@
/atom/proc/nano_host() /datum/proc/nano_host()
return src 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() var/src_object = nano_host()
return state.can_use_topic(src_object, user) 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" 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_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. 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 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) 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) 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) for(var/datum/alarm_handler/AH in alarm_handlers)
AH.register(object, procName) 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) for(var/datum/alarm_handler/AH in alarm_handlers)
AH.unregister(object) AH.unregister(object)
/obj/nano_module/alarm_monitor/proc/all_alarms() /datum/nano_module/alarm_monitor/proc/all_alarms()
var/list/all_alarms = new() var/list/all_alarms = new()
for(var/datum/alarm_handler/AH in alarm_handlers) for(var/datum/alarm_handler/AH in alarm_handlers)
all_alarms += AH.alarms all_alarms += AH.alarms
return all_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() var/list/all_alarms = new()
for(var/datum/alarm_handler/AH in alarm_handlers) for(var/datum/alarm_handler/AH in alarm_handlers)
all_alarms += AH.major_alarms() all_alarms += AH.major_alarms()
return all_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() var/list/all_alarms = new()
for(var/datum/alarm_handler/AH in alarm_handlers) for(var/datum/alarm_handler/AH in alarm_handlers)
all_alarms += AH.minor_alarms() all_alarms += AH.minor_alarms()
return all_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(..()) if(..())
return 1 return 1
if(href_list["switchTo"]) if(href_list["switchTo"])
@@ -56,7 +56,7 @@
usr.switch_to_camera(C) usr.switch_to_camera(C)
return 1 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/data[0]
var/categories[0] var/categories[0]

View File

@@ -1,16 +1,14 @@
/obj/nano_module/atmos_control /datum/nano_module/atmos_control
name = "Atmospherics Control" name = "Atmospherics Control"
var/ui_ref var/obj/access = new()
var/emagged = 0 var/emagged = 0
var/ui_ref
var/list/monitored_alarms = list() 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 access.req_access = req_access
src.req_access = req_access access.req_one_access = req_one_access
src.req_one_access = req_one_access
atmos_state = default_state
if(monitored_alarm_ids) if(monitored_alarm_ids)
for(var/obj/machinery/alarm/alarm in machines) for(var/obj/machinery/alarm/alarm in machines)
@@ -19,7 +17,7 @@
// machines may not yet be ordered at this point // machines may not yet be ordered at this point
monitored_alarms = dd_sortedObjectList(monitored_alarms) 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(..()) if(..())
return 1 return 1
@@ -31,7 +29,7 @@
alarm.ui_interact(usr, master_ui = ui_ref, state = TS) alarm.ui_interact(usr, master_ui = ui_ref, state = TS)
return 1 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/data[0]
var/alarms[0] var/alarms[0]
@@ -48,15 +46,15 @@
ui.set_auto_update(1) ui.set_auto_update(1)
ui_ref = ui 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() var/datum/topic_state/air_alarm/state = new()
state.atmos_control = src state.atmos_control = src
state.air_alarm = air_alarm state.air_alarm = air_alarm
return state return state
/datum/topic_state/air_alarm /datum/topic_state/air_alarm
var/obj/nano_module/atmos_control/atmos_control = null var/datum/nano_module/atmos_control/atmos_control = null
var/obj/machinery/alarm/air_alarm = null var/obj/machinery/alarm/air_alarm = null
/datum/topic_state/air_alarm/can_use_topic(var/src_object, var/mob/user) /datum/topic_state/air_alarm/can_use_topic(var/src_object, var/mob/user)
if(has_access(user)) if(has_access(user))
@@ -71,4 +69,4 @@
return extra_href return extra_href
/datum/topic_state/air_alarm/proc/has_access(var/mob/user) /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" name = "Crew monitor"
var/list/tracked = new var/list/tracked = new
/obj/nano_module/crew_monitor/Topic(href, href_list) /datum/nano_module/crew_monitor/Topic(href, href_list)
if(..()) return if(..()) return
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if (!T || !(T.z in config.player_levels)) if (!T || !(T.z in config.player_levels))
@@ -14,9 +14,6 @@
usr.unset_machine() usr.unset_machine()
ui.close() ui.close()
return 0 return 0
if(href_list["update"])
src.updateDialog()
return 1
if(href_list["track"]) if(href_list["track"])
if(usr.isAI()) if(usr.isAI())
var/mob/living/silicon/ai/AI = usr var/mob/living/silicon/ai/AI = usr
@@ -25,7 +22,7 @@
AI.ai_actual_track(H) AI.ai_actual_track(H)
return 1 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) user.set_machine(src)
src.scan() src.scan()
@@ -87,7 +84,7 @@
// should make the UI auto-update; doesn't seem to? // should make the UI auto-update; doesn't seem to?
ui.set_auto_update(1) 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) for(var/mob/living/carbon/human/H in mob_list)
if(istype(H.w_uniform, /obj/item/clothing/under)) if(istype(H.w_uniform, /obj/item/clothing/under))
var/obj/item/clothing/under/C = H.w_uniform 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" name = "Appearance Editor"
flags = APPEARANCE_ALL_HAIR var/flags = APPEARANCE_ALL_HAIR
var/mob/living/carbon/human/owner = null var/mob/living/carbon/human/owner = null
var/list/valid_species = list() var/list/valid_species = list()
var/list/valid_hairstyles = list() var/list/valid_hairstyles = list()
@@ -10,15 +10,14 @@
var/list/whitelist var/list/whitelist
var/list/blacklist 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 owner = H
src.check_whitelist = check_species_whitelist src.check_whitelist = check_species_whitelist
src.whitelist = species_whitelist src.whitelist = species_whitelist
src.blacklist = species_blacklist 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(..()) if(..())
return 1 return 1
@@ -91,7 +90,7 @@
return 0 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) generate_data(check_whitelist, whitelist, blacklist)
var/data[0] var/data[0]
@@ -128,31 +127,31 @@
data["change_facial_hair_color"] = can_change(APPEARANCE_FACIAL_HAIR_COLOR) data["change_facial_hair_color"] = can_change(APPEARANCE_FACIAL_HAIR_COLOR)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) 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.set_initial_data(data)
ui.open() ui.open()
ui.set_auto_update(1) 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)) if(owner && (flags & APPEARANCE_UPDATE_DNA))
owner.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) 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 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 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 // Making the assumption that the available species remain constant
valid_facial_hairstyles.Cut() valid_facial_hairstyles.Cut()
valid_facial_hairstyles.Cut() valid_facial_hairstyles.Cut()
generate_data() generate_data()
/obj/nano_module/appearance_changer/proc/generate_data() /datum/nano_module/appearance_changer/proc/generate_data()
if(!valid_species.len) if(!valid_species.len)
valid_species = owner.generate_valid_species(check_whitelist, whitelist, blacklist) valid_species = owner.generate_valid_species(check_whitelist, whitelist, blacklist)
if(!valid_hairstyles.len || !valid_facial_hairstyles.len) 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" name = "Law manager"
var/ion_law = "IonLaw" var/ion_law = "IonLaw"
var/zeroth_law = "ZerothLaw" var/zeroth_law = "ZerothLaw"
var/inherent_law = "InherentLaw" var/inherent_law = "InherentLaw"
@@ -13,9 +12,8 @@
var/global/list/datum/ai_laws/player_laws var/global/list/datum/ai_laws/player_laws
var/mob/living/silicon/owner = null 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 owner = S
if(!admin_laws) if(!admin_laws)
@@ -29,7 +27,7 @@
if(laws.selectable) if(laws.selectable)
player_laws += laws player_laws += laws
/obj/nano_module/law_manager/Topic(href, href_list) /datum/nano_module/law_manager/Topic(href, href_list)
if(..()) if(..())
return 1 return 1
@@ -149,7 +147,7 @@
return 0 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] var/data[0]
owner.lawsync() owner.lawsync()
@@ -185,14 +183,14 @@
ui.open() ui.open()
ui.set_auto_update(1) 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] var/packaged_laws[0]
for(var/datum/ai_law/AL in laws) 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]") 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[field] = packaged_laws
data["has_[field]"] = packaged_laws.len 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] var/law_sets[0]
for(var/datum/ai_laws/ALs in laws) for(var/datum/ai_laws/ALs in laws)
var/packaged_laws[0] var/packaged_laws[0]
@@ -204,7 +202,7 @@
return law_sets 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() return (is_admin(user) && !owner.is_slaved()) || owner.is_malf_or_traitor()
/mob/living/silicon/proc/is_slaved() /mob/living/silicon/proc/is_slaved()
@@ -213,7 +211,7 @@
/mob/living/silicon/robot/is_slaved() /mob/living/silicon/robot/is_slaved()
return lawupdate && connected_ai ? sanitize(connected_ai.name) : null 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) if(!AI)
return return
for(var/mob/living/silicon/robot/R in AI.connected_robots) for(var/mob/living/silicon/robot/R in AI.connected_robots)

View File

@@ -1,5 +1,12 @@
/obj/nano_module/nano_host() /datum/nano_module
return loc 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 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" name = "Power monitor"
var/list/grid_sensors var/list/grid_sensors
var/active_sensor = null //name_tag of the currently selected sensor 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() 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/data = list()
var/list/sensors = 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. // 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) ui.set_auto_update(1)
// Refreshes list of active sensors kept on this computer. // 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() grid_sensors = list()
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
for(var/obj/machinery/power/sensor/S in machines) for(var/obj/machinery/power/sensor/S in machines)
@@ -45,7 +45,7 @@
grid_sensors += S grid_sensors += S
// Allows us to process UI clicks, which are relayed in form of hrefs. // 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(..()) if(..())
return return
if( href_list["clear"] ) if( href_list["clear"] )

View File

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

View File

@@ -37,7 +37,7 @@
* *
* @return nothing * @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 return
// Used by the Nano UI Manager (/datum/nanomanager) to track UIs opened by this mob // 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 // the user who opened this ui
var/mob/user var/mob/user
// the object this ui "belongs" to // the object this ui "belongs" to
var/atom/movable/src_object var/datum/src_object
// the title of this ui // the title of this ui
var/title var/title
// the key of this ui, this is to allow multiple (different) uis for each src_object // 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() /datum/nanoui/proc/get_config_data()
var/list/config_data = list( var/list/config_data = list(
"title" = title, "title" = title,
"srcObject" = list("name" = src_object.name), "srcObject" = list("name" = "[src_object]"),
"stateKey" = state_key, "stateKey" = state_key,
"status" = status, "status" = status,
"autoUpdateLayout" = auto_update_layout, "autoUpdateLayout" = auto_update_layout,

View File

@@ -18,7 +18,7 @@
use_power = 1 use_power = 1
idle_power_usage = 300 idle_power_usage = 300
active_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. // Checks the sensors for alerts. If change (alerts cleared or detected) occurs, calls for icon update.
/obj/machinery/computer/power_monitor/process() /obj/machinery/computer/power_monitor/process()