Now master alarm in area polls all other alarms and sets area alert level to highest out of them.
So no more green alarms opening lockdowns until they turn red too.
This commit is contained in:
Chinsky
2013-06-01 06:31:15 +04:00
parent b91cf84993
commit 73578cb9cd
+43 -34
View File
@@ -135,30 +135,7 @@
if(!istype(location)) return//returns if loc is not simulated
var/datum/gas_mixture/environment = location.return_air()
var/partial_pressure = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume
var/list/current_settings = TLV["pressure"]
var/environment_pressure = environment.return_pressure()
var/pressure_dangerlevel = get_danger_level(environment_pressure, current_settings)
current_settings = TLV["oxygen"]
var/oxygen_dangerlevel = get_danger_level(environment.oxygen*partial_pressure, current_settings)
current_settings = TLV["carbon dioxide"]
var/co2_dangerlevel = get_danger_level(environment.carbon_dioxide*partial_pressure, current_settings)
current_settings = TLV["plasma"]
var/plasma_dangerlevel = get_danger_level(environment.toxins*partial_pressure, current_settings)
current_settings = TLV["other"]
var/other_moles = 0.0
for(var/datum/gas/G in environment.trace_gases)
other_moles+=G.moles
var/other_dangerlevel = get_danger_level(other_moles*partial_pressure, current_settings)
current_settings = TLV["temperature"]
var/temperature_dangerlevel = get_danger_level(environment.temperature, current_settings)
var/temperature_dangerlevel = get_danger_level(environment.temperature, TLV["temperature"])
//Handle temperature adjustment here.
if(temperature_dangerlevel || regulating_temperature)
//If it goes too far, we should adjust ourselves back before stopping.
@@ -194,18 +171,14 @@
"You hear a click as a faint electronic humming stops.")
var/old_danger_level = danger_level
danger_level = max(pressure_dangerlevel,
oxygen_dangerlevel,
co2_dangerlevel,
plasma_dangerlevel,
other_dangerlevel,
temperature_dangerlevel)
danger_level = overall_danger_level()
log_debug("Processing [name] : level - [danger_level]")
if (old_danger_level != danger_level)
apply_danger_level(danger_level)
if (alarm_area.master_air_alarm == src)
refresh_danger_level()
update_icon()
if (mode==AALARM_MODE_CYCLE && environment_pressure<ONE_ATMOSPHERE*0.05)
if (mode==AALARM_MODE_CYCLE && environment.return_pressure()<ONE_ATMOSPHERE*0.05)
mode=AALARM_MODE_FILL
apply_mode()
@@ -225,6 +198,33 @@
updateDialog()
return
proc/overall_danger_level()
var/turf/simulated/location = loc
if(!istype(location)) return//returns if loc is not simulated
var/datum/gas_mixture/environment = location.return_air()
var/partial_pressure = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume
var/environment_pressure = environment.return_pressure()
var/other_moles = 0.0
for(var/datum/gas/G in environment.trace_gases)
other_moles+=G.moles
var/pressure_dangerlevel = get_danger_level(environment_pressure, TLV["pressure"])
var/oxygen_dangerlevel = get_danger_level(environment.oxygen*partial_pressure, TLV["oxygen"])
var/co2_dangerlevel = get_danger_level(environment.carbon_dioxide*partial_pressure, TLV["carbon dioxide"])
var/plasma_dangerlevel = get_danger_level(environment.toxins*partial_pressure, TLV["plasma"])
var/temperature_dangerlevel = get_danger_level(environment.temperature, TLV["temperature"])
var/other_dangerlevel = get_danger_level(other_moles*partial_pressure, TLV["other"])
return max(
pressure_dangerlevel,
oxygen_dangerlevel,
co2_dangerlevel,
plasma_dangerlevel,
other_dangerlevel,
temperature_dangerlevel
)
proc/master_is_operating()
return alarm_area.master_air_alarm && !(alarm_area.master_air_alarm.stat & (NOPOWER|BROKEN))
@@ -383,6 +383,15 @@
update_icon()
proc/refresh_danger_level()
var/level = 0
for (var/area/A in alarm_area.related)
for (var/obj/machinery/alarm/AA in A)
if ( !(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted)
if (AA.danger_level > level)
level = AA.danger_level
apply_danger_level(level)
proc/air_doors_close(manual)
var/area/A = get_area(src)
if(!A.master.air_doors_activated)