mirror of
https://github.com/vcmi/vcmi.git
synced 2025-01-28 03:57:02 +02:00
Explicitly specify to use ranged or melee attack for damage estimation
This commit is contained in:
parent
87b5f955d1
commit
434a2fb0fb
@ -499,9 +499,12 @@ std::string BattleActionsController::actionGetStatusMessage(PossiblePlayerBattle
|
|||||||
case PossiblePlayerBattleAction::WALK_AND_ATTACK:
|
case PossiblePlayerBattleAction::WALK_AND_ATTACK:
|
||||||
case PossiblePlayerBattleAction::ATTACK_AND_RETURN: //TODO: allow to disable return
|
case PossiblePlayerBattleAction::ATTACK_AND_RETURN: //TODO: allow to disable return
|
||||||
{
|
{
|
||||||
|
const auto * attacker = owner.stacksController->getActiveStack();
|
||||||
BattleHex attackFromHex = owner.fieldController->fromWhichHexAttack(targetHex);
|
BattleHex attackFromHex = owner.fieldController->fromWhichHexAttack(targetHex);
|
||||||
|
int distance = attacker->position.isValid() ? owner.getBattle()->battleGetDistances(attacker, attacker->getPosition())[attackFromHex] : 0;
|
||||||
DamageEstimation retaliation;
|
DamageEstimation retaliation;
|
||||||
DamageEstimation estimation = owner.getBattle()->battleEstimateDamage(owner.stacksController->getActiveStack(), targetStack, attackFromHex, &retaliation);
|
BattleAttackInfo attackInfo(attacker, targetStack, distance, false );
|
||||||
|
DamageEstimation estimation = owner.getBattle()->battleEstimateDamage(attackInfo, &retaliation);
|
||||||
estimation.kills.max = std::min<int64_t>(estimation.kills.max, targetStack->getCount());
|
estimation.kills.max = std::min<int64_t>(estimation.kills.max, targetStack->getCount());
|
||||||
estimation.kills.min = std::min<int64_t>(estimation.kills.min, targetStack->getCount());
|
estimation.kills.min = std::min<int64_t>(estimation.kills.min, targetStack->getCount());
|
||||||
bool enemyMayBeKilled = estimation.kills.max == targetStack->getCount();
|
bool enemyMayBeKilled = estimation.kills.max == targetStack->getCount();
|
||||||
@ -514,7 +517,8 @@ std::string BattleActionsController::actionGetStatusMessage(PossiblePlayerBattle
|
|||||||
const auto * shooter = owner.stacksController->getActiveStack();
|
const auto * shooter = owner.stacksController->getActiveStack();
|
||||||
|
|
||||||
DamageEstimation retaliation;
|
DamageEstimation retaliation;
|
||||||
DamageEstimation estimation = owner.getBattle()->battleEstimateDamage(shooter, targetStack, shooter->getPosition(), &retaliation);
|
BattleAttackInfo attackInfo(shooter, targetStack, 0, true );
|
||||||
|
DamageEstimation estimation = owner.getBattle()->battleEstimateDamage(attackInfo, &retaliation);
|
||||||
estimation.kills.max = std::min<int64_t>(estimation.kills.max, targetStack->getCount());
|
estimation.kills.max = std::min<int64_t>(estimation.kills.max, targetStack->getCount());
|
||||||
estimation.kills.min = std::min<int64_t>(estimation.kills.min, targetStack->getCount());
|
estimation.kills.min = std::min<int64_t>(estimation.kills.min, targetStack->getCount());
|
||||||
return formatRangedAttack(estimation, targetStack->getName(), shooter->shots.available());
|
return formatRangedAttack(estimation, targetStack->getName(), shooter->shots.available());
|
||||||
|
@ -742,15 +742,15 @@ DamageEstimation CBattleInfoCallback::battleEstimateDamage(const battle::Unit *
|
|||||||
{
|
{
|
||||||
RETURN_IF_NOT_BATTLE({});
|
RETURN_IF_NOT_BATTLE({});
|
||||||
auto reachability = battleGetDistances(attacker, attacker->getPosition());
|
auto reachability = battleGetDistances(attacker, attacker->getPosition());
|
||||||
int getMovementRange = attackerPosition.isValid() ? reachability[attackerPosition] : 0;
|
int movementRange = attackerPosition.isValid() ? reachability[attackerPosition] : 0;
|
||||||
return battleEstimateDamage(attacker, defender, getMovementRange, retaliationDmg);
|
return battleEstimateDamage(attacker, defender, movementRange, retaliationDmg);
|
||||||
}
|
}
|
||||||
|
|
||||||
DamageEstimation CBattleInfoCallback::battleEstimateDamage(const battle::Unit * attacker, const battle::Unit * defender, int getMovementRange, DamageEstimation * retaliationDmg) const
|
DamageEstimation CBattleInfoCallback::battleEstimateDamage(const battle::Unit * attacker, const battle::Unit * defender, int movementRange, DamageEstimation * retaliationDmg) const
|
||||||
{
|
{
|
||||||
RETURN_IF_NOT_BATTLE({});
|
RETURN_IF_NOT_BATTLE({});
|
||||||
const bool shooting = battleCanShoot(attacker, defender->getPosition());
|
const bool shooting = battleCanShoot(attacker, defender->getPosition());
|
||||||
const BattleAttackInfo bai(attacker, defender, getMovementRange, shooting);
|
const BattleAttackInfo bai(attacker, defender, movementRange, shooting);
|
||||||
return battleEstimateDamage(bai, retaliationDmg);
|
return battleEstimateDamage(bai, retaliationDmg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user