comparison src/creep.c @ 19:08f2bcf3447f

Skip diagonals when calculating distance
author Michael Pavone <pavone@retrodev.com>
date Sun, 12 Jan 2014 22:05:12 -0800
parents 5c7f33441e43
children 51a0972fcf76
comparison
equal deleted inserted replaced
18:60bb690233cf 19:08f2bcf3447f
39 u16 y; 39 u16 y;
40 } mpoint; 40 } mpoint;
41 41
42 s16 explore(mpoint * points, s16 num_points, u16 src, u16 srcx, u16 srcy) 42 s16 explore(mpoint * points, s16 num_points, u16 src, u16 srcx, u16 srcy)
43 { 43 {
44 u16 x,y,index,cindex,xmax,ymax,ystrt,dist; 44 u16 dist = distances[src]+1;
45 dist = distances[src]+1; 45 if (srcx < 19 && distances[src + 1] > dist && !tilemap[(srcx+1)*2+srcy*2*40])
46 xmax = srcx < 19 ? srcx+1 : srcx; 46 {
47 ymax = srcy < 13 ? srcy+1 : srcy; 47 distances[src + 1] = dist;
48 if (srcy) 48 points[num_points].index = src + 1;
49 { 49 points[num_points].x = srcx+1;
50 ystrt = srcy-1; 50 points[num_points++].y = srcy;
51 cindex = srcx ? src - 21 : src - 20; 51 }
52 } else { 52 if (srcx && distances[src - 1] > dist && !tilemap[(srcx-1)*2 + srcy*2*40])
53 ystrt = srcy; 53 {
54 cindex = srcx ? src - 1 : src; 54 distances[src - 1] = dist;
55 } 55 points[num_points].index = src - 1;
56 for (x = srcx ? srcx-1 : srcx; x <= xmax; x++, cindex++) 56 points[num_points].x = srcx-1;
57 { 57 points[num_points++].y = srcy;
58 for (y = ystrt, index=cindex; y<=ymax; y++,index+=20) 58 }
59 { 59 if (srcy < 13 && distances[src + 20] > dist && !tilemap[srcx*2+(srcy+1)*2*40])
60 if (distances[index] > dist && !tilemap[x*2+y*2*40]) 60 {
61 { 61 distances[src + 20] = dist;
62 distances[index] = dist; 62 points[num_points].index = src + 20;
63 if (dist == 0xFFFF) 63 points[num_points].x = srcx;
64 { 64 points[num_points++].y = srcy+1;
65 tilemap[x*2 + y*2*40] = TILE_ATTR_FULL(2, 0, 0, 0, 'E' - 32 + TILE_FONTINDEX); 65 }
66 } 66 if (srcy && distances[src - 20] > dist && !tilemap[srcx*2 + (srcy-1)*2*40])
67 points[num_points].index = index; 67 {
68 points[num_points].x = x; 68 distances[src - 20] = dist;
69 points[num_points++].y = y; 69 points[num_points].index = src - 20;
70 } 70 points[num_points].x = srcx;
71 } 71 points[num_points++].y = srcy-1;
72 } 72 }
73 return num_points; 73 return num_points;
74 } 74 }
75 75
76 void gen_distances(u16 x, u16 y) 76 void gen_distances(u16 x, u16 y)