Files
Aurora.3/code/_helpers/overlay.dm
Lohikar 1db5663128 Move various icon caches into a new subsystem for organization (#2538)
changes:

Blood overlays are now cached and do not involve world iteration.
Moved every global icon cache I could find into a new SS for organization & easier debugging. SS does not fire or init.
2017-05-31 08:37:39 +03:00

55 lines
1.5 KiB
Plaintext

// Factor/Opacity values are defined in __defines\lighting.dm
/proc/holographic_overlay(obj/target, icon, icon_state)
if (!icon || !icon_state)
CRASH("Invalid parameters.")
var/list/m_cache = SSicon_cache.holo_multiplier_cache
var/list/m_cache_icon
var/image/multiply
if (m_cache[icon])
m_cache_icon = m_cache[icon]
multiply = m_cache_icon[icon_state]
else
m_cache_icon = list()
m_cache[icon] = m_cache_icon
if (!multiply)
multiply = make_screen_overlay(icon, icon_state)
multiply.blend_mode = BLEND_MULTIPLY
multiply.color = list(
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
HOLOSCREEN_MULTIPLICATION_FACTOR, HOLOSCREEN_MULTIPLICATION_FACTOR, HOLOSCREEN_MULTIPLICATION_FACTOR, HOLOSCREEN_MULTIPLICATION_OPACITY
)
m_cache_icon[icon_state] = multiply
var/list/a_cache = SSicon_cache.holo_adder_cache
var/list/a_cache_icon = a_cache[icon]
var/image/overlay
if (!a_cache_icon)
a_cache_icon = list()
a_cache[icon] = a_cache_icon
else
overlay = a_cache_icon[icon_state]
if (!overlay)
overlay = make_screen_overlay(icon, icon_state, HOLOSCREEN_ADDITION_OPACITY)
overlay.blend_mode = BLEND_ADD
a_cache_icon[icon_state] = overlay
target.add_overlay(list(multiply, overlay))
/proc/make_screen_overlay(icon, icon_state, brightness_factor = null)
var/image/overlay = image(icon, icon_state)
overlay.layer = LIGHTING_LAYER + 0.1
if (brightness_factor)
overlay.color = list(
brightness_factor, 0, 0, 0,
0, brightness_factor, 0, 0,
0, 0, brightness_factor, 0,
0, 0, 0, 1
)
return overlay