Author: sveinung
Date: Wed Mar 23 12:30:02 2016
New Revision: 32266

URL: http://svn.gna.org/viewcvs/freeciv?rev=32266&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:
    branches/S2_6/common/actions.c

Modified: branches/S2_6/common/actions.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/common/actions.c?rev=32266&r1=32265&r2=32266&view=diff
==============================================================================
--- branches/S2_6/common/actions.c      (original)
+++ branches/S2_6/common/actions.c      Wed Mar 23 12:30:02 2016
@@ -760,6 +760,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;
+  }
+
   return is_action_enabled(wanted_action,
                            unit_owner(actor_unit), tile_city(actor_tile),
                            NULL, actor_tile,
@@ -800,6 +805,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),
@@ -1223,6 +1233,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;
+  }
+
   return action_prob(action_id,
                      unit_owner(actor_unit), tile_city(actor_tile),
                      NULL, actor_tile, actor_unit,
@@ -1259,6 +1274,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),


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

Reply via email to