Author: dragonking Date: Wed Jul 30 18:05:11 2008 New Revision: 28268 URL: http://svn.gna.org/viewcvs/wesnoth?rev=28268&view=rev Log: Changed a way how max_possible_damage_with_retaliation function works, current one should be a better one
Modified:
trunk/src/formula_ai.cpp
Modified: trunk/src/formula_ai.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/formula_ai.cpp?rev=28268&r1=28267&r2=28268&view=diff
==============================================================================
--- trunk/src/formula_ai.cpp (original)
+++ trunk/src/formula_ai.cpp Wed Jul 30 18:05:11 2008
@@ -904,7 +904,8 @@
std::vector<variant> vars;
//store best damage and best attack causing it
- int best = 0;
+ int best_melee = 0;
+ int best_ranged = 0;
std::vector<attack_type>::const_iterator best_attack;
//vectors with attacks for attacker and defender
@@ -928,29 +929,38 @@
for(std::vector<attack_type>::const_iterator i
= att_attacks.begin(); i != att_attacks.end(); ++i) {
const int dmg =
round_damage(i->damage(), defender.damage_from(*i, false, gamemap::location()),
100) * i->num_attacks();
- if(dmg > best)
+ if ( i->range() == "melee")
{
- best = dmg;
- best_attack = i;
+ if(dmg > best_melee)
+ best_melee = dmg;
+ } else {
+ if(dmg > best_ranged)
+ best_ranged = dmg;
}
}
//we have max damage inflicted by attacker, now
we need to search for max possible damage of defender (search only for attack
with the same range)
- vars.push_back(variant(best));
-
- best = 0;
+ vars.push_back(variant(best_melee));
+ vars.push_back(variant(best_ranged));
+
+ best_melee = 0;
+ best_ranged = 0;
def_attacks = defender.attacks();
for(std::vector<attack_type>::const_iterator i
= def_attacks.begin(); i != def_attacks.end(); ++i) {
- if(i->range() != best_attack->range())
- continue;
-
const int dmg =
round_damage(i->damage(), attacker.damage_from(*i, false, gamemap::location()),
100) * i->num_attacks();
- if(dmg > best)
- best = dmg;
+ if ( i->range() == "melee")
+ {
+ if(dmg > best_melee)
+ best_melee = dmg;
+ } else {
+ if(dmg > best_ranged)
+ best_ranged = dmg;
+ }
}
- vars.push_back(variant(best));
+ vars.push_back(variant(best_melee));
+ vars.push_back(variant(best_ranged));
return variant(&vars);
} else
@@ -959,28 +969,37 @@
for(std::vector<attack_type>::const_iterator i
= att_attacks.begin(); i != att_attacks.end(); ++i) {
const int dmg =
round_damage(i->damage(), defender.movement_type().resistance_against(*i), 100)
* i->num_attacks();
- if(dmg > best)
+ if ( i->range() == "melee")
{
- best = dmg;
- best_attack = i;
+ if(dmg > best_melee)
+ best_melee = dmg;
+ } else {
+ if(dmg > best_ranged)
+ best_ranged = dmg;
}
}
- vars.push_back(variant(best));
-
- best = 0;
+ vars.push_back(variant(best_melee));
+ vars.push_back(variant(best_ranged));
+
+ best_melee = 0;
+ best_ranged = 0;
def_attacks_tmp = defender.attacks();
for(std::vector<attack_type>::const_iterator i
= def_attacks.begin(); i != def_attacks.end(); ++i) {
- if(i->range() != best_attack->range())
- continue;
-
const int dmg =
round_damage(i->damage(), attacker.damage_from(*i, false, gamemap::location()),
100) * i->num_attacks();
- if(dmg > best)
- best = dmg;
+ if ( i->range() == "melee")
+ {
+ if(dmg > best_melee)
+ best_melee = dmg;
+ } else {
+ if(dmg > best_ranged)
+ best_ranged = dmg;
+ }
}
- vars.push_back(variant(best));
+ vars.push_back(variant(best_melee));
+ vars.push_back(variant(best_ranged));
return variant(&vars);
}
@@ -996,29 +1015,38 @@
for(std::vector<attack_type>::const_iterator i
= att_attacks.begin(); i != att_attacks.end(); ++i) {
const int dmg =
round_damage(i->damage(), defender.damage_from(*i, false, gamemap::location()),
100) * i->num_attacks();
- if(dmg > best)
+ if ( i->range() == "melee")
{
- best = dmg;
- best_attack = i;
+ if(dmg > best_melee)
+ best_melee = dmg;
+ } else {
+ if(dmg > best_ranged)
+ best_ranged = dmg;
}
}
//we have max damage inflicted by attacker, now
we need to search for max possible damage of defender (search only for attack
with the same range)
- vars.push_back(variant(best));
-
- best = 0;
+ vars.push_back(variant(best_melee));
+ vars.push_back(variant(best_ranged));
+
+ best_melee = 0;
+ best_ranged = 0;
def_attacks = defender.attacks();
for(std::vector<attack_type>::const_iterator i
= def_attacks.begin(); i != def_attacks.end(); ++i) {
- if(i->range() != best_attack->range())
- continue;
-
const int dmg =
round_damage(i->damage(), attacker.movement_type().resistance_against(*i), 100)
* i->num_attacks();
- if(dmg > best)
- best = dmg;
+ if ( i->range() == "melee")
+ {
+ if(dmg > best_melee)
+ best_melee = dmg;
+ } else {
+ if(dmg > best_ranged)
+ best_ranged = dmg;
+ }
}
- vars.push_back(variant(best));
+ vars.push_back(variant(best_melee));
+ vars.push_back(variant(best_ranged));
return variant(&vars);
} else
@@ -1027,28 +1055,37 @@
for(std::vector<attack_type>::const_iterator i
= att_attacks.begin(); i != att_attacks.end(); ++i) {
const int dmg =
round_damage(i->damage(), defender.movement_type().resistance_against(*i), 100)
* i->num_attacks();
- if(dmg > best)
+ if ( i->range() == "melee")
{
- best = dmg;
- best_attack = i;
+ if(dmg > best_melee)
+ best_melee = dmg;
+ } else {
+ if(dmg > best_ranged)
+ best_ranged = dmg;
}
}
- vars.push_back(variant(best));
-
- best = 0;
+ vars.push_back(variant(best_melee));
+ vars.push_back(variant(best_ranged));
+
+ best_melee = 0;
+ best_ranged = 0;
def_attacks_tmp = defender.attacks();
for(std::vector<attack_type>::const_iterator i
= def_attacks.begin(); i != def_attacks.end(); ++i) {
- if(i->range() != best_attack->range())
- continue;
-
const int dmg =
round_damage(i->damage(), attacker.movement_type().resistance_against(*i), 100)
* i->num_attacks();
- if(dmg > best)
- best = dmg;
+ if ( i->range() == "melee")
+ {
+ if(dmg > best_melee)
+ best_melee = dmg;
+ } else {
+ if(dmg > best_ranged)
+ best_ranged = dmg;
+ }
}
- vars.push_back(variant(best));
+ vars.push_back(variant(best_melee));
+ vars.push_back(variant(best_ranged));
return variant(&vars);
}
}
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits
