diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index 406a0fb4423..719f7718977 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -163,12 +163,10 @@
/* AI Turrets */
/obj/machinery/turretid/AIAltClick() //toggles lethal on turrets
- if(can_be_used_by(usr))
- toggle_lethal()
+ toggle_lethal()
add_fingerprint(usr)
/obj/machinery/turretid/AICtrlClick() //turns off/on Turrets
- if(can_be_used_by(usr))
- toggle_on()
+ toggle_on()
add_fingerprint(usr)
//
diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm
index 0b7dd2a688c..97c36b241bc 100644
--- a/code/datums/wires/wires.dm
+++ b/code/datums/wires/wires.dm
@@ -304,8 +304,13 @@ var/list/wire_color_directory = list()
/datum/wires/ui_host()
return holder
+/datum/wires/ui_status(mob/user)
+ if(interactable(user))
+ return ..()
+ return UI_CLOSE
+
/datum/wires/ui_interact(mob/user, ui_key = "wires", datum/tgui/ui = null, force_open = 0, \
- datum/tgui/master_ui = null, datum/ui_state/state = wire_state)
+ datum/tgui/master_ui = null, datum/ui_state/state = physical_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
ui = new(user, src, ui_key, "wires", "[holder.name] wires", 350, 150 + wires.len * 30, master_ui, state)
diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm
index 2f652080af0..e83bff6774a 100644
--- a/code/game/machinery/announcement_system.dm
+++ b/code/game/machinery/announcement_system.dm
@@ -94,10 +94,6 @@ var/list/announcement_systems = list()
return ..()
-/obj/machinery/announcement_system/attack_hand(mob/user)
- if(can_be_used_by(user))
- Interact(user)
-
/obj/machinery/announcement_system/proc/CompileText(str, user, rank) //replaces user-given variables with actual thingies.
str = replacetext(str, "%PERSON", "[user]")
str = replacetext(str, "%RANK", "[rank]")
@@ -123,10 +119,7 @@ var/list/announcement_systems = list()
//config stuff
-/obj/machinery/announcement_system/proc/Interact(mob/user)
- if(!can_be_used_by(user))
- return
-
+/obj/machinery/announcement_system/interact(mob/user)
if(broken)
visible_message("[src] buzzes.", "You hear a faint buzz.")
playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 1)
@@ -141,8 +134,6 @@ var/list/announcement_systems = list()
popup.open()
/obj/machinery/announcement_system/Topic(href, href_list)
- if(!can_be_used_by(usr) || usr.lying || usr.stat || usr.stunned)
- return
if(broken)
visible_message("[src] buzzes.", "You hear a faint buzz.")
playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 1)
@@ -169,7 +160,7 @@ var/list/announcement_systems = list()
update_icon()
add_fingerprint(usr)
- Interact(usr)
+ interact(usr)
return
/obj/machinery/announcement_system/attack_ai(mob/living/silicon/ai/user)
@@ -178,7 +169,7 @@ var/list/announcement_systems = list()
if(broken)
user << "[src]'s firmware appears to be malfunctioning!"
return
- Interact(user)
+ interact(user)
/obj/machinery/announcement_system/proc/act_up() //does funny breakage stuff
broken = 1
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index dd750ee02a6..25ec855e7a5 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -202,32 +202,39 @@ Class Procs:
use_power(active_power_usage,power_channel)
return 1
-/obj/machinery/Topic(href, href_list)
- ..()
- if(!can_be_used_by(usr))
- return 1
- add_fingerprint(usr)
- return 0
-
-/obj/machinery/ui_act(action, params)
- ..()
- if(!can_be_used_by(usr))
- return TRUE
- add_fingerprint(usr)
-
-/obj/machinery/proc/can_be_used_by(mob/user)
- if(!interact_offline && stat & (NOPOWER|BROKEN))
- return 0
- if(!user.canUseTopic(src))
- return 0
- return 1
-
/obj/machinery/proc/is_operational()
return !(stat & (NOPOWER|BROKEN|MAINT))
+/obj/machinery/proc/is_interactable()
+ if((stat & (NOPOWER|BROKEN)) && !interact_offline)
+ return FALSE
+ return TRUE
+
////////////////////////////////////////////////////////////////////////////////////////////
+/obj/machinery/interact(mob/user)
+ ui_interact(user)
+
+/obj/machinery/Topic(href, href_list)
+ ..()
+ if(!is_interactable())
+ return 1
+ if(!usr.canUseTopic(src))
+ return 1
+ add_fingerprint(usr)
+ return 0
+
+/obj/machinery/ui_status(mob/user)
+ if(is_interactable() && !panel_open)
+ return ..()
+ return UI_CLOSE
+
+/obj/machinery/ui_act(action, params)
+ ..()
+ add_fingerprint(usr)
+
+////////////////////////////////////////////////////////////////////////////////////////////
/obj/machinery/attack_ai(mob/user)
if(isrobot(user))
@@ -273,10 +280,6 @@ Class Procs:
add_fingerprint(user)
return 0
-/obj/machinery/interact(mob/user)
- if(is_operational())
- ui_interact(user)
-
/obj/machinery/CheckParts()
RefreshParts()
return
diff --git a/code/modules/tgui/states/wire.dm b/code/modules/tgui/states/wire.dm
deleted file mode 100644
index 5d31c4c7637..00000000000
--- a/code/modules/tgui/states/wire.dm
+++ /dev/null
@@ -1,13 +0,0 @@
- /**
- * tgui state: wire_state
- *
- * Checks specifically designed for wire datums.
- **/
-
-/var/global/datum/ui_state/wire_state/wire_state = new()
-
-/datum/ui_state/wire_state/can_use_topic(atom/src_object, mob/user)
- var/datum/wires/W = src_object.wires
- if(istype(W) && user.Adjacent(W.holder) && W.interactable(user))
- return UI_INTERACTIVE
- return UI_CLOSE
\ No newline at end of file
diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm
index c2b7b1ee1de..0de72fd2609 100644
--- a/code/modules/tgui/tgui.dm
+++ b/code/modules/tgui/tgui.dm
@@ -316,14 +316,13 @@
/datum/tgui/proc/push_data(data, force = 0)
update_status(push = 0) // Update the window state.
if(!initialized)
- return // Cannot upadte UI if it is not set up yet.
+ return // Cannot update UI if it is not set up yet.
if(status <= UI_DISABLED && !force)
return // Cannot update UI, we have no visibility.
// Send the new JSON to the update() Javascript function.
user << output(url_encode(get_json(data)), "[window_id].browser:update")
-
/**
* private
*
@@ -343,8 +342,7 @@
* optional push bool Push an update to the UI (an update is always sent for UI_DISABLED).
**/
/datum/tgui/proc/update_status(push = 0)
- var/datum/host = src_object.ui_host()
- var/status = host.ui_status(user, state)
+ var/status = src_object.ui_status(user, state)
if(master_ui)
status = min(status, master_ui.status)
diff --git a/tgstation.dme b/tgstation.dme
index 86563f04e9a..242e2b93b06 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1603,7 +1603,6 @@
#include "code\modules\tgui\states\notcontained.dm"
#include "code\modules\tgui\states\physical.dm"
#include "code\modules\tgui\states\self.dm"
-#include "code\modules\tgui\states\wire.dm"
#include "code\modules\tgui\states\zlevel.dm"
#include "code\modules\tooltip\tooltip.dm"
#include "code\modules\uplink\uplink.dm"