diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index b7439079822..4c58eb89ed4 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -491,17 +491,26 @@ Turf and target are seperate in case you want to teleport some distance from a t var/y=arcsin(x/sqrt(1+x*x)) return y -/atom/proc/GetAllContents() +/atom/proc/GetAllContents(list/ignore_typecache) var/list/processing_list = list(src) var/list/assembled = list() + if(ignore_typecache) //If there's a typecache, use it. + while(processing_list.len) + var/atom/A = processing_list[1] + processing_list -= A + if(ignore_typecache[A.type]) + continue + processing_list |= (A.contents - assembled) + assembled |= A - while(processing_list.len) - var/atom/A = processing_list[1] - processing_list -= A + else //If there's none, only make this check once for performance. + while(processing_list.len) + var/atom/A = processing_list[1] + processing_list -= A - processing_list |= (A.contents - assembled) + processing_list |= (A.contents - assembled) - assembled |= A + assembled |= A return assembled diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index e1e2ef0bea6..5e5dc3f08a7 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -419,17 +419,17 @@ if(!SSticker.HasRoundStarted()) add_blueprints(AM) -/turf/proc/empty(turf_type=/turf/open/space, baseturf_type, delmobs = TRUE, forceop = FALSE) +/turf/proc/empty(turf_type=/turf/open/space, baseturf_type, list/ignore_typecache, forceop = FALSE) // Remove all atoms except observers, landmarks, docking ports var/static/list/ignored_atoms = typecacheof(list(/mob/dead, /obj/effect/landmark, /obj/docking_port, /atom/movable/lighting_object)) - var/list/allowed_contents = typecache_filter_list_reverse(GetAllContents(),delmobs? ignored_atoms : ignored_atoms + typecacheof(list(/mob))) + var/list/allowed_contents = typecache_filter_list_reverse(GetAllContents(ignore_typecache), ignored_atoms) allowed_contents -= src for(var/i in 1 to allowed_contents.len) var/thing = allowed_contents[i] qdel(thing, force=TRUE) var/turf/newT = ChangeTurf(turf_type, baseturf_type, FALSE, FALSE, forceop = forceop) - + SSair.remove_from_active(newT) newT.CalculateAdjacentTurfs() SSair.add_to_active(newT,1) diff --git a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm index b93b3630e94..24b75a3a9a9 100644 --- a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm +++ b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm @@ -20,26 +20,34 @@ /datum/mapGeneratorModule/bottomLayer/massdelete spawnableAtoms = list() spawnableTurfs = list() - var/deletemobs = TRUE - var/deleteturfs = TRUE + var/deleteturfs = TRUE //separate var for the empty type. + var/list/ignore_typecache /datum/mapGeneratorModule/bottomLayer/massdelete/generate() if(!mother) return for(var/V in mother.map) var/turf/T = V - T.empty(deleteturfs? null : T.type, delmobs = deletemobs, forceop = TRUE) + T.empty(deleteturfs? null : T.type, ignore_typecache = ignore_typecache, forceop = TRUE) -/datum/mapGeneratorModule/bottomLayer/massdelete/no_delete_mobs - deletemobs = FALSE +/datum/mapGeneratorModule/bottomLayer/massdelete/no_delete_mobs/New() + ..() + ignore_typecache = typecacheof(list(/mob)) /datum/mapGeneratorModule/bottomLayer/massdelete/leave_turfs deleteturfs = FALSE +/datum/mapGeneratorModule/bottomLayer/massdelete/leave_turfs/New() + ..() + ignore_typecache = typecacheof(list(/turf)) + /datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete - deletemobs = FALSE deleteturfs = FALSE +/datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete/New() + ..() + ignore_typecache = typecacheof(list(/mob, /turf)) + //Only places atoms/turfs on area borders /datum/mapGeneratorModule/border clusterCheckFlags = CLUSTER_CHECK_NONE