Browse Source

Merge pull request #134 from edeksumo/Fix-Defence-Ani

Let's try this.
DjWarmonger 10 years ago
parent
commit
5fadb239f2
4 changed files with 26 additions and 6 deletions
  1. 3 0
      .gitignore
  2. 4 4
      client/battle/CBattleAnimations.cpp
  3. 15 2
      lib/GameConstants.h
  4. 4 0
      lib/NetPacksLib.cpp

+ 3 - 0
.gitignore

@@ -32,3 +32,6 @@ build-*
 CMakeLists.txt.user.*
 Doxyfile
 doc/*
+VCMI_VS11.sdf
+*.ipch
+VCMI_VS11.opensdf

+ 4 - 4
client/battle/CBattleAnimations.cpp

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

+ 15 - 2
lib/GameConstants.h

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

+ 4 - 0
lib/NetPacksLib.cpp

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