Author: cazfi
Date: Mon Mar  2 20:32:29 2015
New Revision: 28364

URL: http://svn.gna.org/viewcvs/freeciv?rev=28364&view=rev
Log:
Check _Possible effects before claiming that terrain modifications are possible 
for a terrain
in its help.

See patch #5859

Modified:
    trunk/client/gui-gtk-2.0/helpdlg.c
    trunk/client/gui-gtk-3.0/helpdlg.c
    trunk/client/gui-qt/helpdlg.cpp
    trunk/client/helpdata.c
    trunk/common/requirements.c

Modified: trunk/client/gui-gtk-2.0/helpdlg.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-2.0/helpdlg.c?rev=28364&r1=28363&r2=28364&view=diff
==============================================================================
--- trunk/client/gui-gtk-2.0/helpdlg.c  (original)
+++ trunk/client/gui-gtk-2.0/helpdlg.c  Mon Mar  2 20:32:29 2015
@@ -1094,6 +1094,8 @@
   create_help_page(HELP_TERRAIN);
 
   if (pterrain) {
+    struct universal for_terr = { .kind = VUT_TERRAIN, .value = { .terrain = 
pterrain }};
+
     sprintf(buf, "%d/%d.%d",
            pterrain->movement_cost,
            (int)((pterrain->defense_bonus + 100) / 100),
@@ -1127,38 +1129,47 @@
 
     strcpy(buf, _("n/a"));
     if (pterrain->irrigation_result == pterrain) {
-      if (pterrain->irrigation_food_incr > 0) {
-       sprintf(buf, _("+%d Food / %d"),
-               pterrain->irrigation_food_incr,
-               pterrain->irrigation_time);
+      if (effect_cumulative_max(EFT_IRRIG_POSSIBLE, &for_terr) > 0) {
+        if (pterrain->irrigation_food_incr > 0) {
+          sprintf(buf, _("+%d Food / %d"),
+                  pterrain->irrigation_food_incr,
+                  pterrain->irrigation_time);
+        }
       }
     } else if (pterrain->irrigation_result != T_NONE) {
-      sprintf(buf, "%s / %d",
-             terrain_name_translation(pterrain->irrigation_result),
-             pterrain->irrigation_time);
+      if (effect_cumulative_max(EFT_IRRIG_TF_POSSIBLE, &for_terr) > 0) {
+        sprintf(buf, "%s / %d",
+                terrain_name_translation(pterrain->irrigation_result),
+                pterrain->irrigation_time);
+      }
     }
     gtk_label_set_text(GTK_LABEL(help_tlabel[2][1]), buf);
 
     strcpy(buf, _("n/a"));
     if (pterrain->mining_result == pterrain) {
-      if (pterrain->mining_shield_incr > 0) {
-       sprintf(buf, _("+%d Res. / %d"),
-               pterrain->mining_shield_incr,
-               pterrain->mining_time);
+      if (effect_cumulative_max(EFT_MINING_POSSIBLE, &for_terr) > 0) {
+        if (pterrain->mining_shield_incr > 0) {
+          sprintf(buf, _("+%d Res. / %d"),
+                  pterrain->mining_shield_incr,
+                  pterrain->mining_time);
+        }
       }
     } else if (pterrain->mining_result != T_NONE) {
-      sprintf(buf, "%s / %d",
-             terrain_name_translation(pterrain->mining_result),
-             pterrain->mining_time);
+      if (effect_cumulative_max(EFT_MINING_TF_POSSIBLE, &for_terr) > 0) {
+        sprintf(buf, "%s / %d",
+                terrain_name_translation(pterrain->mining_result),
+                pterrain->mining_time);
+      }
     }
     gtk_label_set_text(GTK_LABEL(help_tlabel[2][4]), buf);
 
+    strcpy(buf, "n/a");
     if (pterrain->transform_result != T_NONE) {
-      sprintf(buf, "%s / %d",
-             terrain_name_translation(pterrain->transform_result),
-             pterrain->transform_time);
-    } else {
-      strcpy(buf, "n/a");
+      if (effect_cumulative_max(EFT_TRANSFORM_POSSIBLE, &for_terr) > 0) {
+        sprintf(buf, "%s / %d",
+                terrain_name_translation(pterrain->transform_result),
+                pterrain->transform_time);
+      }
     }
     gtk_label_set_text(GTK_LABEL(help_tlabel[3][1]), buf);
   }

Modified: trunk/client/gui-gtk-3.0/helpdlg.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-3.0/helpdlg.c?rev=28364&r1=28363&r2=28364&view=diff
==============================================================================
--- trunk/client/gui-gtk-3.0/helpdlg.c  (original)
+++ trunk/client/gui-gtk-3.0/helpdlg.c  Mon Mar  2 20:32:29 2015
@@ -1119,6 +1119,8 @@
   create_help_page(HELP_TERRAIN);
 
   if (pterrain) {
+    struct universal for_terr = { .kind = VUT_TERRAIN, .value = { .terrain = 
pterrain }};
+
     sprintf(buf, "%d/%d.%d",
            pterrain->movement_cost,
            (int)((pterrain->defense_bonus + 100) / 100),
@@ -1152,38 +1154,47 @@
 
     strcpy(buf, _("n/a"));
     if (pterrain->irrigation_result == pterrain) {
-      if (pterrain->irrigation_food_incr > 0) {
-       sprintf(buf, _("+%d Food / %d"),
-               pterrain->irrigation_food_incr,
-               pterrain->irrigation_time);
+      if (effect_cumulative_max(EFT_IRRIG_POSSIBLE, &for_terr) > 0) {
+        if (pterrain->irrigation_food_incr > 0) {
+          sprintf(buf, _("+%d Food / %d"),
+                  pterrain->irrigation_food_incr,
+                  pterrain->irrigation_time);
+        }
       }
     } else if (pterrain->irrigation_result != T_NONE) {
-      sprintf(buf, "%s / %d",
-             terrain_name_translation(pterrain->irrigation_result),
-             pterrain->irrigation_time);
+      if (effect_cumulative_max(EFT_IRRIG_TF_POSSIBLE, &for_terr) > 0) {
+        sprintf(buf, "%s / %d",
+                terrain_name_translation(pterrain->irrigation_result),
+                pterrain->irrigation_time);
+      }
     }
     gtk_label_set_text(GTK_LABEL(help_tlabel[2][1]), buf);
 
     strcpy(buf, _("n/a"));
     if (pterrain->mining_result == pterrain) {
-      if (pterrain->mining_shield_incr > 0) {
-       sprintf(buf, _("+%d Res. / %d"),
-               pterrain->mining_shield_incr,
-               pterrain->mining_time);
+      if (effect_cumulative_max(EFT_MINING_POSSIBLE, &for_terr) > 0) {
+        if (pterrain->mining_shield_incr > 0) {
+          sprintf(buf, _("+%d Res. / %d"),
+                  pterrain->mining_shield_incr,
+                  pterrain->mining_time);
+        }
       }
     } else if (pterrain->mining_result != T_NONE) {
-      sprintf(buf, "%s / %d",
-             terrain_name_translation(pterrain->mining_result),
-             pterrain->mining_time);
+      if (effect_cumulative_max(EFT_MINING_TF_POSSIBLE, &for_terr) > 0) {
+        sprintf(buf, "%s / %d",
+                terrain_name_translation(pterrain->mining_result),
+                pterrain->mining_time);
+      }
     }
     gtk_label_set_text(GTK_LABEL(help_tlabel[2][4]), buf);
 
+    strcpy(buf, "n/a");
     if (pterrain->transform_result != T_NONE) {
-      sprintf(buf, "%s / %d",
-             terrain_name_translation(pterrain->transform_result),
-             pterrain->transform_time);
-    } else {
-      strcpy(buf, "n/a");
+      if (effect_cumulative_max(EFT_TRANSFORM_POSSIBLE, &for_terr) > 0) {
+        sprintf(buf, "%s / %d",
+                terrain_name_translation(pterrain->transform_result),
+                pterrain->transform_time);
+      }
     }
     gtk_label_set_text(GTK_LABEL(help_tlabel[3][1]), buf);
   }

Modified: trunk/client/gui-qt/helpdlg.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-qt/helpdlg.cpp?rev=28364&r1=28363&r2=28364&view=diff
==============================================================================
--- trunk/client/gui-qt/helpdlg.cpp     (original)
+++ trunk/client/gui-qt/helpdlg.cpp     Mon Mar  2 20:32:29 2015
@@ -805,6 +805,11 @@
 
   pterrain = terrain_by_translated_name(title);
   if (pterrain) {
+    struct universal for_terr;
+
+    for_terr.kind = VUT_TERRAIN;
+    for_terr.value.terrain = pterrain;
+
     helptext_terrain(buffer, sizeof(buffer), client.conn.playing,
                      topic->text, pterrain);
     text_browser->setText(buffer);
@@ -837,60 +842,70 @@
     add_info_separator();
 
     if (pterrain->irrigation_result == pterrain) {
-      add_info_label(
-        // TRANS: When irrigated, terrain gets a bonus of %1 food;
-        //        irrigating takes %2 turns
-        QString(_(ngettext(
-          "Irrigation: +%1 food in %2 turn",
-          "Irrigation: +%1 food in %2 turns",
-          pterrain->irrigation_time)))
-        .arg(pterrain->irrigation_food_incr)
-        .arg(pterrain->irrigation_time));
+      if (effect_cumulative_max(EFT_IRRIG_POSSIBLE, &for_terr) > 0) {
+        add_info_label(
+          // TRANS: When irrigated, terrain gets a bonus of %1 food;
+          //        irrigating takes %2 turns
+          QString(_(ngettext(
+            "Irrigation: +%1 food in %2 turn",
+            "Irrigation: +%1 food in %2 turns",
+            pterrain->irrigation_time)))
+          .arg(pterrain->irrigation_food_incr)
+          .arg(pterrain->irrigation_time));
+      }
     } else if (pterrain->irrigation_result) {
-      add_info_label(
-        // TRANS: When irrigated, terrain gets changed to other terrain %1
-        //        in %2 turns
-        QString(_(ngettext(
-          "Irrigation: %1 in %2 turn",
-          "Irrigation: %1 in %2 turns",
-          pterrain->irrigation_time)))
-        .arg(terrain_name_translation(pterrain->irrigation_result))
-        .arg(pterrain->irrigation_time));
+      if (effect_cumulative_max(EFT_IRRIG_TF_POSSIBLE, &for_terr) > 0) {
+        add_info_label(
+          // TRANS: When irrigated, terrain gets changed to other terrain %1
+          //        in %2 turns
+          QString(_(ngettext(
+            "Irrigation: %1 in %2 turn",
+            "Irrigation: %1 in %2 turns",
+            pterrain->irrigation_time)))
+          .arg(terrain_name_translation(pterrain->irrigation_result))
+          .arg(pterrain->irrigation_time));
+      }
     }
 
     if (pterrain->mining_result == pterrain) {
-      add_info_label(
-        // TRANS: When mined, terrain gets a bonus of %1 food; mining takes
-        //        %2 turns
-        QString(_(ngettext(
-          "Mining: +%1 food in %2 turn",
-          "Mining: +%1 food in %2 turns",
-          pterrain->mining_time)))
-        .arg(pterrain->mining_shield_incr)
-        .arg(pterrain->mining_time));
+      if (effect_cumulative_max(EFT_MINING_POSSIBLE, &for_terr) > 0) {
+        add_info_label(
+          // TRANS: When mined, terrain gets a bonus of %1 food; mining takes
+          //        %2 turns
+          QString(_(ngettext(
+            "Mining: +%1 food in %2 turn",
+            "Mining: +%1 food in %2 turns",
+            pterrain->mining_time)))
+          .arg(pterrain->mining_shield_incr)
+          .arg(pterrain->mining_time));
+      }
     } else if (pterrain->mining_result) {
-      add_info_label(
-        // TRANS: When mined, terrain gets changed to other terrain %1
-        //        in %2 turns
-        QString(_(ngettext(
-          "Mining: %1 in %2 turn",
-          "Mining: %1 in %2 turns",
-          pterrain->mining_time)))
-        .arg(terrain_name_translation(pterrain->mining_result))
-        .arg(pterrain->mining_time));
+      if (effect_cumulative_max(EFT_MINING_TF_POSSIBLE, &for_terr) > 0) {
+        add_info_label(
+          // TRANS: When mined, terrain gets changed to other terrain %1
+          //        in %2 turns
+          QString(_(ngettext(
+            "Mining: %1 in %2 turn",
+            "Mining: %1 in %2 turns",
+            pterrain->mining_time)))
+          .arg(terrain_name_translation(pterrain->mining_result))
+          .arg(pterrain->mining_time));
+      }
     }
 
     if (pterrain->transform_result &&
         pterrain->transform_result != pterrain) {
-      add_info_label(
-        // TRANS: When transformed, terrain gets changed to other terrain %1
-        //        in %2 turns
-        QString(_(ngettext(
-          "Transform: %1 in %2 turn",
-          "Transform: %1 in %2 turns",
-          pterrain->transform_time)))
-        .arg(terrain_name_translation(pterrain->transform_result))
-        .arg(pterrain->transform_time));
+      if (effect_cumulative_max(EFT_TRANSFORM_POSSIBLE, &for_terr) > 0) {
+        add_info_label(
+          // TRANS: When transformed, terrain gets changed to other terrain %1
+          //        in %2 turns
+          QString(_(ngettext(
+            "Transform: %1 in %2 turn",
+            "Transform: %1 in %2 turns",
+            pterrain->transform_time)))
+          .arg(terrain_name_translation(pterrain->transform_result))
+          .arg(pterrain->transform_time));
+      }
     }
 
     info_panel_done();

Modified: trunk/client/helpdata.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/helpdata.c?rev=28364&r1=28363&r2=28364&view=diff
==============================================================================
--- trunk/client/helpdata.c     (original)
+++ trunk/client/helpdata.c     Mon Mar  2 20:32:29 2015
@@ -221,6 +221,7 @@
         char irrigation_time[4], mining_time[4], transform_time[4];
         const char *terrain, *irrigation_result,
                    *mining_result,*transform_result;
+        struct universal for_terr = { .kind = VUT_TERRAIN, .value = { .terrain 
= pterrain }};
 
         fc_snprintf(irrigation_time, sizeof(irrigation_time),
                     "%d", pterrain->irrigation_time);
@@ -231,15 +232,18 @@
         terrain = terrain_name_translation(pterrain);
         irrigation_result = 
           (pterrain->irrigation_result == pterrain
-           || pterrain->irrigation_result == T_NONE) ? ""
+           || pterrain->irrigation_result == T_NONE
+           || effect_cumulative_max(EFT_IRRIG_TF_POSSIBLE, &for_terr) <= 0) ? 
""
           : terrain_name_translation(pterrain->irrigation_result);
         mining_result =
           (pterrain->mining_result == pterrain
-           || pterrain->mining_result == T_NONE) ? ""
+           || pterrain->mining_result == T_NONE
+           || effect_cumulative_max(EFT_MINING_TF_POSSIBLE, &for_terr) <= 0) ? 
""
           : terrain_name_translation(pterrain->mining_result);
         transform_result =
           (pterrain->transform_result == pterrain
-           || pterrain->transform_result == T_NONE) ? ""
+           || pterrain->transform_result == T_NONE
+           || effect_cumulative_max(EFT_TRANSFORM_POSSIBLE, &for_terr) <= 0) ? 
""
           : terrain_name_translation(pterrain->transform_result);
         /* Use get_internal_string_length() for correct alignment with
          * multibyte character encodings */
@@ -2721,7 +2725,7 @@
   /* need to do something like this or bad things happen */
   popdown_help_dialog();
 
-  if(!booted) {
+  if (!booted) {
     log_verbose("Booting help texts");
   } else {
     /* free memory allocated last time booted */
@@ -2757,8 +2761,8 @@
         if (!booted) {
           continue; /* on initial boot data tables are empty */
         }
-        for(i=2; help_type_names[i]; i++) {
-          if(strcmp(gen_str, help_type_names[i])==0) {
+        for (i = 2; help_type_names[i]; i++) {
+          if (strcmp(gen_str, help_type_names[i]) == 0) {
             current_type = i;
             break;
           }

Modified: trunk/common/requirements.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/requirements.c?rev=28364&r1=28363&r2=28364&view=diff
==============================================================================
--- trunk/common/requirements.c (original)
+++ trunk/common/requirements.c Mon Mar  2 20:32:29 2015
@@ -3346,6 +3346,29 @@
   };
 }
 
+/*************************************************************************
+  Find if a terrain type fulfills a requirement
+**************************************************************************/
+static enum item_found terrain_type_found(const struct requirement *preq,
+                                          const struct universal *source)
+{
+  fc_assert(source->value.terrain);
+
+  switch (preq->source.kind) {
+  case VUT_TERRAIN:
+    return source->value.terrain == preq->source.value.terrain ? ITF_YES : 
ITF_NO;
+  case VUT_TERRAINCLASS:
+    return terrain_type_terrain_class(source->value.terrain) == 
preq->source.value.terrainclass
+      ? ITF_YES : ITF_NO;
+  case VUT_TERRFLAG:
+    return terrain_has_flag(source->value.terrain,
+                            preq->source.value.terrainflag) ? ITF_YES : ITF_NO;
+  default:
+    /* Not found and not relevant. */
+    return ITF_NOT_APPLICABLE;
+  };
+}
+
 /************************************************************************
   Initialise universal_found_callbacks array.
 *************************************************************************/
@@ -3355,6 +3378,7 @@
   universal_found_function[VUT_IMPROVEMENT] = &improvement_found;
   universal_found_function[VUT_UCLASS] = &unit_class_found;
   universal_found_function[VUT_UTYPE] = &unit_type_found;
+  universal_found_function[VUT_TERRAIN] = &terrain_type_found;
 }
 
 /**************************************************************************


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to