/*
* Airtunnel -- the airtunnel computer
* Controls extention and retraction of the tunnel, and regulation of the atmosphere in it.
*
* Note: Currently, only 1 airtunnel per map can be operated; there is no link to the global airtunnel datum
*/
obj/machinery/computer/airtunnel
name = "Air Tunnel Control"
icon = 'airtunnelcomputer.dmi'
icon_state = "console00"
// Update icon_state depending on computer and airtunnel status
proc/update_icon()
if(stat & BROKEN)
icon_state = "broken"
return
if(stat & NOPOWER)
icon_state = "c_unpowered"
return
var/status = 0
if (SS13_airtunnel.operating == 1)
status = "r"
else if (SS13_airtunnel.operating == 2)
status = "e"
else
var/obj/move/airtunnel/connector/C = pick(SS13_airtunnel.connectors)
if (C.current == C)
status = 0
else if (!( C.current.next ))
status = 2
else
status = 1
src.icon_state = "console[SS13_airtunnel.siphon_status >= 2 ? "1" : "0"][status]"
// Timed process
// Update the icon, use power, and update interaction window for viewers
process()
src.update_icon()
if(stat & (NOPOWER|BROKEN) )
return
use_power(250)
src.updateDialog()
// Monkey interct same as human
attack_paw(mob/user)
return src.attack_hand(user)
// AI interact
attack_ai(mob/user)
return src.attack_hand(user)
// Human interact
// Show airtunnel status and interaction window
attack_hand(mob/user)
if(stat & (NOPOWER|BROKEN) )
return
var/dat = "
Air Tunnel Controls
"
user.machine = src
if (SS13_airtunnel.operating == 1)
dat += "Status: RETRACTING
"
else if (SS13_airtunnel.operating == 2)
dat += "Status: EXPANDING
"
else
var/obj/move/airtunnel/connector/C = pick(SS13_airtunnel.connectors)
if (C.current == C)
dat += "Status: Fully Retracted
"
else if (!( C.current.next ))
dat += "Status: Fully Extended
"
else
dat += "Status: Stopped Midway
"
dat += "Retract Stop Extend
"
dat += "
Air Level: [(SS13_airtunnel.air_stat ? "Acceptable" : "DANGEROUS")]
"
dat += "Air System Status: "
switch(SS13_airtunnel.siphon_status)
if(0.0)
dat += "Stopped "
if(1.0)
dat += "Siphoning (Siphons only) "
if(2.0)
dat += "Regulating (BOTH) "
if(3.0)
dat += "RELEASING MAX (Siphons only) "
dat += "(Refresh)
"
dat += "RELEASE (Siphons only) Siphon (Siphons only) Stop Regulate
"
dat += "
Close"
user.client_mob() << browse(dat, "window=computer;size=400x500")
// Handle topic links from interaction window
// Control the airtunnel through the global datum
Topic(href, href_list)
..()
if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey"))))
if (!istype(usr, /mob/ai))
if (!istype(usr, /mob/drone))
usr.client_mob() << "\red You don't have the dexterity to do this!"
return
if ((usr.stat || usr.restrained()))
if (!istype(usr, /mob/ai))
return
if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)) || (istype(usr, /mob/ai))))
usr.machine = src
if (href_list["retract"])
SS13_airtunnel.retract()
else if (href_list["stop"])
SS13_airtunnel.operating = 0
else if (href_list["extend"])
SS13_airtunnel.extend()
else if (href_list["release"])
SS13_airtunnel.siphon_status = 3
SS13_airtunnel.siphons()
else if (href_list["siphon"])
SS13_airtunnel.siphon_status = 1
SS13_airtunnel.siphons()
else if (href_list["stop_siph"])
SS13_airtunnel.siphon_status = 0
SS13_airtunnel.siphons()
else if (href_list["auto"])
SS13_airtunnel.siphon_status = 2
SS13_airtunnel.siphons()
else if (href_list["refresh"])
SS13_airtunnel.siphons()
src.add_fingerprint(usr)
src.updateDialog()