<URL: http://bugs.freeciv.org/Ticket/Display.html?id=21843 >
On 1/13/07, Marko Lindqvist <[EMAIL PROTECTED]> wrote: > We have an alliance, but no shared vision. Alliance allows us to see > units inside transport. When transport moves out of sight, transported > units are not removed. Patch - ML
diff -Nurd -X.diff_ignore freeciv/server/unittools.c freeciv/server/unittools.c --- freeciv/server/unittools.c 2006-08-18 10:51:27.000000000 +0300 +++ freeciv/server/unittools.c 2007-01-13 06:11:43.000000000 +0200 @@ -1895,9 +1895,24 @@ if ((!pplayer && pconn->observer) || pplayer == punit->owner) { send_packet_unit_info(pconn, &info); } else if (pplayer) { - if (can_player_see_unit_at(pplayer, punit, punit->tile) - || can_player_see_unit_at(pplayer, punit, ptile)) { + bool see_in_old; + bool see_in_new = can_player_see_unit_at(pplayer, punit, punit->tile); + + if (punit->tile == ptile) { + /* This is not about movement */ + see_in_old = see_in_new; + } else { + see_in_old = can_player_see_unit_at(pplayer, punit, ptile); + } + + if (see_in_new || see_in_old) { + /* First send movement */ send_packet_unit_short_info(pconn, &sinfo); + + if (!see_in_new) { + /* Then remove unit if necessary */ + unit_goes_out_of_sight(pplayer, punit); + } } else { if (remove_unseen) { dsend_packet_unit_remove(pconn, punit->id); @@ -2810,17 +2825,6 @@ vision_clear_sight(old_vision); vision_free(old_vision); - /* - * Let the unit goes out of sight for the players which doesn't see - * the unit anymore. - */ - players_iterate(pplayer) { - if (can_player_see_unit_at(pplayer, punit, psrctile) - && !can_player_see_unit_at(pplayer, punit, pdesttile)) { - unit_goes_out_of_sight(pplayer, punit); - } - } players_iterate_end; - /* Remove hidden units (like submarines) which aren't seen anymore. */ square_iterate(psrctile, 1, tile1) { players_iterate(pplayer) {
_______________________________________________ Freeciv-dev mailing list Freeciv-dev@gna.org https://mail.gna.org/listinfo/freeciv-dev