Move the flooring cache onto the flooring decls

This commit is contained in:
Aronai Sieyes
2020-05-28 23:00:32 -04:00
parent 2e4a9ebc1f
commit 97d6799cb2
2 changed files with 19 additions and 19 deletions

View File

@@ -46,6 +46,14 @@ var/list/flooring_types
var/list/footstep_sounds = list() // key=species name, value = list of sounds,
// For instance, footstep_sounds = list("key" = list(sound.ogg))
var/is_plating = FALSE
var/list/flooring_cache = list() // Cached overlays for our edges and corners and junk
/decl/flooring/proc/get_flooring_overlay(var/cache_key, var/icon_base, var/icon_dir = 0, var/layer = ABOVE_TURF_LAYER)
if(!flooring_cache[cache_key])
var/image/I = image(icon = icon, icon_state = icon_base, dir = icon_dir)
I.layer = layer
flooring_cache[cache_key] = I
return flooring_cache[cache_key]
/decl/flooring/grass
name = "grass"

View File

@@ -38,37 +38,37 @@ var/image/no_ceiling_image = null
var/turf/simulated/floor/T = get_step(src, step_dir)
if(!test_link(T))
has_border |= step_dir
add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir))
add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir))
//Note: Doesn't actually check northeast, this is bitmath to check if we're edge'd (aka not smoothed) to NORTH and EAST
//North = 0001, East = 0100, Northeast = 0101, so (North|East) == Northeast, therefore (North|East)&Northeast == Northeast
if((has_border & NORTHEAST) == NORTHEAST)
add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[NORTHEAST]", "[flooring.icon_base]_edges", NORTHEAST))
add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-edge-[NORTHEAST]", "[flooring.icon_base]_edges", NORTHEAST))
if((has_border & NORTHWEST) == NORTHWEST)
add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[NORTHWEST]", "[flooring.icon_base]_edges", NORTHWEST))
add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-edge-[NORTHWEST]", "[flooring.icon_base]_edges", NORTHWEST))
if((has_border & SOUTHEAST) == SOUTHEAST)
add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHEAST]", "[flooring.icon_base]_edges", SOUTHEAST))
add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHEAST]", "[flooring.icon_base]_edges", SOUTHEAST))
if((has_border & SOUTHWEST) == SOUTHWEST)
add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHWEST]", "[flooring.icon_base]_edges", SOUTHWEST))
add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHWEST]", "[flooring.icon_base]_edges", SOUTHWEST))
if(flooring.flags & TURF_HAS_CORNERS)
//Like above but checking for NO similar bits rather than both similar bits.
if((has_border & NORTHEAST) == 0) //Are connected NORTH and EAST
var/turf/simulated/floor/T = get_step(src, NORTHEAST)
if(!test_link(T)) //But not NORTHEAST
add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[NORTHEAST]", "[flooring.icon_base]_corners", NORTHEAST))
add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-corner-[NORTHEAST]", "[flooring.icon_base]_corners", NORTHEAST))
if((has_border & NORTHWEST) == 0)
var/turf/simulated/floor/T = get_step(src, NORTHWEST)
if(!test_link(T))
add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[NORTHWEST]", "[flooring.icon_base]_corners", NORTHWEST))
add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-corner-[NORTHWEST]", "[flooring.icon_base]_corners", NORTHWEST))
if((has_border & SOUTHEAST) == 0)
var/turf/simulated/floor/T = get_step(src, SOUTHEAST)
if(!test_link(T))
add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHEAST]", "[flooring.icon_base]_corners", SOUTHEAST))
add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHEAST]", "[flooring.icon_base]_corners", SOUTHEAST))
if((has_border & SOUTHWEST) == 0)
var/turf/simulated/floor/T = get_step(src, SOUTHWEST)
if(!test_link(T))
add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHWEST]", "[flooring.icon_base]_corners", SOUTHWEST))
add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHWEST]", "[flooring.icon_base]_corners", SOUTHWEST))
// Re-apply floor decals
if(LAZYLEN(decals))
@@ -79,9 +79,9 @@ var/image/no_ceiling_image = null
icon_state = "dmg[rand(1,4)]"
else if(flooring)
if(!isnull(broken) && (flooring.flags & TURF_CAN_BREAK))
add_overlay(get_flooring_overlay("[flooring.icon_base]-broken-[broken]","broken[broken]"))
add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-broken-[broken]","broken[broken]"))
if(!isnull(burnt) && (flooring.flags & TURF_CAN_BURN))
add_overlay(get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","burned[burnt]"))
add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","burned[burnt]"))
if(update_neighbors)
for(var/turf/simulated/floor/F in range(src, 1))
@@ -132,11 +132,3 @@ var/image/no_ceiling_image = null
/turf/simulated/floor/proc/test_link(var/turf/simulated/floor/them)
return (istype(them) && them.flooring?.name == src.flooring.name)
/turf/simulated/floor/proc/get_flooring_overlay(var/cache_key, var/icon_base, var/icon_dir = 0)
if(!flooring_cache[cache_key])
var/image/I = image(icon = flooring.icon, icon_state = icon_base, dir = icon_dir)
I.layer = layer
flooring_cache[cache_key] = I
return flooring_cache[cache_key]