Files
vgstation13/code/ATMOSPHERICS/components/unary/thermal_plate.dm
ComicIronic 7c0f3e1266 Pipe unification and type switching
Tanks are now unaries, not pipes.
Portable connectors are now unaries, not their own type.
Valves are now binaries, T-Valves are now trinaries.
Pipes as much as possible now use the general attackby code.
Slight changes to pooling code.
Removed loads of duplicate code that existed for no real reason.
T-Valves now come in manual and digital and mirrored under those types, not the other way around.
Mirrored connecting sprites for T-Valves should show up properly now.

Never again.
2015-02-18 21:36:36 +00:00

91 lines
2.7 KiB
Plaintext

#define RADIATION_CAPACITY 30000 //Radiation isn't particularly effective (TODO BALANCE)
/obj/machinery/atmospherics/unary/thermal_plate
//Based off Heat Reservoir and Space Heater
//Transfers heat between a pipe system and environment, based on which has a greater thermal energy concentration
icon = 'icons/obj/atmospherics/cold_sink.dmi'
icon_state = "off"
level = 1
name = "Thermal Transfer Plate"
desc = "Transfers heat to and from an area"
update_icon()
var/prefix=""
//var/suffix="_idle" // Also available: _heat, _cool
if(level == 1 && istype(loc, /turf/simulated))
prefix="h"
icon_state = "[prefix]off"
process()
..()
var/datum/gas_mixture/environment = loc.return_air()
//Get processable air sample and thermal info from environment
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)
return radiate()
//Get same info from connected gas
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 1
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
if(!combined_heat_capacity) combined_heat_capacity = 1
var/final_temperature = combined_energy / combined_heat_capacity
external_removed.temperature = final_temperature
environment.merge(external_removed)
internal_removed.temperature = final_temperature
air_contents.merge(internal_removed)
network.update = 1
return 1
hide(var/i) //to make the little pipe section invisible, the icon changes.
var/prefix=""
//var/suffix="_idle" // Also available: _heat, _cool
if(i == 1 && istype(loc, /turf/simulated))
prefix="h"
icon_state = "[prefix]off"
return
proc/radiate()
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 1
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/final_temperature = combined_energy / combined_heat_capacity
internal_removed.temperature = final_temperature
air_contents.merge(internal_removed)
if (network)
network.update = 1
return 1