Merge pull request #10798 from VOREStation/Icons/portaatmos

Space heater and porta scrub icons
This commit is contained in:
Aronai Sieyes
2021-07-03 16:18:31 -04:00
committed by GitHub
3 changed files with 66 additions and 35 deletions
+65 -34
View File
@@ -1,3 +1,8 @@
#define SHEATER_OFF 0
#define SHEATER_STANDBY 1
#define SHEATER_HEAT 2
#define SHEATER_COOL 3
/obj/machinery/space_heater
anchored = 0
density = 1
@@ -5,9 +10,15 @@
icon_state = "sheater0"
name = "space heater"
desc = "Made by Space Amish using traditional space techniques, this heater is guaranteed not to set the station on fire."
light_system = MOVABLE_LIGHT
light_range = 3
light_power = 1
light_on = FALSE
var/obj/item/weapon/cell/cell
var/cell_type = /obj/item/weapon/cell/high
var/on = 0
var/state = 0
var/set_temperature = T0C + 20 //K
var/heating_power = 40000
clicksound = "switch"
@@ -21,18 +32,25 @@
/obj/machinery/space_heater/update_icon()
cut_overlays()
icon_state = "sheater[on]"
icon_state = "sheater[state]"
if(panel_open)
add_overlay("sheater-open")
if(on)
set_light(3, 3, "#FFCC00")
else
set_light(0)
switch(state)
if(SHEATER_OFF)
set_light_on(FALSE)
if(SHEATER_STANDBY)
set_light_on(FALSE)
if(SHEATER_HEAT)
set_light_color("#FFCC00")
set_light_on(TRUE)
if(SHEATER_COOL)
set_light_color("#00ccff")
set_light_on(TRUE)
/obj/machinery/space_heater/examine(mob/user)
. = ..()
. += "The heater is [on ? "on" : "off"] and the hatch is [panel_open ? "open" : "closed"]."
. += "The heater is [state ? "on" : "off"] and the hatch is [panel_open ? "open" : "closed"]."
if(panel_open)
. += "The power cell is [cell ? "installed" : "missing"]."
else
@@ -92,8 +110,8 @@
if(panel_open)
tgui_interact(user)
else
on = !on
user.visible_message("<span class='notice'>[user] switches [on ? "on" : "off"] the [src].</span>","<span class='notice'>You switch [on ? "on" : "off"] the [src].</span>")
state = state ? SHEATER_OFF : SHEATER_STANDBY
user.visible_message("<span class='notice'>[user] switches [state ? "on" : "off"] the [src].</span>","<span class='notice'>You switch [state ? "on" : "off"] the [src].</span>")
update_icon()
return
@@ -159,34 +177,47 @@
. = TRUE
/obj/machinery/space_heater/process()
if(on)
if(cell && cell.charge)
var/datum/gas_mixture/env = loc.return_air()
if(env && abs(env.temperature - set_temperature) > 0.1)
var/transfer_moles = 0.25 * env.total_moles
var/datum/gas_mixture/removed = env.remove(transfer_moles)
if(!state)
return
if(removed)
var/heat_transfer = removed.get_thermal_energy_change(set_temperature)
if(heat_transfer > 0) //heating air
heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater
if(cell && cell.charge)
var/datum/gas_mixture/env = loc.return_air()
if(env && abs(env.temperature - set_temperature) > 0.1)
var/transfer_moles = 0.25 * env.total_moles
var/datum/gas_mixture/removed = env.remove(transfer_moles)
removed.add_thermal_energy(heat_transfer)
cell.use(heat_transfer*CELLRATE)
else //cooling air
heat_transfer = abs(heat_transfer)
if(removed)
var/heat_transfer = removed.get_thermal_energy_change(set_temperature)
if(heat_transfer > 0) //heating air
if(state == SHEATER_STANDBY)
state = SHEATER_HEAT
update_icon()
heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater
//Assume the heat is being pumped into the hull which is fixed at 20 C
var/cop = removed.temperature/T20C //coefficient of performance from thermodynamics -> power used = heat_transfer/cop
heat_transfer = min(heat_transfer, cop * heating_power) //limit heat transfer by available power
removed.add_thermal_energy(heat_transfer)
cell.use(heat_transfer*CELLRATE)
else //cooling air
if(state == SHEATER_STANDBY)
state = SHEATER_COOL
update_icon()
heat_transfer = abs(heat_transfer)
heat_transfer = removed.add_thermal_energy(-heat_transfer) //get the actual heat transfer
//Assume the heat is being pumped into the hull which is fixed at 20 C
var/cop = removed.temperature/T20C //coefficient of performance from thermodynamics -> power used = heat_transfer/cop
heat_transfer = min(heat_transfer, cop * heating_power) //limit heat transfer by available power
var/power_used = abs(heat_transfer)/cop
cell.use(power_used*CELLRATE)
heat_transfer = removed.add_thermal_energy(-heat_transfer) //get the actual heat transfer
env.merge(removed)
else
on = 0
power_change()
update_icon()
var/power_used = abs(heat_transfer)/cop
cell.use(power_used*CELLRATE)
env.merge(removed)
else
state = SHEATER_OFF
power_change()
update_icon()
#undef SHEATER_OFF
#undef SHEATER_STANDBY
#undef SHEATER_HEAT
#undef SHEATER_COOL
+1 -1
View File
@@ -116,7 +116,7 @@
/obj/machinery/space_heater/stumble_into(mob/living/M)
..()
if(on)
if(state)
M.apply_damage(10, BURN)
M.emote("scream")
Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 28 KiB