mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-27 06:54:18 +01:00
Openturf & Lighting Improvements (#2961)
changes: Openturf now uses ~200 MB less memory when sunlight is enabled. Openturf now handles recursive OO copy better. Lighting objects now update their existing color list if they can instead of creating a new one each time. The sun can no longer fall out of the sky. Openturfs should be a little gentler on clients. Openturf darkening factor can be more easily changed. Reset-Openturfs no longer hangs SSgarbage.
This commit is contained in:
@@ -45,9 +45,6 @@
|
||||
#define ALL_EQUAL ((rr == gr && gr == br && br == ar) && (rg == gg && gg == bg && bg == ag) && (rb == gb && gb == bb && bb == ab))
|
||||
|
||||
/atom/movable/lighting_overlay/proc/update_overlay()
|
||||
if (QDELING(src)) // This shouldn't happen.
|
||||
return
|
||||
|
||||
var/turf/T = loc
|
||||
if (!istype(T)) // Erm...
|
||||
if (loc)
|
||||
@@ -103,13 +100,29 @@
|
||||
color = null
|
||||
else
|
||||
icon_state = LIGHTING_BASE_ICON_STATE
|
||||
color = list(
|
||||
rr, rg, rb, 0,
|
||||
gr, gg, gb, 0,
|
||||
br, bg, bb, 0,
|
||||
ar, ag, ab, 0,
|
||||
0, 0, 0, 1
|
||||
)
|
||||
if (islist(color))
|
||||
var/list/c_list = color
|
||||
c_list[CL_MATRIX_RR] = rr
|
||||
c_list[CL_MATRIX_RG] = rg
|
||||
c_list[CL_MATRIX_RB] = rb
|
||||
c_list[CL_MATRIX_GR] = gr
|
||||
c_list[CL_MATRIX_GG] = gg
|
||||
c_list[CL_MATRIX_GB] = gb
|
||||
c_list[CL_MATRIX_BR] = br
|
||||
c_list[CL_MATRIX_BG] = bg
|
||||
c_list[CL_MATRIX_BB] = bb
|
||||
c_list[CL_MATRIX_AR] = ar
|
||||
c_list[CL_MATRIX_AG] = ag
|
||||
c_list[CL_MATRIX_AB] = ab
|
||||
color = c_list
|
||||
else
|
||||
color = list(
|
||||
rr, rg, rb, 0,
|
||||
gr, gg, gb, 0,
|
||||
br, bg, bb, 0,
|
||||
ar, ag, ab, 0,
|
||||
0, 0, 0, 1
|
||||
)
|
||||
#else
|
||||
color = list(
|
||||
cr.cache_r, cr.cache_g, cr.cache_b, 0,
|
||||
@@ -120,8 +133,44 @@
|
||||
)
|
||||
#endif
|
||||
|
||||
if (bound_overlay)
|
||||
update_above()
|
||||
// If we're on an openturf, update the shadower object too.
|
||||
// We could queue an icon update for the entire OT, but this involves less overhead.
|
||||
var/turf/simulated/open/OT = loc:above
|
||||
if (OT)
|
||||
var/atom/movable/openspace/multiplier/shadower = OT.shadower
|
||||
if (!shadower) // The OT hasn't been initialized yet.
|
||||
OT.update_icon()
|
||||
return
|
||||
|
||||
shadower.appearance = src
|
||||
shadower.plane = OPENTURF_CAP_PLANE
|
||||
shadower.layer = SHADOWER_LAYER
|
||||
shadower.invisibility = 0
|
||||
if (shadower.icon_state == LIGHTING_BASE_ICON_STATE)
|
||||
// We're using a color matrix, so just darken the colors.
|
||||
var/list/c_list = shadower.color
|
||||
c_list[CL_MATRIX_RR] *= SHADOWER_DARKENING_FACTOR
|
||||
c_list[CL_MATRIX_RG] *= SHADOWER_DARKENING_FACTOR
|
||||
c_list[CL_MATRIX_RB] *= SHADOWER_DARKENING_FACTOR
|
||||
c_list[CL_MATRIX_GR] *= SHADOWER_DARKENING_FACTOR
|
||||
c_list[CL_MATRIX_GG] *= SHADOWER_DARKENING_FACTOR
|
||||
c_list[CL_MATRIX_GB] *= SHADOWER_DARKENING_FACTOR
|
||||
c_list[CL_MATRIX_BR] *= SHADOWER_DARKENING_FACTOR
|
||||
c_list[CL_MATRIX_BG] *= SHADOWER_DARKENING_FACTOR
|
||||
c_list[CL_MATRIX_BB] *= SHADOWER_DARKENING_FACTOR
|
||||
c_list[CL_MATRIX_AR] *= SHADOWER_DARKENING_FACTOR
|
||||
c_list[CL_MATRIX_AG] *= SHADOWER_DARKENING_FACTOR
|
||||
c_list[CL_MATRIX_AB] *= SHADOWER_DARKENING_FACTOR
|
||||
shadower.color = c_list
|
||||
else
|
||||
shadower.color = list(
|
||||
SHADOWER_DARKENING_FACTOR, 0, 0,
|
||||
0, SHADOWER_DARKENING_FACTOR, 0,
|
||||
0, 0, SHADOWER_DARKENING_FACTOR
|
||||
)
|
||||
|
||||
if (shadower.bound_overlay)
|
||||
shadower.update_above()
|
||||
|
||||
#undef ALL_EQUAL
|
||||
|
||||
|
||||
@@ -90,14 +90,15 @@
|
||||
/atom/movable/openspace/multiplier
|
||||
name = "openspace multiplier"
|
||||
desc = "You shouldn't see this."
|
||||
icon = 'icons/misc/openspace.dmi'
|
||||
icon_state = "white"
|
||||
icon = 'icons/effects/lighting_overlay.dmi'
|
||||
icon_state = "blank"
|
||||
plane = OPENTURF_CAP_PLANE
|
||||
layer = SHADOWER_LAYER
|
||||
blend_mode = BLEND_MULTIPLY
|
||||
color = list(
|
||||
0.75, 0, 0,
|
||||
0, 0.75, 0,
|
||||
0, 0, 0.75
|
||||
SHADOWER_DARKENING_FACTOR, 0, 0,
|
||||
0, SHADOWER_DARKENING_FACTOR, 0,
|
||||
0, 0, SHADOWER_DARKENING_FACTOR
|
||||
)
|
||||
|
||||
/atom/movable/openspace/multiplier/Destroy()
|
||||
|
||||
Reference in New Issue
Block a user