1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-02-09 13:14:02 +02:00

FixDefenceAni

This commit is contained in:
edeksumo 2015-11-04 00:19:40 +01:00
parent 460227ec23
commit 75a76c0bf0
3 changed files with 8 additions and 6 deletions

View File

@ -233,7 +233,7 @@ std::string CDefenceAnimation::getMySound()
if(killed) if(killed)
return battle_sound(stack->getCreature(), killed); return battle_sound(stack->getCreature(), killed);
if (stack->valOfBonuses(Bonus::UntilGetsTurn)) if (vstd::contains(stack->state, EBattleStackState::DEFENDING_ANI))
return battle_sound(stack->getCreature(), defend); return battle_sound(stack->getCreature(), defend);
return battle_sound(stack->getCreature(), wince); return battle_sound(stack->getCreature(), wince);
} }
@ -243,9 +243,7 @@ CCreatureAnim::EAnimType CDefenceAnimation::getMyAnimType()
if(killed) if(killed)
return CCreatureAnim::DEATH; return CCreatureAnim::DEATH;
auto selector = CSelector(Bonus::UntilGetsTurn).And(Selector::typeSubtype(Bonus::PRIMARY_SKILL, PrimarySkill::DEFENSE)); if (vstd::contains(stack->state, EBattleStackState::DEFENDING_ANI))
if(stack->valOfBonuses(selector))
return CCreatureAnim::DEFENCE; return CCreatureAnim::DEFENCE;
return CCreatureAnim::HITTED; return CCreatureAnim::HITTED;
} }

View File

@ -433,7 +433,7 @@ namespace EMarketMode
namespace EBattleStackState namespace EBattleStackState
{ {
enum EBattleStackState{ALIVE = 180, SUMMONED, CLONED, DEAD_CLONE, HAD_MORALE, WAITING, MOVED, DEFENDING, FEAR, enum EBattleStackState{ALIVE = 180, SUMMONED, CLONED, DEAD_CLONE, HAD_MORALE, WAITING, MOVED, DEFENDING, FEAR,
DRAINED_MANA /*remember to drain mana only once per turn*/}; DRAINED_MANA /*remember to drain mana only once per turn*/, DEFENDING_ANI/*only for animation*/};
} }
namespace ECommander namespace ECommander

View File

@ -1304,6 +1304,9 @@ DLL_LINKAGE void StartAction::applyGs( CGameState *gs )
{ {
CStack *st = gs->curB->getStack(ba.stackNumber); CStack *st = gs->curB->getStack(ba.stackNumber);
if(vstd::contains(st->state, EBattleStackState::DEFENDING_ANI))
st->state -= EBattleStackState::DEFENDING_ANI;
if(ba.actionType == Battle::END_TACTIC_PHASE) if(ba.actionType == Battle::END_TACTIC_PHASE)
{ {
gs->curB->tacticDistance = 0; gs->curB->tacticDistance = 0;
@ -1329,7 +1332,8 @@ DLL_LINKAGE void StartAction::applyGs( CGameState *gs )
switch(ba.actionType) switch(ba.actionType)
{ {
case Battle::DEFEND: case Battle::DEFEND:
st->state.insert(EBattleStackState::DEFENDING); st->state.insert(EBattleStackState::DEFENDING);
st->state.insert(EBattleStackState::DEFENDING_ANI);
break; break;
case Battle::WAIT: case Battle::WAIT:
st->state.insert(EBattleStackState::WAITING); st->state.insert(EBattleStackState::WAITING);