--- server/maphand.h (révision 17882) +++ server/maphand.h (copie de travail) @@ -64,9 +64,9 @@ void map_show_circle(struct player *pplayer, struct tile *ptile, int radius_sq); void map_refog_circle(struct player *pplayer, struct tile *ptile, - int old_radius_sq, int new_radius_sq, - bool can_reveal_tiles, - enum vision_layer vlayer); + int old_main_radius_sq, int new_main_radius_sq, + int old_invis_radius_sq, int new_invis_radius_sq, + bool can_reveal_tiles); void map_show_all(struct player *pplayer); bool map_is_known_and_seen(const struct tile *ptile, struct player *pplayer, @@ -113,8 +113,8 @@ void fix_tile_on_terrain_change(struct tile *ptile, bool extend_rivers); -void vision_change_sight(struct vision *vision, enum vision_layer vlayer, - int radius_sq); +void vision_change_sight(struct vision *vision, int radius_main_sq, + int radius_invis_sq); void vision_clear_sight(struct vision *vision); void change_playertile_site(struct player_tile *ptile, Index: server/unittools.c =================================================================== --- server/unittools.c (révision 17882) +++ server/unittools.c (copie de travail) @@ -625,16 +625,17 @@ } else { struct player *owner = tile_owner(ptile); - if (pbase->vision_main_sq >= 0 && owner) { - /* Base provides vision, but no borders. */ - map_refog_circle(owner, ptile, pbase->vision_main_sq, -1, - game.info.vision_reveal_tiles, V_MAIN); + if (NULL != owner + && (0 <= pbase->vision_main_sq) + && (0 <= pbase->vision_invis_sq)) { + /* Base provides vision, but no borders. */ + map_refog_circle(owner, ptile, + 0 <= pbase->vision_main_sq + ? pbase->vision_main_sq : -1, -1, + 0 <= pbase->vision_invis_sq + ? pbase->vision_invis_sq : -1, -1, + game.info.vision_reveal_tiles); } - if (pbase->vision_invis_sq >= 0 && owner) { - /* Base provides vision, but no borders. */ - map_refog_circle(owner, ptile, pbase->vision_invis_sq, -1, - game.info.vision_reveal_tiles, V_INVIS); - } } tile_remove_base(ptile, pbase); } @@ -2860,10 +2861,9 @@ struct vision *new_vision = vision_new(unit_owner(pcargo), pdesttile); pcargo->server.vision = new_vision; - vision_layer_iterate(v) { - vision_change_sight(new_vision, v, - get_unit_vision_at(pcargo, pdesttile, v)); - } vision_layer_iterate_end; + vision_change_sight(new_vision, + get_unit_vision_at(pcargo, pdesttile, V_MAIN), + get_unit_vision_at(pcargo, pdesttile, V_INVIS)); ASSERT_VISION(new_vision); @@ -2899,10 +2899,9 @@ if (unit_lives) { new_vision = vision_new(unit_owner(punit), pdesttile); punit->server.vision = new_vision; - vision_layer_iterate(v) { - vision_change_sight(new_vision, v, - get_unit_vision_at(punit, pdesttile, v)); - } vision_layer_iterate_end; + vision_change_sight(new_vision, + get_unit_vision_at(punit, pdesttile, V_MAIN), + get_unit_vision_at(punit, pdesttile, V_INVIS)); ASSERT_VISION(new_vision); @@ -3428,12 +3427,9 @@ { struct vision *uvision = punit->server.vision; - vision_layer_iterate(v) { - /* This requires two calls to get_unit_vision_at...it could be - * optimized. */ - vision_change_sight(uvision, v, - get_unit_vision_at(punit, punit->tile, v)); - } vision_layer_iterate_end; + vision_change_sight(uvision, + get_unit_vision_at(punit, punit->tile, V_MAIN), + get_unit_vision_at(punit, punit->tile, V_INVIS)); ASSERT_VISION(uvision); }