mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 16:47:13 +01:00
Fix space heater interaction
This commit is contained in:
@@ -115,6 +115,7 @@ Class Procs:
|
||||
var/state_open = 0
|
||||
var/mob/living/occupant = null
|
||||
var/unsecuring_tool = /obj/item/weapon/wrench
|
||||
var/interact_open = 0 // Can the machine be interacted with when in maint/when the panel is open.
|
||||
var/interact_offline = 0 // Can the machine be interacted with while de-powered.
|
||||
|
||||
/obj/machinery/New()
|
||||
@@ -208,14 +209,26 @@ Class Procs:
|
||||
/obj/machinery/proc/is_interactable()
|
||||
if((stat & (NOPOWER|BROKEN)) && !interact_offline)
|
||||
return FALSE
|
||||
if(panel_open && !interact_open)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/obj/machinery/interact(mob/user)
|
||||
add_fingerprint(user)
|
||||
ui_interact(user)
|
||||
|
||||
/obj/machinery/ui_status(mob/user)
|
||||
if(is_interactable())
|
||||
return ..()
|
||||
return UI_CLOSE
|
||||
|
||||
/obj/machinery/ui_act(action, params)
|
||||
add_fingerprint(usr)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/Topic(href, href_list)
|
||||
..()
|
||||
if(!is_interactable())
|
||||
@@ -225,14 +238,6 @@ Class Procs:
|
||||
add_fingerprint(usr)
|
||||
return 0
|
||||
|
||||
/obj/machinery/ui_status(mob/user)
|
||||
if(is_interactable() && !panel_open)
|
||||
return ..()
|
||||
return UI_CLOSE
|
||||
|
||||
/obj/machinery/ui_act(action, params)
|
||||
..()
|
||||
add_fingerprint(usr)
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -259,20 +264,11 @@ Class Procs:
|
||||
return 1
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.getBrainLoss() >= 60)
|
||||
visible_message("<span class='danger'>[H] stares cluelessly at [src] and drools.</span>")
|
||||
return 1
|
||||
else if(prob(H.getBrainLoss()))
|
||||
if(prob(H.getBrainLoss()))
|
||||
user << "<span class='warning'>You momentarily forget how to use [src]!</span>"
|
||||
return 1
|
||||
if(panel_open)
|
||||
add_fingerprint(user)
|
||||
return 0
|
||||
if(check_power && stat & NOPOWER)
|
||||
user << "<span class='danger'>\The [src] seems unpowered.</span>"
|
||||
return 1
|
||||
if(!interact_offline && (stat & (BROKEN|MAINT)))
|
||||
user << "<span class='danger'>\The [src] seems broken.</span>"
|
||||
if(!is_interactable())
|
||||
user << "<span class='danger'>\The [src] seems offline.</span>"
|
||||
return 1
|
||||
if(set_machine)
|
||||
user.set_machine(src)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
/obj/machinery/space_heater
|
||||
anchored = 0
|
||||
density = 1
|
||||
interact_open = TRUE
|
||||
icon = 'icons/obj/atmos.dmi'
|
||||
icon_state = "sheater-off"
|
||||
name = "space heater"
|
||||
@@ -20,7 +21,6 @@
|
||||
var/settableTemperatureMedian = 30 + T0C
|
||||
var/settableTemperatureRange = 30
|
||||
|
||||
|
||||
/obj/machinery/space_heater/New()
|
||||
..()
|
||||
cell = new(src)
|
||||
@@ -45,6 +45,14 @@
|
||||
cell = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/space_heater/examine(mob/user)
|
||||
..()
|
||||
user << "\The [src] is [on ? "on" : "off"], and the hatch is [panel_open ? "open" : "closed"]."
|
||||
if(cell)
|
||||
user << "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%."
|
||||
else
|
||||
user << "There is no power cell installed."
|
||||
|
||||
/obj/machinery/space_heater/update_icon()
|
||||
if(on)
|
||||
icon_state = "sheater-[mode]"
|
||||
@@ -55,13 +63,50 @@
|
||||
if(panel_open)
|
||||
overlays += "sheater-open"
|
||||
|
||||
/obj/machinery/space_heater/examine(mob/user)
|
||||
..()
|
||||
user << "\The [src] is [on ? "on" : "off"], and the hatch is [panel_open ? "open" : "closed"]."
|
||||
if(cell)
|
||||
user << "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%."
|
||||
/obj/machinery/space_heater/process()
|
||||
if(!on || !is_operational())
|
||||
return
|
||||
|
||||
if(cell && cell.charge > 0)
|
||||
var/turf/simulated/L = loc
|
||||
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.temperature < targetTemperature - temperatureTolerance)
|
||||
newMode = HEATER_MODE_HEAT
|
||||
else if(setMode != HEATER_MODE_HEAT && env.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.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.temperature += deltaTemperature
|
||||
air_update_turf()
|
||||
cell.use(requiredPower / efficiency)
|
||||
else
|
||||
user << "There is no power cell installed."
|
||||
on = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/space_heater/RefreshParts()
|
||||
var/laser = 0
|
||||
@@ -190,51 +235,6 @@
|
||||
cell = null
|
||||
. = TRUE
|
||||
|
||||
/obj/machinery/space_heater/process()
|
||||
if(!on || (stat & BROKEN))
|
||||
return
|
||||
|
||||
if(cell && cell.charge > 0)
|
||||
var/turf/simulated/L = loc
|
||||
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.temperature < targetTemperature - temperatureTolerance)
|
||||
newMode = HEATER_MODE_HEAT
|
||||
else if(setMode != HEATER_MODE_HEAT && env.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.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.temperature += deltaTemperature
|
||||
air_update_turf()
|
||||
cell.use(requiredPower / efficiency)
|
||||
else
|
||||
on = FALSE
|
||||
update_icon()
|
||||
|
||||
#undef HEATER_MODE_STANDBY
|
||||
#undef HEATER_MODE_HEAT
|
||||
#undef HEATER_MODE_COOL
|
||||
|
||||
@@ -233,8 +233,8 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/ui_act(action, params)
|
||||
..()
|
||||
add_fingerprint(usr)
|
||||
return ..()
|
||||
|
||||
/obj/item/attack_hand(mob/user)
|
||||
if(!user)
|
||||
|
||||
+2
-2
File diff suppressed because one or more lines are too long
@@ -9,12 +9,12 @@
|
||||
<ui-display title='Power' button>
|
||||
{{#partial button}}
|
||||
{{#if data.open}}
|
||||
<ui-button icon='eject' action='eject'>Eject</ui-button>
|
||||
<ui-button icon='eject' state='{{data.hasPowercell ? null : "disabled"}}' action='eject'>Eject</ui-button>
|
||||
{{/if}}
|
||||
{{/partial}}
|
||||
<ui-section label='Power'>
|
||||
<ui-button icon='{{data.on ? "power-off" : "close"}}'
|
||||
style='{{data.on ? "selected" : null}}'
|
||||
style='{{data.on ? "selected" : null}}' state='{{data.hasPowercell ? null : "disabled"}}'
|
||||
action='power'>{{data.on ? "On" : "Off"}}</ui-button>
|
||||
</ui-section>
|
||||
<ui-section label='Cell'>
|
||||
|
||||
Reference in New Issue
Block a user