mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 16:47:13 +01:00
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:
@@ -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]"
|
||||
|
||||
Reference in New Issue
Block a user