mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-30 23:49:21 +01:00
Merge pull request #10798 from VOREStation/Icons/portaatmos
Space heater and porta scrub icons
This commit is contained in:
@@ -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
|
||||
@@ -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 |
Reference in New Issue
Block a user