-
-
Notifications
You must be signed in to change notification settings - Fork 444
/
Copy pathairlock_electronics.dm
98 lines (85 loc) · 2.53 KB
/
airlock_electronics.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/obj/item/electronics/airlock
name = "airlock electronics"
req_access = list(ACCESS_MAINT_TUNNELS)
custom_price = 5
/// A list of all granded accesses
var/list/accesses = list()
/// If the airlock should require ALL or only ONE of the listed accesses
var/one_access = 0
/// Unrestricted sides, or sides of the airlock that will open regardless of access
var/unres_sides = 0
/// A holder of the electronics, in case of them working as an integrated part
var/holder
/obj/item/electronics/airlock/examine(mob/user)
. = ..()
. += span_notice("Has a neat <i>selection menu</i> for modifying airlock access levels.")
/obj/item/electronics/airlock/ui_state(mob/user)
return GLOB.always_state
/obj/item/electronics/airlock/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "AirlockElectronics", name)
ui.open()
/obj/item/electronics/airlock/ui_static_data(mob/user)
var/list/data = list()
var/list/regions = list()
for(var/i in 1 to 7)
var/list/accesses = list()
for(var/access in get_region_accesses(i))
if (get_access_desc(access))
accesses += list(list(
"desc" = replacetext(get_access_desc(access), " ", " "),
"ref" = access,
))
regions += list(list(
"name" = get_region_accesses_name(i),
"regid" = i,
"accesses" = accesses
))
data["regions"] = regions
return data
/obj/item/electronics/airlock/ui_data()
var/list/data = list()
data["accesses"] = accesses
data["oneAccess"] = one_access
data["unres_direction"] = unres_sides
return data
/// Shared by RCD and airlock electronics
/obj/item/electronics/airlock/proc/do_action(action, params)
switch(action)
if("clear_all")
accesses = list()
one_access = 0
if("grant_all")
accesses = get_all_accesses()
if("one_access")
one_access = !one_access
if("set")
var/access = (params["access"])
if (!(access in accesses))
accesses += access
else
accesses -= access
if("direc_set")
var/unres_direction = (params["unres_direction"])
unres_sides ^= unres_direction //XOR, toggles only the bit that was clicked
if("grant_region")
var/region = (params["region"])
if(isnull(region))
return
accesses |= get_region_accesses(region)
if("deny_region")
var/region = (params["region"])
if(isnull(region))
return
accesses -= get_region_accesses(region)
/obj/item/electronics/airlock/ui_act(action, params)
. = ..()
if(.)
return
do_action(action, params)
return TRUE
/obj/item/electronics/airlock/ui_host()
if(holder)
return holder
return src