mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 02:09:41 +00:00
Move the flooring cache onto the flooring decls
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user