From 379fa1ad1e5a4eb0ee5b7cb705b18604b679d8e8 Mon Sep 17 00:00:00 2001 From: Migratingcocofruit <69551563+Migratingcocofruit@users.noreply.github.com> Date: Sun, 14 Sep 2025 23:31:30 +0300 Subject: [PATCH] Adds a cache to radiation waves (#30261) --- code/controllers/subsystem/SSradiation.dm | 2 ++ code/datums/radiation_wave.dm | 11 ++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/code/controllers/subsystem/SSradiation.dm b/code/controllers/subsystem/SSradiation.dm index 5d50ebca93a..ca02e9ddc18 100644 --- a/code/controllers/subsystem/SSradiation.dm +++ b/code/controllers/subsystem/SSradiation.dm @@ -33,6 +33,8 @@ PROCESSING_SUBSYSTEM_DEF(radiation) if(world.time > last_rad_cache_update + rad_cache_update_interval) refresh_rad_cache() last_rad_cache_update = world.time + for(var/emission_type in GLOB.turf_rad_item_cache) + GLOB.turf_rad_item_cache["[emission_type]"] = list() . = ..() /datum/controller/subsystem/processing/radiation/proc/get_turf_radiation(turf/place) diff --git a/code/datums/radiation_wave.dm b/code/datums/radiation_wave.dm index fde822234f1..e0f43b312af 100644 --- a/code/datums/radiation_wave.dm +++ b/code/datums/radiation_wave.dm @@ -1,3 +1,4 @@ +GLOBAL_LIST_INIT(turf_rad_item_cache, list("[ALPHA_RAD]" = list(), "[BETA_RAD]" = list(), "[GAMMA_RAD]" = list())) #define WRAP_INDEX(index, length)((index - 1) % length + 1) /datum/radiation_wave @@ -83,11 +84,11 @@ /// Calls rad act on each relevant atom in the turf and returns the resulting weight for that tile after reduction by insulation /datum/radiation_wave/proc/radiate(atom/source, turf/current_turf, weight, emission_type) - var/list/turf_atoms = list() - if(length(current_turf.contents)) - turf_atoms = get_rad_contents(current_turf, emission_type) - else - turf_atoms = list(current_turf) + // populate cache if needed + if(!GLOB.turf_rad_item_cache["[emission_type]"][current_turf]) + GLOB.turf_rad_item_cache["[emission_type]"][current_turf] = get_rad_contents(current_turf, emission_type) + + var/list/turf_atoms = GLOB.turf_rad_item_cache["[emission_type]"][current_turf] for(var/k in turf_atoms) var/atom/thing = k if(QDELETED(thing))