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