Browse Source

Attemts to improve timing of ranged attacks:

- when computing number of steps/frames to display projectile round to
nearest instead of rounding down
- end projectile animation only *after* last step was shown
Ivan Savenko 2 years ago
parent
commit
b3067c0e3f
2 changed files with 4 additions and 2 deletions
  1. 3 1
      client/battle/CBattleAnimations.cpp
  2. 1 1
      client/battle/CBattleInterface.cpp

+ 3 - 1
client/battle/CBattleAnimations.cpp

@@ -814,7 +814,9 @@ bool CShootingAnimation::init()
 	if (attackedStack)
 	{
 		double animSpeed = AnimationControls::getProjectileSpeed(); // flight speed of projectile
-		spi.lastStep = static_cast<int>(sqrt(static_cast<double>((destPos.x - spi.x) * (destPos.x - spi.x) + (destPos.y - spi.y) * (destPos.y - spi.y))) / animSpeed);
+		double distanceSquared = (destPos.x - spi.x) * (destPos.x - spi.x) + (destPos.y - spi.y) * (destPos.y - spi.y);
+		double distance = sqrt(distanceSquared);
+		spi.lastStep = std::round(distance / animSpeed);
 		if(spi.lastStep == 0)
 			spi.lastStep = 1;
 		spi.dx = (destPos.x - spi.x) / spi.lastStep;

+ 1 - 1
client/battle/CBattleInterface.cpp

@@ -3269,7 +3269,7 @@ void CBattleInterface::showProjectiles(SDL_Surface *to)
 
 		// Update projectile
 		++it->step;
-		if (it->step == it->lastStep)
+		if (it->step > it->lastStep)
 		{
 			toBeDeleted.insert(toBeDeleted.end(), it);
 		}