<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

Reply via email to