/obj/machinery/air_sensor icon = 'icons/obj/stationobjs.dmi' icon_state = "gsensor1" name = "Gas Sensor" desc = "Senses atmospheric conditions." anchored = TRUE var/state = 0 var/id_tag var/frequency = 1439 var/on = 1 var/output = 3 //Flags: // 1 for pressure // 2 for temperature // Output >= 4 includes gas composition // 4 for oxygen concentration // 8 for phoron concentration // 16 for nitrogen concentration // 32 for carbon dioxide concentration var/datum/radio_frequency/radio_connection /obj/machinery/air_sensor/update_icon() icon_state = "gsensor[on]" /obj/machinery/air_sensor/process() if(on) var/datum/signal/signal = new signal.transmission_method = TRANSMISSION_RADIO //radio signal signal.data["tag"] = id_tag signal.data["timestamp"] = world.time var/datum/gas_mixture/air_sample = return_air() if(output&1) signal.data["pressure"] = num2text(round(air_sample.return_pressure(),0.1),) if(output&2) signal.data["temperature"] = round(air_sample.temperature,0.1) if(output>4) var/total_moles = air_sample.total_moles if(total_moles > 0) if(output&4) signal.data[GAS_O2] = round(100*air_sample.gas[GAS_O2]/total_moles,0.1) if(output&8) signal.data[GAS_PHORON] = round(100*air_sample.gas[GAS_PHORON]/total_moles,0.1) if(output&16) signal.data[GAS_N2] = round(100*air_sample.gas[GAS_N2]/total_moles,0.1) if(output&32) signal.data[GAS_CO2] = round(100*air_sample.gas[GAS_CO2]/total_moles,0.1) else signal.data[GAS_O2] = 0 signal.data[GAS_PHORON] = 0 signal.data[GAS_N2] = 0 signal.data[GAS_CO2] = 0 signal.data["sigtype"]="status" radio_connection.post_signal(src, signal, radio_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) . = ..() if(frequency) set_frequency(frequency) /obj/machinery/air_sensor/Destroy() if(SSradio) SSradio.remove_object(src,frequency) . = ..() /obj/machinery/computer/general_air_control icon_keyboard = "atmos_key" icon_screen = "tank" name = "Computer" desc = "Control atmospheric systems, remotely." var/frequency = 1439 var/list/sensors = list() var/list/sensor_information = list() var/datum/radio_frequency/radio_connection circuit = /obj/item/circuitboard/air_management /obj/machinery/computer/general_air_control/Destroy() if(SSradio) SSradio.remove_object(src, frequency) . = ..() /obj/machinery/computer/general_air_control/attack_hand(mob/user) if(..(user)) return tgui_interact(user) /obj/machinery/computer/general_air_control/receive_signal(datum/signal/signal) if(!signal || signal.encryption) return var/id_tag = signal.data["tag"] if(!id_tag || !sensors.Find(id_tag)) return sensor_information[id_tag] = signal.data /obj/machinery/computer/general_air_control/tgui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "GeneralAtmoControl", name) ui.open() /obj/machinery/computer/general_air_control/tgui_data(mob/user) var/list/data = list() var/sensors_ui[0] if(sensors.len) for(var/id_tag in sensors) var/long_name = sensors[id_tag] var/list/sensor_data = sensor_information[id_tag] sensors_ui[++sensors_ui.len] = list("long_name" = long_name, "sensor_data" = sensor_data) else sensors_ui = null data["sensors"] = sensors_ui return data /obj/machinery/computer/general_air_control/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/computer/general_air_control/Initialize(mapload) . = ..() if(frequency) set_frequency(frequency) /obj/machinery/computer/general_air_control/large_tank_control icon = 'icons/obj/computer.dmi' frequency = 1441 var/input_tag var/output_tag var/list/input_info var/list/output_info var/input_flow_setting = 200 var/pressure_setting = ONE_ATMOSPHERE * 45 circuit = /obj/item/circuitboard/air_management/tank_control /obj/machinery/computer/general_air_control/large_tank_control/tgui_data(mob/user) var/list/data = ..() data["tanks"] = 1 if(input_info) data["input_info"] = list("power" = input_info["power"], "volume_rate" = round(input_info["volume_rate"], 0.1)) else data["input_info"] = null if(output_info) data["output_info"] = list("power" = output_info["power"], "output_pressure" = output_info["internal"]) else data["output_info"] = null data["input_flow_setting"] = round(input_flow_setting, 0.1) data["pressure_setting"] = pressure_setting data["max_pressure"] = 50*ONE_ATMOSPHERE data["max_flowrate"] = ATMOS_DEFAULT_VOLUME_PUMP + 500 return data /obj/machinery/computer/general_air_control/large_tank_control/receive_signal(datum/signal/signal) if(!signal || signal.encryption) 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) /obj/machinery/computer/general_air_control/large_tank_control/tgui_act(action, params) if(..()) return TRUE switch(action) if("adj_pressure") var/new_pressure = text2num(params["adj_pressure"]) pressure_setting = between(0, new_pressure, 50*ONE_ATMOSPHERE) return TRUE if("adj_input_flow_rate") var/new_flow = text2num(params["adj_input_flow_rate"]) input_flow_setting = between(0, new_flow, ATMOS_DEFAULT_VOLUME_PUMP + 500) //default flow rate limit for air injectors return TRUE if(!radio_connection) return FALSE var/datum/signal/signal = new signal.transmission_method = TRANSMISSION_RADIO //radio signal signal.source = src switch(action) if("in_refresh_status") input_info = null signal.data = list ("tag" = input_tag, "status" = 1) . = TRUE if("in_toggle_injector") input_info = null signal.data = list ("tag" = input_tag, "power_toggle" = 1) . = TRUE if("in_set_flowrate") input_info = null signal.data = list ("tag" = input_tag, "set_volume_rate" = "[input_flow_setting]") . = TRUE if("out_refresh_status") output_info = null signal.data = list ("tag" = output_tag, "status" = 1) . = TRUE if("out_toggle_power") output_info = null signal.data = list ("tag" = output_tag, "power_toggle" = 1) . = TRUE if("out_set_pressure") output_info = null signal.data = list ("tag" = output_tag, "set_internal_pressure" = "[pressure_setting]") . = TRUE signal.data["sigtype"]="command" radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) /obj/machinery/computer/general_air_control/supermatter_core icon = 'icons/obj/computer.dmi' frequency = 1433 var/input_tag var/output_tag var/list/input_info var/list/output_info var/input_flow_setting = 700 var/pressure_setting = 100 circuit = /obj/item/circuitboard/air_management/supermatter_core /obj/machinery/computer/general_air_control/supermatter_core/tgui_data(mob/user) var/list/data = ..() data["core"] = 1 if(input_info) data["input_info"] = list("power" = input_info["power"], "volume_rate" = round(input_info["volume_rate"], 0.1)) else data["input_info"] = null if(output_info) // Yes, TECHNICALLY this is not output pressure, it's a pressure LIMIT. HOWEVER. The fact that the UI uses "output_pressure" // in EXACTLY THE SAME WAY as "pressure_limit" means this should just pass it as the other fucking data argument because holy shit what the // fuck data["output_info"] = list("power" = output_info["power"], "output_pressure" = output_info["external"]) else data["output_info"] = null data["input_flow_setting"] = round(input_flow_setting, 0.1) data["pressure_setting"] = pressure_setting data["max_pressure"] = 10*ONE_ATMOSPHERE data["max_flowrate"] = ATMOS_DEFAULT_VOLUME_PUMP + 500 return data /obj/machinery/computer/general_air_control/supermatter_core/receive_signal(datum/signal/signal) if(!signal || signal.encryption) 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) /obj/machinery/computer/general_air_control/supermatter_core/tgui_act(action, params) if(..()) return TRUE switch(action) if("adj_pressure") var/new_pressure = text2num(params["adj_pressure"]) pressure_setting = between(0, new_pressure, 10*ONE_ATMOSPHERE) return TRUE if("adj_input_flow_rate") var/new_flow = text2num(params["adj_input_flow_rate"]) input_flow_setting = between(0, new_flow, ATMOS_DEFAULT_VOLUME_PUMP + 500) //default flow rate limit for air injectors return TRUE if(!radio_connection) return FALSE var/datum/signal/signal = new signal.transmission_method = TRANSMISSION_RADIO //radio signal signal.source = src switch(action) if("in_refresh_status") input_info = null signal.data = list ("tag" = input_tag, "status" = 1) . = TRUE if("in_toggle_injector") input_info = null signal.data = list ("tag" = input_tag, "power_toggle" = 1) . = TRUE if("in_set_flowrate") input_info = null signal.data = list ("tag" = input_tag, "set_volume_rate" = "[input_flow_setting]") . = TRUE if("out_refresh_status") output_info = null signal.data = list ("tag" = output_tag, "status" = 1) . = TRUE if("out_toggle_power") output_info = null signal.data = list ("tag" = output_tag, "power_toggle" = 1) . = TRUE if("out_set_pressure") output_info = null signal.data = list ("tag" = output_tag, "set_external_pressure" = "[pressure_setting]", "checks" = 1) . = TRUE signal.data["sigtype"]="command" radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) /obj/machinery/computer/general_air_control/fuel_injection icon = 'icons/obj/computer.dmi' icon_screen = "alert:0" var/device_tag var/list/device_info var/automation = 0 var/cutoff_temperature = 2000 var/on_temperature = 1200 circuit = /obj/item/circuitboard/air_management/injector_control /obj/machinery/computer/general_air_control/fuel_injection/process() if(automation) if(!radio_connection) return FALSE var/injecting = 0 for(var/id_tag in sensor_information) var/list/data = sensor_information[id_tag] if(data["temperature"]) if(data["temperature"] >= cutoff_temperature) injecting = 0 break if(data["temperature"] <= on_temperature) injecting = 1 var/datum/signal/signal = new signal.transmission_method = TRANSMISSION_RADIO //radio signal signal.source = src signal.data = list( "tag" = device_tag, "power" = injecting, "sigtype"="command" ) radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) ..() /obj/machinery/computer/general_air_control/fuel_injection/tgui_data(mob/user) var/list/data = ..() data["fuel"] = 1 data["automation"] = automation if(device_info) data["device_info"] = list("power" = device_info["power"], "volume_rate" = device_info["volume_rate"]) else data["device_info"] = null return data /obj/machinery/computer/general_air_control/fuel_injection/receive_signal(datum/signal/signal) if(!signal || signal.encryption) return var/id_tag = signal.data["tag"] if(device_tag == id_tag) device_info = signal.data else ..(signal) /obj/machinery/computer/general_air_control/fuel_injection/tgui_act(action, params) if(..()) return TRUE switch(action) if("refresh_status") device_info = null if(!radio_connection) return FALSE var/datum/signal/signal = new signal.transmission_method = TRANSMISSION_RADIO //radio signal signal.source = src signal.data = list( "tag" = device_tag, "status" = 1, "sigtype"="command" ) radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) . = TRUE if("toggle_automation") automation = !automation . = TRUE if("toggle_injector") device_info = null if(!radio_connection) return FALSE var/datum/signal/signal = new signal.transmission_method = TRANSMISSION_RADIO //radio signal signal.source = src signal.data = list( "tag" = device_tag, "power_toggle" = 1, "sigtype"="command" ) radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) . = TRUE if("injection") if(!radio_connection) return FALSE var/datum/signal/signal = new signal.transmission_method = TRANSMISSION_RADIO //radio signal signal.source = src signal.data = list( "tag" = device_tag, "inject" = 1, "sigtype"="command" ) radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) . = TRUE