Преглед изворни кода

Fixes 1892 - properly handle animation of dying clones

Ivan Savenko пре 11 година
родитељ
комит
a5c3ed080f
2 измењених фајлова са 30 додато и 13 уклоњено
  1. 19 6
      client/battle/CBattleAnimations.cpp
  2. 11 7
      client/battle/CBattleInterface.cpp

+ 19 - 6
client/battle/CBattleAnimations.cpp

@@ -150,7 +150,9 @@ CDefenceAnimation::CDefenceAnimation(StackAttackedInfo _attackedInfo, CBattleInt
 : CBattleStackAnimation(_owner, _attackedInfo.defender),
 attacker(_attackedInfo.attacker), rangedAttack(_attackedInfo.indirectAttack),
 killed(_attackedInfo.killed) 
-{}
+{
+	logAnim->debugStream() << "Created defence anim for " << _attackedInfo.defender->getName();
+}
 
 bool CDefenceAnimation::init()
 {
@@ -364,7 +366,9 @@ bool CMeleeAttackAnimation::init()
 
 CMeleeAttackAnimation::CMeleeAttackAnimation(CBattleInterface * _owner, const CStack * attacker, BattleHex _dest, const CStack * _attacked)
 : CAttackAnimation(_owner, attacker, _dest, _attacked) 
-{}
+{
+	logAnim->debugStream() << "Created melee attack anim for " << attacker->getName();
+}
 
 void CMeleeAttackAnimation::endAnim()
 {
@@ -521,11 +525,14 @@ CMovementAnimation::CMovementAnimation(CBattleInterface *_owner, const CStack *_
       progress(0.0),
       nextHex(destTiles.front())
 {
+	logAnim->debugStream() << "Created movement anim for " << stack->getName();
 }
 
 CMovementEndAnimation::CMovementEndAnimation(CBattleInterface * _owner, const CStack * _stack, BattleHex destTile)
 : CBattleStackAnimation(_owner, _stack), destinationTile(destTile) 
-{}
+{
+	logAnim->debugStream() << "Created movement end anim for " << stack->getName();
+}
 
 bool CMovementEndAnimation::init()
 {
@@ -562,7 +569,9 @@ void CMovementEndAnimation::endAnim()
 
 CMovementStartAnimation::CMovementStartAnimation(CBattleInterface * _owner, const CStack * _stack)
 : CBattleStackAnimation(_owner, _stack) 
-{}
+{
+	logAnim->debugStream() << "Created movement start anim for " << stack->getName();
+}
 
 bool CMovementStartAnimation::init()
 {
@@ -592,7 +601,9 @@ void CMovementStartAnimation::endAnim()
 
 CReverseAnimation::CReverseAnimation(CBattleInterface * _owner, const CStack * stack, BattleHex dest, bool _priority)
 : CBattleStackAnimation(_owner, stack), hex(dest), priority(_priority)
-{}
+{
+	logAnim->debugStream() << "Created reverse anim for " << stack->getName();
+}
 
 bool CReverseAnimation::init()
 {
@@ -654,7 +665,9 @@ void CReverseAnimation::setupSecondPart()
 
 CShootingAnimation::CShootingAnimation(CBattleInterface * _owner, const CStack * attacker, BattleHex _dest, const CStack * _attacked, bool _catapult, int _catapultDmg)
 : CAttackAnimation(_owner, attacker, _dest, _attacked), catapultDamage(_catapultDmg)
-{}
+{
+	logAnim->debugStream() << "Created shooting anim for " << stack->getName();
+}
 
 bool CShootingAnimation::init()
 {

+ 11 - 7
client/battle/CBattleInterface.cpp

@@ -1036,8 +1036,9 @@ void CBattleInterface::stacksAreAttacked(std::vector<StackAttackedInfo> attacked
 {
 	for (auto & attackedInfo : attackedInfos)
 	{
-		if (!attackedInfo.cloneKilled) //FIXME: play dead animation for cloned creature before it vanishes
+		//if (!attackedInfo.cloneKilled) //FIXME: play dead animation for cloned creature before it vanishes
 			addNewAnim(new CDefenceAnimation(attackedInfo, this));
+
 		if (attackedInfo.rebirth)
 		{
 			displayEffect(50, attackedInfo.defender->position); //TODO: play reverse death animation
@@ -1052,12 +1053,6 @@ void CBattleInterface::stacksAreAttacked(std::vector<StackAttackedInfo> attacked
 		killed += attackedInfo.amountKilled;
 		damage += attackedInfo.dmg;
 	}
-	if (attackedInfos.front().cloneKilled) //FIXME: cloned stack is already removed
-		return;
-	if (targets > 1)
-		printConsoleAttacked(attackedInfos.front().defender, damage, killed, attackedInfos.front().attacker, true); //creatures perish
-	else
-		printConsoleAttacked(attackedInfos.front().defender, damage, killed, attackedInfos.front().attacker, false);
 
 	for(auto & attackedInfo : attackedInfos)
 	{
@@ -1066,6 +1061,15 @@ void CBattleInterface::stacksAreAttacked(std::vector<StackAttackedInfo> attacked
 		if (attackedInfo.cloneKilled)
 			stackRemoved(attackedInfo.defender->ID);
 	}
+
+/*	if (attackedInfos.front().cloneKilled) //FIXME: cloned stack is already removed
+		return;*/
+
+	if (targets > 1)
+		printConsoleAttacked(attackedInfos.front().defender, damage, killed, attackedInfos.front().attacker, true); //creatures perish
+	else
+		printConsoleAttacked(attackedInfos.front().defender, damage, killed, attackedInfos.front().attacker, false);
+
 }
 
 void CBattleInterface::stackAttacking( const CStack * attacker, BattleHex dest, const CStack * attacked, bool shooting )