Kaynağa Gözat

Fixed 3206 Bugged 'Start Walking' animation

Evgeniy Meshcheryakov 3 yıl önce
ebeveyn
işleme
ff00747ecf

+ 1 - 17
client/battle/CBattleAnimations.cpp

@@ -420,22 +420,6 @@ void CMeleeAttackAnimation::endAnim()
 	delete this;
 }
 
-bool CMovementAnimation::shouldRotate()
-{
-	Point begPosition = CClickableHex::getXYUnitAnim(oldPos, stack, owner);
-	Point endPosition = CClickableHex::getXYUnitAnim(nextHex, stack, owner);
-
-	if((begPosition.x > endPosition.x) && owner->creDir[stack->ID] == true)
-	{
-		return true;
-	}
-	else if ((begPosition.x < endPosition.x) && owner->creDir[stack->ID] == false)
-	{
-		return true;
-	}
-	return false;
-}
-
 bool CMovementAnimation::init()
 {
 	if( !isEarliest(false) )
@@ -456,7 +440,7 @@ bool CMovementAnimation::init()
 	}
 
 	//reverse unit if necessary
-	if(shouldRotate())
+	if(owner->shouldRotate(stack, oldPos, nextHex))
 	{
 		// it seems that H3 does NOT plays full rotation animation here in most situations
 		// Logical since it takes quite a lot of time

+ 0 - 2
client/battle/CBattleAnimations.h

@@ -118,8 +118,6 @@ public:
 class CMovementAnimation : public CBattleStackAnimation
 {
 private:
-	bool shouldRotate();
-
 	std::vector<BattleHex> destTiles; //full path, includes already passed hexes
 	ui32 curentMoveIndex; // index of nextHex in destTiles
 

+ 16 - 0
client/battle/CBattleInterface.cpp

@@ -1559,6 +1559,19 @@ CPlayerInterface *CBattleInterface::getCurrentPlayerInterface() const
 	return curInt.get();
 }
 
+bool CBattleInterface::shouldRotate(const CStack * stack, const BattleHex & oldPos, const BattleHex & nextHex)
+{
+	Point begPosition = CClickableHex::getXYUnitAnim(oldPos,stack, this);
+	Point endPosition = CClickableHex::getXYUnitAnim(nextHex, stack, this);
+
+	if((begPosition.x > endPosition.x) && creDir[stack->ID])
+		return true;
+	else if((begPosition.x < endPosition.x) && !creDir[stack->ID])
+		return true;
+
+	return false;
+}
+
 void CBattleInterface::setActiveStack(const CStack *stack)
 {
 	if (activeStack) // update UI
@@ -1926,6 +1939,9 @@ void CBattleInterface::startAction(const BattleAction* action)
 		{
 			pendingAnims.push_back(std::make_pair(new CMovementStartAnimation(this, stack), false));
 		}
+
+		if(shouldRotate(stack, stack->getPosition(), actionTarget.at(0).hexValue))
+			pendingAnims.push_back(std::make_pair(new CReverseAnimation(this, stack, stack->getPosition(), true), false));
 	}
 
 	redraw(); // redraw after deactivation, including proper handling of hovered hexes

+ 1 - 0
client/battle/CBattleInterface.h

@@ -294,6 +294,7 @@ public:
 	void setAnimSpeed(int set); //speed of animation; range 1..100
 	int getAnimSpeed() const; //speed of animation; range 1..100
 	CPlayerInterface *getCurrentPlayerInterface() const;
+	bool shouldRotate(const CStack * stack, const BattleHex & oldPos, const BattleHex & nextHex);
 
 	std::vector<std::shared_ptr<CClickableHex>> bfield; //11 lines, 17 hexes on each
 	SDL_Surface *cellBorder, *cellShade;