/* * 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()