mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-11 10:22:13 +00:00
Merge pull request #10501 from Putnam3145/more-atmos
Adds a couple relief valves
This commit is contained in:
@@ -19,12 +19,14 @@ GLOBAL_LIST_INIT(atmos_pipe_recipes, list(
|
||||
new /datum/pipe_info/pipe("Manifold", /obj/machinery/atmospherics/pipe/manifold),
|
||||
new /datum/pipe_info/pipe("Manual Valve", /obj/machinery/atmospherics/components/binary/valve),
|
||||
new /datum/pipe_info/pipe("Digital Valve", /obj/machinery/atmospherics/components/binary/valve/digital),
|
||||
new /datum/pipe_info/pipe("Relief Valve", /obj/machinery/atmospherics/components/binary/relief_valve),
|
||||
new /datum/pipe_info/pipe("4-Way Manifold", /obj/machinery/atmospherics/pipe/manifold4w),
|
||||
new /datum/pipe_info/pipe("Layer Manifold", /obj/machinery/atmospherics/pipe/layer_manifold),
|
||||
),
|
||||
"Devices" = list(
|
||||
new /datum/pipe_info/pipe("Connector", /obj/machinery/atmospherics/components/unary/portables_connector),
|
||||
new /datum/pipe_info/pipe("Unary Vent", /obj/machinery/atmospherics/components/unary/vent_pump),
|
||||
new /datum/pipe_info/pipe("Relief Valve", /obj/machinery/atmospherics/components/unary/relief_valve),
|
||||
new /datum/pipe_info/pipe("Gas Pump", /obj/machinery/atmospherics/components/binary/pump),
|
||||
new /datum/pipe_info/pipe("Passive Gate", /obj/machinery/atmospherics/components/binary/passive_gate),
|
||||
new /datum/pipe_info/pipe("Volume Pump", /obj/machinery/atmospherics/components/binary/volume_pump),
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
/obj/machinery/atmospherics/components/binary/relief_valve
|
||||
name = "binary pressure relief valve"
|
||||
desc = "Like a manual valve, but opens at a certain pressure rather than being toggleable."
|
||||
icon = 'icons/obj/atmospherics/components/relief_valve.dmi'
|
||||
icon_state = "relief_valve-t-map"
|
||||
can_unwrench = TRUE
|
||||
construction_type = /obj/item/pipe/binary
|
||||
var/opened = FALSE
|
||||
var/open_pressure = ONE_ATMOSPHERE * 3
|
||||
var/close_pressure = ONE_ATMOSPHERE
|
||||
pipe_state = "relief_valve-t"
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/relief_valve/layer1
|
||||
piping_layer = PIPING_LAYER_MIN
|
||||
pixel_x = -PIPING_LAYER_P_X
|
||||
pixel_y = -PIPING_LAYER_P_Y
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/relief_valve/layer3
|
||||
piping_layer = PIPING_LAYER_MAX
|
||||
pixel_x = PIPING_LAYER_P_X
|
||||
pixel_y = PIPING_LAYER_P_Y
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/relief_valve/update_icon_nopipes()
|
||||
if(dir==SOUTH)
|
||||
setDir(NORTH)
|
||||
else if(dir==WEST)
|
||||
setDir(EAST)
|
||||
cut_overlays()
|
||||
|
||||
if(!nodes[1] || !opened || !is_operational())
|
||||
icon_state = "relief_valve-t"
|
||||
return
|
||||
|
||||
icon_state = "relief_valve-t-blown"
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/relief_valve/proc/open()
|
||||
opened = TRUE
|
||||
update_icon_nopipes()
|
||||
update_parents()
|
||||
var/datum/pipeline/parent1 = parents[1]
|
||||
parent1.reconcile_air()
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/relief_valve/proc/close()
|
||||
opened = FALSE
|
||||
update_icon_nopipes()
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/relief_valve/process_atmos()
|
||||
..()
|
||||
|
||||
if(!is_operational())
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/air_contents = airs[1]
|
||||
var/our_pressure = air_contents.return_pressure()
|
||||
if(opened && our_pressure < close_pressure)
|
||||
close()
|
||||
else if(!opened && our_pressure >= open_pressure)
|
||||
open()
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/relief_valve/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "atmos_relief", name, 335, 115, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/relief_valve/ui_data()
|
||||
var/data = list()
|
||||
data["open_pressure"] = round(open_pressure)
|
||||
data["close_pressure"] = round(close_pressure)
|
||||
data["max_pressure"] = round(50*ONE_ATMOSPHERE)
|
||||
return data
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/relief_valve/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
switch(action)
|
||||
if("open_pressure")
|
||||
var/pressure = params["open_pressure"]
|
||||
if(pressure == "max")
|
||||
pressure = 50*ONE_ATMOSPHERE
|
||||
. = TRUE
|
||||
else if(pressure == "input")
|
||||
pressure = input("New output pressure ([close_pressure]-[50*ONE_ATMOSPHERE] kPa):", name, open_pressure) as num|null
|
||||
if(!isnull(pressure) && !..())
|
||||
. = TRUE
|
||||
else if(text2num(pressure) != null)
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
open_pressure = CLAMP(pressure, close_pressure, 50*ONE_ATMOSPHERE)
|
||||
investigate_log("open pressure was set to [open_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS)
|
||||
if("close_pressure")
|
||||
var/pressure = params["close_pressure"]
|
||||
if(pressure == "max")
|
||||
pressure = open_pressure
|
||||
. = TRUE
|
||||
else if(pressure == "input")
|
||||
pressure = input("New output pressure (0-[open_pressure] kPa):", name, close_pressure) as num|null
|
||||
if(!isnull(pressure) && !..())
|
||||
. = TRUE
|
||||
else if(text2num(pressure) != null)
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
close_pressure = CLAMP(pressure, 0, open_pressure)
|
||||
investigate_log("close pressure was set to [close_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS)
|
||||
update_icon()
|
||||
@@ -0,0 +1,111 @@
|
||||
/obj/machinery/atmospherics/components/unary/relief_valve
|
||||
name = "pressure relief valve"
|
||||
desc = "A valve that opens to the air at a certain pressure, then closes once it goes below another."
|
||||
icon = 'icons/obj/atmospherics/components/relief_valve.dmi'
|
||||
icon_state = "relief_valve-e-map"
|
||||
can_unwrench = TRUE
|
||||
var/opened = FALSE
|
||||
var/open_pressure = ONE_ATMOSPHERE * 3
|
||||
var/close_pressure = ONE_ATMOSPHERE
|
||||
pipe_state = "relief_valve-e"
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/relief_valve/layer1
|
||||
piping_layer = PIPING_LAYER_MIN
|
||||
pixel_x = -PIPING_LAYER_P_X
|
||||
pixel_y = -PIPING_LAYER_P_Y
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/relief_valve/layer3
|
||||
piping_layer = PIPING_LAYER_MAX
|
||||
pixel_x = PIPING_LAYER_P_X
|
||||
pixel_y = PIPING_LAYER_P_Y
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/relief_valve/atmos
|
||||
close_pressure = ONE_ATMOSPHERE * 2
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/relief_valve/atmos/atmos_waste
|
||||
name = "atmos waste relief valve"
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/relief_valve/update_icon_nopipes()
|
||||
cut_overlays()
|
||||
|
||||
if(!nodes[1] || !opened || !is_operational())
|
||||
icon_state = "relief_valve-e"
|
||||
return
|
||||
|
||||
icon_state = "relief_valve-e-blown"
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/relief_valve/process_atmos()
|
||||
..()
|
||||
|
||||
if(!is_operational())
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/air_contents = airs[1]
|
||||
var/our_pressure = air_contents.return_pressure()
|
||||
if(opened && our_pressure < close_pressure)
|
||||
opened = FALSE
|
||||
update_icon_nopipes()
|
||||
else if(!opened && our_pressure >= open_pressure)
|
||||
opened = TRUE
|
||||
update_icon_nopipes()
|
||||
if(opened && air_contents.temperature > 0)
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
var/pressure_delta = our_pressure - environment.return_pressure()
|
||||
var/transfer_moles = pressure_delta*200/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
|
||||
if(transfer_moles > 0)
|
||||
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
|
||||
|
||||
loc.assume_air(removed)
|
||||
air_update_turf()
|
||||
|
||||
update_parents()
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/relief_valve/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "atmos_relief", name, 335, 115, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/relief_valve/ui_data()
|
||||
var/data = list()
|
||||
data["open_pressure"] = round(open_pressure)
|
||||
data["close_pressure"] = round(close_pressure)
|
||||
data["max_pressure"] = round(50*ONE_ATMOSPHERE)
|
||||
return data
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/relief_valve/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
switch(action)
|
||||
if("open_pressure")
|
||||
var/pressure = params["open_pressure"]
|
||||
if(pressure == "max")
|
||||
pressure = 50*ONE_ATMOSPHERE
|
||||
. = TRUE
|
||||
else if(pressure == "input")
|
||||
pressure = input("New output pressure ([close_pressure]-[50*ONE_ATMOSPHERE] kPa):", name, open_pressure) as num|null
|
||||
if(!isnull(pressure) && !..())
|
||||
. = TRUE
|
||||
else if(text2num(pressure) != null)
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
open_pressure = CLAMP(pressure, close_pressure, 50*ONE_ATMOSPHERE)
|
||||
investigate_log("open pressure was set to [open_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS)
|
||||
if("close_pressure")
|
||||
var/pressure = params["close_pressure"]
|
||||
if(pressure == "max")
|
||||
pressure = open_pressure
|
||||
. = TRUE
|
||||
else if(pressure == "input")
|
||||
pressure = input("New output pressure (0-[open_pressure] kPa):", name, close_pressure) as num|null
|
||||
if(!isnull(pressure) && !..())
|
||||
. = TRUE
|
||||
else if(text2num(pressure) != null)
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
close_pressure = CLAMP(pressure, 0, open_pressure)
|
||||
investigate_log("close pressure was set to [close_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS)
|
||||
update_icon()
|
||||
@@ -227,6 +227,11 @@
|
||||
if(V.on)
|
||||
PL |= V.parents[1]
|
||||
PL |= V.parents[2]
|
||||
else if (istype(atmosmch,/obj/machinery/atmospherics/components/binary/relief_valve))
|
||||
var/obj/machinery/atmospherics/components/binary/relief_valve/V = atmosmch
|
||||
if(V.opened)
|
||||
PL |= V.parents[1]
|
||||
PL |= V.parents[2]
|
||||
else if (istype(atmosmch, /obj/machinery/atmospherics/components/unary/portables_connector))
|
||||
var/obj/machinery/atmospherics/components/unary/portables_connector/C = atmosmch
|
||||
if(C.connected_device)
|
||||
|
||||
Reference in New Issue
Block a user