Author: sveinung
Date: Wed Mar 23 12:28:58 2016
New Revision: 32264

URL: http://svn.gna.org/viewcvs/freeciv?rev=32264&view=rev
Log:
Optimize action enabled / probability checking.

Don't bother to continue checking if a unit can perform an action its unit
type never can perform.

See patch #7070

Modified:
    trunk/common/actions.c

Modified: trunk/common/actions.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/actions.c?rev=32264&r1=32263&r2=32264&view=diff
==============================================================================
--- trunk/common/actions.c      (original)
+++ trunk/common/actions.c      Wed Mar 23 12:28:58 2016
@@ -1656,6 +1656,11 @@
                           action_get_target_kind(wanted_action)),
                         action_target_kind_name(ATK_CITY));
 
+  if (!unit_can_do_action(actor_unit, wanted_action)) {
+    /* No point in continuing. */
+    return FALSE;
+  }
+
   target_building = tgt_city_local_building(target_city);
   target_utype = tgt_city_local_utype(target_city);
 
@@ -1699,6 +1704,11 @@
                         action_target_kind_name(
                           action_get_target_kind(wanted_action)),
                         action_target_kind_name(ATK_UNIT));
+
+  if (!unit_can_do_action(actor_unit, wanted_action)) {
+    /* No point in continuing. */
+    return FALSE;
+  }
 
   return is_action_enabled(wanted_action,
                            unit_owner(actor_unit), tile_city(actor_tile),
@@ -1743,6 +1753,11 @@
                         action_target_kind_name(
                           action_get_target_kind(wanted_action)),
                         action_target_kind_name(ATK_UNITS));
+
+  if (!unit_can_do_action(actor_unit, wanted_action)) {
+    /* No point in continuing. */
+    return FALSE;
+  }
 
   unit_list_iterate(target_tile->units, target_unit) {
     if (!is_action_enabled(wanted_action,
@@ -1795,6 +1810,11 @@
                           action_get_target_kind(wanted_action)),
                         action_target_kind_name(ATK_TILE));
 
+  if (!unit_can_do_action(actor_unit, wanted_action)) {
+    /* No point in continuing. */
+    return FALSE;
+  }
+
   return is_action_enabled(wanted_action,
                            unit_owner(actor_unit), tile_city(actor_tile),
                            NULL, actor_tile,
@@ -1834,6 +1854,11 @@
                         action_target_kind_name(
                           action_get_target_kind(wanted_action)),
                         action_target_kind_name(ATK_SELF));
+
+  if (!unit_can_do_action(actor_unit, wanted_action)) {
+    /* No point in continuing. */
+    return FALSE;
+  }
 
   return is_action_enabled(wanted_action,
                            unit_owner(actor_unit), tile_city(actor_tile),
@@ -2317,6 +2342,11 @@
                           action_get_target_kind(action_id)),
                         action_target_kind_name(ATK_CITY));
 
+  if (!unit_can_do_action(actor_unit, action_id)) {
+    /* No point in continuing. */
+    return ACTPROB_IMPOSSIBLE;
+  }
+
   target_building = tgt_city_local_building(target_city);
   target_utype = tgt_city_local_utype(target_city);
 
@@ -2357,6 +2387,11 @@
                         action_target_kind_name(
                           action_get_target_kind(action_id)),
                         action_target_kind_name(ATK_UNIT));
+
+  if (!unit_can_do_action(actor_unit, action_id)) {
+    /* No point in continuing. */
+    return ACTPROB_IMPOSSIBLE;
+  }
 
   return action_prob(action_id,
                      unit_owner(actor_unit), tile_city(actor_tile),
@@ -2398,6 +2433,11 @@
                         action_target_kind_name(
                           action_get_target_kind(action_id)),
                         action_target_kind_name(ATK_UNITS));
+
+  if (!unit_can_do_action(actor_unit, action_id)) {
+    /* No point in continuing. */
+    return ACTPROB_IMPOSSIBLE;
+  }
 
   prob_all = 200;
   unit_list_iterate(target_tile->units, target_unit) {
@@ -2475,6 +2515,11 @@
                           action_get_target_kind(action_id)),
                         action_target_kind_name(ATK_TILE));
 
+  if (!unit_can_do_action(actor_unit, action_id)) {
+    /* No point in continuing. */
+    return ACTPROB_IMPOSSIBLE;
+  }
+
   return action_prob(action_id,
                      unit_owner(actor_unit), tile_city(actor_tile),
                      NULL, actor_tile, actor_unit, NULL,
@@ -2510,6 +2555,11 @@
                         action_target_kind_name(
                           action_get_target_kind(action_id)),
                         action_target_kind_name(ATK_SELF));
+
+  if (!unit_can_do_action(actor_unit, action_id)) {
+    /* No point in continuing. */
+    return ACTPROB_IMPOSSIBLE;
+  }
 
   return action_prob(action_id,
                      unit_owner(actor_unit), tile_city(actor_tile),


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

Reply via email to