Improves performance of set_airlock_overlays

They will now only update when they actually change. On my testing, this
made performance improve about 3-15 times, depending on the use case.

I could have made this a loop if I turned the overlays into a list with
defines but I was lazy and this copy-paste is probably slightly faster
than a list as well (despite being harder to read and to maintain).
This commit is contained in:
Tkdrg
2015-10-24 13:55:58 -03:00
parent e2012cd61e
commit 29f42778dd
+32 -7
View File
@@ -58,6 +58,13 @@ var/list/airlock_overlays = list()
var/airlock_material = null //material of inner filling; if its an airlock with glass, this should be set to "glass"
var/overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi'
var/image/old_frame_overlay //keep those in order to prevent unnecessary updating
var/image/old_filling_overlay
var/image/old_lights_overlay
var/image/old_panel_overlay
var/image/old_weld_overlay
var/image/old_sparks_overlay
explosion_block = 1
/obj/machinery/door/airlock/New()
@@ -312,13 +319,31 @@ About the new airlock wires panel:
if(p_open)
panel_overlay = get_airlock_overlay("panel_opening", overlays_file)
overlays.Cut()
overlays += frame_overlay
overlays += filling_overlay
overlays += lights_overlay
overlays += panel_overlay
overlays += weld_overlay
overlays += sparks_overlay
//doesn't use overlays.Cut() for performance reasons
if(frame_overlay != old_frame_overlay)
overlays -= old_frame_overlay
overlays += frame_overlay
old_frame_overlay = frame_overlay
if(filling_overlay != old_filling_overlay)
overlays -= old_filling_overlay
overlays += filling_overlay
old_filling_overlay = filling_overlay
if(lights_overlay != old_lights_overlay)
overlays -= old_lights_overlay
overlays += lights_overlay
old_lights_overlay = lights_overlay
if(panel_overlay != old_panel_overlay)
overlays -= old_panel_overlay
overlays += panel_overlay
old_panel_overlay = panel_overlay
if(weld_overlay != old_weld_overlay)
overlays -= old_weld_overlay
overlays += weld_overlay
old_weld_overlay = weld_overlay
if(sparks_overlay != old_sparks_overlay)
overlays -= old_sparks_overlay
overlays += sparks_overlay
old_sparks_overlay = sparks_overlay
/proc/get_airlock_overlay(icon_state, icon_file)
var/iconkey = "[icon_state][icon_file]"