mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-22 16:12:19 +00:00
changes: Overlays now creates less temporary lists. Falling no longer queues unsimulated atoms that wouldn't fall anyways (incl. LOs). Pixel-shifted AO is now cached too. Changed some references to get_map_cell() to macro equivalents in random maps. Added smoothing hinting to the icon smoother, allowing for major performance improvements in common cases. Space initialization no longer involves appearance churn (and is much faster as a result).
62 lines
1.4 KiB
Plaintext
62 lines
1.4 KiB
Plaintext
var/datum/controller/subsystem/icon_smooth/SSicon_smooth
|
|
|
|
/datum/controller/subsystem/icon_smooth
|
|
name = "Icon Smoothing"
|
|
init_order = SS_INIT_SMOOTHING
|
|
wait = 1
|
|
priority = SS_PRIORITY_SMOOTHING
|
|
flags = SS_TICKER | SS_FIRE_IN_LOBBY
|
|
|
|
var/list/smooth_queue = list()
|
|
var/list/typecachecache = list()
|
|
|
|
var/explosion_in_progress = FALSE
|
|
|
|
/datum/controller/subsystem/icon_smooth/New()
|
|
NEW_SS_GLOBAL(SSicon_smooth)
|
|
|
|
/datum/controller/subsystem/icon_smooth/Recover()
|
|
smooth_queue = SSicon_smooth.smooth_queue
|
|
|
|
/datum/controller/subsystem/icon_smooth/stat_entry()
|
|
..("Q:[smooth_queue.len]")
|
|
|
|
/datum/controller/subsystem/icon_smooth/fire()
|
|
if (explosion_in_progress)
|
|
return
|
|
|
|
while(smooth_queue.len)
|
|
var/atom/A = smooth_queue[smooth_queue.len]
|
|
smooth_queue.len--
|
|
smooth_icon(A)
|
|
if (MC_TICK_CHECK)
|
|
return
|
|
if (!smooth_queue.len)
|
|
suspend()
|
|
|
|
/datum/controller/subsystem/icon_smooth/ExplosionStart()
|
|
explosion_in_progress = TRUE
|
|
|
|
/datum/controller/subsystem/icon_smooth/ExplosionEnd()
|
|
explosion_in_progress = FALSE
|
|
|
|
/datum/controller/subsystem/icon_smooth/Initialize()
|
|
for (var/zlevel = 1 to world.maxz)
|
|
smooth_zlevel(zlevel, FALSE)
|
|
|
|
if (config.fastboot)
|
|
log_debug("icon_smoothing: Skipping prebake, fastboot enabled.")
|
|
..()
|
|
return
|
|
|
|
var/queue = smooth_queue
|
|
smooth_queue = list()
|
|
for(var/V in queue)
|
|
var/atom/A = V
|
|
if(!A)
|
|
continue
|
|
smooth_icon(A)
|
|
CHECK_TICK
|
|
|
|
..()
|