: You're too far away from the station!"
return 0
if(href_list["close"] )
var/mob/user = usr
var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main")
- usr.unset_machine()
ui.close()
return 0
- if(href_list["update"])
- src.updateDialog()
- return 1
-/obj/nano_module/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
- user.set_machine(src)
+/datum/nano_module/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
src.scan()
var/data[0]
- var/turf/T = get_turf(src)
+ var/turf/T = get_turf(host)
var/list/crewmembers = list()
for(var/obj/item/clothing/under/C in src.tracked)
@@ -79,7 +74,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
diff --git a/code/modules/nano/modules/nano_module.dm b/code/modules/nano/modules/nano_module.dm
new file mode 100644
index 00000000000..d33b59528f9
--- /dev/null
+++ b/code/modules/nano/modules/nano_module.dm
@@ -0,0 +1,12 @@
+/datum/nano_module
+ var/name
+ var/host
+
+/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
diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm
index b029019f1a3..08f9deffa9f 100644
--- a/code/modules/nano/nanoexternal.dm
+++ b/code/modules/nano/nanoexternal.dm
@@ -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/custom_state = null)
+/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
diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm
index 592644ba17b..7d5ebc18868 100644
--- a/code/modules/nano/nanoui.dm
+++ b/code/modules/nano/nanoui.dm
@@ -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
@@ -55,7 +55,7 @@ nanoui is used to open and update nano browser uis
// Relationship between a master interface and its children. Used in update_status
var/datum/nanoui/master_ui
var/list/datum/nanoui/children = list()
- var/datum/topic_state/custom_state = null
+ var/datum/topic_state/state = null
/**
* Create a new nanoui instance.
@@ -71,7 +71,7 @@ nanoui is used to open and update nano browser uis
*
* @return /nanoui new nanoui object
*/
-/datum/nanoui/New(nuser, nsrc_object, nui_key, ntemplate_filename, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null, var/datum/nanoui/master_ui = null, var/datum/topic_state/custom_state = default_state)
+/datum/nanoui/New(nuser, nsrc_object, nui_key, ntemplate_filename, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null, var/datum/nanoui/master_ui = null, var/datum/topic_state/state = default_state)
user = nuser
src_object = nsrc_object
ui_key = nui_key
@@ -80,7 +80,7 @@ nanoui is used to open and update nano browser uis
src.master_ui = master_ui
if(master_ui)
master_ui.children += src
- src.custom_state = custom_state
+ src.state = state
// add the passed template filename as the "main" template, this is required
add_template("main", ntemplate_filename)
@@ -140,8 +140,7 @@ nanoui is used to open and update nano browser uis
* @return nothing
*/
/datum/nanoui/proc/update_status(var/push_update = 0)
- var/atom/movable/host = src_object.nano_host()
- var/new_status = host.CanUseTopic(user, list(), custom_state)
+ var/new_status = src_object.CanUseTopic(user, state)
if(master_ui)
new_status = min(new_status, master_ui.status)
@@ -177,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,
@@ -467,7 +466,7 @@ nanoui is used to open and update nano browser uis
set_map_z_level(text2num(href_list["mapZLevel"]))
map_update = 1
- if ((src_object && src_object.Topic(href, href_list, 0, custom_state)) || map_update)
+ if ((src_object && src_object.Topic(href, href_list, 0, state)) || map_update)
nanomanager.update_uis(src_object) // update all UIs attached to src_object
/**
@@ -494,4 +493,4 @@ nanoui is used to open and update nano browser uis
* @return nothing
*/
/datum/nanoui/proc/update(var/force_open = 0)
- src_object.ui_interact(user, ui_key, src, force_open, master_ui, custom_state)
+ src_object.ui_interact(user, ui_key, src, force_open, master_ui, state)
diff --git a/nano/templates/door_control.tmpl b/nano/templates/door_control.tmpl
index 82f29825dbf..3c8dc66afb7 100644
--- a/nano/templates/door_control.tmpl
+++ b/nano/templates/door_control.tmpl
@@ -50,9 +50,9 @@
Electrified Status:
- {{:helper.link('Offline' , null, {'command' : 'electrify_permanently', 'activate' : "0" }, null, data.electrified == 0 ? 'selected' : null)}}
+ {{:helper.link('Offline' , null, {'command' : 'electrify_permanently', 'activate' : "0" }, data.electrified == 0 ? 'selected' : null)}}
{{:helper.link(data.electrified <= 0 ? 'Temporary (30s)' : 'Temporary (' + data.electrified +'s)', null, {'command' : 'electrify_temporary', 'activate' : "1"}, null, data.electrified > 0 ? 'redButton' : null)}}
- {{:helper.link('Permanent', null, {'command' : 'electrify_permanently', 'activate' : "1"}, null, data.electrified == -1 ? 'redButton' : null)}}
+ {{:helper.link('Permanent', null, {'command' : 'electrify_permanently', 'activate' : "1"}, data.electrified == -1 ? 'redButton' : null)}}
@@ -62,8 +62,8 @@
{{for data.commands}}
| {{:value.name}}: |
- {{:helper.link(value.enabled, null, {'command' : value.command, 'activate' : value.act ? 1 : 0}, null, value.active ? 'selected' : null)}} |
- {{:helper.link(value.disabled,null, {'command' : value.command, 'activate' : value.act ? 0 : 1}, null,!value.active ? (value.danger ? 'redButton' : 'selected') : null)}} |
+ {{:helper.link(value.enabled, null, {'command' : value.command, 'activate' : value.act ? 1 : 0}, value.active ? 'selected' : null)}} |
+ {{:helper.link(value.disabled, null, {'command' : value.command, 'activate' : value.act ? 0 : 1}, !value.active ? (value.danger ? 'redButton' : 'selected') : null)}} |
{{/for}}
diff --git a/paradise.dme b/paradise.dme
index 7e7ae3846cf..4b6229b447e 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1470,11 +1470,17 @@
#include "code\modules\nano\JSON Reader.dm"
#include "code\modules\nano\JSON Writer.dm"
#include "code\modules\nano\nanoexternal.dm"
-#include "code\modules\nano\nanointeraction.dm"
#include "code\modules\nano\nanomanager.dm"
#include "code\modules\nano\nanomapgen.dm"
#include "code\modules\nano\nanoui.dm"
+#include "code\modules\nano\interaction\admin.dm"
+#include "code\modules\nano\interaction\base.dm"
+#include "code\modules\nano\interaction\contained.dm"
+#include "code\modules\nano\interaction\default.dm"
+#include "code\modules\nano\interaction\inventory.dm"
+#include "code\modules\nano\interaction\zlevel.dm"
#include "code\modules\nano\modules\crew_monitor.dm"
+#include "code\modules\nano\modules\nano_module.dm"
#include "code\modules\ninja\energy_katana.dm"
#include "code\modules\ninja\suit\gloves.dm"
#include "code\modules\ninja\suit\head.dm"