mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 01:19:02 +00:00
136 lines
3.8 KiB
Plaintext
136 lines
3.8 KiB
Plaintext
/obj/machinery/portable_atmospherics/scrubber
|
|
name = "portable air scrubber"
|
|
icon_state = "pscrubber:0"
|
|
density = TRUE
|
|
|
|
var/on = FALSE
|
|
var/volume_rate = 1000
|
|
volume = 1000
|
|
|
|
var/list/scrubbing = list(/datum/gas/plasma, /datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide, /datum/gas/bz, /datum/gas/brown_gas, /datum/gas/tritium, /datum/gas/hypernoblium, /datum/gas/water_vapor)
|
|
|
|
/obj/machinery/portable_atmospherics/scrubber/Destroy()
|
|
var/turf/T = get_turf(src)
|
|
T.assume_air(air_contents)
|
|
air_update_turf()
|
|
return ..()
|
|
|
|
/obj/machinery/portable_atmospherics/scrubber/update_icon()
|
|
icon_state = "pscrubber:[on]"
|
|
|
|
cut_overlays()
|
|
if(holding)
|
|
add_overlay("scrubber-open")
|
|
if(connected_port)
|
|
add_overlay("scrubber-connector")
|
|
|
|
/obj/machinery/portable_atmospherics/scrubber/process_atmos()
|
|
..()
|
|
if(!on)
|
|
return
|
|
|
|
if(holding)
|
|
scrub(holding.air_contents)
|
|
else
|
|
var/turf/T = get_turf(src)
|
|
scrub(T.return_air())
|
|
|
|
/obj/machinery/portable_atmospherics/scrubber/proc/scrub(var/datum/gas_mixture/mixture)
|
|
var/transfer_moles = min(1, volume_rate / mixture.volume) * mixture.total_moles()
|
|
|
|
var/datum/gas_mixture/filtering = mixture.remove(transfer_moles) // Remove part of the mixture to filter.
|
|
var/datum/gas_mixture/filtered = new
|
|
if(!filtering)
|
|
return
|
|
|
|
filtered.temperature = filtering.temperature
|
|
for(var/gas in filtering.gases & scrubbing)
|
|
ADD_GAS(gas, filtered.gases)
|
|
filtered.gases[gas][MOLES] = filtering.gases[gas][MOLES] // Shuffle the "bad" gasses to the filtered mixture.
|
|
filtering.gases[gas][MOLES] = 0
|
|
filtering.garbage_collect() // Now that the gasses are set to 0, clean up the mixture.
|
|
|
|
air_contents.merge(filtered) // Store filtered out gasses.
|
|
mixture.merge(filtering) // Returned the cleaned gas.
|
|
if(!holding)
|
|
air_update_turf()
|
|
|
|
/obj/machinery/portable_atmospherics/scrubber/emp_act(severity)
|
|
if(is_operational())
|
|
if(prob(50 / severity))
|
|
on = !on
|
|
update_icon()
|
|
..()
|
|
|
|
/obj/machinery/portable_atmospherics/scrubber/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
|
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state)
|
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
|
if(!ui)
|
|
ui = new(user, src, ui_key, "portable_scrubber", name, 420, 335, master_ui, state)
|
|
ui.open()
|
|
|
|
/obj/machinery/portable_atmospherics/scrubber/ui_data()
|
|
var/data = list()
|
|
data["on"] = on
|
|
data["connected"] = connected_port ? 1 : 0
|
|
data["pressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0)
|
|
|
|
if(holding)
|
|
data["holding"] = list()
|
|
data["holding"]["name"] = holding.name
|
|
data["holding"]["pressure"] = round(holding.air_contents.return_pressure())
|
|
return data
|
|
|
|
/obj/machinery/portable_atmospherics/scrubber/ui_act(action, params)
|
|
if(..())
|
|
return
|
|
switch(action)
|
|
if("power")
|
|
on = !on
|
|
. = TRUE
|
|
if("eject")
|
|
if(holding)
|
|
holding.loc = get_turf(src)
|
|
holding = null
|
|
. = TRUE
|
|
update_icon()
|
|
|
|
/obj/machinery/portable_atmospherics/scrubber/huge
|
|
name = "huge air scrubber"
|
|
icon_state = "scrubber:0"
|
|
anchored = TRUE
|
|
active_power_usage = 500
|
|
idle_power_usage = 10
|
|
|
|
volume_rate = 1500
|
|
volume = 50000
|
|
|
|
var/movable = FALSE
|
|
|
|
/obj/machinery/portable_atmospherics/scrubber/huge/movable
|
|
movable = TRUE
|
|
|
|
/obj/machinery/portable_atmospherics/scrubber/huge/update_icon()
|
|
icon_state = "scrubber:[on]"
|
|
|
|
/obj/machinery/portable_atmospherics/scrubber/huge/process_atmos()
|
|
if((!anchored && !movable) || !is_operational())
|
|
on = FALSE
|
|
update_icon()
|
|
use_power = on ? ACTIVE_POWER_USE : IDLE_POWER_USE
|
|
if(!on)
|
|
return
|
|
|
|
..()
|
|
if(!holding)
|
|
var/turf/T = get_turf(src)
|
|
for(var/turf/AT in T.GetAtmosAdjacentTurfs(alldir = TRUE))
|
|
scrub(AT.return_air())
|
|
|
|
/obj/machinery/portable_atmospherics/scrubber/huge/attackby(obj/item/W, mob/user)
|
|
if(default_unfasten_wrench(user, W))
|
|
if(!movable)
|
|
on = FALSE
|
|
else
|
|
return ..()
|