Merge pull request #13885 from raspy-on-osu/spaceheater-buff

Makes space heaters worth using
This commit is contained in:
silicons
2020-12-31 12:38:07 -07:00
committed by GitHub

View File

@@ -18,7 +18,7 @@
var/mode = HEATER_MODE_STANDBY var/mode = HEATER_MODE_STANDBY
var/setMode = "auto" // Anything other than "heat" or "cool" is considered auto. var/setMode = "auto" // Anything other than "heat" or "cool" is considered auto.
var/targetTemperature = T20C var/targetTemperature = T20C
var/heatingPower = 40000 var/heatingPower = 10000
var/efficiency = 20000 var/efficiency = 20000
var/temperatureTolerance = 1 var/temperatureTolerance = 1
var/settableTemperatureMedian = 30 + T0C var/settableTemperatureMedian = 30 + T0C
@@ -74,46 +74,55 @@
if(cell && cell.charge > 0) if(cell && cell.charge > 0)
var/turf/L = loc var/turf/L = loc
if(!istype(L)) PerformHeating(L)
if(mode != HEATER_MODE_STANDBY)
mode = HEATER_MODE_STANDBY
update_icon()
return
var/datum/gas_mixture/env = L.return_air() for(var/direction in GLOB.alldirs)
L=get_step(src,direction)
if(!locate(/turf/closed) in L) // we don't want to heat walls and cause jank
PerformHeating(L)
var/newMode = HEATER_MODE_STANDBY
if(setMode != HEATER_MODE_COOL && env.return_temperature() < targetTemperature - temperatureTolerance)
newMode = HEATER_MODE_HEAT
else if(setMode != HEATER_MODE_HEAT && env.return_temperature() > targetTemperature + temperatureTolerance)
newMode = HEATER_MODE_COOL
if(mode != newMode)
mode = newMode
update_icon()
if(mode == HEATER_MODE_STANDBY)
return
var/heat_capacity = env.heat_capacity()
var/requiredPower = abs(env.return_temperature() - targetTemperature) * heat_capacity
requiredPower = min(requiredPower, heatingPower)
if(requiredPower < 1)
return
var/deltaTemperature = requiredPower / heat_capacity
if(mode == HEATER_MODE_COOL)
deltaTemperature *= -1
if(deltaTemperature)
env.set_temperature(env.return_temperature() + deltaTemperature)
air_update_turf()
cell.use(requiredPower / efficiency)
else else
on = FALSE on = FALSE
update_icon() update_icon()
return PROCESS_KILL return PROCESS_KILL
/obj/machinery/space_heater/proc/PerformHeating(turf/L)
if(!istype(L))
if(mode != HEATER_MODE_STANDBY)
mode = HEATER_MODE_STANDBY
update_icon()
return
var/datum/gas_mixture/env = L.return_air()
var/newMode = HEATER_MODE_STANDBY
if(setMode != HEATER_MODE_COOL && env.return_temperature() < targetTemperature - temperatureTolerance)
newMode = HEATER_MODE_HEAT
else if(setMode != HEATER_MODE_HEAT && env.return_temperature() > targetTemperature + temperatureTolerance)
newMode = HEATER_MODE_COOL
if(mode != newMode)
mode = newMode
update_icon()
if(mode == HEATER_MODE_STANDBY)
return
var/heat_capacity = env.heat_capacity()
var/requiredPower = abs(env.return_temperature() - targetTemperature) * heat_capacity
requiredPower = min(requiredPower, heatingPower)
if(requiredPower < 1)
return
var/deltaTemperature = requiredPower / heat_capacity
if(mode == HEATER_MODE_COOL)
deltaTemperature *= -1
if(deltaTemperature)
env.set_temperature(env.return_temperature() + deltaTemperature)
air_update_turf()
cell.use(requiredPower / efficiency)
/obj/machinery/space_heater/RefreshParts() /obj/machinery/space_heater/RefreshParts()
var/laser = 2 var/laser = 2
var/cap = 1 var/cap = 1
@@ -122,7 +131,7 @@
for(var/obj/item/stock_parts/capacitor/M in component_parts) for(var/obj/item/stock_parts/capacitor/M in component_parts)
cap += M.rating cap += M.rating
heatingPower = laser * 40000 heatingPower = laser * 10000
settableTemperatureRange = cap * 30 settableTemperatureRange = cap * 30
efficiency = (cap + 1) * 10000 efficiency = (cap + 1) * 10000