mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 08:08:49 +01:00
NanoUI Airlock Electronics
Also reworks a lot of the AE code.
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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), " ", " ")]</font></a> "
|
||||
else
|
||||
accesses += "<a href='?src=\ref[src];access=[A]'>[replacetext(get_access_desc(A), " ", " ")]</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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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), " ", " ")]</font></a> "
|
||||
else
|
||||
accesses += "<a href='?src=\ref[src];access=[A]'>[replacetext(get_access_desc(A), " ", " ")]</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), " ", " ")]</font></a> "
|
||||
else
|
||||
accesses += "<a href='?src=\ref[src];access=[A]'>[replacetext(get_access_desc(A), " ", " ")]</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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
@@ -440,6 +440,10 @@ div.notice {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.alignTop {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
/* Used in PDA */
|
||||
.wholeScreen {
|
||||
position: absolute;
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user