Fix space heater interaction

This commit is contained in:
Bjorn Neergaard
2016-01-25 12:03:18 -06:00
parent 57e5d35074
commit 8d3e3d4202
5 changed files with 73 additions and 77 deletions
+16 -20
View File
@@ -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)
+52 -52
View File
@@ -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
+1 -1
View File
@@ -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
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -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'>