<URL: http://bugs.freeciv.org/Ticket/Display.html?id=38016 >
gtk client uses get_base_by_gui_type() instead of using hardcoded base ids BASE_FORTRESS and BASE_AIRBASE. - ML
diff -Nurd -X.diff_ignore freeciv/client/control.c freeciv/client/control.c --- freeciv/client/control.c 2007-03-12 16:23:02.000000000 +0200 +++ freeciv/client/control.c 2007-03-12 16:27:17.000000000 +0200 @@ -2369,8 +2369,12 @@ void key_unit_airbase(void) { unit_list_iterate(get_units_in_focus(), punit) { - if (can_unit_do_activity_base(punit, BASE_AIRBASE)) { - request_new_unit_activity_base(punit, BASE_AIRBASE); + struct base_type *pbase; + + pbase = get_base_by_gui_type(BASE_GUI_AIRBASE, punit, punit->tile); + + if (pbase) { + request_new_unit_activity_base(punit, pbase->id); } } unit_list_iterate_end; } @@ -2440,8 +2444,12 @@ void key_unit_fortress(void) { unit_list_iterate(get_units_in_focus(), punit) { - if (can_unit_do_activity_base(punit, BASE_FORTRESS)) { - request_new_unit_activity_base(punit, BASE_FORTRESS); + struct base_type *pbase; + + pbase = get_base_by_gui_type(BASE_GUI_FORTRESS, punit, punit->tile); + + if (pbase) { + request_new_unit_activity_base(punit, pbase->id); } } unit_list_iterate_end; } diff -Nurd -X.diff_ignore freeciv/client/gui-gtk-2.0/menu.c freeciv/client/gui-gtk-2.0/menu.c --- freeciv/client/gui-gtk-2.0/menu.c 2007-03-12 16:23:02.000000000 +0200 +++ freeciv/client/gui-gtk-2.0/menu.c 2007-03-12 16:40:47.000000000 +0200 @@ -442,10 +442,13 @@ unit_list_iterate(get_units_in_focus(), punit) { /* FIXME: this can provide different actions for different units... * not good! */ - if (can_unit_do_activity_base(punit, BASE_FORTRESS)) + struct base_type *pbase = get_base_by_gui_type(BASE_GUI_FORTRESS, + punit, punit->tile); + if (pbase) { key_unit_fortress(); - else + } else { key_unit_fortify(); + } } unit_list_iterate_end; break; case MENU_ORDER_AIRBASE: @@ -1392,11 +1395,11 @@ menus_set_sensitive("<main>/_Orders/Transf_orm Terrain", can_units_do_activity(punits, ACTIVITY_TRANSFORM)); menus_set_sensitive("<main>/_Orders/Build _Fortress", - (can_units_do_base(punits, BASE_FORTRESS) + (can_units_do_base_gui(punits, BASE_GUI_FORTRESS) || can_units_do_activity(punits, ACTIVITY_FORTIFYING))); menus_set_sensitive("<main>/_Orders/Build Airbas_e", - can_units_do_base(punits, BASE_AIRBASE)); + can_units_do_base_gui(punits, BASE_GUI_AIRBASE)); menus_set_sensitive("<main>/_Orders/Clean _Pollution", (can_units_do_activity(punits, ACTIVITY_POLLUTION) || can_units_do(punits, can_unit_paradrop))); diff -Nurd -X.diff_ignore freeciv/common/unitlist.c freeciv/common/unitlist.c --- freeciv/common/unitlist.c 2007-03-12 16:23:02.000000000 +0200 +++ freeciv/common/unitlist.c 2007-03-12 16:40:33.000000000 +0200 @@ -125,6 +125,24 @@ } /**************************************************************************** + Returns TRUE if any of the units can build base with given gui_type. +****************************************************************************/ +bool can_units_do_base_gui(const struct unit_list *punits, + enum base_gui_type base_gui) +{ + unit_list_iterate(punits, punit) { + struct base_type *pbase = get_base_by_gui_type(base_gui, punit, punit->tile); + + if (pbase) { + /* Some unit can build base of given gui_type */ + return TRUE; + } + } unit_list_iterate_end; + + return FALSE; +} + +/**************************************************************************** Returns TRUE if any of the units can do the activity. ****************************************************************************/ bool can_units_do_diplomat_action(const struct unit_list *punits, diff -Nurd -X.diff_ignore freeciv/common/unitlist.h freeciv/common/unitlist.h --- freeciv/common/unitlist.h 2007-03-12 16:23:02.000000000 +0200 +++ freeciv/common/unitlist.h 2007-03-12 16:32:50.000000000 +0200 @@ -59,6 +59,8 @@ enum unit_activity activity); bool can_units_do_base(const struct unit_list *punits, enum base_type_id base); +bool can_units_do_base_gui(const struct unit_list *punits, + enum base_gui_type base_gui); bool can_units_do_diplomat_action(const struct unit_list *punits, enum diplomat_actions action); bool units_have_flag(const struct unit_list *punits, enum unit_flag_id flag,
_______________________________________________ Freeciv-dev mailing list Freeciv-dev@gna.org https://mail.gna.org/listinfo/freeciv-dev