Multi-ZAS Optimization

A simple optimization to can_safely_remove_from_zone() both with and without multi-zas.
Instead of allocating a new list every time we call get_zone_neighbours() (which gets called several times in a loop) we have a pre-built list we don't need to Copy().
Same story for the list to iterate over in can_safely_remove_from_zone()
There should be no semantic change whatsoever from this; it is purely a performance optimization.
This commit is contained in:
Leshana
2017-04-17 19:50:02 -04:00
parent 75ae42ca81
commit f8a538eff9
3 changed files with 10 additions and 14 deletions

View File

@@ -58,10 +58,13 @@
var/check_dirs = get_zone_neighbours(src) var/check_dirs = get_zone_neighbours(src)
var/unconnected_dirs = check_dirs var/unconnected_dirs = check_dirs
var/to_check = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
#ifdef MULTIZAS #ifdef MULTIZAS
to_check += list(NORTHUP, EASTUP, WESTUP, SOUTHUP, NORTHDOWN, EASTDOWN, WESTDOWN, SOUTHDOWN) var/to_check = cornerdirsz
#else
var/to_check = cornerdirs
#endif #endif
for(var/dir in to_check) for(var/dir in to_check)
//for each pair of "adjacent" cardinals (e.g. NORTH and WEST, but not NORTH and SOUTH) //for each pair of "adjacent" cardinals (e.g. NORTH and WEST, but not NORTH and SOUTH)
if((dir & check_dirs) == dir) if((dir & check_dirs) == dir)
@@ -77,9 +80,10 @@
/turf/simulated/proc/get_zone_neighbours(turf/simulated/T) /turf/simulated/proc/get_zone_neighbours(turf/simulated/T)
. = 0 . = 0
if(istype(T) && T.zone) if(istype(T) && T.zone)
var/to_check = cardinal.Copy()
#ifdef MULTIZAS #ifdef MULTIZAS
to_check += list(UP, DOWN) var/to_check = cardinalz
#else
var/to_check = cardinal
#endif #endif
for(var/dir in to_check) for(var/dir in to_check)
var/turf/simulated/other = get_step(T, dir) var/turf/simulated/other = get_step(T, dir)

View File

@@ -199,13 +199,3 @@
#define TSC_MORPH "Morpheus" #define TSC_MORPH "Morpheus"
#define TSC_XION "Xion" // Not really needed but consistancy I guess. #define TSC_XION "Xion" // Not really needed but consistancy I guess.
#define TSC_GIL "Gilthari" #define TSC_GIL "Gilthari"
//MultiZ directions for ZAS checks.
#define NORTHUP (NORTH|UP)
#define EASTUP (EAST|UP)
#define SOUTHUP (SOUTH|UP)
#define WESTUP (WEST|UP)
#define NORTHDOWN (NORTH|DOWN)
#define EASTDOWN (EAST|DOWN)
#define SOUTHDOWN (SOUTH|DOWN)
#define WESTDOWN (WEST|DOWN)

View File

@@ -89,7 +89,9 @@ var/list/blobstart = list()
var/list/ninjastart = list() var/list/ninjastart = list()
var/list/cardinal = list(NORTH, SOUTH, EAST, WEST) var/list/cardinal = list(NORTH, SOUTH, EAST, WEST)
var/list/cardinalz = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
var/list/cornerdirs = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) var/list/cornerdirs = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
var/list/cornerdirsz = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTH|UP, EAST|UP, WEST|UP, SOUTH|UP, NORTH|DOWN, EAST|DOWN, WEST|DOWN, SOUTH|DOWN)
var/list/alldirs = list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) var/list/alldirs = list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
var/list/reverse_dir = list( // reverse_dir[dir] = reverse of dir var/list/reverse_dir = list( // reverse_dir[dir] = reverse of dir
2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15, 32, 34, 33, 35, 40, 42, 2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15, 32, 34, 33, 35, 40, 42,