Files
Aurora.3/code/modules/lighting/lighting_setup.dm
Lohikar 2165054918 Minor Lighting Process Improvements (#1682)
This PR reduces the tick rate of the lighting process from 1 ds interval to 10 ds interval, and removes some pointless updates from Destroy().

Also removes some left over defines from update_type and darkness overlays that I forgot to remove earlier.

Fixes #1683.
2017-02-01 19:48:28 +02:00

85 lines
2.1 KiB
Plaintext

/proc/create_lighting_overlays_zlevel(var/zlevel)
ASSERT(zlevel)
for (var/turf/T in block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel)))
if (!T.dynamic_lighting)
continue
var/area/A = T.loc
if (!A.dynamic_lighting)
continue
getFromPool(/atom/movable/lighting_overlay, T, TRUE)
// This repeats a bit of code from the lighting process.
/proc/initialize_lighting()
admin_notice(span("danger", "Generating lighting overlays (1/4)..."))
for (var/zlevel = 1 to world.maxz)
create_lighting_overlays_zlevel(zlevel)
CHECK_TICK
admin_notice(span("danger", "Initializing light sources (2/4)..."))
var/num_lights = 0
var/list/lights = lighting_update_lights
lighting_update_lights = list()
while (lights.len)
var/datum/light_source/L = lights[lights.len]
lights.len--
if (!L) continue
if (L.destroyed || L.check() || L.force_update)
L.remove_lum()
if(!L.destroyed)
L.apply_lum()
else if(L.vis_update) //We smartly update only tiles that became (in) visible to use.
L.smart_vis_update()
L.vis_update = FALSE
L.force_update = FALSE
L.needs_update = FALSE
num_lights++
CHECK_TICK
admin_notice(span("danger", "Processed [num_lights] light sources."))
admin_notice(span("danger", "Initializing lighting corners (3/4)..."))
var/num_corners = 0
var/list/corners = lighting_update_corners
lighting_update_corners = list()
while (corners.len)
var/datum/lighting_corner/C = corners[corners.len]
corners.len--
if (!C) continue
C.update_overlays()
C.needs_update = FALSE
num_corners++
CHECK_TICK
admin_notice(span("danger", "Processed [num_corners] light corners."))
admin_notice(span("danger", "Initializing lighting overlays (4/4)..."))
var/num_overlays = 0
var/list/overlays = lighting_update_overlays
lighting_update_overlays = list()
while (overlays.len)
var/atom/movable/lighting_overlay/O = overlays[overlays.len]
overlays.len--
if (!O) continue
O.update_overlay()
O.needs_update = FALSE
num_overlays++
CHECK_TICK
admin_notice(span("danger", "Processed [num_overlays] light overlays."))