mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-06 06:52:39 +00:00
Removes delta_time from the atmos system. (#57478)
Why? delta_time is about maintaining behavior when changing the wait of subsystems SSair's wait is dynamic by design, we hardly ever hit below it. What is important then, is maintaining behavior across each process. The key point here is making sure excited groups and turfs share the same amoumt of gas each process, no matter how high or low wait is. This is why subprocesses are a thing in the first place, to maintain this consistency. delta_time fucks with this, and will end up changing behavior if wait is ever changed.
This commit is contained in:
@@ -224,9 +224,9 @@
|
|||||||
/// (kPa) What pressure pumps and powered equipment max out at.
|
/// (kPa) What pressure pumps and powered equipment max out at.
|
||||||
#define MAX_OUTPUT_PRESSURE 4500
|
#define MAX_OUTPUT_PRESSURE 4500
|
||||||
/// (L/s) Maximum speed powered equipment can work at.
|
/// (L/s) Maximum speed powered equipment can work at.
|
||||||
#define MAX_TRANSFER_RATE 400
|
#define MAX_TRANSFER_RATE 200
|
||||||
/// How many percent of the contents that an overclocked volume pumps leak into the air
|
/// How many percent of the contents that an overclocked volume pumps leak into the air
|
||||||
#define VOLUME_PUMP_LEAK_AMOUNT 0.2
|
#define VOLUME_PUMP_LEAK_AMOUNT 0.1
|
||||||
//used for device_type vars
|
//used for device_type vars
|
||||||
#define UNARY 1
|
#define UNARY 1
|
||||||
#define BINARY 2
|
#define BINARY 2
|
||||||
|
|||||||
@@ -82,7 +82,6 @@ SUBSYSTEM_DEF(air)
|
|||||||
|
|
||||||
/datum/controller/subsystem/air/fire(resumed = FALSE)
|
/datum/controller/subsystem/air/fire(resumed = FALSE)
|
||||||
var/timer = TICK_USAGE_REAL
|
var/timer = TICK_USAGE_REAL
|
||||||
var/delta_time = wait * 0.1
|
|
||||||
|
|
||||||
// Every time we fire, we want to make sure pipenets are rebuilt. The game state could have changed between each fire() proc call
|
// Every time we fire, we want to make sure pipenets are rebuilt. The game state could have changed between each fire() proc call
|
||||||
// and anything missing a pipenet can lead to unintended behaviour at worse and various runtimes at best.
|
// and anything missing a pipenet can lead to unintended behaviour at worse and various runtimes at best.
|
||||||
@@ -103,7 +102,7 @@ SUBSYSTEM_DEF(air)
|
|||||||
timer = TICK_USAGE_REAL
|
timer = TICK_USAGE_REAL
|
||||||
if(!resumed)
|
if(!resumed)
|
||||||
cached_cost = 0
|
cached_cost = 0
|
||||||
process_pipenets(delta_time, resumed)
|
process_pipenets(resumed)
|
||||||
cached_cost += TICK_USAGE_REAL - timer
|
cached_cost += TICK_USAGE_REAL - timer
|
||||||
if(state != SS_RUNNING)
|
if(state != SS_RUNNING)
|
||||||
return
|
return
|
||||||
@@ -115,7 +114,7 @@ SUBSYSTEM_DEF(air)
|
|||||||
timer = TICK_USAGE_REAL
|
timer = TICK_USAGE_REAL
|
||||||
if(!resumed)
|
if(!resumed)
|
||||||
cached_cost = 0
|
cached_cost = 0
|
||||||
process_atmos_machinery(delta_time, resumed)
|
process_atmos_machinery(resumed)
|
||||||
cached_cost += TICK_USAGE_REAL - timer
|
cached_cost += TICK_USAGE_REAL - timer
|
||||||
if(state != SS_RUNNING)
|
if(state != SS_RUNNING)
|
||||||
return
|
return
|
||||||
@@ -139,7 +138,7 @@ SUBSYSTEM_DEF(air)
|
|||||||
timer = TICK_USAGE_REAL
|
timer = TICK_USAGE_REAL
|
||||||
if(!resumed)
|
if(!resumed)
|
||||||
cached_cost = 0
|
cached_cost = 0
|
||||||
process_hotspots(delta_time, resumed)
|
process_hotspots(resumed)
|
||||||
cached_cost += TICK_USAGE_REAL - timer
|
cached_cost += TICK_USAGE_REAL - timer
|
||||||
if(state != SS_RUNNING)
|
if(state != SS_RUNNING)
|
||||||
return
|
return
|
||||||
@@ -198,7 +197,7 @@ SUBSYSTEM_DEF(air)
|
|||||||
SStgui.update_uis(SSair) //Lightning fast debugging motherfucker
|
SStgui.update_uis(SSair) //Lightning fast debugging motherfucker
|
||||||
|
|
||||||
|
|
||||||
/datum/controller/subsystem/air/proc/process_pipenets(delta_time, resumed = FALSE)
|
/datum/controller/subsystem/air/proc/process_pipenets(resumed = FALSE)
|
||||||
if (!resumed)
|
if (!resumed)
|
||||||
src.currentrun = networks.Copy()
|
src.currentrun = networks.Copy()
|
||||||
//cache for sanic speed (lists are references anyways)
|
//cache for sanic speed (lists are references anyways)
|
||||||
@@ -207,7 +206,7 @@ SUBSYSTEM_DEF(air)
|
|||||||
var/datum/thing = currentrun[currentrun.len]
|
var/datum/thing = currentrun[currentrun.len]
|
||||||
currentrun.len--
|
currentrun.len--
|
||||||
if(thing)
|
if(thing)
|
||||||
thing.process(delta_time)
|
thing.process()
|
||||||
else
|
else
|
||||||
networks.Remove(thing)
|
networks.Remove(thing)
|
||||||
if(MC_TICK_CHECK)
|
if(MC_TICK_CHECK)
|
||||||
@@ -231,7 +230,7 @@ SUBSYSTEM_DEF(air)
|
|||||||
if(MC_TICK_CHECK)
|
if(MC_TICK_CHECK)
|
||||||
return
|
return
|
||||||
|
|
||||||
/datum/controller/subsystem/air/proc/process_atmos_machinery(delta_time, resumed = FALSE)
|
/datum/controller/subsystem/air/proc/process_atmos_machinery(resumed = FALSE)
|
||||||
if (!resumed)
|
if (!resumed)
|
||||||
src.currentrun = atmos_machinery.Copy()
|
src.currentrun = atmos_machinery.Copy()
|
||||||
//cache for sanic speed (lists are references anyways)
|
//cache for sanic speed (lists are references anyways)
|
||||||
@@ -239,7 +238,7 @@ SUBSYSTEM_DEF(air)
|
|||||||
while(currentrun.len)
|
while(currentrun.len)
|
||||||
var/obj/machinery/M = currentrun[currentrun.len]
|
var/obj/machinery/M = currentrun[currentrun.len]
|
||||||
currentrun.len--
|
currentrun.len--
|
||||||
if(!M || (M.process_atmos(delta_time) == PROCESS_KILL))
|
if(!M || (M.process_atmos() == PROCESS_KILL))
|
||||||
atmos_machinery.Remove(M)
|
atmos_machinery.Remove(M)
|
||||||
if(MC_TICK_CHECK)
|
if(MC_TICK_CHECK)
|
||||||
return
|
return
|
||||||
@@ -257,7 +256,7 @@ SUBSYSTEM_DEF(air)
|
|||||||
if(MC_TICK_CHECK)
|
if(MC_TICK_CHECK)
|
||||||
return
|
return
|
||||||
|
|
||||||
/datum/controller/subsystem/air/proc/process_hotspots(delta_time, resumed = FALSE)
|
/datum/controller/subsystem/air/proc/process_hotspots(resumed = FALSE)
|
||||||
if (!resumed)
|
if (!resumed)
|
||||||
src.currentrun = hotspots.Copy()
|
src.currentrun = hotspots.Copy()
|
||||||
//cache for sanic speed (lists are references anyways)
|
//cache for sanic speed (lists are references anyways)
|
||||||
@@ -266,7 +265,7 @@ SUBSYSTEM_DEF(air)
|
|||||||
var/obj/effect/hotspot/H = currentrun[currentrun.len]
|
var/obj/effect/hotspot/H = currentrun[currentrun.len]
|
||||||
currentrun.len--
|
currentrun.len--
|
||||||
if (H)
|
if (H)
|
||||||
H.process(delta_time)
|
H.process()
|
||||||
else
|
else
|
||||||
hotspots -= H
|
hotspots -= H
|
||||||
if(MC_TICK_CHECK)
|
if(MC_TICK_CHECK)
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
/obj/machinery/atmospherics/components/binary/volume_pump/update_icon_nopipes()
|
/obj/machinery/atmospherics/components/binary/volume_pump/update_icon_nopipes()
|
||||||
icon_state = on && is_operational ? "volpump_on-[set_overlay_offset(piping_layer)]" : "volpump_off-[set_overlay_offset(piping_layer)]"
|
icon_state = on && is_operational ? "volpump_on-[set_overlay_offset(piping_layer)]" : "volpump_off-[set_overlay_offset(piping_layer)]"
|
||||||
|
|
||||||
/obj/machinery/atmospherics/components/binary/volume_pump/process_atmos(delta_time)
|
/obj/machinery/atmospherics/components/binary/volume_pump/process_atmos()
|
||||||
if(!on || !is_operational)
|
if(!on || !is_operational)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -70,14 +70,14 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
var/transfer_ratio = (transfer_rate * delta_time) / air1.volume
|
var/transfer_ratio = transfer_rate / air1.volume
|
||||||
|
|
||||||
var/datum/gas_mixture/removed = air1.remove_ratio(transfer_ratio)
|
var/datum/gas_mixture/removed = air1.remove_ratio(transfer_ratio)
|
||||||
|
|
||||||
if(overclocked)//Some of the gas from the mixture leaks to the environment when overclocked
|
if(overclocked)//Some of the gas from the mixture leaks to the environment when overclocked
|
||||||
var/turf/open/T = loc
|
var/turf/open/T = loc
|
||||||
if(istype(T))
|
if(istype(T))
|
||||||
var/datum/gas_mixture/leaked = removed.remove_ratio(DT_PROB_RATE(VOLUME_PUMP_LEAK_AMOUNT, delta_time))
|
var/datum/gas_mixture/leaked = removed.remove_ratio(VOLUME_PUMP_LEAK_AMOUNT)
|
||||||
T.assume_air(leaked)
|
T.assume_air(leaked)
|
||||||
T.air_update_turf(FALSE, FALSE)
|
T.air_update_turf(FALSE, FALSE)
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
var/base_icon = "crystallizer"
|
var/base_icon = "crystallizer"
|
||||||
///Internal Gas mix used for processing the gases that have been put in
|
///Internal Gas mix used for processing the gases that have been put in
|
||||||
var/datum/gas_mixture/internal
|
var/datum/gas_mixture/internal
|
||||||
///Var that controls how much gas gets injected in moles/S
|
///Var that controls how much gas gets injected in moles per tick
|
||||||
var/gas_input = 0
|
var/gas_input = 0
|
||||||
///Saves the progress during the processing of the items
|
///Saves the progress during the processing of the items
|
||||||
var/progress_bar = 0
|
var/progress_bar = 0
|
||||||
@@ -115,10 +115,10 @@
|
|||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
///Injects the gases from the input inside the internal gasmix, the amount is dependant on the gas_input var
|
///Injects the gases from the input inside the internal gasmix, the amount is dependant on the gas_input var
|
||||||
/obj/machinery/atmospherics/components/binary/crystallizer/proc/inject_gases(delta_time)
|
/obj/machinery/atmospherics/components/binary/crystallizer/proc/inject_gases()
|
||||||
var/datum/gas_mixture/contents = airs[2]
|
var/datum/gas_mixture/contents = airs[2]
|
||||||
for(var/gas_type in selected_recipe.requirements)
|
for(var/gas_type in selected_recipe.requirements)
|
||||||
internal.merge(contents.remove_specific(gas_type, contents.gases[gas_type][MOLES] * (gas_input * delta_time)))
|
internal.merge(contents.remove_specific(gas_type, contents.gases[gas_type][MOLES] * gas_input))
|
||||||
|
|
||||||
///Checks if the gases required are all inside
|
///Checks if the gases required are all inside
|
||||||
/obj/machinery/atmospherics/components/binary/crystallizer/proc/internal_check()
|
/obj/machinery/atmospherics/components/binary/crystallizer/proc/internal_check()
|
||||||
@@ -171,14 +171,14 @@
|
|||||||
airs[2].merge(remove)
|
airs[2].merge(remove)
|
||||||
internal.garbage_collect()
|
internal.garbage_collect()
|
||||||
|
|
||||||
/obj/machinery/atmospherics/components/binary/crystallizer/process_atmos(delta_time)
|
/obj/machinery/atmospherics/components/binary/crystallizer/process_atmos()
|
||||||
if(!on || !is_operational || selected_recipe == null)
|
if(!on || !is_operational || selected_recipe == null)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!check_gas_requirements())
|
if(!check_gas_requirements())
|
||||||
return
|
return
|
||||||
|
|
||||||
inject_gases(delta_time)
|
inject_gases()
|
||||||
|
|
||||||
if(!internal.total_moles())
|
if(!internal.total_moles())
|
||||||
update_parents()
|
update_parents()
|
||||||
@@ -328,7 +328,7 @@
|
|||||||
. = TRUE
|
. = TRUE
|
||||||
if("gas_input")
|
if("gas_input")
|
||||||
var/_gas_input = params["gas_input"]
|
var/_gas_input = params["gas_input"]
|
||||||
gas_input = clamp(_gas_input, 0, 500)
|
gas_input = clamp(_gas_input, 0, 250)
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
#undef MIN_PROGRESS_AMOUNT
|
#undef MIN_PROGRESS_AMOUNT
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
var/on_state = on && nodes[1] && nodes[2] && nodes[3] && is_operational
|
var/on_state = on && nodes[1] && nodes[2] && nodes[3] && is_operational
|
||||||
icon_state = "filter_[on_state ? "on" : "off"]-[set_overlay_offset(piping_layer)][flipped ? "_f" : ""]"
|
icon_state = "filter_[on_state ? "on" : "off"]-[set_overlay_offset(piping_layer)][flipped ? "_f" : ""]"
|
||||||
|
|
||||||
/obj/machinery/atmospherics/components/trinary/filter/process_atmos(delta_time)
|
/obj/machinery/atmospherics/components/trinary/filter/process_atmos()
|
||||||
..()
|
..()
|
||||||
if(!on || !(nodes[1] && nodes[2] && nodes[3]) || !is_operational)
|
if(!on || !(nodes[1] && nodes[2] && nodes[3]) || !is_operational)
|
||||||
return
|
return
|
||||||
@@ -71,7 +71,7 @@
|
|||||||
//No need to transfer if target is already full!
|
//No need to transfer if target is already full!
|
||||||
return
|
return
|
||||||
|
|
||||||
var/transfer_ratio = (transfer_rate * delta_time) / air1.volume
|
var/transfer_ratio = transfer_rate / air1.volume
|
||||||
|
|
||||||
//Actually transfer the gas
|
//Actually transfer the gas
|
||||||
|
|
||||||
|
|||||||
@@ -270,7 +270,7 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
|
|||||||
consume_gas = TRUE
|
consume_gas = TRUE
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
/obj/machinery/atmospherics/components/unary/cryo_cell/process_atmos(delta_time)
|
/obj/machinery/atmospherics/components/unary/cryo_cell/process_atmos()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
if(!on)
|
if(!on)
|
||||||
@@ -298,8 +298,8 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
|
|||||||
|
|
||||||
var/heat = ((1 - cold_protection) * 0.1 + conduction_coefficient) * temperature_delta * (air_heat_capacity * heat_capacity / (air_heat_capacity + heat_capacity))
|
var/heat = ((1 - cold_protection) * 0.1 + conduction_coefficient) * temperature_delta * (air_heat_capacity * heat_capacity / (air_heat_capacity + heat_capacity))
|
||||||
|
|
||||||
air1.temperature = clamp(air1.temperature - heat * delta_time / air_heat_capacity, TCMB, MAX_TEMPERATURE)
|
air1.temperature = clamp(air1.temperature - heat / air_heat_capacity, TCMB, MAX_TEMPERATURE)
|
||||||
mob_occupant.adjust_bodytemperature(heat * delta_time / heat_capacity, TCMB)
|
mob_occupant.adjust_bodytemperature(heat / heat_capacity, TCMB)
|
||||||
|
|
||||||
//lets have the core temp match the body temp in humans
|
//lets have the core temp match the body temp in humans
|
||||||
if(ishuman(mob_occupant))
|
if(ishuman(mob_occupant))
|
||||||
@@ -307,10 +307,10 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
|
|||||||
humi.adjust_coretemperature(humi.bodytemperature - humi.coretemperature)
|
humi.adjust_coretemperature(humi.bodytemperature - humi.coretemperature)
|
||||||
|
|
||||||
if(consume_gas) // Transferring reagent costs us extra gas
|
if(consume_gas) // Transferring reagent costs us extra gas
|
||||||
air1.gases[/datum/gas/oxygen][MOLES] -= max(0, delta_time / efficiency + 1 / efficiency) // Magically consume gas? Why not, we run on cryo magic.
|
air1.gases[/datum/gas/oxygen][MOLES] -= max(0, 2 / efficiency + 1 / efficiency) // Magically consume gas? Why not, we run on cryo magic.
|
||||||
consume_gas = FALSE
|
consume_gas = FALSE
|
||||||
if(!consume_gas)
|
if(!consume_gas)
|
||||||
air1.gases[/datum/gas/oxygen][MOLES] -= max(0, delta_time / efficiency)
|
air1.gases[/datum/gas/oxygen][MOLES] -= max(0, 2 / efficiency)
|
||||||
air1.garbage_collect()
|
air1.garbage_collect()
|
||||||
|
|
||||||
if(air1.temperature > 2000)
|
if(air1.temperature > 2000)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
var/injecting = 0
|
var/injecting = 0
|
||||||
|
|
||||||
var/volume_rate = 100
|
var/volume_rate = 50
|
||||||
|
|
||||||
var/frequency = 0
|
var/frequency = 0
|
||||||
var/id = null
|
var/id = null
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
else
|
else
|
||||||
icon_state = "inje_on"
|
icon_state = "inje_on"
|
||||||
|
|
||||||
/obj/machinery/atmospherics/components/unary/outlet_injector/process_atmos(delta_time)
|
/obj/machinery/atmospherics/components/unary/outlet_injector/process_atmos()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
injecting = 0
|
injecting = 0
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
var/datum/gas_mixture/air_contents = airs[1]
|
var/datum/gas_mixture/air_contents = airs[1]
|
||||||
|
|
||||||
if(air_contents.temperature > 0)
|
if(air_contents.temperature > 0)
|
||||||
var/transfer_moles = (air_contents.return_pressure() * volume_rate * delta_time) / (air_contents.temperature * R_IDEAL_GAS_EQUATION)
|
var/transfer_moles = (air_contents.return_pressure() * volume_rate) / (air_contents.temperature * R_IDEAL_GAS_EQUATION)
|
||||||
|
|
||||||
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
|
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
var/scrubbing = SCRUBBING //0 = siphoning, 1 = scrubbing
|
var/scrubbing = SCRUBBING //0 = siphoning, 1 = scrubbing
|
||||||
|
|
||||||
var/filter_types = list(/datum/gas/carbon_dioxide)
|
var/filter_types = list(/datum/gas/carbon_dioxide)
|
||||||
var/volume_rate = 400
|
var/volume_rate = 200
|
||||||
var/widenet = 0 //is this scrubber acting on the 3x3 area around it.
|
var/widenet = 0 //is this scrubber acting on the 3x3 area around it.
|
||||||
var/list/turf/adjacent_turfs = list()
|
var/list/turf/adjacent_turfs = list()
|
||||||
|
|
||||||
@@ -136,20 +136,20 @@
|
|||||||
check_turfs()
|
check_turfs()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/process_atmos(delta_time)
|
/obj/machinery/atmospherics/components/unary/vent_scrubber/process_atmos()
|
||||||
..()
|
..()
|
||||||
if(welded || !is_operational)
|
if(welded || !is_operational)
|
||||||
return FALSE
|
return FALSE
|
||||||
if(!nodes[1] || !on)
|
if(!nodes[1] || !on)
|
||||||
on = FALSE
|
on = FALSE
|
||||||
return FALSE
|
return FALSE
|
||||||
scrub(loc, delta_time)
|
scrub(loc)
|
||||||
if(widenet)
|
if(widenet)
|
||||||
for(var/turf/tile in adjacent_turfs)
|
for(var/turf/tile in adjacent_turfs)
|
||||||
scrub(tile, delta_time)
|
scrub(tile)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/proc/scrub(turf/tile, delta_time = 0.5)
|
/obj/machinery/atmospherics/components/unary/vent_scrubber/proc/scrub(turf/tile)
|
||||||
if(!istype(tile))
|
if(!istype(tile))
|
||||||
return FALSE
|
return FALSE
|
||||||
var/datum/gas_mixture/environment = tile.return_air()
|
var/datum/gas_mixture/environment = tile.return_air()
|
||||||
@@ -161,7 +161,7 @@
|
|||||||
|
|
||||||
if(scrubbing & SCRUBBING)
|
if(scrubbing & SCRUBBING)
|
||||||
if(length(env_gases & filter_types))
|
if(length(env_gases & filter_types))
|
||||||
var/transfer_moles = min(1, volume_rate * delta_time / environment.volume)*environment.total_moles()
|
var/transfer_moles = min(1, volume_rate / environment.volume) * environment.total_moles()
|
||||||
|
|
||||||
//Take a gas sample
|
//Take a gas sample
|
||||||
var/datum/gas_mixture/removed = tile.remove_air(transfer_moles)
|
var/datum/gas_mixture/removed = tile.remove_air(transfer_moles)
|
||||||
@@ -191,7 +191,7 @@
|
|||||||
|
|
||||||
else //Just siphoning all air
|
else //Just siphoning all air
|
||||||
|
|
||||||
var/transfer_moles = environment.total_moles() * (volume_rate * delta_time / environment.volume)
|
var/transfer_moles = environment.total_moles() * (volume_rate / environment.volume)
|
||||||
|
|
||||||
var/datum/gas_mixture/removed = tile.remove_air(transfer_moles)
|
var/datum/gas_mixture/removed = tile.remove_air(transfer_moles)
|
||||||
|
|
||||||
|
|||||||
@@ -474,7 +474,7 @@
|
|||||||
else if(valve_open && holding)
|
else if(valve_open && holding)
|
||||||
investigate_log("[key_name(user)] started a transfer into [holding].", INVESTIGATE_ATMOS)
|
investigate_log("[key_name(user)] started a transfer into [holding].", INVESTIGATE_ATMOS)
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/canister/process_atmos(delta_time)
|
/obj/machinery/portable_atmospherics/canister/process_atmos()
|
||||||
. = ..()
|
. = ..()
|
||||||
if(machine_stat & BROKEN)
|
if(machine_stat & BROKEN)
|
||||||
return PROCESS_KILL
|
return PROCESS_KILL
|
||||||
@@ -495,7 +495,7 @@
|
|||||||
|
|
||||||
///function used to check the limit of the canisters and also set the amount of damage that the canister can receive, if the heat and pressure are way higher than the limit the more damage will be done
|
///function used to check the limit of the canisters and also set the amount of damage that the canister can receive, if the heat and pressure are way higher than the limit the more damage will be done
|
||||||
if(our_temperature > heat_limit || our_pressure > pressure_limit)
|
if(our_temperature > heat_limit || our_pressure > pressure_limit)
|
||||||
take_damage(clamp((our_temperature/heat_limit) * (our_pressure/pressure_limit) * delta_time * 2, 5, 50), BURN, 0)
|
take_damage(clamp((our_temperature/heat_limit) * (our_pressure/pressure_limit), 5, 50), BURN, 0)
|
||||||
update_appearance()
|
update_appearance()
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/canister/ui_state(mob/user)
|
/obj/machinery/portable_atmospherics/canister/ui_state(mob/user)
|
||||||
|
|||||||
@@ -44,13 +44,13 @@
|
|||||||
if(connected_port)
|
if(connected_port)
|
||||||
. += "siphon-connector"
|
. += "siphon-connector"
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/pump/process_atmos(delta_time)
|
/obj/machinery/portable_atmospherics/pump/process_atmos()
|
||||||
. = ..()
|
. = ..()
|
||||||
var/pressure = air_contents.return_pressure()
|
var/pressure = air_contents.return_pressure()
|
||||||
var/temperature = air_contents.return_temperature()
|
var/temperature = air_contents.return_temperature()
|
||||||
///function used to check the limit of the pumps and also set the amount of damage that the pump can receive, if the heat and pressure are way higher than the limit the more damage will be done
|
///function used to check the limit of the pumps and also set the amount of damage that the pump can receive, if the heat and pressure are way higher than the limit the more damage will be done
|
||||||
if(temperature > heat_limit || pressure > pressure_limit)
|
if(temperature > heat_limit || pressure > pressure_limit)
|
||||||
take_damage(clamp((temperature/heat_limit) * (pressure/pressure_limit) * delta_time * 0.5, 5, 50), BURN, 0)
|
take_damage(clamp((temperature/heat_limit) * (pressure/pressure_limit), 5, 50), BURN, 0)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!on)
|
if(!on)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
///Is the machine on?
|
///Is the machine on?
|
||||||
var/on = FALSE
|
var/on = FALSE
|
||||||
///the rate the machine will scrub air
|
///the rate the machine will scrub air
|
||||||
var/volume_rate = 500
|
var/volume_rate = 1000
|
||||||
///Multiplier with ONE_ATMOSPHERE, if the enviroment pressure is higher than that, the scrubber won't work
|
///Multiplier with ONE_ATMOSPHERE, if the enviroment pressure is higher than that, the scrubber won't work
|
||||||
var/overpressure_m = 80
|
var/overpressure_m = 80
|
||||||
///Should the machine use overlay in update_overlays() when open/close?
|
///Should the machine use overlay in update_overlays() when open/close?
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
if(connected_port)
|
if(connected_port)
|
||||||
. += "scrubber-connector"
|
. += "scrubber-connector"
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/scrubber/process_atmos(delta_time)
|
/obj/machinery/portable_atmospherics/scrubber/process_atmos()
|
||||||
. = ..()
|
. = ..()
|
||||||
var/pressure = air_contents.return_pressure()
|
var/pressure = air_contents.return_pressure()
|
||||||
var/temperature = air_contents.return_temperature()
|
var/temperature = air_contents.return_temperature()
|
||||||
@@ -67,22 +67,21 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
if(holding)
|
if(holding)
|
||||||
scrub(holding.air_contents, delta_time)
|
scrub(holding.air_contents)
|
||||||
else
|
else
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
scrub(T.return_air(), delta_time)
|
scrub(T.return_air())
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called in process_atmos(), handles the scrubbing of the given gas_mixture
|
* Called in process_atmos(), handles the scrubbing of the given gas_mixture
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* * mixture: the gas mixture to be scrubbed
|
* * mixture: the gas mixture to be scrubbed
|
||||||
* * delta_time: multiplier for transfer_moles that depends on the time between ticks
|
|
||||||
*/
|
*/
|
||||||
/obj/machinery/portable_atmospherics/scrubber/proc/scrub(datum/gas_mixture/mixture, delta_time = 2)
|
/obj/machinery/portable_atmospherics/scrubber/proc/scrub(datum/gas_mixture/mixture)
|
||||||
if(air_contents.return_pressure() >= overpressure_m * ONE_ATMOSPHERE)
|
if(air_contents.return_pressure() >= overpressure_m * ONE_ATMOSPHERE)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/transfer_moles = min(1, volume_rate * delta_time / mixture.volume) * mixture.total_moles()
|
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/filtering = mixture.remove(transfer_moles) // Remove part of the mixture to filter.
|
||||||
var/datum/gas_mixture/filtered = new
|
var/datum/gas_mixture/filtered = new
|
||||||
@@ -188,7 +187,7 @@
|
|||||||
icon_state = "scrubber:[on]"
|
icon_state = "scrubber:[on]"
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/scrubber/huge/process_atmos(delta_time)
|
/obj/machinery/portable_atmospherics/scrubber/huge/process_atmos()
|
||||||
if((!anchored && !movable) || !is_operational)
|
if((!anchored && !movable) || !is_operational)
|
||||||
on = FALSE
|
on = FALSE
|
||||||
update_appearance()
|
update_appearance()
|
||||||
@@ -200,7 +199,7 @@
|
|||||||
if(!holding)
|
if(!holding)
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
for(var/turf/AT in T.GetAtmosAdjacentTurfs(alldir = TRUE))
|
for(var/turf/AT in T.GetAtmosAdjacentTurfs(alldir = TRUE))
|
||||||
scrub(AT.return_air(), delta_time)
|
scrub(AT.return_air())
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/scrubber/huge/attackby(obj/item/W, mob/user)
|
/obj/machinery/portable_atmospherics/scrubber/huge/attackby(obj/item/W, mob/user)
|
||||||
if(default_unfasten_wrench(user, W))
|
if(default_unfasten_wrench(user, W))
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ export const Crystallizer = (props, context) => {
|
|||||||
width="63px"
|
width="63px"
|
||||||
unit="moles/s"
|
unit="moles/s"
|
||||||
minValue={0}
|
minValue={0}
|
||||||
maxValue={500}
|
maxValue={250}
|
||||||
onDrag={(e, value) => act('gas_input', {
|
onDrag={(e, value) => act('gas_input', {
|
||||||
gas_input: value,
|
gas_input: value,
|
||||||
})} />
|
})} />
|
||||||
|
|||||||
Reference in New Issue
Block a user