mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
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.
91 lines
2.7 KiB
Plaintext
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
|