NanoUI Airlock Electronics

Also reworks a lot of the AE code.
This commit is contained in:
Bjorn Neergaard
2015-11-29 11:32:56 -06:00
parent ea47934d07
commit f214e547cb
14 changed files with 146 additions and 164 deletions
+6 -6
View File
@@ -32,10 +32,10 @@
if(req_access.len || req_one_access.len)
board = new(src)
if(req_access.len)
board.conf_access = req_access
board.accesses = req_access
else
board.use_one_access = 1
board.conf_access = req_one_access
board.one_access = 1
board.accesses = req_one_access
if(id && istype(device, /obj/item/device/assembly/control))
var/obj/item/device/assembly/control/A = device
@@ -85,10 +85,10 @@
return
W.loc = src
board = W
if(board.use_one_access)
req_one_access = board.conf_access
if(board.one_access)
req_one_access = board.accesses
else
req_access = board.conf_access
req_access = board.accesses
user << "<span class='notice'>You add [W] to the button.</span>"
if(!device && !board && istype(W, /obj/item/weapon/wrench))
+3 -3
View File
@@ -880,10 +880,10 @@ About the new airlock wires panel:
if(!electronics)
ae = new/obj/item/weapon/electronics/airlock( src.loc )
if(req_one_access)
ae.use_one_access = 1
ae.conf_access = src.req_one_access
ae.one_access = 1
ae.accesses = src.req_one_access
else
ae.conf_access = src.req_access
ae.accesses = src.req_access
else
ae = electronics
electronics = null
@@ -1,106 +1,58 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/item/weapon/electronics/airlock
name = "airlock electronics"
req_access = list(access_maint_tunnels)
var/list/conf_access = null
var/use_one_access = 0 //If the door should require ALL or only ONE of the listed accesses.
var/last_configurator = null
var/locked = 1
var/list/accesses = list()
var/one_access = 0
/obj/item/weapon/electronics/airlock/attack_self(mob/user)
if (!ishuman(user) && !usr.has_unlimited_silicon_privilege)
return ..(user)
if (!user) return
interact(user)
var/mob/living/carbon/human/H = user
if(H.getBrainLoss() >= 60)
return
/obj/item/weapon/electronics/airlock/interact(mob/user)
add_fingerprint(user)
ui_interact(user)
var/t1 = text("")
/obj/item/weapon/electronics/airlock/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, force_open = 0)
SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open)
if (!ui)
ui = new(user, src, ui_key, "airlock_electronics.tmpl", name, 975, 415, state = hands_state)
ui.open()
/obj/item/weapon/electronics/airlock/get_ui_data()
var/list/data = list()
var/list/regions = list()
if (last_configurator)
t1 += "Operator: [last_configurator]<br>"
for(var/i in 1 to 7)
var/list/region = list()
var/list/accesses = list()
for(var/j in get_region_accesses(i))
var/list/access = list()
access["name"] = get_access_desc(j)
access["id"] = j
access["req"] = (j in src.accesses)
accesses[++accesses.len] = access
region["name"] = get_region_accesses_name(i)
region["accesses"] = accesses
regions[++regions.len] = region
data["regions"] = regions
data["oneAccess"] = one_access
if (locked)
t1 += "<a href='?src=\ref[src];login=1'>Swipe ID</a><hr>"
else
t1 += "<a href='?src=\ref[src];logout=1'>Lock Interface</a><hr>"
if(use_one_access)
t1 += "Restriction Type: <a href='?src=\ref[src];access=one'>At least one access required</a><br>"
else
t1 += "Restriction Type: <a href='?src=\ref[src];access=one'>All accesses required</a><br>"
t1 += "<a href='?src=\ref[src];access=all'>Remove All</a><br>"
var/accesses = ""
accesses += "<div align='center'><b>Access</b></div>"
accesses += "<table style='width:100%'>"
accesses += "<tr>"
for(var/i = 1; i <= 7; i++)
accesses += "<td style='width:14%'><b>[get_region_accesses_name(i)]:</b></td>"
accesses += "</tr><tr>"
for(var/i = 1; i <= 7; i++)
accesses += "<td style='width:14%' valign='top'>"
for(var/A in get_region_accesses(i))
if(A in conf_access)
accesses += "<a href='?src=\ref[src];access=[A]'><font color=\"red\">[replacetext(get_access_desc(A), " ", "&nbsp")]</font></a> "
else
accesses += "<a href='?src=\ref[src];access=[A]'>[replacetext(get_access_desc(A), " ", "&nbsp")]</a> "
accesses += "<br>"
accesses += "</td>"
accesses += "</tr></table>"
t1 += "<tt>[accesses]</tt>"
t1 += text("<p><a href='?src=\ref[];close=1'>Close</a></p>\n", src)
var/datum/browser/popup = new(user, "airlock_electronics", "Access Control", 900, 500)
popup.set_content(t1)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
onclose(user, "airlock")
return data
/obj/item/weapon/electronics/airlock/Topic(href, href_list)
..()
if (usr.stat || usr.restrained() || (!ishuman(usr) && !usr.has_unlimited_silicon_privilege))
return
if (href_list["close"])
usr << browse(null, "window=airlock")
if(..())
return
if (href_list["login"])
if(allowed(usr))
src.locked = 0
src.last_configurator = usr.name
if (locked)
return
if (href_list["logout"])
locked = 1
if (href_list["access"])
toggle_access(href_list["access"])
attack_self(usr)
/obj/item/weapon/electronics/airlock/proc/toggle_access(acc)
if (acc == "all")
conf_access = null
else if(acc == "one")
use_one_access = !use_one_access
else
var/req = text2num(acc)
if (conf_access == null)
conf_access = list()
if (!(req in conf_access))
conf_access += req
if(href_list["access"])
if(href_list["access"] == "clear")
accesses = list()
one_access = 0
else if(href_list["access"] == "one")
one_access = !one_access
else
conf_access -= req
if (!conf_access.len)
conf_access = null
var/access = text2num(href_list["access"])
if (!(access in accesses))
accesses += access
else
accesses -= access
+3 -3
View File
@@ -311,10 +311,10 @@
if(!electronics)
ae = new/obj/item/weapon/electronics/airlock( src.loc )
if(req_one_access)
ae.use_one_access = 1
ae.conf_access = src.req_one_access
ae.one_access = 1
ae.accesses = src.req_one_access
else
ae.conf_access = src.req_access
ae.accesses = src.req_access
else
ae = electronics
electronics = null
+27 -49
View File
@@ -34,8 +34,6 @@ RCD
var/list/conf_access = null
var/use_one_access = 0 //If the airlock should require ALL or only ONE of the listed accesses.
var/last_configurator = null
var/locked = 1
/* Construction costs */
@@ -82,39 +80,32 @@ RCD
var/t1 = text("")
if (last_configurator)
t1 += "Operator: [last_configurator]<br>"
if (locked)
t1 += "<a href='?src=\ref[src];login=1'>Swipe ID</a><hr>"
if(use_one_access)
t1 += "Restriction Type: <a href='?src=\ref[src];access=one'>At least one access required</a><br>"
else
t1 += "<a href='?src=\ref[src];logout=1'>Lock Interface</a><hr>"
t1 += "Restriction Type: <a href='?src=\ref[src];access=one'>All accesses required</a><br>"
if(use_one_access)
t1 += "Restriction Type: <a href='?src=\ref[src];access=one'>At least one access required</a><br>"
else
t1 += "Restriction Type: <a href='?src=\ref[src];access=one'>All accesses required</a><br>"
t1 += "<a href='?src=\ref[src];access=all'>Remove All</a><br>"
t1 += "<a href='?src=\ref[src];access=all'>Remove All</a><br>"
var/accesses = ""
accesses += "<div align='center'><b>Access</b></div>"
accesses += "<table style='width:100%'>"
accesses += "<tr>"
for(var/i = 1; i <= 7; i++)
accesses += "<td style='width:14%'><b>[get_region_accesses_name(i)]:</b></td>"
accesses += "</tr><tr>"
for(var/i = 1; i <= 7; i++)
accesses += "<td style='width:14%' valign='top'>"
for(var/A in get_region_accesses(i))
if(A in conf_access)
accesses += "<a href='?src=\ref[src];access=[A]'><font color=\"red\">[replacetext(get_access_desc(A), " ", "&nbsp")]</font></a> "
else
accesses += "<a href='?src=\ref[src];access=[A]'>[replacetext(get_access_desc(A), " ", "&nbsp")]</a> "
accesses += "<br>"
accesses += "</td>"
accesses += "</tr></table>"
t1 += "<tt>[accesses]</tt>"
var/accesses = ""
accesses += "<div align='center'><b>Access</b></div>"
accesses += "<table style='width:100%'>"
accesses += "<tr>"
for(var/i = 1; i <= 7; i++)
accesses += "<td style='width:14%'><b>[get_region_accesses_name(i)]:</b></td>"
accesses += "</tr><tr>"
for(var/i = 1; i <= 7; i++)
accesses += "<td style='width:14%' valign='top'>"
for(var/A in get_region_accesses(i))
if(A in conf_access)
accesses += "<a href='?src=\ref[src];access=[A]'><font color=\"red\">[replacetext(get_access_desc(A), " ", "&nbsp")]</font></a> "
else
accesses += "<a href='?src=\ref[src];access=[A]'>[replacetext(get_access_desc(A), " ", "&nbsp")]</a> "
accesses += "<br>"
accesses += "</td>"
accesses += "</tr></table>"
t1 += "<tt>[accesses]</tt>"
t1 += text("<p><a href='?src=\ref[];close=1'>Close</a></p>\n", src)
@@ -132,17 +123,6 @@ RCD
usr << browse(null, "window=airlock")
return
if (href_list["login"])
if(allowed(usr))
src.locked = 0
src.last_configurator = usr.name
if (locked)
return
if (href_list["logout"])
locked = 1
if (href_list["access"])
toggle_access(href_list["access"])
@@ -364,15 +344,13 @@ RCD
T.electronics = new/obj/item/weapon/electronics/airlock( src.loc )
if(conf_access)
T.electronics.conf_access = conf_access.Copy()
T.electronics.use_one_access = use_one_access
T.electronics.last_configurator = last_configurator
T.electronics.locked = locked
T.electronics.accesses = conf_access.Copy()
T.electronics.one_access = use_one_access
if(T.electronics.use_one_access)
T.req_one_access = T.electronics.conf_access
if(T.electronics.one_access)
T.req_one_access = T.electronics.accesses
else
T.req_access = T.electronics.conf_access
T.req_access = T.electronics.accesses
if(!T.checkForMultipleDoors())
qdel(T)
+3 -3
View File
@@ -212,10 +212,10 @@
if(electronics)
electronics.loc = display
display.electronics = electronics
if(electronics.use_one_access)
display.req_one_access = electronics.conf_access
if(electronics.one_access)
display.req_one_access = electronics.accesses
else
display.req_access = electronics.conf_access
display.req_access = electronics.accesses
qdel(src)
return
return
@@ -636,10 +636,10 @@
//door.req_access = src.req_access
door.electronics = src.electronics
door.heat_proof = src.heat_proof_finished
if(src.electronics.use_one_access)
door.req_one_access = src.electronics.conf_access
if(src.electronics.one_access)
door.req_one_access = src.electronics.accesses
else
door.req_access = src.electronics.conf_access
door.req_access = src.electronics.accesses
if(created_name)
door.name = created_name
src.electronics.loc = door
@@ -266,10 +266,10 @@
windoor.dir = dir
windoor.density = 0
if(electronics.use_one_access)
windoor.req_one_access = electronics.conf_access
if(electronics.one_access)
windoor.req_one_access = electronics.accesses
else
windoor.req_access = electronics.conf_access
windoor.req_access = electronics.accesses
windoor.electronics = electronics
electronics.loc = windoor
if(created_name)
@@ -289,7 +289,7 @@
windoor.dir = dir
windoor.density = 0
windoor.req_access = electronics.conf_access
windoor.req_access = electronics.accesses
windoor.electronics = electronics
electronics.loc = windoor
if(created_name)
+3 -2
View File
@@ -361,9 +361,10 @@
var/url_parameters_json = list2json(list("src" = "\ref[src]"))
return {"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<head>
<script type='text/javascript'>
function receiveUpdateData(jsonString)
+20
View File
@@ -0,0 +1,20 @@
/**
* NanoUI State: hands_state
*
* Checks that the src_object is in the user's hands.
**/
/var/global/datum/topic_state/hands_state/hands_state = new()
/datum/topic_state/hands_state/can_use_topic(atom/movable/src_object, mob/user)
. = user.shared_nano_interaction(src_object)
if (. > NANO_CLOSE)
return min(., user.hands_can_use_topic(src_object))
/mob/proc/hands_can_use_topic(atom/movable/src_object)
return NANO_CLOSE
/mob/living/hands_can_use_topic(atom/movable/src_object)
if (src_object in get_both_hands(src))
return NANO_INTERACTIVE
return NANO_CLOSE
+1 -1
View File
@@ -228,7 +228,7 @@
{{else data.screen == 5}}
<h2>Alarm Thresholds</h2>
<div class="statusDisplay">
<table class='fixed'>
<table class="fixed">
<tr>
<td></td><td><span class='bad'>min2</span></td><td><span class='average'>min1</span></td><td><span class='average'>max1</span></td><td><span class='bad'>max2</span></td>
</tr>
+26
View File
@@ -0,0 +1,26 @@
<div class="statusDisplay">
<div class="item">
{{:helper.link(data.oneAccess ? 'One Required' : 'All Required', data.oneAccess ? 'unlocked' : 'locked', {'access': 'one'})}}
{{:helper.link('Reset', 'refresh', {'access': 'clear'})}}
</div>
<div class="item">
<table class="fixed">
<tr>
{{for data.regions :region:i}}
<td>
<span class="highlight"><b>{{:region.name}}</b></span>
</td>
{{/for}}
</tr>
<tr>
{{for data.regions :region:i}}
<td class="alignTop">
{{for region.accesses :access:j}}
{{:helper.link(access.name, access.req ? 'check' : 'close', {'access': access.id}, null, access.req ? 'selected' : null)}}<br class="clearBoth" />
{{/for}}
</td>
{{/for}}
</tr>
</table>
</div>
</div>
+4
View File
@@ -440,6 +440,10 @@ div.notice {
float: right;
}
.alignTop {
vertical-align: top;
}
/* Used in PDA */
.wholeScreen {
position: absolute;
+1
View File
@@ -1362,6 +1362,7 @@
#include "code\modules\nano\states\contained.dm"
#include "code\modules\nano\states\deep_inventory.dm"
#include "code\modules\nano\states\default.dm"
#include "code\modules\nano\states\hands.dm"
#include "code\modules\nano\states\inventory.dm"
#include "code\modules\nano\states\notcontained.dm"
#include "code\modules\nano\states\physical.dm"