[MIRROR] get_edge_target_turf() now finds the proper turf when using diagonal directions (#1972)

* get_edge_target_turf() now finds the proper turf when using diagonal directions

* Update camera.dm
This commit is contained in:
CitadelStationBot
2017-07-10 18:15:02 -05:00
committed by kevinz000
parent 8ece55ef95
commit e43af7f1bd
2 changed files with 17 additions and 22 deletions
+15 -11
View File
@@ -442,19 +442,23 @@ Turf and target are seperate in case you want to teleport some distance from a t
var/turf/target = locate(A.x, A.y, A.z)
if(!A || !target)
return 0
//since NORTHEAST == NORTH & EAST, etc, doing it this way allows for diagonal mass drivers in the future
//since NORTHEAST == NORTH|EAST, etc, doing it this way allows for diagonal mass drivers in the future
//and isn't really any more complicated
// Note diagonal directions won't usually be accurate
var/x = A.x
var/y = A.y
if(direction & NORTH)
target = locate(target.x, world.maxy, target.z)
if(direction & SOUTH)
target = locate(target.x, 1, target.z)
y = world.maxy
else if(direction & SOUTH) //you should not have both NORTH and SOUTH in the provided direction
y = 1
if(direction & EAST)
target = locate(world.maxx, target.y, target.z)
if(direction & WEST)
target = locate(1, target.y, target.z)
return target
x = world.maxx
else if(direction & WEST)
x = 1
if(direction in GLOB.diagonals) //let's make sure it's accurately-placed for diagonals
var/lowest_distance_to_map_edge = min(abs(x - A.x), abs(y - A.y))
return get_ranged_target_turf(A, direction, lowest_distance_to_map_edge)
return locate(x,y,A.z)
// returns turf relative to A in given direction at set range
// result is bounded to map size
@@ -466,11 +470,11 @@ Turf and target are seperate in case you want to teleport some distance from a t
var/y = A.y
if(direction & NORTH)
y = min(world.maxy, y + range)
if(direction & SOUTH)
else if(direction & SOUTH)
y = max(1, y - range)
if(direction & EAST)
x = min(world.maxx, x + range)
if(direction & WEST)
else if(direction & WEST) //if you have both EAST and WEST in the provided direction, then you're gonna have issues
x = max(1, x - range)
return locate(x,y,A.z)
+2 -11
View File
@@ -323,19 +323,10 @@
/atom/proc/auto_turn()
//Automatically turns based on nearby walls.
var/turf/closed/wall/T = null
for(var/i = 1, i <= 8; i += i)
for(var/i in GLOB.cardinals)
T = get_ranged_target_turf(src, i, 1)
if(istype(T))
//If someone knows a better way to do this, let me know. -Giacom
switch(i)
if(NORTH)
src.setDir(SOUTH)
if(SOUTH)
src.setDir(NORTH)
if(WEST)
src.setDir(EAST)
if(EAST)
src.setDir(WEST)
setDir(turn(i, 180))
break
//Return a working camera that can see a given mob