mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-20 07:02:05 +00:00
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.
55 lines
1.5 KiB
Plaintext
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
|