Rewrite mine turf overlay adding

Stop adding overlays on adjacent turfs. Just add them on yourself, and push them sideways.
This commit is contained in:
Arokha Sieyes
2018-05-27 16:27:02 -04:00
parent be5c144a16
commit 3827307e59
2 changed files with 39 additions and 24 deletions

View File

@@ -97,6 +97,25 @@ var/list/mining_overlay_cache = list()
attackby(O, R) attackby(O, R)
return return
/turf/simulated/mineral/proc/get_cached_border(var/cache_id, var/direction, var/icon_file, var/icon_state, var/offset = 32)
//Cache miss
if(!mining_overlay_cache["[cache_id]_[direction]"])
var/image/new_cached_image = image(icon_state, dir = direction, layer = ABOVE_TURF_LAYER)
switch(direction)
if(NORTH)
new_cached_image.pixel_y = offset
if(SOUTH)
new_cached_image.pixel_y = -offset
if(EAST)
new_cached_image.pixel_x = offset
if(WEST)
new_cached_image.pixel_x = -offset
mining_overlay_cache["[cache_id]_[direction]"] = new_cached_image
return new_cached_image
//Cache hit
return mining_overlay_cache["[cache_id]_[direction]"]
/turf/simulated/mineral/initialize() /turf/simulated/mineral/initialize()
. = ..() . = ..()
if(prob(20)) if(prob(20))
@@ -111,8 +130,9 @@ var/list/mining_overlay_cache = list()
/turf/simulated/mineral/update_icon(var/update_neighbors) /turf/simulated/mineral/update_icon(var/update_neighbors)
overlays.Cut() cut_overlays()
//We are a wall (why does this system work like this??)
if(density) if(density)
if(mineral) if(mineral)
name = "[mineral.display_name] deposit" name = "[mineral.display_name] deposit"
@@ -122,47 +142,40 @@ var/list/mining_overlay_cache = list()
icon = 'icons/turf/walls.dmi' icon = 'icons/turf/walls.dmi'
icon_state = "rock" icon_state = "rock"
//Apply overlays if we should have borders
for(var/direction in cardinal) for(var/direction in cardinal)
var/turf/T = get_step(src,direction) var/turf/T = get_step(src,direction)
if(istype(T) && !T.density) if(istype(T) && !T.density)
var/place_dir = turn(direction, 180) add_overlay(get_cached_border("rock_side",direction,icon,"rock_side"))
if(!mining_overlay_cache["rock_side_[place_dir]"])
mining_overlay_cache["rock_side_[place_dir]"] = image('icons/turf/walls.dmi', "rock_side", dir = place_dir)
T.overlays += mining_overlay_cache["rock_side_[place_dir]"]
if(archaeo_overlay) if(archaeo_overlay)
overlays += archaeo_overlay add_overlay(archaeo_overlay)
if(excav_overlay) if(excav_overlay)
overlays += excav_overlay add_overlay(excav_overlay)
else
//We are a sand floor
else
name = "sand" name = "sand"
icon = 'icons/turf/flooring/asteroid.dmi' icon = 'icons/turf/flooring/asteroid.dmi'
icon_state = "asteroid" icon_state = "asteroid"
if(sand_dug) if(sand_dug)
if(!mining_overlay_cache["dug_overlay"]) add_overlay("dug_overlay")
mining_overlay_cache["dug_overlay"] = image('icons/turf/flooring/asteroid.dmi', "dug_overlay")
overlays += mining_overlay_cache["dug_overlay"]
//Apply overlays if there's space
for(var/direction in cardinal) for(var/direction in cardinal)
if(istype(get_step(src, direction), /turf/space) && !istype(get_step(src, direction), /turf/space/cracked_asteroid)) if(istype(get_step(src, direction), /turf/space) && !istype(get_step(src, direction), /turf/space/cracked_asteroid))
if(!mining_overlay_cache["asteroid_edge_[direction]"]) add_overlay(get_cached_border("asteroid_edge",direction,icon,"asteroid_edges", 0))
mining_overlay_cache["asteroid_edge_[direction]"] = image('icons/turf/flooring/asteroid.dmi', "asteroid_edges", dir = direction)
overlays += mining_overlay_cache["asteroid_edge_[direction]"] //Or any time
else else
var/turf/simulated/mineral/M = get_step(src, direction) var/turf/simulated/mineral/M = get_step(src, direction)
if(istype(M) && M.density) if(istype(M) && M.density)
if(!mining_overlay_cache["rock_side_[direction]"]) add_overlay(get_cached_border("rock_side",direction,'icons/turf/walls.dmi',"rock_side"))
mining_overlay_cache["rock_side_[direction]"] = image('icons/turf/walls.dmi', "rock_side", dir = direction)
overlays += mining_overlay_cache["rock_side_[direction]"]
if(overlay_detail) if(overlay_detail)
add_overlay('icons/turf/flooring/decals.dmi',overlay_detail)
if(!mining_overlay_cache["decal_[overlay_detail]"])
mining_overlay_cache["decal_[overlay_detail]"] = image(icon = 'icons/turf/flooring/decals.dmi', icon_state = overlay_detail)
overlays += mining_overlay_cache["decal_[overlay_detail]"]
if(update_neighbors) if(update_neighbors)
for(var/direction in alldirs) for(var/direction in alldirs)
@@ -414,12 +427,13 @@ var/list/mining_overlay_cache = list()
if(!archaeo_overlay && finds && finds.len) if(!archaeo_overlay && finds && finds.len)
var/datum/find/F = finds[1] var/datum/find/F = finds[1]
if(F.excavation_required <= excavation_level + F.view_range) if(F.excavation_required <= excavation_level + F.view_range)
cut_overlay(archaeo_overlay)
archaeo_overlay = "overlay_archaeo[rand(1,3)]" archaeo_overlay = "overlay_archaeo[rand(1,3)]"
updateIcon = 1 add_overlay(archaeo_overlay)
else if(archaeo_overlay && (!finds || !finds.len)) else if(archaeo_overlay && (!finds || !finds.len))
cut_overlay(archaeo_overlay)
archaeo_overlay = null archaeo_overlay = null
updateIcon = 1
//there's got to be a better way to do this //there's got to be a better way to do this
var/update_excav_overlay = 0 var/update_excav_overlay = 0
@@ -436,8 +450,9 @@ var/list/mining_overlay_cache = list()
//update overlays displaying excavation level //update overlays displaying excavation level
if( !(excav_overlay && excavation_level > 0) || update_excav_overlay ) if( !(excav_overlay && excavation_level > 0) || update_excav_overlay )
var/excav_quadrant = round(excavation_level / 25) + 1 var/excav_quadrant = round(excavation_level / 25) + 1
cut_overlay(excav_overlay)
excav_overlay = "overlay_excv[excav_quadrant]_[rand(1,3)]" excav_overlay = "overlay_excv[excav_quadrant]_[rand(1,3)]"
updateIcon = 1 add_overlay(excav_overlay)
if(updateIcon) if(updateIcon)
update_icon() update_icon()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 25 KiB