mirror of
https://github.com/vcmi/vcmi.git
synced 2025-04-23 12:08:45 +02:00
Merge pull request #3996 from IvanSavenko/retaliation_tweaks
[1.5.2] Retaliation preview tweaks
This commit is contained in:
commit
d5f32c27b0
@ -83,6 +83,13 @@ std::vector<std::string> BattleConsole::getVisibleText()
|
|||||||
|
|
||||||
auto result = CMessage::breakText(text, pos.w, FONT_SMALL);
|
auto result = CMessage::breakText(text, pos.w, FONT_SMALL);
|
||||||
|
|
||||||
|
if(result.size() > 2 && text.find('\n') != std::string::npos)
|
||||||
|
{
|
||||||
|
// Text has too many lines to fit into console, but has line breaks. Try ignore them and fit text that way
|
||||||
|
std::string cleanText = boost::algorithm::replace_all_copy(text, "\n", " ");
|
||||||
|
result = CMessage::breakText(cleanText, pos.w, FONT_SMALL);
|
||||||
|
}
|
||||||
|
|
||||||
if(result.size() > 2)
|
if(result.size() > 2)
|
||||||
result.resize(2);
|
result.resize(2);
|
||||||
return result;
|
return result;
|
||||||
|
@ -760,15 +760,20 @@ DamageEstimation CBattleInfoCallback::battleEstimateDamage(const BattleAttackInf
|
|||||||
|
|
||||||
DamageEstimation ret = calculateDmgRange(bai);
|
DamageEstimation ret = calculateDmgRange(bai);
|
||||||
|
|
||||||
if(retaliationDmg && bai.defender->ableToRetaliate())
|
if(retaliationDmg == nullptr)
|
||||||
{
|
return ret;
|
||||||
if(bai.shooting)
|
|
||||||
{
|
|
||||||
//FIXME: handle RANGED_RETALIATION
|
|
||||||
*retaliationDmg = DamageEstimation();
|
*retaliationDmg = DamageEstimation();
|
||||||
}
|
|
||||||
else
|
if(bai.shooting) //FIXME: handle RANGED_RETALIATION
|
||||||
{
|
return ret;
|
||||||
|
|
||||||
|
if (!bai.defender->ableToRetaliate())
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
if (bai.attacker->hasBonusOfType(BonusType::BLOCKS_RETALIATION))
|
||||||
|
return ret;
|
||||||
|
|
||||||
//TODO: rewrite using boost::numeric::interval
|
//TODO: rewrite using boost::numeric::interval
|
||||||
//TODO: rewire once more using interval-based fuzzy arithmetic
|
//TODO: rewire once more using interval-based fuzzy arithmetic
|
||||||
|
|
||||||
@ -778,7 +783,10 @@ DamageEstimation CBattleInfoCallback::battleEstimateDamage(const BattleAttackInf
|
|||||||
auto state = retaliationAttack.attacker->acquireState();
|
auto state = retaliationAttack.attacker->acquireState();
|
||||||
state->damage(damage);
|
state->damage(damage);
|
||||||
retaliationAttack.attacker = state.get();
|
retaliationAttack.attacker = state.get();
|
||||||
|
if (state->alive())
|
||||||
return calculateDmgRange(retaliationAttack);
|
return calculateDmgRange(retaliationAttack);
|
||||||
|
else
|
||||||
|
return DamageEstimation();
|
||||||
};
|
};
|
||||||
|
|
||||||
DamageEstimation retaliationMin = estimateRetaliation(ret.damage.min);
|
DamageEstimation retaliationMin = estimateRetaliation(ret.damage.min);
|
||||||
@ -789,8 +797,6 @@ DamageEstimation CBattleInfoCallback::battleEstimateDamage(const BattleAttackInf
|
|||||||
|
|
||||||
retaliationDmg->kills.min = std::min(retaliationMin.kills.min, retaliationMax.kills.min);
|
retaliationDmg->kills.min = std::min(retaliationMin.kills.min, retaliationMax.kills.min);
|
||||||
retaliationDmg->kills.max = std::max(retaliationMin.kills.max, retaliationMax.kills.max);
|
retaliationDmg->kills.max = std::max(retaliationMin.kills.max, retaliationMax.kills.max);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user