Mercurial > repos > genjam1
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) |