[MIRROR] Refactors z level trait checking to be less shit [MDB IGNORE] (#15751)

* Refactors z level trait checking to be less shit (#69334)

* Puts level traits and their associated z into a list and then uses it to make the z level trait procs less shit. They no longer need to loop through every z level to do what they aim to do.

* Also removes get_level from level_trait because it just does the same checks as already done above in the proc.

* Refactors z level trait checking to be less shit

Co-authored-by: Seth Scherer <supernovaa41@gmx.com>
This commit is contained in:
SkyratBot
2022-08-25 00:40:45 +02:00
committed by GitHub
parent 2253198fc3
commit 1dce8047e5
3 changed files with 22 additions and 18 deletions
@@ -11,4 +11,11 @@
z_value = new_z
name = new_name
traits = new_traits
if (islist(new_traits))
for (var/trait in new_traits)
SSmapping.z_trait_levels[trait] += list(new_z)
else // in case a single trait is passed in
SSmapping.z_trait_levels[new_traits] += list(new_z)
set_linkage(new_traits[ZTRAIT_LINKAGE])
+12 -18
View File
@@ -6,7 +6,7 @@
if (z > z_list.len)
stack_trace("Unmanaged z-level [z]! maxz = [world.maxz], z_list.len = [z_list.len]")
return list()
var/datum/space_level/S = get_level(z)
var/datum/space_level/S = z_list[z]
return S.traits[trait]
else
var/list/default = DEFAULT_MAP_TRAITS
@@ -17,34 +17,28 @@
/// Check if levels[z] has any of the specified traits
/datum/controller/subsystem/mapping/proc/level_has_any_trait(z, list/traits)
for (var/I in traits)
if (level_trait(z, I))
return TRUE
var/datum/space_level/level_to_check = z_list[z]
if (length(level_to_check.traits & traits))
return TRUE
return FALSE
/// Check if levels[z] has all of the specified traits
/datum/controller/subsystem/mapping/proc/level_has_all_traits(z, list/traits)
for (var/I in traits)
if (!level_trait(z, I))
return FALSE
return TRUE
var/datum/space_level/level_to_check = z_list[z]
if (length(level_to_check.traits & traits) == length(traits))
return TRUE
return FALSE
/// Get a list of all z which have the specified trait
/datum/controller/subsystem/mapping/proc/levels_by_trait(trait)
var/list/final_return = list()
for(var/datum/space_level/level as anything in z_list)
if (level.traits[trait])
final_return += level.z_value
return final_return
return z_trait_levels[trait] || list()
/// Get a list of all z which have any of the specified traits
/datum/controller/subsystem/mapping/proc/levels_by_any_trait(list/traits)
var/list/final_return = list()
for(var/datum/space_level/level as anything in z_list)
for (var/trait in traits)
if (level.traits[trait])
final_return += level.z_value
break
for (var/trait in traits)
if (z_trait_levels[trait])
final_return |= z_trait_levels[trait]
return final_return
/// Get a list of all z which have all of the specified traits