This commit is contained in:
SandPoot
2020-10-31 23:20:22 -03:00
3 changed files with 45 additions and 10 deletions
@@ -115,10 +115,10 @@
source_air = air_contents
// Move gas from one place to another
move_gas(source_air, target_air)
move_gas(source_air, target_air, (istype(target, /obj/item/tank) ? target : null))
air_update_turf()
/obj/item/integrated_circuit/atmospherics/pump/proc/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air)
/obj/item/integrated_circuit/atmospherics/pump/proc/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air, obj/item/tank/snowflake)
// No moles = nothing to pump
if(source_air.total_moles() <= 0 || target_air.return_pressure() >= PUMP_MAX_PRESSURE)
@@ -132,7 +132,10 @@
if(pressure_delta > 0.1)
var/transfer_moles = (pressure_delta*target_air.return_volume()/(source_air.return_temperature() * R_IDEAL_GAS_EQUATION))*PUMP_EFFICIENCY
var/datum/gas_mixture/removed = source_air.remove(transfer_moles)
target_air.merge(removed)
if(istype(snowflake)) //Snowflake check for tanks specifically, because tank ruptures are handled in a very snowflakey way that expects all tank interactions to be handled via the tank's procs
snowflake.assume_air(removed)
else
target_air.merge(removed)
// - volume pump - // **Works**
@@ -165,7 +168,7 @@
direction = SOURCE_TO_TARGET
target_pressure = min(PUMP_MAX_VOLUME,abs(new_amount))
/obj/item/integrated_circuit/atmospherics/pump/volume/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air)
/obj/item/integrated_circuit/atmospherics/pump/volume/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air, obj/item/tank/snowflake)
// No moles = nothing to pump
if(source_air.total_moles() <= 0)
return
@@ -182,7 +185,10 @@
var/datum/gas_mixture/removed = source_air.remove_ratio(transfer_ratio * PUMP_EFFICIENCY)
target_air.merge(removed)
if(istype(snowflake))
snowflake.assume_air(removed)
else
target_air.merge(removed)
// - gas vent - // **works**
@@ -379,9 +385,20 @@ obj/item/integrated_circuit/atmospherics/connector/portableConnectorReturnAir()
removed.set_moles(filtered_gas, 0)
//Check if the pressure is high enough to put stuff in filtered, or else just put it back in the source
var/datum/gas_mixture/target = (filtered_air.return_pressure() < target_pressure ? filtered_air : source_air)
target.merge(filtered_out)
contaminated_air.merge(removed)
if(filtered_air.return_pressure() < target_pressure)
if(istype(filtered, /obj/item/tank))
filtered.assume_air(filtered_out)
else
filtered_air.merge(filtered_out)
else
if(istype(source, /obj/item/tank))
source.assume_air(filtered_out)
else
source_air.merge(filtered_out)
if(istype(contaminants, /obj/item/tank))
contaminants.assume_air(removed)
else
contaminated_air.merge(removed)
/obj/item/integrated_circuit/atmospherics/pump/filter/Initialize()
@@ -449,10 +466,18 @@ obj/item/integrated_circuit/atmospherics/connector/portableConnectorReturnAir()
if(transfer_moles <= 0)
return
var/snowflakecheck = istype(gas_output, /obj/item/tank)
var/datum/gas_mixture/mix = source_1_gases.remove(transfer_moles * gas_percentage)
output_gases.merge(mix)
if(snowflakecheck)
gas_output.assume_air(mix)
else
output_gases.merge(mix)
mix = source_2_gases.remove(transfer_moles * (1-gas_percentage))
output_gases.merge(mix)
if(snowflakecheck)
gas_output.assume_air(mix)
else
output_gases.merge(mix)
// - integrated tank - // **works**