1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-24 03:47:18 +02:00

Battles: always update drawbridge state after battle state changed

Now gate tower destruction will immidiately affect drawbridge state.
This commit is contained in:
Arseniy Shestakov 2016-02-09 10:59:33 +03:00
parent 47433919ab
commit fbb34b8d04
2 changed files with 10 additions and 6 deletions

View File

@ -1240,7 +1240,6 @@ int CGameHandler::moveStack(int stack, BattleHex dest)
handleDamageFromObstacle(*theLastObstacle, curStack);
}
}
updateDrawbridgeState();
return ret;
}
@ -1807,8 +1806,13 @@ void CGameHandler::setupBattle( int3 tile, const CArmedInstance *armies[2], cons
sendAndApply(&bs);
}
void CGameHandler::checkForBattleEnd()
void CGameHandler::checkBattleStateChanges()
{
//check if drawbridge state need to be changes
if(battleGetSiegeLevel() > 0)
updateDrawbridgeState();
//check if battle ended
if(auto result = battleIsFinished())
{
setBattleResult(BattleResult::NORMAL, *result);
@ -4326,7 +4330,7 @@ bool CGameHandler::makeCustomAction( BattleAction &ba )
{
battleMadeAction.setn(true);
}
checkForBattleEnd();
checkBattleStateChanges();
if(battleResult.get())
{
battleMadeAction.setn(true);
@ -5713,7 +5717,7 @@ void CGameHandler::runBattle()
break;
}
//we're after action, all results applied
checkForBattleEnd(); //check if this action ended the battle
checkBattleStateChanges(); //check if this action ended the battle
if(next != nullptr)
{
@ -5765,7 +5769,7 @@ bool CGameHandler::makeAutomaticAction(const CStack *stack, BattleAction &ba)
sendAndApply(&bsa);
bool ret = makeBattleAction(ba);
checkForBattleEnd();
checkBattleStateChanges();
return ret;
}

View File

@ -112,7 +112,7 @@ public:
void endBattle(int3 tile, const CGHeroInstance *hero1, const CGHeroInstance *hero2); //ends battle
void prepareAttack(BattleAttack &bat, const CStack *att, const CStack *def, int distance, int targetHex); //distance - number of hexes travelled before attacking
void applyBattleEffects(BattleAttack &bat, const CStack *att, const CStack *def, int distance, bool secondary); //damage, drain life & fire shield
void checkForBattleEnd();
void checkBattleStateChanges();
void setupBattle(int3 tile, const CArmedInstance *armies[2], const CGHeroInstance *heroes[2], bool creatureBank, const CGTownInstance *town);
void setBattleResult(BattleResult::EResult resultType, int victoriusSide);
void duelFinished();