Index: settlers.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/server/settlers.c,v retrieving revision 1.112 diff -u -b -p -r1.112 settlers.c --- settlers.c 2001/10/14 21:02:17 1.112 +++ settlers.c 2001/11/03 06:26:30 @@ -130,16 +130,45 @@ void generate_minimap(void) **************************************************************************/ void remove_city_from_minimap(int x, int y) { + int dx, dy; + freelog(LOG_DEBUG, "Removing (%d, %d) from minimap.", x, y); - square_iterate(x, y, 4, x1, y1) { - int dist = sq_map_distance(x, y, x1, y1); + + for (dy = -4; dy <= 4; dy++) { + for (dx = -4; dx <= 4; dx++) { + int x1 = x + dx; + int y1 = y + dy; + if (normalize_map_pos(&x1, &y1)) { + /* d <= 5 corresponds to tiles within the city radius; + d <= 20 corresponds to tiles such that a city on that position + would have common tile within the city radius. + + *==*==*==*--+--+ + 4|16|17|20#25|32| + +--+--+--*==*--+ + 3| 9|10|13|18#25| + *==*==*--+--*==* + 2| 4| 5# 8|13|20# + +--+--*==*--+--* + 1| 1| 2| 5#10|17# + +--+--+--*--+--* + 0| 0| 1| 4# 9|16# + +--+--+--*--+--* + 0 1 2 3 4 + */ + int d = dx*dx + dy*dy; if (dist <= 5) { - if (minimap[x1][y1] < 0) minimap[x1][y1]++; - else minimap[x1][y1] = 0; - } else if (dist <= 20) { - if (minimap[x1][y1] > 0) minimap[x1][y1] = 0; + if (minimap[x1][y1] < 0) + minimap[x1][y1]++; + else + minimap[x1][y1] = 0; + } else if (d <= 20) { + if (minimap[x1][y1] > 0) + minimap[x1][y1] = 0; } - } square_iterate_end; + } + } + } } /************************************************************************** @@ -147,16 +176,28 @@ void remove_city_from_minimap(int x, int **************************************************************************/ void add_city_to_minimap(int x, int y) { + int dx, dy; + freelog(LOG_DEBUG, "Adding (%d, %d) to minimap.", x, y); - square_iterate(x, y, 4, x1, y1) { - int dist = sq_map_distance(x, y, x1, y1); - if (dist <= 5) { - if (minimap[x1][y1] < 0) minimap[x1][y1]--; - else minimap[x1][y1] = -1; - } else if (dist <= 20) { - if (minimap[x1][y1] > 0) minimap[x1][y1] = 0; + + for (dy = -4; dy <= 4; dy++) { + for (dx = -4; dx <= 4; dx++) { + int x1 = x + dx; + int y1 = y + dy; + if (normalize_map_pos(&x1, &y1)) { + int d = dx*dx + dy*dy; + if (d <= 5) { + if (minimap[x1][y1] < 0) + minimap[x1][y1]--; + else + minimap[x1][y1] = -1; + } else if (d <= 20) { + if (minimap[x1][y1] > 0) + minimap[x1][y1] = 0; } - } square_iterate_end; + } + } + } } /**************************************************************************