From 7fd86096af439cc84e6a5e55d5f438f78ff38d6a Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Sun, 7 May 2017 02:48:18 -0400 Subject: [PATCH] More GC and Performance Fixes (#7248) --- code/game/machinery/alarm.dm | 8 +++++- code/game/machinery/firealarm.dm | 15 ----------- .../security_levels/security levels.dm | 26 +++++++++---------- 3 files changed, 20 insertions(+), 29 deletions(-) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index e4cb0028408..b5612389def 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -213,6 +213,10 @@ radio_controller.remove_object(src, frequency) air_alarm_repository.update_cache(src) QDEL_NULL(wires) + if(alarm_area && alarm_area.master_air_alarm == src) + alarm_area.master_air_alarm = null + elect_master(exclude_self = 1) + alarm_area = null return ..() /obj/machinery/alarm/proc/first_run() @@ -236,8 +240,10 @@ return alarm_area.master_air_alarm && !(alarm_area.master_air_alarm.stat & (NOPOWER|BROKEN)) -/obj/machinery/alarm/proc/elect_master() +/obj/machinery/alarm/proc/elect_master(exclude_self = 0) //Why is this an alarm and not area proc? for(var/obj/machinery/alarm/AA in alarm_area) + if(exclude_self && AA == src) + continue if(!(AA.stat & (NOPOWER|BROKEN))) alarm_area.master_air_alarm = AA return 1 diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 586b45f0a13..da85a864214 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -19,13 +19,6 @@ FIRE ALARM var/last_process = 0 var/wiresexposed = 0 var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone - var/area/master_area - -/obj/machinery/firealarm/New() - var/area/A = get_area_master(src) - if(!istype(A, /area)) - return - master_area = A /obj/machinery/firealarm/update_icon() @@ -294,14 +287,6 @@ Just a object used in constructing fire alarms idle_power_usage = 2 active_power_usage = 6 - var/area/master_area - -/obj/machinery/partyalarm/New() - var/area/A = get_area_master(src) - if(!( istype(A, /area) )) - return - master_area=A - /obj/machinery/partyalarm/attack_hand(mob/user) if((user.stat && !isobserver(user)) || stat & (NOPOWER|BROKEN)) return diff --git a/code/modules/security_levels/security levels.dm b/code/modules/security_levels/security levels.dm index 0d25330177c..42bfb39b4eb 100644 --- a/code/modules/security_levels/security levels.dm +++ b/code/modules/security_levels/security levels.dm @@ -34,9 +34,9 @@ post_status("alert", "outline") - for(var/obj/machinery/firealarm/FA in world) + for(var/obj/machinery/firealarm/FA in machines) if(is_station_contact(FA.z)) - FA.overlays = list() + FA.overlays.Cut() FA.overlays += image('icons/obj/monitors.dmi', "overlay_green") if(SEC_LEVEL_BLUE) @@ -48,9 +48,9 @@ post_status("alert", "outline") - for(var/obj/machinery/firealarm/FA in world) + for(var/obj/machinery/firealarm/FA in machines) if(is_station_contact(FA.z)) - FA.overlays = list() + FA.overlays.Cut() FA.overlays += image('icons/obj/monitors.dmi', "overlay_blue") if(SEC_LEVEL_RED) @@ -60,16 +60,16 @@ security_announcement_down.Announce("The station's self-destruct mechanism has been deactivated, but there is still an immediate and serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised.","Attention! Code Red!") security_level = SEC_LEVEL_RED - var/obj/machinery/door/airlock/highsecurity/red/R = locate(/obj/machinery/door/airlock/highsecurity/red) in world + var/obj/machinery/door/airlock/highsecurity/red/R = locate(/obj/machinery/door/airlock/highsecurity/red) in airlocks if(R && is_station_level(R.z)) R.locked = 0 R.update_icon() post_status("alert", "redalert") - for(var/obj/machinery/firealarm/FA in world) + for(var/obj/machinery/firealarm/FA in machines) if(is_station_contact(FA.z)) - FA.overlays = list() + FA.overlays.Cut() FA.overlays += image('icons/obj/monitors.dmi', "overlay_red") if(SEC_LEVEL_GAMMA) @@ -91,9 +91,9 @@ post_status("alert", "gammaalert") - for(var/obj/machinery/firealarm/FA in world) + for(var/obj/machinery/firealarm/FA in machines) if(is_station_contact(FA.z)) - FA.overlays = list() + FA.overlays.Cut() FA.overlays += image('icons/obj/monitors.dmi', "overlay_gamma") FA.update_icon() @@ -103,9 +103,9 @@ post_status("alert", "epsilonalert") - for(var/obj/machinery/firealarm/FA in world) + for(var/obj/machinery/firealarm/FA in machines) if(is_station_contact(FA.z)) - FA.overlays = list() + FA.overlays.Cut() FA.overlays += image('icons/obj/monitors.dmi', "overlay_epsilon") if(SEC_LEVEL_DELTA) @@ -114,9 +114,9 @@ post_status("alert", "deltaalert") - for(var/obj/machinery/firealarm/FA in world) + for(var/obj/machinery/firealarm/FA in machines) if(is_station_contact(FA.z)) - FA.overlays = list() + FA.overlays.Cut() FA.overlays += image('icons/obj/monitors.dmi', "overlay_delta") else