Files
CHOMPStation2/code/game/machinery/atmo_control.dm
CHOMPStation2StaffMirrorBot 9a5ca42e91 [MIRROR] Methane Atmogas (#11574)
Co-authored-by: Will <7099514+Willburd@users.noreply.github.com>
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
2025-09-06 13:38:10 -04:00

759 lines
24 KiB
Plaintext

#define SENSOR_PRESSURE (1<<0)
#define SENSOR_TEMPERATURE (1<<1)
#define SENSOR_O2 (1<<2)
#define SENSOR_PHORON (1<<3)
#define SENSOR_N2 (1<<4)
#define SENSOR_CO2 (1<<5)
#define SENSOR_N2O (1<<6)
#define SENSOR_CH4 (1<<7)
/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 = PUMPS_FREQ
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)
if(output&64)
signal.data[GAS_CH4] = round(100*air_sample.gas[GAS_CH4]/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[GAS_CH4] = 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/air_sensor/attackby(obj/item/W, mob/user)
if(W.has_tool_quality(TOOL_WRENCH))
return wrench_act(user, W)
if(W.has_tool_quality(TOOL_MULTITOOL))
return multitool_act(user, W)
return ..()
/obj/machinery/air_sensor/proc/wrench_act(var/mob/living/user, var/obj/item/tool/wrench/W)
playsound(src, W.usesound, 50, 1)
user.visible_message("[user] unfastens \the [src].", span_notice("You have unfastened \the [src]."), "You hear ratcheting.")
var/obj/item/pipe_gsensor/gsensor = new /obj/item/pipe_gsensor(loc)
gsensor.id_tag = id_tag
gsensor.output = output
qdel(src)
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
#define ONOFF_TOGGLE(flag) "\[[(output & flag) ? "YES" : "NO"]]"
/obj/machinery/air_sensor/proc/multitool_act(mob/living/user, obj/item/multitool/tool)
var/list/options = list(
"Pressure: [ONOFF_TOGGLE(SENSOR_PRESSURE)]" = SENSOR_PRESSURE,
"Temperature: [ONOFF_TOGGLE(SENSOR_TEMPERATURE)]" = SENSOR_TEMPERATURE,
"[GASNAME_O2]: [ONOFF_TOGGLE(SENSOR_O2)]" = SENSOR_O2,
"[GASNAME_PHORON]: [ONOFF_TOGGLE(SENSOR_PHORON)]" = SENSOR_PHORON,
"[GASNAME_N2]: [ONOFF_TOGGLE(SENSOR_N2)]" = SENSOR_N2,
"[GASNAME_CO2]: [ONOFF_TOGGLE(SENSOR_CO2)]" = SENSOR_CO2,
"[GASNAME_N2O]: [ONOFF_TOGGLE(SENSOR_N2O)]" = SENSOR_N2O,
"[GASNAME_CH4]: [ONOFF_TOGGLE(SENSOR_CH4)]" = SENSOR_CH4,
"-SAVE TO BUFFER-" = "multitool"
)
var/answer = tgui_input_list(user, "[src] has an ID of \"[id_tag]\" and a frequency of [frequency]. What would you like to change?", "Options!", options)
if(!(src in view(5, user)))
return TRUE
if(answer in options) // Null will break us out
switch(options[answer])
if(SENSOR_PRESSURE)
output ^= SENSOR_PRESSURE
if(SENSOR_TEMPERATURE)
output ^= SENSOR_TEMPERATURE
if(SENSOR_O2)
output ^= SENSOR_O2
if(SENSOR_PHORON)
output ^= SENSOR_PHORON
if(SENSOR_N2)
output ^= SENSOR_N2
if(SENSOR_CO2)
output ^= SENSOR_CO2
if(SENSOR_N2O)
output ^= SENSOR_N2O
if(SENSOR_CH4)
output ^= SENSOR_CH4
if("frequency")
var/new_frequency = tgui_input_number(user, "[src] has a frequency of [frequency]. What would you like it to be?", "[src] frequency", frequency, RADIO_HIGH_FREQ, RADIO_LOW_FREQ)
if(new_frequency)
new_frequency = sanitize_frequency(new_frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
set_frequency(new_frequency)
if("multitool")
id_tag = tgui_input_text(user, "Please insert an ID tag for [src], example 'burn_chamber'.", "Set ID Tag", id_tag, MAX_NAME_LEN, FALSE)
if(!id_tag || !Adjacent(user))
return
var/obj/item/multitool/M = tool
M.connectable = src
to_chat(user, span_notice("You save [src] into [M]'s buffer."))
return TRUE
#undef ONOFF_TOGGLE
/obj/machinery/computer/general_air_control
icon_keyboard = "atmos_key"
icon_screen = "tank"
name = "Computer"
desc = "Control atmospheric systems, remotely."
var/frequency = PUMPS_FREQ
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/attackby(obj/item/W, mob/user)
if(W.has_tool_quality(TOOL_MULTITOOL))
return multitool_act(W, user)
. = ..(W, 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/proc/multitool_act(obj/item/W, mob/user)
var/list/options = list("Sensors", "Frequency", "Cancel")
var/answer = tgui_input_list(user, "[src] has a frequency of [frequency]. What would you like to change?", "Options!", options)
. = TRUE
if(!answer || answer == "Cancel" || !Adjacent(user))
return
switch(answer)
if("Sensors")
configure_sensors(user, W)
if("Frequency")
var/new_frequency = tgui_input_number(user, "[src] has a frequency of [frequency]. What would you like it to be?", "[src] frequency", frequency, RADIO_HIGH_FREQ, RADIO_LOW_FREQ)
if(new_frequency)
new_frequency = sanitize_frequency(new_frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
set_frequency(new_frequency)
return
/obj/machinery/computer/general_air_control/proc/configure_sensors(mob/living/user, obj/item/multitool/tool)
to_chat(user, "CONFIGURE SENSOR FUNC")
var/choice = tgui_input_list(user, "Would you like to add or remove a sensor/meter?", "Configuration", list("Add", "Remove","Cancel"))
if( !choice || choice == "Cancel" || !Adjacent(user))
return
switch(choice)
if("Add")
// Device must be a meter or gas sensor.
var/obj/machinery/device = tool.connectable
if(!device || !(istype(device, /obj/machinery/meter)) && !(istype(device, /obj/machinery/air_sensor)))
to_chat(user, span_warning("Error: No device in multitool buffer, or incompatible device is not a sensor or meter."))
return
var/device_name = tgui_input_text(user, "Enter a name for the Sensor/Meter.", "Name")
if (!device_name || !Adjacent(user))
to_chat(user, span_warning("Error: No name was given for [tool.connectable]."))
return
if(istype(device, /obj/machinery/air_sensor))
var/obj/machinery/air_sensor/AS = device
sensors[AS.id_tag] = device_name
else
var/obj/machinery/meter/M = device
sensors[M.id] = device_name
to_chat(user, span_notice("You have added the [tool.connectable] to the [src] under the name [device_name]!"))
if("Remove")
// Creates an associative mapping of Names to Tags, from Tags to Names.
var/list/sensor_names = list()
for(tag in sensors)
sensor_names[sensors[tag]] = sensors[tag]
var/to_remove = tgui_input_list(user, "Select a sensor/meter to remove", "Sensor/Meter Removal", sensor_names)
if(!to_remove)
return
var/confirm = tgui_alert(user, "Are you sure you want to remove the sensor/meter '[to_remove]'?", "Warning", list("Yes", "No"))
if(confirm != "Yes" || !Adjacent(user))
return
sensors -= sensor_names[to_remove]
to_chat(user, span_notice("Successfully removed sensor/meter with name [to_remove]"))
/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 = PUBLIC_LOW_FREQ
name = "Large Tank Computer"
desc = "Controls various devices for managing a gas tank."
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/large_tank_control/multitool_act(obj/item/W, mob/user)
var/list/options = list("Inlet", "Outlet", "Sensors", "Frequency", "Cancel")
var/choice = tgui_input_list(user, "[src] has a frequency of [frequency]. What would you like to change?", "Configuration", options)
if(!choice || choice == "Cancel" || !Adjacent(user))
return
switch(choice)
if ("Inlet")
configure_inlet(user, W)
if ("Outlet")
configure_outlet(user, W)
if ("Sensors")
configure_sensors(user, W)
if ("Frequency")
var/new_frequency = tgui_input_number(user, "[src] has a frequency of [frequency]. What would you like it to be?", "[src] frequency", frequency, RADIO_HIGH_FREQ, RADIO_LOW_FREQ)
if(new_frequency)
new_frequency = sanitize_frequency(new_frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
set_frequency(new_frequency)
return TRUE
/obj/machinery/computer/general_air_control/large_tank_control/proc/configure_outlet(mob/living/user, obj/item/multitool/tool)
var/choice = tgui_alert(user, "Would you like to set an outlet or clear it?", "Configuration", list("Set", "Clear", "Cancel"))
if(!choice || !Adjacent(user) || choice == "Cancel")
return
switch(choice)
if ("Set")
to_chat(user, span_notice("The buffer is [tool.connectable]"))
if (!istype(tool.connectable, /obj/machinery/atmospherics/unary/vent_pump))
to_chat(user, span_notice("Error: Buffer is either empty, or object in buffer is invalid. Device should be a Unary Vent."))
return
var/obj/machinery/atmospherics/unary/vent_pump/pump = tool.connectable
output_tag = pump.id_tag
pump.external_pressure_bound = 0
pump.external_pressure_bound_default = 0
to_chat(user, span_notice("You have set the outlet!"))
return
if ("Clear")
output_tag = null
to_chat(user, span_notice("You have cleared the outlet!"))
return
/obj/machinery/computer/general_air_control/large_tank_control/proc/configure_inlet(mob/living/user, obj/item/multitool/tool)
var/choice = tgui_alert(user, "Would you like to set an inlet or clear it?", "Configuration", list("Set", "Clear", "Cancel"))
if(!choice || !Adjacent(user) || choice == "Cancel")
return
switch(choice)
if ("Set")
if (!istype(tool.connectable, /obj/machinery/atmospherics/unary/outlet_injector))
to_chat(user, span_notice("Error: Buffer is either empty, or object in buffer is invalid. Device should be Injector"))
return
var/obj/machinery/atmospherics/unary/outlet_injector/injector = tool.connectable
input_tag = injector.id
to_chat(user, span_notice("You have set the inlet"))
return
if ("Clear")
input_tag = null
to_chat(user, span_notice("You have cleared the inlet!"))
return
/obj/machinery/computer/general_air_control/supermatter_core
icon = 'icons/obj/computer.dmi'
frequency = ENGINE_FREQ
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/supermatter_core/multitool_act(obj/item/W, mob/user)
var/list/options = list("Inlet", "Outlet", "Sensors", "Frequency")
var/choice = tgui_input_list(user, "[src] has a frequency of [frequency]. What would you like to change?", "Configuration", options)
if(!choice || choice == "Cancel" || !Adjacent(user))
return
switch(choice)
if ("Inlet")
configure_inlet(user, W)
if ("Outlet")
configure_outlet(user, W)
if ("Sensors")
configure_sensors(user, W)
if ("Frequency")
var/new_frequency = tgui_input_number(user, "[src] has a frequency of [frequency]. What would you like it to be?", "[src] frequency", frequency, RADIO_HIGH_FREQ, RADIO_LOW_FREQ)
if(new_frequency)
new_frequency = sanitize_frequency(new_frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
set_frequency(new_frequency)
return TRUE
/obj/machinery/computer/general_air_control/supermatter_core/proc/configure_outlet(mob/living/user, obj/item/multitool/tool)
var/choice = tgui_alert(user, "Would you like to set an outlet or clear it?", "Configuration", list("Set", "Clear", "Cancel"))
if(!choice || !Adjacent(user) || choice == "Cancel")
return
switch(choice)
if ("Set")
if (!istype(tool.connectable, /obj/machinery/atmospherics/unary/vent_pump))
to_chat(user, span_warning("Error: Buffer is either empty, or object in buffer is invalid. Device should be Air Vent"))
return
var/obj/machinery/atmospherics/unary/vent_pump/pump = tool.connectable
output_tag = pump.id_tag
pump.external_pressure_bound = 0
pump.external_pressure_bound_default = 0
to_chat(user, span_notice("You have set the outlet!"))
return
if ("Clear")
output_tag = null
to_chat(user, span_notice("You have cleared the outlet!"))
return
/obj/machinery/computer/general_air_control/supermatter_core/proc/configure_inlet(mob/living/user, obj/item/multitool/tool)
var/choice = tgui_alert(user, "Would you like to set an inlet or clear it?", "Configuration", list("Set", "Clear", "Cancel"))
if(!choice || !Adjacent(user) || choice == "Cancel")
return
switch(choice)
if ("Set")
to_chat(user, span_notice("The buffer is [tool.connectable]"))
if (!istype(tool.connectable, /obj/machinery/atmospherics/unary/outlet_injector))
to_chat(user, span_warning("Error: Buffer is either empty, or object in buffer is invalid. Device should be Injector"))
return
var/obj/machinery/atmospherics/unary/outlet_injector/injector = tool.connectable
input_tag = injector.id
to_chat(user, span_notice("You have set the inlet!"))
return
if ("Clear")
input_tag = null
to_chat(user, span_notice("You have cleared the inlet!"))
return
/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
#undef SENSOR_PRESSURE
#undef SENSOR_TEMPERATURE
#undef SENSOR_O2
#undef SENSOR_PHORON
#undef SENSOR_N2
#undef SENSOR_CO2
#undef SENSOR_N2O
#undef SENSOR_CH4