mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
Merge pull request #4329 from d3athrow/GasMathsStrip
Gas maths stripping
This commit is contained in:
@@ -155,7 +155,7 @@ Pipelines + Other Objects -> Pipe network
|
||||
var/datum/gas_mixture/int_air = return_air()
|
||||
var/datum/gas_mixture/env_air = loc.return_air()
|
||||
add_fingerprint(user)
|
||||
if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE)
|
||||
if ((int_air.pressure-env_air.pressure) > 2*ONE_ATMOSPHERE)
|
||||
if(istype(W, /obj/item/weapon/wrench/socket) && istype(src, /obj/machinery/atmospherics/pipe))
|
||||
user << "<span class='warning'>You begin to open the pressure release valve on the pipe...</span>"
|
||||
if(do_after(user, 50))
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
air1 = new
|
||||
air2 = new
|
||||
|
||||
air1.volume = 200
|
||||
air2.volume = 200
|
||||
air1.set_volume(200)
|
||||
air2.set_volume(200)
|
||||
|
||||
/obj/machinery/atmospherics/binary/buildFrom(var/mob/usr,var/obj/item/pipe/pipe)
|
||||
dir = pipe.dir
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
/obj/machinery/atmospherics/binary/circulator/proc/return_transfer_air()
|
||||
var/datum/gas_mixture/removed
|
||||
if(anchored && !(stat&BROKEN) )
|
||||
var/input_starting_pressure = air1.return_pressure()
|
||||
var/output_starting_pressure = air2.return_pressure()
|
||||
var/input_starting_pressure = air1.pressure
|
||||
var/output_starting_pressure = air2.pressure
|
||||
last_pressure_delta = max(input_starting_pressure - output_starting_pressure + 10, 0)
|
||||
|
||||
//only circulate air if there is a pressure difference (plus 10 kPa to represent friction in the machine)
|
||||
@@ -38,7 +38,7 @@
|
||||
//Actually transfer the gas
|
||||
removed = air1.remove(recent_moles_transferred)
|
||||
if(removed)
|
||||
last_heat_capacity = removed.heat_capacity()
|
||||
last_heat_capacity = removed.heat_capacity
|
||||
last_temperature = removed.temperature
|
||||
|
||||
//Update the gas networks.
|
||||
|
||||
@@ -34,8 +34,8 @@
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/New()
|
||||
..()
|
||||
|
||||
air1.volume = 1000
|
||||
air2.volume = 1000
|
||||
air1.set_volume(1000)
|
||||
air2.set_volume(1000)
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/update_icon()
|
||||
if(on)
|
||||
@@ -75,7 +75,7 @@
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
var/environment_pressure = environment.return_pressure()
|
||||
var/environment_pressure = environment.pressure
|
||||
|
||||
if(pump_direction) //input -> external
|
||||
var/pressure_delta = 10000
|
||||
@@ -83,7 +83,7 @@
|
||||
if(pressure_checks&1)
|
||||
pressure_delta = min(pressure_delta, (external_pressure_bound - environment_pressure))
|
||||
if(pressure_checks&2)
|
||||
pressure_delta = min(pressure_delta, (air1.return_pressure() - input_pressure_min))
|
||||
pressure_delta = min(pressure_delta, (air1.pressure - input_pressure_min))
|
||||
|
||||
if(pressure_delta > 0)
|
||||
if(air1.temperature > 0)
|
||||
@@ -102,7 +102,7 @@
|
||||
if(pressure_checks&1)
|
||||
pressure_delta = min(pressure_delta, (environment_pressure - external_pressure_bound))
|
||||
if(pressure_checks&4)
|
||||
pressure_delta = min(pressure_delta, (output_pressure_max - air2.return_pressure()))
|
||||
pressure_delta = min(pressure_delta, (output_pressure_max - air2.pressure))
|
||||
|
||||
if(pressure_delta > 0)
|
||||
if(environment.temperature > 0)
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
if(!on)
|
||||
return
|
||||
|
||||
var/output_starting_pressure = air2.return_pressure()
|
||||
var/input_starting_pressure = air1.return_pressure()
|
||||
var/output_starting_pressure = air2.pressure
|
||||
var/input_starting_pressure = air1.pressure
|
||||
|
||||
if(output_starting_pressure >= min(target_pressure,input_starting_pressure-10))
|
||||
//No need to pump gas if target is already reached or input pressure is too low
|
||||
@@ -42,7 +42,7 @@
|
||||
return
|
||||
|
||||
//Calculate necessary moles to transfer using PV = nRT
|
||||
if((air1.total_moles() > 0) && (air1.temperature>0))
|
||||
if((air1.total_moles > 0) && (air1.temperature>0))
|
||||
var/pressure_delta = min(target_pressure - output_starting_pressure, (input_starting_pressure - output_starting_pressure)/2)
|
||||
//Can not have a pressure delta that would cause output_pressure > input_pressure
|
||||
|
||||
|
||||
@@ -55,14 +55,14 @@ Thus, the two variables affect pump operation are set in New():
|
||||
if((stat & (NOPOWER|BROKEN)) || !on)
|
||||
return
|
||||
|
||||
var/output_starting_pressure = air2.return_pressure()
|
||||
var/output_starting_pressure = air2.pressure
|
||||
|
||||
if( (target_pressure - output_starting_pressure) < 0.01)
|
||||
//No need to pump gas if target is already reached!
|
||||
return
|
||||
|
||||
//Calculate necessary moles to transfer using PV=nRT
|
||||
if((air1.total_moles() > 0) && (air1.temperature>0))
|
||||
if((air1.total_moles > 0) && (air1.temperature>0))
|
||||
var/pressure_delta = target_pressure - output_starting_pressure
|
||||
var/transfer_moles = pressure_delta*air2.volume/(air1.temperature * R_IDEAL_GAS_EQUATION)
|
||||
|
||||
|
||||
@@ -51,8 +51,8 @@ Thus, the two variables affect pump operation are set in New():
|
||||
|
||||
// Pump mechanism just won't do anything if the pressure is too high/too low
|
||||
|
||||
var/input_starting_pressure = air1.return_pressure()
|
||||
var/output_starting_pressure = air2.return_pressure()
|
||||
var/input_starting_pressure = air1.pressure
|
||||
var/output_starting_pressure = air2.pressure
|
||||
|
||||
if((input_starting_pressure < 0.01) || (output_starting_pressure > 9000))
|
||||
return
|
||||
|
||||
@@ -58,9 +58,9 @@ obj/machinery/atmospherics/trinary/filter/process()
|
||||
if(!on)
|
||||
return
|
||||
|
||||
var/output_starting_pressure = air3.return_pressure()
|
||||
var/output_starting_pressure = air3.pressure
|
||||
|
||||
if(output_starting_pressure >= target_pressure || air2.return_pressure() >= target_pressure )
|
||||
if(output_starting_pressure >= target_pressure || air2.pressure >= target_pressure )
|
||||
//No need to mix if target is already full!
|
||||
return
|
||||
|
||||
@@ -80,7 +80,7 @@ obj/machinery/atmospherics/trinary/filter/process()
|
||||
if(!removed)
|
||||
return
|
||||
var/datum/gas_mixture/filtered_out = new
|
||||
filtered_out.temperature = removed.temperature
|
||||
filtered_out.set_temperature(removed.temperature)
|
||||
|
||||
var/list/gases_to_remove
|
||||
|
||||
@@ -104,8 +104,8 @@ obj/machinery/atmospherics/trinary/filter/process()
|
||||
filtered_out = null
|
||||
|
||||
for(var/gasid in gases_to_remove)
|
||||
filtered_out.adjust_gas(gasid, removed.get_moles_by_id(gasid), 0)
|
||||
removed.set_gas(gasid, 0, 0)
|
||||
filtered_out.adjust_gas(gasid, removed.gases[gasid])
|
||||
removed.set_gas(gasid, 0)
|
||||
|
||||
air2.merge(filtered_out)
|
||||
air3.merge(removed)
|
||||
|
||||
@@ -33,14 +33,14 @@ obj/machinery/atmospherics/trinary/mixer/power_change()
|
||||
|
||||
obj/machinery/atmospherics/trinary/mixer/New()
|
||||
..()
|
||||
air3.volume = 300
|
||||
air3.set_volume(300)
|
||||
|
||||
obj/machinery/atmospherics/trinary/mixer/process()
|
||||
. = ..()
|
||||
if(!on)
|
||||
return
|
||||
|
||||
var/output_starting_pressure = air3.return_pressure()
|
||||
var/output_starting_pressure = air3.pressure
|
||||
|
||||
if(output_starting_pressure >= target_pressure)
|
||||
//No need to mix if target is already full!
|
||||
@@ -58,8 +58,8 @@ obj/machinery/atmospherics/trinary/mixer/process()
|
||||
if(air2.temperature > 0)
|
||||
transfer_moles2 = (node2_concentration*pressure_delta)*air3.volume/(air2.temperature * R_IDEAL_GAS_EQUATION)
|
||||
|
||||
var/air1_moles = air1.total_moles()
|
||||
var/air2_moles = air2.total_moles()
|
||||
var/air1_moles = air1.total_moles
|
||||
var/air2_moles = air2.total_moles
|
||||
|
||||
if((air1_moles < transfer_moles1) || (air2_moles < transfer_moles2))
|
||||
if(!transfer_moles1 || !transfer_moles2) return
|
||||
|
||||
@@ -24,9 +24,9 @@ obj/machinery/atmospherics/trinary/New()
|
||||
air2 = new
|
||||
air3 = new
|
||||
|
||||
air1.volume = starting_volume
|
||||
air2.volume = starting_volume
|
||||
air3.volume = starting_volume
|
||||
air1.set_volume(starting_volume)
|
||||
air2.set_volume(starting_volume)
|
||||
air3.set_volume(starting_volume)
|
||||
|
||||
/obj/machinery/atmospherics/trinary/proc/initialize_directions()
|
||||
switch(dir)
|
||||
|
||||
@@ -26,14 +26,13 @@
|
||||
. = ..()
|
||||
if(!on || !network)
|
||||
return
|
||||
var/air_heat_capacity = air_contents.heat_capacity()
|
||||
var/combined_heat_capacity = current_heat_capacity + air_heat_capacity
|
||||
var/combined_heat_capacity = current_heat_capacity + air_contents.heat_capacity
|
||||
var/old_temperature = air_contents.temperature
|
||||
|
||||
if(combined_heat_capacity > 0)
|
||||
var/combined_energy = current_temperature*current_heat_capacity + air_heat_capacity*air_contents.temperature
|
||||
var/combined_energy = current_temperature*current_heat_capacity + air_contents.thermal_energy()
|
||||
if(air_contents.temperature > current_temperature) //if it's hotter than we can cool it, cool it
|
||||
air_contents.temperature = combined_energy/combined_heat_capacity
|
||||
air_contents.set_temperature(combined_energy/combined_heat_capacity)
|
||||
|
||||
//todo: have current temperature affected. require power to bring down current temperature again
|
||||
|
||||
|
||||
@@ -35,22 +35,20 @@
|
||||
if(!partner || !air_master || air_master.current_cycle <= update_cycle)
|
||||
return
|
||||
|
||||
var/old_temperature = partner.air_contents.temperature
|
||||
var/other_old_temperature = air_contents.temperature
|
||||
|
||||
update_cycle = air_master.current_cycle
|
||||
partner.update_cycle = air_master.current_cycle
|
||||
|
||||
var/air_heat_capacity = air_contents.heat_capacity()
|
||||
var/other_air_heat_capacity = partner.air_contents.heat_capacity()
|
||||
var/combined_heat_capacity = other_air_heat_capacity + air_heat_capacity
|
||||
|
||||
var/old_temperature = air_contents.temperature
|
||||
var/other_old_temperature = partner.air_contents.temperature
|
||||
var/combined_heat_capacity = partner.air_contents.heat_capacity + air_contents.heat_capacity
|
||||
|
||||
if(combined_heat_capacity > 0)
|
||||
var/combined_energy = partner.air_contents.temperature*other_air_heat_capacity + air_heat_capacity*air_contents.temperature
|
||||
var/combined_energy = partner.air_contents.thermal_energy() + air_contents.thermal_energy()
|
||||
|
||||
var/new_temperature = combined_energy/combined_heat_capacity
|
||||
air_contents.temperature = new_temperature
|
||||
partner.air_contents.temperature = new_temperature
|
||||
air_contents.set_temperature(new_temperature)
|
||||
partner.air_contents.set_temperature(new_temperature)
|
||||
|
||||
if(network)
|
||||
if(abs(old_temperature-air_contents.temperature) > 1)
|
||||
|
||||
@@ -28,14 +28,13 @@
|
||||
. = ..()
|
||||
if(!on)
|
||||
return
|
||||
var/air_heat_capacity = air_contents.heat_capacity()
|
||||
var/combined_heat_capacity = current_heat_capacity + air_heat_capacity
|
||||
var/combined_heat_capacity = current_heat_capacity + air_contents.heat_capacity
|
||||
var/old_temperature = air_contents.temperature
|
||||
|
||||
if(combined_heat_capacity > 0)
|
||||
var/combined_energy = current_temperature*current_heat_capacity + air_heat_capacity*air_contents.temperature
|
||||
var/combined_energy = current_temperature*current_heat_capacity + air_contents.thermal_energy()
|
||||
if(air_contents.temperature < current_temperature) //if its colder than we can heat it, heat it
|
||||
air_contents.temperature = combined_energy/combined_heat_capacity
|
||||
air_contents.set_temperature(combined_energy/combined_heat_capacity)
|
||||
|
||||
//todo: have current temperature affected. require power to bring up current temperature again
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
return
|
||||
|
||||
if(air_contents.temperature > 0)
|
||||
var/transfer_moles = (air_contents.return_pressure())*volume_rate/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
|
||||
var/transfer_moles = (air_contents.pressure)*volume_rate/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
|
||||
|
||||
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
injecting = 1
|
||||
|
||||
if(air_contents.temperature > 0)
|
||||
var/transfer_moles = (air_contents.return_pressure())*volume_rate/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
|
||||
var/transfer_moles = (air_contents.pressure)*volume_rate/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
|
||||
|
||||
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
|
||||
|
||||
|
||||
@@ -26,22 +26,22 @@ obj/machinery/atmospherics/unary/oxygen_generator/update_icon()
|
||||
obj/machinery/atmospherics/unary/oxygen_generator/New()
|
||||
..()
|
||||
|
||||
air_contents.volume = 50
|
||||
air_contents.set_volume(50)
|
||||
|
||||
obj/machinery/atmospherics/unary/oxygen_generator/process()
|
||||
. = ..()
|
||||
if(!on)
|
||||
return
|
||||
|
||||
var/total_moles = air_contents.total_moles()
|
||||
var/total_moles = air_contents.total_moles
|
||||
|
||||
if(total_moles < oxygen_content)
|
||||
var/current_heat_capacity = air_contents.heat_capacity()
|
||||
var/current_heat_capacity = air_contents.heat_capacity
|
||||
|
||||
var/added_oxygen = oxygen_content - total_moles
|
||||
|
||||
air_contents.temperature = (current_heat_capacity*air_contents.temperature + 20*added_oxygen*T0C)/(current_heat_capacity+20*added_oxygen)
|
||||
air_contents.adjust_gas(OXYGEN, added_oxygen, 0)
|
||||
air_contents.set_temperature((current_heat_capacity*air_contents.temperature + 20*added_oxygen*T0C)/(current_heat_capacity+20*added_oxygen))
|
||||
air_contents.adjust_gas(OXYGEN, added_oxygen)
|
||||
|
||||
if(network)
|
||||
network.update = 1
|
||||
|
||||
@@ -26,34 +26,34 @@
|
||||
|
||||
//Get processable air sample and thermal info from environment
|
||||
|
||||
var/transfer_moles = 0.25 * environment.total_moles()
|
||||
var/transfer_moles = 0.25 * environment.total_moles
|
||||
var/datum/gas_mixture/external_removed = environment.remove(transfer_moles)
|
||||
|
||||
if (!external_removed)
|
||||
return radiate()
|
||||
|
||||
if (external_removed.total_moles() < 10)
|
||||
if (external_removed.total_moles < 10)
|
||||
return radiate()
|
||||
|
||||
//Get same info from connected gas
|
||||
|
||||
var/internal_transfer_moles = 0.25 * air_contents.total_moles()
|
||||
var/internal_transfer_moles = 0.25 * air_contents.total_moles
|
||||
var/datum/gas_mixture/internal_removed = air_contents.remove(internal_transfer_moles)
|
||||
|
||||
if (!internal_removed)
|
||||
environment.merge(external_removed)
|
||||
return
|
||||
|
||||
var/combined_heat_capacity = internal_removed.heat_capacity() + external_removed.heat_capacity()
|
||||
var/combined_energy = internal_removed.temperature * internal_removed.heat_capacity() + external_removed.heat_capacity() * external_removed.temperature
|
||||
var/combined_heat_capacity = internal_removed.heat_capacity + external_removed.heat_capacity
|
||||
var/combined_energy = internal_removed.thermal_energy() + external_removed.thermal_energy()
|
||||
|
||||
if(!combined_heat_capacity) combined_heat_capacity = 1
|
||||
var/final_temperature = combined_energy / combined_heat_capacity
|
||||
|
||||
external_removed.temperature = final_temperature
|
||||
external_removed.set_temperature(final_temperature)
|
||||
environment.merge(external_removed)
|
||||
|
||||
internal_removed.temperature = final_temperature
|
||||
internal_removed.set_temperature(final_temperature)
|
||||
air_contents.merge(internal_removed)
|
||||
|
||||
network.update = 1
|
||||
@@ -73,18 +73,18 @@
|
||||
air_contents.copy_from(network.radiate) //We can cut down on processing time by only calculating radiate() once and then applying the result
|
||||
return
|
||||
|
||||
var/internal_transfer_moles = 0.25 * air_contents.total_moles()
|
||||
var/internal_transfer_moles = 0.25 * air_contents.total_moles
|
||||
var/datum/gas_mixture/internal_removed = air_contents.remove(internal_transfer_moles)
|
||||
|
||||
if (!internal_removed)
|
||||
return
|
||||
|
||||
var/combined_heat_capacity = internal_removed.heat_capacity() + RADIATION_CAPACITY
|
||||
var/combined_energy = internal_removed.temperature * internal_removed.heat_capacity() + (RADIATION_CAPACITY * 6.4)
|
||||
var/combined_heat_capacity = internal_removed.heat_capacity + RADIATION_CAPACITY
|
||||
var/combined_energy = internal_removed.thermal_energy() + (RADIATION_CAPACITY * 6.4)
|
||||
|
||||
var/final_temperature = combined_energy / combined_heat_capacity
|
||||
|
||||
internal_removed.temperature = final_temperature
|
||||
internal_removed.set_temperature(final_temperature)
|
||||
air_contents.merge(internal_removed)
|
||||
|
||||
if (network)
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
initialize_directions = dir
|
||||
air_contents = new
|
||||
|
||||
air_contents.temperature = T0C
|
||||
air_contents.volume = starting_volume
|
||||
air_contents.set_temperature(T0C)
|
||||
air_contents.set_volume(starting_volume)
|
||||
|
||||
/obj/machinery/atmospherics/unary/buildFrom(var/mob/usr,var/obj/item/pipe/pipe)
|
||||
dir = pipe.dir
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/high_volume/New()
|
||||
..()
|
||||
air_contents.volume = 1000
|
||||
air_contents.set_volume(1000)
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/update_icon()
|
||||
if(welded)
|
||||
@@ -95,7 +95,7 @@
|
||||
if(!loc) return
|
||||
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
var/environment_pressure = environment.return_pressure()
|
||||
var/environment_pressure = environment.pressure
|
||||
|
||||
if(pump_direction) //internal -> external
|
||||
var/pressure_delta = 10000
|
||||
@@ -103,7 +103,7 @@
|
||||
if(pressure_checks&1)
|
||||
pressure_delta = min(pressure_delta, (external_pressure_bound - environment_pressure))
|
||||
if(pressure_checks&2)
|
||||
pressure_delta = min(pressure_delta, (air_contents.return_pressure() - internal_pressure_bound))
|
||||
pressure_delta = min(pressure_delta, (air_contents.pressure - internal_pressure_bound))
|
||||
|
||||
if(pressure_delta > 0.1)
|
||||
if(air_contents.temperature > 0)
|
||||
@@ -121,7 +121,7 @@
|
||||
if(pressure_checks&1)
|
||||
pressure_delta = min(pressure_delta, (environment_pressure - external_pressure_bound))
|
||||
if(pressure_checks&2)
|
||||
pressure_delta = min(pressure_delta, (internal_pressure_bound - air_contents.return_pressure()))
|
||||
pressure_delta = min(pressure_delta, (internal_pressure_bound - air_contents.pressure))
|
||||
|
||||
if(pressure_delta > 0.1)
|
||||
if(environment.temperature > 0)
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
|
||||
if(scrubbing)
|
||||
if(scrubbing_gases.len)
|
||||
var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles()
|
||||
var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles
|
||||
|
||||
//Take a gas sample
|
||||
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
|
||||
@@ -139,15 +139,13 @@
|
||||
if(!(gasid in scrubbing_gases))
|
||||
continue
|
||||
|
||||
filtered_out.adjust_gas(gasid, removed.get_moles_by_id(gasid), 0) //move to filtered
|
||||
removed.set_gas(gasid, 0, 0) //set to 0
|
||||
filtered_out.adjust_gas(gasid, removed.gases[gasid]) //move to filtered
|
||||
removed.set_gas(gasid, 0) //set to 0
|
||||
|
||||
//Filter it
|
||||
|
||||
filtered_out.temperature = removed.temperature
|
||||
filtered_out.set_temperature(removed.temperature)
|
||||
|
||||
filtered_out.update_values()
|
||||
removed.update_values()
|
||||
|
||||
//Remix the resulting gases
|
||||
air_contents.merge(filtered_out)
|
||||
@@ -158,10 +156,10 @@
|
||||
network.update = 1
|
||||
|
||||
else //Just siphoning all air
|
||||
if (air_contents.return_pressure()>=50*ONE_ATMOSPHERE)
|
||||
if (air_contents.pressure>=50*ONE_ATMOSPHERE)
|
||||
return
|
||||
|
||||
var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume)
|
||||
var/transfer_moles = environment.total_moles*(volume_rate/environment.volume)
|
||||
|
||||
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
|
||||
|
||||
|
||||
@@ -107,25 +107,25 @@
|
||||
|
||||
for(var/datum/gas_mixture/gas in gases)
|
||||
air_transient_volume += gas.volume
|
||||
var/temp_heatcap = gas.heat_capacity()
|
||||
var/temp_heatcap = gas.heat_capacity
|
||||
total_thermal_energy += gas.temperature*temp_heatcap
|
||||
total_heat_capacity += temp_heatcap
|
||||
|
||||
air_transient.add(gas)
|
||||
|
||||
air_transient.volume = air_transient_volume
|
||||
air_transient.set_volume(air_transient_volume)
|
||||
|
||||
if(air_transient_volume > 0)
|
||||
|
||||
if(total_heat_capacity > 0)
|
||||
air_transient.temperature = total_thermal_energy/total_heat_capacity
|
||||
air_transient.set_temperature(total_thermal_energy/total_heat_capacity)
|
||||
|
||||
//Allow air mixture to react
|
||||
if(air_transient.react())
|
||||
update = 1
|
||||
|
||||
else
|
||||
air_transient.temperature = 0
|
||||
air_transient.set_temperature(0)
|
||||
|
||||
//Update individual gas_mixtures by volume ratio
|
||||
for(var/datum/gas_mixture/gas in gases)
|
||||
@@ -134,9 +134,6 @@
|
||||
gas.copy_from(air_transient)
|
||||
gas.multiply(volume_ratio)
|
||||
|
||||
gas.update_values()
|
||||
|
||||
air_transient.update_values()
|
||||
return 1
|
||||
|
||||
proc/equalize_gases(list/datum/gas_mixture/gases)
|
||||
@@ -148,7 +145,7 @@ proc/equalize_gases(list/datum/gas_mixture/gases)
|
||||
|
||||
for(var/datum/gas_mixture/gas in gases)
|
||||
total_volume += gas.volume
|
||||
total_thermal_energy += gas.temperature*gas.heat_capacity()
|
||||
total_thermal_energy += gas.temperature*gas.heat_capacity
|
||||
|
||||
total.add(gas)
|
||||
|
||||
@@ -158,17 +155,16 @@ proc/equalize_gases(list/datum/gas_mixture/gases)
|
||||
//Calculate temperature
|
||||
var/temperature = 0
|
||||
|
||||
if(total.heat_capacity() > 0)
|
||||
temperature = total_thermal_energy/total.heat_capacity()
|
||||
if(total.heat_capacity > 0)
|
||||
temperature = total_thermal_energy/total.heat_capacity
|
||||
|
||||
//Update individual gas_mixtures by volume ratio
|
||||
for(var/gasid in total.gases) //for each gas in the gas mix in our list of gas mixes
|
||||
var/total_gas = total.get_moles_by_id(gasid)
|
||||
var/total_gas = total.gases[gasid]
|
||||
for(var/datum/gas_mixture/gas_mix in gases)
|
||||
gas_mix.set_gas(gasid, total_gas * gas_mix.volume / total_volume, 0)
|
||||
gas_mix.set_gas(gasid, total_gas * gas_mix.volume / total_volume)
|
||||
|
||||
for(var/datum/gas_mixture/gas_mix in gases) //cheaper to set here
|
||||
gas_mix.temperature = temperature
|
||||
gas_mix.update_values()
|
||||
gas_mix.set_temperature(temperature)
|
||||
|
||||
return 1
|
||||
@@ -29,7 +29,7 @@
|
||||
/datum/pipeline/proc/process()//This use to be called called from the pipe networks
|
||||
if((world.timeofday - last_pressure_check) / 10 >= PRESSURE_CHECK_DELAY)
|
||||
//Check to see if pressure is within acceptable limits
|
||||
var/pressure = air.return_pressure()
|
||||
var/pressure = air.pressure
|
||||
if(pressure > alert_pressure)
|
||||
for(var/obj/machinery/atmospherics/pipe/member in members)
|
||||
if(!member.check_pressure(pressure))
|
||||
@@ -46,13 +46,11 @@
|
||||
|
||||
for(var/obj/machinery/atmospherics/pipe/member in members)
|
||||
member.air_temporary = new
|
||||
member.air_temporary.volume = member.volume
|
||||
member.air_temporary.set_volume(member.volume)
|
||||
|
||||
member.air_temporary.copy_from(air)
|
||||
member.air_temporary.multiply(member.volume/air.volume)
|
||||
member.air_temporary.temperature = air.temperature
|
||||
|
||||
member.air_temporary.update_values()
|
||||
|
||||
/datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/pipe/base)
|
||||
var/list/possible_expansions = list(base)
|
||||
@@ -69,6 +67,8 @@
|
||||
else
|
||||
air = new
|
||||
|
||||
air.set_volume(volume)
|
||||
|
||||
while(possible_expansions.len>0)
|
||||
for(var/obj/machinery/atmospherics/pipe/borderline in possible_expansions)
|
||||
|
||||
@@ -96,9 +96,6 @@
|
||||
|
||||
possible_expansions -= borderline
|
||||
|
||||
air.volume = volume
|
||||
air.update_values()
|
||||
|
||||
/datum/pipeline/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
|
||||
|
||||
if(new_network.line_members.Find(src))
|
||||
@@ -127,14 +124,14 @@
|
||||
|
||||
/datum/pipeline/proc/mingle_with_turf(turf/simulated/target, mingle_volume)
|
||||
var/datum/gas_mixture/air_sample = air.remove_ratio(mingle_volume/air.volume)
|
||||
air_sample.volume = mingle_volume
|
||||
air_sample.set_volume(mingle_volume)
|
||||
|
||||
if(istype(target) && target.zone)
|
||||
//Have to consider preservation of group statuses
|
||||
var/datum/gas_mixture/turf_copy = new
|
||||
|
||||
turf_copy.copy_from(target.zone.air)
|
||||
turf_copy.volume = target.zone.air.volume //Copy a good representation of the turf from parent group
|
||||
turf_copy.set_volume(target.zone.air.volume) //Copy a good representation of the turf from parent group
|
||||
|
||||
equalize_gases(list(air_sample, turf_copy))
|
||||
air.merge(air_sample)
|
||||
@@ -160,7 +157,7 @@
|
||||
network.update = 1
|
||||
|
||||
/datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity)
|
||||
var/total_heat_capacity = air.heat_capacity()
|
||||
var/total_heat_capacity = air.heat_capacity
|
||||
var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume)
|
||||
|
||||
if(istype(target, /turf/simulated))
|
||||
@@ -174,7 +171,7 @@
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
(partial_heat_capacity*modeled_location.heat_capacity/(partial_heat_capacity+modeled_location.heat_capacity))
|
||||
|
||||
air.temperature -= heat/total_heat_capacity
|
||||
air.set_temperature(air.temperature - heat/total_heat_capacity)
|
||||
modeled_location.temperature += heat/modeled_location.heat_capacity
|
||||
|
||||
else
|
||||
@@ -183,10 +180,10 @@
|
||||
|
||||
if(modeled_location.zone)
|
||||
delta_temperature = (air.temperature - modeled_location.zone.air.temperature)
|
||||
sharer_heat_capacity = modeled_location.zone.air.heat_capacity()
|
||||
sharer_heat_capacity = modeled_location.zone.air.heat_capacity
|
||||
else
|
||||
delta_temperature = (air.temperature - modeled_location.air.temperature)
|
||||
sharer_heat_capacity = modeled_location.air.heat_capacity()
|
||||
sharer_heat_capacity = modeled_location.air.heat_capacity
|
||||
|
||||
var/self_temperature_delta = 0
|
||||
var/sharer_temperature_delta = 0
|
||||
@@ -200,12 +197,12 @@
|
||||
else
|
||||
return 1
|
||||
|
||||
air.temperature += self_temperature_delta
|
||||
air.set_temperature(air.temperature + self_temperature_delta)
|
||||
|
||||
if(modeled_location.zone)
|
||||
modeled_location.zone.air.temperature += sharer_temperature_delta/modeled_location.zone.air.group_multiplier
|
||||
modeled_location.zone.air.set_temperature(modeled_location.zone.air.temperature + sharer_temperature_delta/modeled_location.zone.air.group_multiplier)
|
||||
else
|
||||
modeled_location.air.temperature += sharer_temperature_delta
|
||||
modeled_location.air.set_temperature(modeled_location.air.temperature + sharer_temperature_delta)
|
||||
|
||||
|
||||
else
|
||||
@@ -215,6 +212,6 @@
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
(partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity))
|
||||
|
||||
air.temperature -= heat/total_heat_capacity
|
||||
air.set_temperature( air.temperature - heat/total_heat_capacity)
|
||||
if(network)
|
||||
network.update = 1
|
||||
|
||||
@@ -56,12 +56,12 @@
|
||||
|
||||
// Get gas from pipenet
|
||||
var/datum/gas_mixture/internal = return_air()
|
||||
var/internal_transfer_moles = 0.25 * internal.total_moles()
|
||||
var/internal_transfer_moles = 0.25 * internal.total_moles
|
||||
var/datum/gas_mixture/internal_removed = internal.remove(internal_transfer_moles)
|
||||
|
||||
//Get processable air sample and thermal info from environment
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
var/transfer_moles = 0.25 * environment.total_moles()
|
||||
var/transfer_moles = 0.25 * environment.total_moles
|
||||
var/datum/gas_mixture/external_removed = environment.remove(transfer_moles)
|
||||
|
||||
// No environmental gas? We radiate it, then.
|
||||
@@ -71,7 +71,7 @@
|
||||
return radiate()
|
||||
|
||||
// Not enough gas in the air around us to care about. Radiate.
|
||||
if (external_removed.total_moles() < 10)
|
||||
if (external_removed.total_moles < 10)
|
||||
if(internal_removed)
|
||||
internal.merge(internal_removed)
|
||||
environment.merge(external_removed)
|
||||
@@ -83,17 +83,17 @@
|
||||
return
|
||||
|
||||
//Get same info from connected gas
|
||||
var/combined_heat_capacity = internal_removed.heat_capacity() + external_removed.heat_capacity()
|
||||
var/combined_energy = internal_removed.temperature * internal_removed.heat_capacity() + external_removed.heat_capacity() * external_removed.temperature
|
||||
var/combined_heat_capacity = internal_removed.heat_capacity + external_removed.heat_capacity
|
||||
var/combined_energy = internal_removed.thermal_energy() + external_removed.thermal_energy()
|
||||
|
||||
if(!combined_heat_capacity)
|
||||
combined_heat_capacity = 1
|
||||
var/final_temperature = combined_energy / combined_heat_capacity
|
||||
|
||||
external_removed.temperature = final_temperature
|
||||
external_removed.set_temperature(final_temperature)
|
||||
environment.merge(external_removed)
|
||||
|
||||
internal_removed.temperature = final_temperature
|
||||
internal_removed.set_temperature(final_temperature)
|
||||
internal.merge(internal_removed)
|
||||
|
||||
|
||||
@@ -103,18 +103,18 @@
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/proc/radiate()
|
||||
var/datum/gas_mixture/internal = return_air()
|
||||
var/internal_transfer_moles = 0.25 * internal.total_moles()
|
||||
var/internal_transfer_moles = 0.25 * internal.total_moles
|
||||
var/datum/gas_mixture/internal_removed = internal.remove(internal_transfer_moles)
|
||||
|
||||
if (!internal_removed)
|
||||
return
|
||||
|
||||
var/combined_heat_capacity = internal_removed.heat_capacity() + RADIATION_CAPACITY
|
||||
var/combined_energy = internal_removed.temperature * internal_removed.heat_capacity() + (RADIATION_CAPACITY * ENERGY_MULT)
|
||||
var/combined_heat_capacity = internal_removed.heat_capacity + RADIATION_CAPACITY
|
||||
var/combined_energy = internal_removed.thermal_energy() + (RADIATION_CAPACITY * ENERGY_MULT)
|
||||
|
||||
var/final_temperature = combined_energy / combined_heat_capacity
|
||||
|
||||
internal_removed.temperature = final_temperature
|
||||
internal_removed.set_temperature(final_temperature)
|
||||
internal.merge(internal_removed)
|
||||
|
||||
if(parent && parent.network)
|
||||
|
||||
@@ -93,17 +93,16 @@
|
||||
var/turf/simulated/L = loc
|
||||
if(istype(L))
|
||||
var/datum/gas_mixture/env = L.return_air()
|
||||
var/transfer_moles = 0.25 * env.total_moles()
|
||||
var/transfer_moles = 0.25 * env.total_moles
|
||||
var/datum/gas_mixture/removed = env.remove(transfer_moles)
|
||||
if(removed)
|
||||
if(removed.temperature > (set_temperature + T0C))
|
||||
var/air_heat_capacity = removed.heat_capacity()
|
||||
var/combined_heat_capacity = cooling_power + air_heat_capacity
|
||||
var/combined_heat_capacity = cooling_power + removed.heat_capacity
|
||||
//var/old_temperature = removed.temperature
|
||||
|
||||
if(combined_heat_capacity > 0)
|
||||
var/combined_energy = set_temperature*cooling_power + air_heat_capacity*removed.temperature
|
||||
removed.temperature = combined_energy/combined_heat_capacity
|
||||
var/combined_energy = set_temperature*cooling_power + removed.thermal_energy()
|
||||
removed.set_temperature(combined_energy/combined_heat_capacity)
|
||||
env.merge(removed)
|
||||
return 1
|
||||
env.merge(removed)
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
var/datum/gas_mixture/env = L.return_air()
|
||||
if(env.temperature != set_temperature + T0C)
|
||||
|
||||
var/transfer_moles = 0.25 * env.total_moles()
|
||||
var/transfer_moles = 0.25 * env.total_moles
|
||||
|
||||
var/datum/gas_mixture/removed = env.remove(transfer_moles)
|
||||
|
||||
@@ -173,13 +173,13 @@
|
||||
|
||||
if(removed)
|
||||
|
||||
var/heat_capacity = removed.heat_capacity()
|
||||
var/heat_capacity = removed.heat_capacity
|
||||
//world << "heating ([heat_capacity])"
|
||||
if(heat_capacity) // Added check to avoid divide by zero (oshi-) runtime errors -- TLE
|
||||
if(removed.temperature < set_temperature + T0C)
|
||||
removed.temperature = min(removed.temperature + heating_power/heat_capacity, 1000) // Added min() check to try and avoid wacky superheating issues in low gas scenarios -- TLE
|
||||
removed.set_temperature(min(removed.temperature + heating_power/heat_capacity, 1000)) // Added min() check to try and avoid wacky superheating issues in low gas scenarios -- TLE
|
||||
else
|
||||
removed.temperature = max(removed.temperature - heating_power/heat_capacity, TCMB)
|
||||
removed.set_temperature(max(removed.temperature - heating_power/heat_capacity, TCMB))
|
||||
cell.use(heating_power/20000)
|
||||
|
||||
//world << "now at [removed.temperature]"
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
// So, a pipe rated at 8,000 kPa in a 104kPa environment will explode at 8,104kPa.
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
|
||||
var/pressure_difference = pressure - environment.return_pressure()
|
||||
var/pressure_difference = pressure - environment.pressure
|
||||
|
||||
// Burst check first.
|
||||
if(pressure_difference > maximum_pressure && prob(1))
|
||||
|
||||
Reference in New Issue
Block a user