From 63421d58e0c1eaa9d624dc990ab0dcdcd1c2d3e2 Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Sat, 5 Oct 2013 09:49:55 -0400 Subject: [PATCH] Image caching optimizations --- code/modules/power/apc.dm | 13 +++++----- code/modules/power/cell.dm | 9 +++++-- code/modules/power/generator.dm | 14 +++++++---- code/modules/power/generator_type2.dm | 13 ++++++---- code/modules/power/smes.dm | 35 +++++++++++++++++++++------ code/modules/power/solar.dm | 17 ++++++++----- 6 files changed, 68 insertions(+), 33 deletions(-) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index c1c1a36f616..6819bd6bfe4 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -65,6 +65,7 @@ ) var/longtermpower = 10 var/updating_icon = 0 + var/list/status_overlays //var/debug = 0 /proc/RandomAPCWires() @@ -178,17 +179,15 @@ // also add overlays for indicator lights /obj/machinery/power/apc/update_icon() - var/list/status_overlays - if (isnull(status_overlays)) // if no status overlays list, this is first call status_overlays = new status_overlays.len = 5 - status_overlays[1] = image('power.dmi', "apcox-[locked]") // 0=blue 1=red - status_overlays[2] = image('power.dmi', "apco3-[charging]") // 0=red, 1=yellow/black 2=green + status_overlays[1] = image('icons/obj/power.dmi', "apcox-[locked]") // 0=blue 1=red + status_overlays[2] = image('icons/obj/power.dmi', "apco3-[charging]") // 0=red, 1=yellow/black 2=green - status_overlays[3] = image('power.dmi', "apco0-[equipment]") // 0=red, 1=green, 2=blue - status_overlays[4] = image('power.dmi', "apco1-[lighting]") - status_overlays[5] = image('power.dmi', "apco2-[environ]") + status_overlays[3] = image('icons/obj/power.dmi', "apco0-[equipment]") // 0=red, 1=green, 2=blue + status_overlays[4] = image('icons/obj/power.dmi', "apco1-[lighting]") + status_overlays[5] = image('icons/obj/power.dmi', "apco2-[environ]") if(opened) icon_state = "[ cell ? "apc2" : "apc1" ]" // if opened, show cell if it's inserted diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 0560f4882ca..f53c1512b1d 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -1,6 +1,7 @@ // the power cell // charge from 0 to 100% // fits in APC to provide backup power +/obj/item/weapon/cell/var/image/overlay_image /obj/item/weapon/cell/New() ..() @@ -10,14 +11,18 @@ updateicon() /obj/item/weapon/cell/proc/updateicon() + if(isnull(src.overlay_image)) + src.overlay_image = image('icons/obj/power.dmi') overlays.Cut() if(charge < 0.01) return else if(charge/maxcharge >=0.995) - overlays += image('icons/obj/power.dmi', "cell-o2") + src.overlay_image.icon_state = "cell-o2" + overlays += src.overlay_image else - overlays += image('icons/obj/power.dmi', "cell-o1") + src.overlay_image.icon_state = "cell-o1" + overlays += src.overlay_image /obj/item/weapon/cell/proc/percent() // return % charge of cell return 100.0*charge/maxcharge diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 325f8917a3a..b76ad5dc841 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -15,6 +15,8 @@ var/lastgen = 0 var/lastgenlev = -1 + var/image/overlay_image + /obj/machinery/power/generator/New() ..() @@ -48,13 +50,15 @@ circ2 = null /obj/machinery/power/generator/proc/updateicon() - if(stat & (NOPOWER|BROKEN)) - overlays.Cut() - else - overlays.Cut() + if(isnull(src.overlay_image)) + src.overlay_image = image('icons/obj/power.dmi') + + overlays.Cut() + if(!(stat & (NOPOWER|BROKEN))) if(lastgenlev != 0) - overlays += image('icons/obj/power.dmi', "teg-op[lastgenlev]") + src.overlay_image.icon_state = "teg-op[lastgenlev]" + overlays += src.overlay_image /obj/machinery/power/generator/process() if(!circ1 || !circ2 || !anchored || stat & (BROKEN|NOPOWER)) diff --git a/code/modules/power/generator_type2.dm b/code/modules/power/generator_type2.dm index 7ca407ac9f3..7c37707e799 100644 --- a/code/modules/power/generator_type2.dm +++ b/code/modules/power/generator_type2.dm @@ -12,6 +12,7 @@ var/lastgen = 0 var/lastgenlev = -1 + var/image/overlay_image /obj/machinery/power/generator_type2/New() ..() @@ -25,13 +26,15 @@ /obj/machinery/power/generator_type2/proc/updateicon() - if(stat & (NOPOWER|BROKEN)) - overlays.Cut() - else - overlays.Cut() + if(isnull(src.overlay_image)) + src.overlay_image = image('icons/obj/power.dmi') + + overlays.Cut() + if(!(stat & (NOPOWER|BROKEN))) if(lastgenlev != 0) - overlays += image('icons/obj/power.dmi', "teg-op[lastgenlev]") + src.overlay_image.icon_state = "teg-op[lastgenlev]" + overlays += src.overlay_image #define GENRATE 800 // generator output coefficient from Q diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 287f6541925..b4357361096 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -4,6 +4,8 @@ #define SMESMAXCHARGELEVEL 200000 #define SMESMAXOUTPUT 200000 + + /obj/machinery/power/smes name = "power storage unit" desc = "A high-capacity superconducting magnetic energy storage (SMES) unit." @@ -23,7 +25,7 @@ var/online = 1 var/n_tag = null var/obj/machinery/power/terminal/terminal = null - + var/list/overlay_images /obj/machinery/power/smes/New() ..() @@ -47,17 +49,34 @@ overlays.Cut() if(stat & BROKEN) return - overlays += image('icons/obj/power.dmi', "smes-op[online]") + if(isnull(src.overlay_images)) + src.overlay_images = new + src.overlay_images.len = 3 - if(charging) - overlays += image('icons/obj/power.dmi', "smes-oc1") + src.overlay_images[1] = image('icons/obj/power.dmi', "smes-op[online]") + src.overlay_images[2] = image('icons/obj/power.dmi', "smes-oc0") + src.overlay_images[3] = image('icons/obj/power.dmi', "smes-og1") + + var/image/buffer + + buffer = src.overlay_images[1] + buffer.icon_state = "smes-op[online]" + overlays += src.overlay_images[1] + + if(!charging && chargemode) + buffer = src.overlay_images[2] + buffer.icon_state = "smes-oc0" + overlays += src.overlay_images[2] else - if(chargemode) - overlays += image('icons/obj/power.dmi', "smes-oc0") + buffer = src.overlay_images[2] + buffer.icon_state = "smes-oc1" + overlays += src.overlay_images[2] var/clevel = chargedisplay() - if(clevel>0) - overlays += image('icons/obj/power.dmi', "smes-og[clevel]") + if(clevel > 0) + buffer = src.overlay_images[3] + buffer.icon_state = "smes-og[clevel]" + overlays += src.overlay_images[3] return diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index af3b0d269c1..3554a88981f 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -34,6 +34,7 @@ var/list/solars_list = list() var/ndir = SOUTH var/turn_angle = 0 var/obj/machinery/power/solar_control/control = null + var/image/overlay_image //overlay cache image /obj/machinery/power/solar/New(var/turf/loc, var/obj/item/solar_assembly/S, var/process = 1) ..(loc) @@ -102,11 +103,14 @@ var/list/solars_list = list() /obj/machinery/power/solar/update_icon() ..() overlays.Cut() + if(isnull(src.overlay_image)) + src.overlay_image = image('icons/obj/power.dmi', layer = FLY_LAYER) if(stat & BROKEN) - overlays += image('icons/obj/power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER) + src.overlay_image.icon_state = "solar_panel-b" else - overlays += image('icons/obj/power.dmi', icon_state = "solar_panel", layer = FLY_LAYER) + src.overlay_image.icon_state = "solar_panel" src.dir = angle2dir(adir) + src.overlays += src.overlay_image return @@ -281,6 +285,7 @@ var/list/solars_list = list() var/trackrate = 60 // Measured in tenths of degree per minute (i.e. defaults to 6.0 deg/min) var/trackdir = 1 // -1=CCW, 1=CW var/nexttime = 0 // Next clock time that manual tracking will move the array + var/image/overlay_image /obj/machinery/power/solar_control/New() @@ -304,18 +309,18 @@ var/list/solars_list = list() set_panels(cdir) /obj/machinery/power/solar_control/update_icon() + overlays.Cut() + if(isnull(src.overlay_image)) + src.overlay_image = image('icons/obj/computer.dmi', "solcon-o", layer = FLY_LAYER) if(stat & BROKEN) icon_state = "broken" - overlays.Cut() return if(stat & NOPOWER) icon_state = "c_unpowered" - overlays.Cut() return icon_state = "solar" - overlays.Cut() if(cdir > 0) - overlays += image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(cdir)) + overlays += src.overlay_image //it doesn't change. return