Image caching optimizations

This commit is contained in:
ZomgPonies
2013-10-05 09:49:55 -04:00
parent 53e005d2a1
commit 63421d58e0
6 changed files with 68 additions and 33 deletions
+6 -7
View File
@@ -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
+7 -2
View File
@@ -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
+9 -5
View File
@@ -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))
+8 -5
View File
@@ -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
+27 -8
View File
@@ -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
+11 -6
View File
@@ -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