mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Modifications to sensors code
- More stuff now triggers powernet warnings: People getting shocked by machinery (primarily door, but can be anything else powered by APC), and grilles. Thanks to @mwerezak for suggestion. - Monitoring computer now has slightly different icon_state when it detects powernet warning. This is checked and updated every 5 MC ticks (ie, slightly delayed) - Fixes ocassional runtime in powernet_sensor.dm - Powersinks buffed a bit more. Drain rate changed from 0.6MW to 1MW. 1MW is full output of main engine SMES. - Powersinks also dissipate small amount of internal energy charge over time. (20kW)
This commit is contained in:
@@ -294,6 +294,12 @@ Class Procs:
|
|||||||
s.set_up(5, 1, src)
|
s.set_up(5, 1, src)
|
||||||
s.start()
|
s.start()
|
||||||
if (electrocute_mob(user, get_area(src), src, 0.7))
|
if (electrocute_mob(user, get_area(src), src, 0.7))
|
||||||
|
var/area/temp_area = get_area(src)
|
||||||
|
if(temp_area && temp_area.master)
|
||||||
|
var/obj/machinery/power/apc/temp_apc = temp_area.master.get_apc()
|
||||||
|
|
||||||
|
if(temp_apc && temp_apc.terminal && temp_apc.terminal.powernet)
|
||||||
|
temp_apc.terminal.powernet.trigger_warning()
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -14,7 +14,8 @@
|
|||||||
matter = list("metal" = 750,"waste" = 750)
|
matter = list("metal" = 750,"waste" = 750)
|
||||||
|
|
||||||
origin_tech = "powerstorage=3;syndicate=5"
|
origin_tech = "powerstorage=3;syndicate=5"
|
||||||
var/drain_rate = 600000 // amount of power to drain per tick
|
var/drain_rate = 1000000 // amount of power to drain per tick
|
||||||
|
var/dissipation_rate = 20000
|
||||||
var/power_drained = 0 // has drained this much power
|
var/power_drained = 0 // has drained this much power
|
||||||
var/max_power = 5e9 // maximum power that can be drained before exploding
|
var/max_power = 5e9 // maximum power that can be drained before exploding
|
||||||
var/mode = 0 // 0 = off, 1=clamped (off), 2=operating
|
var/mode = 0 // 0 = off, 1=clamped (off), 2=operating
|
||||||
@@ -91,6 +92,7 @@
|
|||||||
processing_objects.Remove(src)
|
processing_objects.Remove(src)
|
||||||
|
|
||||||
process()
|
process()
|
||||||
|
power_drained -= min(dissipation_rate, power_drained)
|
||||||
if(attached)
|
if(attached)
|
||||||
var/datum/powernet/PN = attached.get_powernet()
|
var/datum/powernet/PN = attached.get_powernet()
|
||||||
if(PN)
|
if(PN)
|
||||||
|
|||||||
@@ -212,6 +212,8 @@
|
|||||||
var/obj/structure/cable/C = T.get_cable_node()
|
var/obj/structure/cable/C = T.get_cable_node()
|
||||||
if(C)
|
if(C)
|
||||||
if(electrocute_mob(user, C, src))
|
if(electrocute_mob(user, C, src))
|
||||||
|
if(C.powernet)
|
||||||
|
C.powernet.trigger_warning()
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||||
s.set_up(3, 1, src)
|
s.set_up(3, 1, src)
|
||||||
s.start()
|
s.start()
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
var/perapc_excess = 0
|
var/perapc_excess = 0
|
||||||
var/netexcess = 0 // excess power on the powernet (typically avail-load)
|
var/netexcess = 0 // excess power on the powernet (typically avail-load)
|
||||||
|
|
||||||
var/problem = 0 // If either of these is set to 1 there is some sort of issue at the powernet.
|
var/problem = 0 // If this is not 0 there is some sort of issue in the powernet. Monitors will display warnings.
|
||||||
|
|
||||||
/datum/powernet/New()
|
/datum/powernet/New()
|
||||||
powernets += src
|
powernets += src
|
||||||
|
|||||||
@@ -69,21 +69,26 @@
|
|||||||
else
|
else
|
||||||
total_load = "[round(total_load)] W"
|
total_load = "[round(total_load)] W"
|
||||||
|
|
||||||
out += "</table>"
|
out += "</table><br><b>TOTAL GRID LOAD: [total_load]</b>"
|
||||||
|
|
||||||
var/textavail = powernet.avail
|
var/textavail = powernet.avail
|
||||||
if(textavail > 1000)
|
if(textavail > 1000)
|
||||||
textavail = "[textavail / 1000]"
|
textavail = "[textavail / 1000] kW"
|
||||||
textavail += " kW"
|
else
|
||||||
else
|
textavail = "[textavail] W"
|
||||||
textavail += " W"
|
out += "<br><b>TOTAL AVAILABLE: [textavail]</b>"
|
||||||
|
|
||||||
if(powernet.problem)
|
if(powernet.problem)
|
||||||
out += "<br><b>WARNING: Abnormal grid activity detected!</b>"
|
out += "<br><b>WARNING: Abnormal grid activity detected!</b>"
|
||||||
out += "<br><b>TOTAL GRID LOAD: [total_load]</b>"
|
|
||||||
out += "<br><b>TOTAL AVAILABLE: [textavail]</b>"
|
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
/obj/machinery/power/sensor/proc/check_grid_warning()
|
||||||
|
RefreshGrid()
|
||||||
|
if(powernet)
|
||||||
|
if(powernet.problem)
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
// Has to be here as we need it to be in Machines list.
|
// Has to be here as we need it to be in Machines list.
|
||||||
/obj/machinery/power/sensor/process()
|
/obj/machinery/power/sensor/process()
|
||||||
return 1
|
return 1
|
||||||
@@ -15,10 +15,17 @@
|
|||||||
anchored = 1.0
|
anchored = 1.0
|
||||||
var/circuit = /obj/item/weapon/circuitboard/powermonitor
|
var/circuit = /obj/item/weapon/circuitboard/powermonitor
|
||||||
var/list/grid_sensors = null
|
var/list/grid_sensors = null
|
||||||
|
var/update_counter = 0 // Next icon update when this reaches 5 (ie every 5 ticks)
|
||||||
use_power = 1
|
use_power = 1
|
||||||
idle_power_usage = 300
|
idle_power_usage = 300
|
||||||
active_power_usage = 300
|
active_power_usage = 300
|
||||||
|
|
||||||
|
// Update icon every 5 ticks.
|
||||||
|
/obj/machinery/power/monitor/process()
|
||||||
|
update_counter++
|
||||||
|
if(update_counter > 4)
|
||||||
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/power/monitor/New()
|
/obj/machinery/power/monitor/New()
|
||||||
..()
|
..()
|
||||||
refresh_sensors()
|
refresh_sensors()
|
||||||
@@ -81,7 +88,7 @@
|
|||||||
if(S.powernet)
|
if(S.powernet)
|
||||||
reported_nets += S.powernet
|
reported_nets += S.powernet
|
||||||
if(duplicities)
|
if(duplicities)
|
||||||
t += "<br><b>Ignored [duplicities] duplicite readings"
|
t += "<br><b><i>Ignored [duplicities] duplicite readings</i></b>"
|
||||||
user << browse(t, "window=powcomp;size=600x900")
|
user << browse(t, "window=powcomp;size=600x900")
|
||||||
onclose(user, "powcomp")
|
onclose(user, "powcomp")
|
||||||
|
|
||||||
@@ -99,17 +106,38 @@
|
|||||||
refresh_sensors()
|
refresh_sensors()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/obj/machinery/power/monitor/update_icon()
|
||||||
|
update_counter = 0 // Reset the icon update counter.
|
||||||
|
if(stat & BROKEN)
|
||||||
|
icon_state = "powerb"
|
||||||
|
return
|
||||||
|
if(stat & NOPOWER)
|
||||||
|
icon_state = "power0"
|
||||||
|
return
|
||||||
|
if(check_warnings())
|
||||||
|
icon_state = "power_alert"
|
||||||
|
return
|
||||||
|
|
||||||
|
icon_state = "power"
|
||||||
|
|
||||||
|
/obj/machinery/power/monitor/proc/check_warnings()
|
||||||
|
var/warn = 0
|
||||||
|
if(grid_sensors)
|
||||||
|
for(var/obj/machinery/power/sensor/S in grid_sensors)
|
||||||
|
if(S.check_grid_warning())
|
||||||
|
warn = 1
|
||||||
|
return warn
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/power/monitor/power_change()
|
/obj/machinery/power/monitor/power_change()
|
||||||
..()
|
..()
|
||||||
if(stat & BROKEN)
|
|
||||||
icon_state = "broken"
|
// Leaving this here to preserve that delayed shutdown effect when power goes out.
|
||||||
|
if (stat & NOPOWER)
|
||||||
|
spawn(rand(0, 15))
|
||||||
|
update_icon()
|
||||||
else
|
else
|
||||||
if (stat & NOPOWER)
|
update_icon()
|
||||||
spawn(rand(0, 15))
|
|
||||||
src.icon_state = "c_unpowered"
|
|
||||||
else
|
|
||||||
icon_state = initial(icon_state)
|
|
||||||
|
|
||||||
|
|
||||||
//copied from computer.dm
|
//copied from computer.dm
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
Reference in New Issue
Block a user