From 703b35d3dc6b7d8c5d8f9abf3c914edf4d3ca45f Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Sat, 4 Jan 2014 03:21:07 -0500 Subject: [PATCH] Optimized explosions, not recursive ones --- code/game/objects/explosion.dm | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index ebcf1008464..3d4fed6cd89 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -6,6 +6,18 @@ if(dx>=dy) return dx + (0.5*dy) //The longest side add half the shortest side approximates the hypotenuse else return dy + (0.5*dx) +proc/trange(var/Dist=0,var/turf/Center=null)//alternative to range (ONLY processes turfs and thus less intensive) + if(Center==null) return + + //var/x1=((Center.x-Dist)<1 ? 1 : Center.x-Dist) + //var/y1=((Center.y-Dist)<1 ? 1 : Center.y-Dist) + //var/x2=((Center.x+Dist)>world.maxx ? world.maxx : Center.x+Dist) + //var/y2=((Center.y+Dist)>world.maxy ? world.maxy : Center.y+Dist) + + var/turf/x1y1 = locate(((Center.x-Dist)<1 ? 1 : Center.x-Dist),((Center.y-Dist)<1 ? 1 : Center.y-Dist),Center.z) + var/turf/x2y2 = locate(((Center.x+Dist)>world.maxx ? world.maxx : Center.x+Dist),((Center.y+Dist)>world.maxy ? world.maxy : Center.y+Dist),Center.z) + return block(x1y1,x2y2) + proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, adminlog = 1) src = null //so we don't abort once src is deleted @@ -64,7 +76,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa var/y0 = epicenter.y var/z0 = epicenter.z - for(var/turf/T in range(epicenter, max_range)) + for(var/turf/T in trange(max_range, epicenter)) var/dist = cheap_pythag(T.x - x0,T.y - y0) if(dist < devastation_range) dist = 1 @@ -100,5 +112,5 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa proc/secondaryexplosion(turf/epicenter, range) - for(var/turf/tile in range(range, epicenter)) + for(var/turf/tile in trange(range, epicenter)) tile.ex_act(2)