mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 02:09:41 +00:00
TGUI APCs TGUI vending machines Fix AI default_tgui_interaction TGUI Airlocks Station & Atmospheric Alert TGUI + Misc NTOS-TGUI Fixes TGUI Air Alarms & Central Atmospheric Control Airlock TGUI TG... got rid of UI for fire alarm. í´· TGUI Gas Heating/Cooling System TGUI Gas Pump & Passive Gate + Fixes TGUI Omni Atmospherics TGUI Pipe Dispensers & RPD TGUI IntelliCore & Vending Fix TGUI Handheld Tanks TGUI Portable Pump & Scrubber TGUI Tank Dispenser & Canisters TGUI Radios TGUI SMES & Air Alarm adjustment Tweak vending machine interfaces a tad TGUI Algae Farm TGUI general_air_control - Distro & Waste Console - Riot Control Console - Atmos Intake Console - Engine Cooling Console TGUI Heavy Scrubber Control (and body scanner fix) TGUI trinary devices & shutoff monitor TGUI Telecomms Log Browser TGUI Telecomms Machine Browser TGUI Spaceheater Internal Panel TGUI Gravity Generator TGUI Id Cards & Fix ID Card Images TGUI Id Card Redesign TGUI Turbolift TGUI Suit Cycler & Suit Storage Unit & Vending Fixes TGUI Power Monitor TGUI Signalers TGUI Employment Records TGUI Drone Console TGUI RIGSuits TGUI PA & PACMAN, and Margin Fix TGUI Solar Panels & Fix Power Monitor Adjust TGUI modules & their interaction with NTOS TGUI RCON TGUI Message Monitor Bump TGUI line limit to 120 (ParadiseSS13/Paradise#14002) TGUI Exonet & NTNet Relay TGUI Telecomms Multitool Menu TGUI Shield Capacitor & Shield Generator TGUI Supermatter-everything & Refactors
455 lines
13 KiB
Plaintext
455 lines
13 KiB
Plaintext
/obj/machinery/air_sensor
|
|
icon = 'icons/obj/stationobjs.dmi'
|
|
icon_state = "gsensor1"
|
|
name = "Gas Sensor"
|
|
desc = "Senses atmospheric conditions."
|
|
|
|
anchored = 1
|
|
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["oxygen"] = round(100*air_sample.gas["oxygen"]/total_moles,0.1)
|
|
if(output&8)
|
|
signal.data["phoron"] = round(100*air_sample.gas["phoron"]/total_moles,0.1)
|
|
if(output&16)
|
|
signal.data["nitrogen"] = round(100*air_sample.gas["nitrogen"]/total_moles,0.1)
|
|
if(output&32)
|
|
signal.data["carbon_dioxide"] = round(100*air_sample.gas["carbon_dioxide"]/total_moles,0.1)
|
|
else
|
|
signal.data["oxygen"] = 0
|
|
signal.data["phoron"] = 0
|
|
signal.data["nitrogen"] = 0
|
|
signal.data["carbon_dioxide"] = 0
|
|
signal.data["sigtype"]="status"
|
|
radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA)
|
|
|
|
/obj/machinery/air_sensor/proc/set_frequency(new_frequency)
|
|
radio_controller.remove_object(src, frequency)
|
|
frequency = new_frequency
|
|
radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
|
|
|
|
/obj/machinery/air_sensor/Initialize()
|
|
. = ..()
|
|
if(frequency)
|
|
set_frequency(frequency)
|
|
|
|
obj/machinery/air_sensor/Destroy()
|
|
if(radio_controller)
|
|
radio_controller.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/weapon/circuitboard/air_management
|
|
|
|
obj/machinery/computer/general_air_control/Destroy()
|
|
if(radio_controller)
|
|
radio_controller.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)
|
|
radio_controller.remove_object(src, frequency)
|
|
frequency = new_frequency
|
|
radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
|
|
|
|
/obj/machinery/computer/general_air_control/Initialize()
|
|
. = ..()
|
|
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/weapon/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 = 1438
|
|
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/weapon/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/weapon/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 |