mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-21 04:57:57 +01:00
[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:
@@ -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])
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user