From 7a41dfef268962564574e9961d9781a9ae4a351a Mon Sep 17 00:00:00 2001 From: Poojawa Date: Thu, 27 Sep 2018 07:17:39 -0500 Subject: [PATCH] Fire Alarms are visible in the dark --- code/game/machinery/firealarm.dm | 64 ++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 16 deletions(-) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index c3ce4c6a01..41a70af4e8 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -29,6 +29,10 @@ light_range = 7 light_color = "#ff3232" + var/timerid + var/flash_power = FLASH_LIGHT_POWER + var/flash_color = LIGHT_COLOR_HALOGEN + var/detecting = 1 var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone var/last_alarm = 0 @@ -57,32 +61,43 @@ /obj/machinery/firealarm/update_icon() cut_overlays() - + SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) var/area/A = src.loc A = A.loc if(panel_open) icon_state = "fire_b[buildstage]" return - else + + if(stat & BROKEN) + icon_state = "firex" + return + + if(stat & NOPOWER) icon_state = "fire0" + return - if(stat & BROKEN) - icon_state = "firex" - return + if(is_station_level(z)) + add_overlay("overlay_[GLOB.security_level]") + SSvis_overlays.add_vis_overlay(src, icon, "overlay_[GLOB.security_level]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) + if(GLOB.security_level == SEC_LEVEL_DELTA) + if(!timerid) + flash() + else if(GLOB.security_level <= SEC_LEVEL_RED) + if(timerid) + deltimer(timerid) + timerid = null + else + add_overlay("overlay_[SEC_LEVEL_GREEN]") + SSvis_overlays.add_vis_overlay(src, icon, "overlay_[SEC_LEVEL_GREEN]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - if(stat & NOPOWER) - return - if(is_station_level(z)) - add_overlay("overlay_[GLOB.security_level]") - else - add_overlay("overlay_[SEC_LEVEL_GREEN]") - - if(detecting) - add_overlay("overlay_[A.fire ? "fire" : "clear"]") - else - add_overlay("overlay_fire") + if(detecting) + add_overlay("overlay_[A.fire ? "fire" : "clear"]") + SSvis_overlays.add_vis_overlay(src, icon, "overlay_[A.fire ? "fire" : "clear"]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) + else + add_overlay("overlay_fire") + SSvis_overlays.add_vis_overlay(src, icon, "overlay_fire", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) /obj/machinery/firealarm/emp_act(severity) . = ..() @@ -114,12 +129,29 @@ var/area/A = get_area(src) A.firealert(src) playsound(src.loc, 'goon/sound/machinery/FireAlarm.ogg', 75) + if(timerid) + return + flash() + +/obj/machinery/firealarm/proc/flash() + if (!powered()) + return + if(!is_operational()) + return + + flash_lighting_fx(FLASH_LIGHT_RANGE, flash_power, flash_color) + if(!timerid) + timerid = addtimer(CALLBACK(src, .proc/flash, world.time), 30, TIMER_STOPPABLE | TIMER_LOOP) /obj/machinery/firealarm/proc/reset() if(!is_operational()) return var/area/A = get_area(src) A.firereset(src) + if(!timerid) + return + deltimer(timerid) + timerid = null /obj/machinery/firealarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)