changeset 19:08f2bcf3447f

Skip diagonals when calculating distance
author Michael Pavone <pavone@retrodev.com>
date Sun, 12 Jan 2014 22:05:12 -0800
parents 60bb690233cf
children 51a0972fcf76
files src/creep.c
diffstat 1 files changed, 25 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/src/creep.c	Sun Jan 12 19:11:54 2014 -0800
+++ b/src/creep.c	Sun Jan 12 22:05:12 2014 -0800
@@ -41,34 +41,34 @@
 
 s16 explore(mpoint * points, s16 num_points, u16 src, u16 srcx, u16 srcy)
 {
-	u16 x,y,index,cindex,xmax,ymax,ystrt,dist;
-	dist = distances[src]+1;
-	xmax = srcx < 19 ? srcx+1 : srcx;
-	ymax = srcy < 13 ? srcy+1 : srcy;
-	if (srcy)
+	u16 dist = distances[src]+1;
+	if (srcx < 19 && distances[src + 1] > dist && !tilemap[(srcx+1)*2+srcy*2*40])
 	{
-		ystrt = srcy-1;
-		cindex = srcx ? src - 21 : src - 20;
-	} else {
-		ystrt = srcy;
-		cindex = srcx ? src - 1 : src;
+		distances[src + 1] = dist;
+		points[num_points].index = src + 1;
+		points[num_points].x = srcx+1;
+		points[num_points++].y = srcy;
 	}
-	for (x = srcx ? srcx-1 : srcx; x <= xmax; x++, cindex++)
+	if (srcx && distances[src - 1] > dist && !tilemap[(srcx-1)*2 + srcy*2*40])
 	{
-		for (y = ystrt, index=cindex; y<=ymax; y++,index+=20)
-		{
-			if (distances[index] > dist && !tilemap[x*2+y*2*40])
-			{
-				distances[index] = dist;
-				if (dist == 0xFFFF)
-				{
-					tilemap[x*2 + y*2*40] = TILE_ATTR_FULL(2, 0, 0, 0, 'E' - 32 + TILE_FONTINDEX);
-				}
-				points[num_points].index = index;
-				points[num_points].x = x;
-				points[num_points++].y = y;
-			}
-		}
+		distances[src - 1] = dist;
+		points[num_points].index = src - 1;
+		points[num_points].x = srcx-1;
+		points[num_points++].y = srcy;
+	}
+	if (srcy < 13 && distances[src + 20] > dist && !tilemap[srcx*2+(srcy+1)*2*40])
+	{
+		distances[src + 20] = dist;
+		points[num_points].index = src + 20;
+		points[num_points].x = srcx;
+		points[num_points++].y = srcy+1;
+	}
+	if (srcy && distances[src - 20] > dist && !tilemap[srcx*2 + (srcy-1)*2*40])
+	{
+		distances[src - 20] = dist;
+		points[num_points].index = src - 20;
+		points[num_points].x = srcx;
+		points[num_points++].y = srcy-1;
 	}
 	return num_points;
 }