From 2bd13e700a32b91c5abff06b486e97152e1c72fb Mon Sep 17 00:00:00 2001 From: xxalpha Date: Wed, 3 Feb 2016 06:47:48 +0000 Subject: [PATCH 1/2] get_areas_in_range() nospace wormhole --- code/__HELPERS/unsorted.dm | 13 +++++++++++++ code/datums/diseases/wizarditis.dm | 7 +++---- code/game/mecha/equipment/tools/other_tools.dm | 8 +++----- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 20d35846a87..336648791af 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1175,6 +1175,19 @@ B --><-- A return L +/proc/get_areas_in_range(dist=0, atom/center=usr) + if(!dist) + var/turf/T = get_turf(center) + return T ? list(T.loc) : list() + if(!center) + return list() + + var/list/turfs = RANGE_TURFS(dist, center) + var/list/areas = list() + for(var/V in turfs) + var/turf/T = V + areas |= T.loc + return areas /atom/proc/contains(var/atom/A) if(!A) diff --git a/code/datums/diseases/wizarditis.dm b/code/datums/diseases/wizarditis.dm index 5e9043f8d04..25c73a7f0ed 100644 --- a/code/datums/diseases/wizarditis.dm +++ b/code/datums/diseases/wizarditis.dm @@ -87,10 +87,9 @@ STI KALY - blind /datum/disease/wizarditis/proc/teleport() - var/list/theareas = list() - for(var/area/AR in ultra_range(80, affected_mob, 1)) - if(theareas.Find(AR) || istype(AR,/area/space)) continue - theareas += AR + var/list/theareas = get_areas_in_range(80, affected_mob) + for(var/area/space/S in theareas) + theareas -= S if(!theareas||!theareas.len) return diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index a1ce789e73a..60b088ebc97 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -35,11 +35,9 @@ /obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target) - if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM) return - var/list/theareas = list() - for(var/area/AR in ultra_range(100, chassis, 1)) - if(AR in theareas) continue - theareas += AR + if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM) + return + var/list/theareas = get_areas_in_range(100, chassis) if(!theareas.len) return var/area/thearea = pick(theareas) From 0949e4d0524b1fb801823a8a25e0964dd9f2e243 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Fri, 5 Feb 2016 04:30:07 +0000 Subject: [PATCH 2/2] Moved proc to game.dm --- code/__HELPERS/game.dm | 28 +++++++++++++++++++++------- code/__HELPERS/unsorted.dm | 14 -------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 4f0e9158101..e127a5f3060 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -1,3 +1,10 @@ +//supposedly the fastest way to do this according to https://gist.github.com/Giacom/be635398926bb463b42a +#define RANGE_TURFS(RADIUS, CENTER) \ + block( \ + locate(max(CENTER.x-(RADIUS),1), max(CENTER.y-(RADIUS),1), CENTER.z), \ + locate(min(CENTER.x+(RADIUS),world.maxx), min(CENTER.y+(RADIUS),world.maxy), CENTER.z) \ + ) + //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 /proc/get_area(O) @@ -24,6 +31,20 @@ return A return 0 +/proc/get_areas_in_range(dist=0, atom/center=usr) + if(!dist) + var/turf/T = get_turf(center) + return T ? list(T.loc) : list() + if(!center) + return list() + + var/list/turfs = RANGE_TURFS(dist, center) + var/list/areas = list() + for(var/V in turfs) + var/turf/T = V + areas |= T.loc + return areas + // Like view but bypasses luminosity check /proc/get_hear(range, atom/source) @@ -423,10 +444,3 @@ new_character.key = G_found.key return new_character - -//supposedly the fastest way to do this according to https://gist.github.com/Giacom/be635398926bb463b42a -#define RANGE_TURFS(RADIUS, CENTER) \ - block( \ - locate(max(CENTER.x-(RADIUS),1), max(CENTER.y-(RADIUS),1), CENTER.z), \ - locate(min(CENTER.x+(RADIUS),world.maxx), min(CENTER.y+(RADIUS),world.maxy), CENTER.z) \ - ) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 336648791af..bf7ba315543 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1175,20 +1175,6 @@ B --><-- A return L -/proc/get_areas_in_range(dist=0, atom/center=usr) - if(!dist) - var/turf/T = get_turf(center) - return T ? list(T.loc) : list() - if(!center) - return list() - - var/list/turfs = RANGE_TURFS(dist, center) - var/list/areas = list() - for(var/V in turfs) - var/turf/T = V - areas |= T.loc - return areas - /atom/proc/contains(var/atom/A) if(!A) return 0