-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
airlock_electronics.dm
117 lines (99 loc) · 3.77 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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/obj/item/airlock_electronics
name = "airlock electronics"
icon = 'icons/obj/doors/door_assembly.dmi'
icon_state = "door_electronics"
w_class = WEIGHT_CLASS_SMALL
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
origin_tech = "engineering=2;programming=1"
req_access = list(ACCESS_ENGINE)
toolspeed = 1
usesound = 'sound/items/deconstruct.ogg'
/// List of accesses currently set
var/list/selected_accesses = list()
/// Is the door access using req_one_access (TRUE) or req_access (FALSE)
var/one_access = FALSE
/// An associative list containing all station accesses. Includes their name and access number.
var/static/list/door_accesses_list = list()
/// Maximum brain damage a mob can have until it can't use the electronics
var/const/max_brain_damage = 60
/// Which direction has unrestricted access to the airlock (e.g. medbay doors from the inside)
var/unres_access_from = null
/obj/item/airlock_electronics/Initialize(mapload)
. = ..()
if(!length(door_accesses_list))
for(var/access in get_all_accesses())
door_accesses_list += list(list(
"name" = get_access_desc(access),
"id" = access))
/obj/item/airlock_electronics/attack_self(mob/user)
if(!ishuman(user) && !isrobot(user))
return ..()
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.getBrainLoss() >= max_brain_damage)
to_chat(user, "<span class='warning'>You forget how to use [src].</span>")
return
ui_interact(user)
// tgui\packages\tgui\interfaces\AirlockElectronics.js
/obj/item/airlock_electronics/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "AirlockElectronics", name, 450, 575, master_ui, state)
ui.open()
/obj/item/airlock_electronics/ui_data(mob/user)
var/list/data = list()
data["selected_accesses"] = selected_accesses
data["one_access"] = one_access
data["unrestricted_dir"] = dir2text(unres_access_from)
return data
/obj/item/airlock_electronics/ui_static_data(mob/user)
var/list/data = list()
data["regions"] = get_accesslist_static_data(REGION_GENERAL, REGION_COMMAND)
data["door_access_list"] = door_accesses_list
return data
/obj/item/airlock_electronics/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
if(..())
return
. = TRUE
// Mostly taken from the RCD code
switch(action)
if("unrestricted_access")
var/direction = text2dir(params["unres_dir"])
if(direction == unres_access_from)
unres_access_from = null // Deselecting
return
unres_access_from = direction
if("set_one_access")
one_access = params["access"] == "one" ? TRUE : FALSE
if("set")
var/access = text2num(params["access"])
if(isnull(access))
return FALSE
if(access in selected_accesses)
selected_accesses -= access
else
selected_accesses |= access
if("grant_region")
var/region = text2num(params["region"])
if(isnull(region) || region < REGION_GENERAL || region > REGION_COMMAND)
return FALSE
selected_accesses |= get_region_accesses(region)
if("deny_region")
var/region = text2num(params["region"])
if(isnull(region) || region < REGION_GENERAL || region > REGION_COMMAND)
return FALSE
selected_accesses -= get_region_accesses(region)
if("grant_all")
selected_accesses = get_all_accesses()
if("clear_all")
selected_accesses = list()
/obj/item/airlock_electronics/destroyed
name = "burned-out airlock electronics"
icon_state = "door_electronics_smoked"
/obj/item/airlock_electronics/destroyed/attack_self(mob/user)
return
/obj/item/airlock_electronics/destroyed/decompile_act(obj/item/matter_decompiler/C, mob/user)
C.stored_comms["metal"] += 1
C.stored_comms["glass"] += 1
qdel(src)
return TRUE