1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-13 19:54:17 +02:00

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
This commit is contained in:
Ivan Savenko
2022-11-16 17:53:40 +02:00
parent d1c95204c5
commit b3067c0e3f
2 changed files with 4 additions and 2 deletions

View File

@@ -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;

View File

@@ -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);
}