mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-09 07:48:55 +00:00
325 lines
11 KiB
Plaintext
325 lines
11 KiB
Plaintext
/////////////////////////////////////////////////////////////
|
|
// AIR SENSOR (found in gas tanks)
|
|
/////////////////////////////////////////////////////////////
|
|
|
|
/obj/machinery/air_sensor
|
|
name = "gas sensor"
|
|
icon = 'icons/obj/stationobjs.dmi'
|
|
icon_state = "gsensor1"
|
|
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 0)
|
|
|
|
var/on = TRUE
|
|
|
|
var/id_tag
|
|
var/frequency = FREQ_ATMOS_STORAGE
|
|
var/datum/radio_frequency/radio_connection
|
|
|
|
/obj/machinery/air_sensor/atmos/toxin_tank
|
|
name = "plasma tank gas sensor"
|
|
id_tag = ATMOS_GAS_MONITOR_SENSOR_TOX
|
|
/obj/machinery/air_sensor/atmos/toxins_mixing_tank
|
|
name = "toxins mixing gas sensor"
|
|
id_tag = ATMOS_GAS_MONITOR_SENSOR_TOXINS_LAB
|
|
/obj/machinery/air_sensor/atmos/oxygen_tank
|
|
name = "oxygen tank gas sensor"
|
|
id_tag = ATMOS_GAS_MONITOR_SENSOR_O2
|
|
/obj/machinery/air_sensor/atmos/nitrogen_tank
|
|
name = "nitrogen tank gas sensor"
|
|
id_tag = ATMOS_GAS_MONITOR_SENSOR_N2
|
|
/obj/machinery/air_sensor/atmos/mix_tank
|
|
name = "mix tank gas sensor"
|
|
id_tag = ATMOS_GAS_MONITOR_SENSOR_MIX
|
|
/obj/machinery/air_sensor/atmos/nitrous_tank
|
|
name = "nitrous oxide tank gas sensor"
|
|
id_tag = ATMOS_GAS_MONITOR_SENSOR_N2O
|
|
/obj/machinery/air_sensor/atmos/air_tank
|
|
name = "air mix tank gas sensor"
|
|
id_tag = ATMOS_GAS_MONITOR_SENSOR_AIR
|
|
/obj/machinery/air_sensor/atmos/carbon_tank
|
|
name = "carbon dioxide tank gas sensor"
|
|
id_tag = ATMOS_GAS_MONITOR_SENSOR_CO2
|
|
/obj/machinery/air_sensor/atmos/incinerator_tank
|
|
name = "incinerator chamber gas sensor"
|
|
id_tag = ATMOS_GAS_MONITOR_SENSOR_INCINERATOR
|
|
|
|
/obj/machinery/air_sensor/update_icon_state()
|
|
icon_state = "gsensor[on]"
|
|
|
|
/obj/machinery/air_sensor/process_atmos()
|
|
if(on)
|
|
var/datum/gas_mixture/air_sample = return_air()
|
|
|
|
var/datum/signal/signal = new(list(
|
|
"sigtype" = "status",
|
|
"id_tag" = id_tag,
|
|
"timestamp" = world.time,
|
|
"pressure" = air_sample.return_pressure(),
|
|
"temperature" = air_sample.return_temperature(),
|
|
"gases" = list()
|
|
))
|
|
var/total_moles = air_sample.total_moles()
|
|
if(total_moles)
|
|
for(var/gas_id in air_sample.get_gases())
|
|
var/gas_name = GLOB.gas_data.names[gas_id]
|
|
signal.data["gases"][gas_name] = air_sample.get_moles(gas_id) / total_moles * 100
|
|
|
|
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
|
|
|
|
|
|
/obj/machinery/air_sensor/proc/set_frequency(new_frequency)
|
|
SSradio.remove_object(src, frequency)
|
|
frequency = new_frequency
|
|
radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
|
|
|
|
/obj/machinery/air_sensor/Initialize(mapload)
|
|
. = ..()
|
|
SSair.start_processing_machine(src)
|
|
set_frequency(frequency)
|
|
|
|
/obj/machinery/air_sensor/Destroy()
|
|
SSair.stop_processing_machine(src)
|
|
SSradio.remove_object(src, frequency)
|
|
return ..()
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// GENERAL AIR CONTROL (a.k.a atmos computer)
|
|
/////////////////////////////////////////////////////////////
|
|
GLOBAL_LIST_EMPTY(atmos_air_controllers)
|
|
|
|
/obj/machinery/computer/atmos_control
|
|
name = "atmospherics monitoring"
|
|
desc = "Used to monitor the station's atmospherics sensors."
|
|
icon_screen = "tank"
|
|
icon_keyboard = "atmos_key"
|
|
circuit = /obj/item/circuitboard/computer/atmos_control
|
|
light_color = LIGHT_COLOR_CYAN
|
|
|
|
var/frequency = FREQ_ATMOS_STORAGE
|
|
var/list/sensors = list(
|
|
ATMOS_GAS_MONITOR_SENSOR_N2 = "Nitrogen Tank",
|
|
ATMOS_GAS_MONITOR_SENSOR_O2 = "Oxygen Tank",
|
|
ATMOS_GAS_MONITOR_SENSOR_CO2 = "Carbon Dioxide Tank",
|
|
ATMOS_GAS_MONITOR_SENSOR_TOX = "Plasma Tank",
|
|
ATMOS_GAS_MONITOR_SENSOR_N2O = "Nitrous Oxide Tank",
|
|
ATMOS_GAS_MONITOR_SENSOR_AIR = "Mixed Air Tank",
|
|
ATMOS_GAS_MONITOR_SENSOR_MIX = "Mix Tank",
|
|
// ATMOS_GAS_MONITOR_SENSOR_BZ = "BZ Tank",
|
|
// ATMOS_GAS_MONITOR_SENSOR_FREON = "Freon Tank",
|
|
// ATMOS_GAS_MONITOR_SENSOR_HALON = "Halon Tank",
|
|
// ATMOS_GAS_MONITOR_SENSOR_HEALIUM = "Healium Tank",
|
|
// ATMOS_GAS_MONITOR_SENSOR_H2 = "Hydrogen Tank",
|
|
// ATMOS_GAS_MONITOR_SENSOR_HYPERNOBLIUM = "Hypernoblium Tank",
|
|
// ATMOS_GAS_MONITOR_SENSOR_MIASMA = "Miasma Tank",
|
|
// ATMOS_GAS_MONITOR_SENSOR_NO2 = "Nitryl Tank",
|
|
// ATMOS_GAS_MONITOR_SENSOR_PLUOXIUM = "Pluoxium Tank",
|
|
// ATMOS_GAS_MONITOR_SENSOR_PROTO_NITRATE = "Proto-Nitrate Tank",
|
|
// ATMOS_GAS_MONITOR_SENSOR_STIMULUM = "Stimulum Tank",
|
|
// ATMOS_GAS_MONITOR_SENSOR_TRITIUM = "Tritium Tank",
|
|
// ATMOS_GAS_MONITOR_SENSOR_H2O = "Water Vapor Tank",
|
|
// ATMOS_GAS_MONITOR_SENSOR_ZAUKER = "Zauker Tank",
|
|
ATMOS_GAS_MONITOR_LOOP_DISTRIBUTION = "Distribution Loop",
|
|
ATMOS_GAS_MONITOR_LOOP_ATMOS_WASTE = "Atmos Waste Loop",
|
|
ATMOS_GAS_MONITOR_SENSOR_INCINERATOR = "Incinerator Chamber",
|
|
ATMOS_GAS_MONITOR_SENSOR_TOXINS_LAB = "Toxins Mixing Chamber"
|
|
)
|
|
var/list/sensor_information = list()
|
|
var/datum/radio_frequency/radio_connection
|
|
|
|
|
|
/obj/machinery/computer/atmos_control/Initialize(mapload)
|
|
. = ..()
|
|
GLOB.atmos_air_controllers += src
|
|
set_frequency(frequency)
|
|
|
|
/obj/machinery/computer/atmos_control/Destroy()
|
|
GLOB.atmos_air_controllers -= src
|
|
SSradio.remove_object(src, frequency)
|
|
return ..()
|
|
|
|
/obj/machinery/computer/atmos_control/ui_interact(mob/user, datum/tgui/ui)
|
|
ui = SStgui.try_update_ui(user, src, ui)
|
|
if(!ui)
|
|
ui = new(user, src, "AtmosControlConsole", name)
|
|
ui.open()
|
|
|
|
/obj/machinery/computer/atmos_control/ui_data(mob/user)
|
|
var/data = list()
|
|
|
|
data["sensors"] = list()
|
|
for(var/id_tag in sensors)
|
|
var/long_name = sensors[id_tag]
|
|
var/list/info = sensor_information[id_tag]
|
|
if(!info)
|
|
continue
|
|
data["sensors"] += list(list(
|
|
"id_tag" = id_tag,
|
|
"long_name" = sanitize(long_name),
|
|
"pressure" = info["pressure"],
|
|
"temperature" = info["temperature"],
|
|
"gases" = info["gases"]
|
|
))
|
|
return data
|
|
|
|
/obj/machinery/computer/atmos_control/receive_signal(datum/signal/signal)
|
|
if(!signal)
|
|
return
|
|
|
|
var/id_tag = signal.data["id_tag"]
|
|
if(!id_tag || !sensors.Find(id_tag))
|
|
return
|
|
|
|
sensor_information[id_tag] = signal.data
|
|
|
|
/obj/machinery/computer/atmos_control/proc/set_frequency(new_frequency)
|
|
SSradio.remove_object(src, frequency)
|
|
frequency = new_frequency
|
|
radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
|
|
|
|
//Incinerator sensor only
|
|
/obj/machinery/computer/atmos_control/incinerator
|
|
name = "Incinerator Air Control"
|
|
sensors = list(ATMOS_GAS_MONITOR_SENSOR_INCINERATOR = "Incinerator Chamber")
|
|
//Toxins mix sensor only
|
|
/obj/machinery/computer/atmos_control/toxinsmix
|
|
name = "Toxins Mixing Air Control"
|
|
sensors = list(ATMOS_GAS_MONITOR_SENSOR_TOXINS_LAB = "Toxins Mixing Chamber")
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// LARGE TANK CONTROL
|
|
/////////////////////////////////////////////////////////////
|
|
|
|
/obj/machinery/computer/atmos_control/tank
|
|
var/input_tag
|
|
var/output_tag
|
|
frequency = FREQ_ATMOS_STORAGE
|
|
circuit = /obj/item/circuitboard/computer/atmos_control/tank
|
|
var/list/input_info
|
|
var/list/output_info
|
|
|
|
/obj/machinery/computer/atmos_control/tank/oxygen_tank
|
|
name = "Oxygen Supply Control"
|
|
input_tag = ATMOS_GAS_MONITOR_INPUT_O2
|
|
output_tag = ATMOS_GAS_MONITOR_OUTPUT_O2
|
|
sensors = list(ATMOS_GAS_MONITOR_SENSOR_O2 = "Oxygen Tank")
|
|
|
|
/obj/machinery/computer/atmos_control/tank/toxin_tank
|
|
name = "Plasma Supply Control"
|
|
input_tag = ATMOS_GAS_MONITOR_INPUT_TOX
|
|
output_tag = ATMOS_GAS_MONITOR_OUTPUT_TOX
|
|
sensors = list(ATMOS_GAS_MONITOR_SENSOR_TOX = "Plasma Tank")
|
|
|
|
/obj/machinery/computer/atmos_control/tank/air_tank
|
|
name = "Mixed Air Supply Control"
|
|
input_tag = ATMOS_GAS_MONITOR_INPUT_AIR
|
|
output_tag = ATMOS_GAS_MONITOR_OUTPUT_AIR
|
|
sensors = list(ATMOS_GAS_MONITOR_SENSOR_AIR = "Air Mix Tank")
|
|
|
|
/obj/machinery/computer/atmos_control/tank/mix_tank
|
|
name = "Gas Mix Tank Control"
|
|
input_tag = ATMOS_GAS_MONITOR_INPUT_MIX
|
|
output_tag = ATMOS_GAS_MONITOR_OUTPUT_MIX
|
|
sensors = list(ATMOS_GAS_MONITOR_SENSOR_MIX = "Gas Mix Tank")
|
|
|
|
/obj/machinery/computer/atmos_control/tank/nitrous_tank
|
|
name = "Nitrous Oxide Supply Control"
|
|
input_tag = ATMOS_GAS_MONITOR_INPUT_N2O
|
|
output_tag = ATMOS_GAS_MONITOR_OUTPUT_N2O
|
|
sensors = list(ATMOS_GAS_MONITOR_SENSOR_N2O = "Nitrous Oxide Tank")
|
|
|
|
/obj/machinery/computer/atmos_control/tank/nitrogen_tank
|
|
name = "Nitrogen Supply Control"
|
|
input_tag = ATMOS_GAS_MONITOR_INPUT_N2
|
|
output_tag = ATMOS_GAS_MONITOR_OUTPUT_N2
|
|
sensors = list(ATMOS_GAS_MONITOR_SENSOR_N2 = "Nitrogen Tank")
|
|
|
|
/obj/machinery/computer/atmos_control/tank/carbon_tank
|
|
name = "Carbon Dioxide Supply Control"
|
|
input_tag = ATMOS_GAS_MONITOR_INPUT_CO2
|
|
output_tag = ATMOS_GAS_MONITOR_OUTPUT_CO2
|
|
sensors = list(ATMOS_GAS_MONITOR_SENSOR_CO2 = "Carbon Dioxide Tank")
|
|
|
|
// This hacky madness is the evidence of the fact that a lot of machines were never meant to be constructable, im so sorry you had to see this
|
|
/obj/machinery/computer/atmos_control/tank/proc/reconnect(mob/user)
|
|
var/list/IO = list()
|
|
var/datum/radio_frequency/freq = SSradio.return_frequency(frequency)
|
|
var/list/devices = freq.devices["_default"]
|
|
for(var/obj/machinery/atmospherics/components/unary/vent_pump/U in devices)
|
|
var/list/text = splittext(U.id_tag, "_")
|
|
IO |= text[1]
|
|
for(var/obj/machinery/atmospherics/components/unary/outlet_injector/U in devices)
|
|
var/list/text = splittext(U.id, "_")
|
|
IO |= text[1]
|
|
if(!IO.len)
|
|
to_chat(user, "<span class='alert'>No machinery detected.</span>")
|
|
var/S = input("Select the device set: ", "Selection", IO[1]) as anything in sort_list(IO)
|
|
if(src)
|
|
src.input_tag = "[S]_in"
|
|
src.output_tag = "[S]_out"
|
|
name = "[uppertext(S)] Supply Control"
|
|
var/list/new_devices = freq.devices["4"]
|
|
sensors.Cut()
|
|
for(var/obj/machinery/air_sensor/U in new_devices)
|
|
var/list/text = splittext(U.id_tag, "_")
|
|
if(text[1] == S)
|
|
sensors = list("[S]_sensor" = "[S] Tank")
|
|
break
|
|
|
|
for(var/obj/machinery/atmospherics/components/unary/outlet_injector/U in devices)
|
|
U.broadcast_status()
|
|
for(var/obj/machinery/atmospherics/components/unary/vent_pump/U in devices)
|
|
U.broadcast_status()
|
|
|
|
/obj/machinery/computer/atmos_control/tank/ui_data(mob/user)
|
|
var/list/data = ..()
|
|
data["tank"] = TRUE
|
|
data["inputting"] = input_info ? input_info["power"] : FALSE
|
|
data["inputRate"] = input_info ? input_info["volume_rate"] : 0
|
|
data["maxInputRate"] = input_info ? MAX_TRANSFER_RATE : 0
|
|
data["outputting"] = output_info ? output_info["power"] : FALSE
|
|
data["outputPressure"] = output_info ? output_info["internal"] : 0
|
|
data["maxOutputPressure"] = output_info ? MAX_OUTPUT_PRESSURE : 0
|
|
return data
|
|
|
|
/obj/machinery/computer/atmos_control/tank/ui_act(action, params)
|
|
. = ..()
|
|
|
|
if(. || !radio_connection)
|
|
return
|
|
var/datum/signal/signal = new(list("sigtype" = "command", "user" = usr))
|
|
switch(action)
|
|
if("reconnect")
|
|
reconnect(usr)
|
|
. = TRUE
|
|
if("input")
|
|
signal.data += list("tag" = input_tag, "power_toggle" = TRUE)
|
|
. = TRUE
|
|
if("rate")
|
|
var/target = text2num(params["rate"])
|
|
if(!isnull(target))
|
|
target = clamp(target, 0, MAX_TRANSFER_RATE)
|
|
signal.data += list("tag" = input_tag, "set_volume_rate" = target)
|
|
. = TRUE
|
|
if("output")
|
|
signal.data += list("tag" = output_tag, "power_toggle" = TRUE)
|
|
. = TRUE
|
|
if("pressure")
|
|
var/target = text2num(params["pressure"])
|
|
if(!isnull(target))
|
|
target = clamp(target, 0, MAX_OUTPUT_PRESSURE)
|
|
signal.data += list("tag" = output_tag, "set_internal_pressure" = target)
|
|
. = TRUE
|
|
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
|
|
|
|
/obj/machinery/computer/atmos_control/tank/receive_signal(datum/signal/signal)
|
|
if(!signal)
|
|
return
|
|
|
|
var/id_tag = signal.data["tag"]
|
|
|
|
if(input_tag == id_tag)
|
|
input_info = signal.data
|
|
else if(output_tag == id_tag)
|
|
output_info = signal.data
|
|
else
|
|
..(signal)
|