fix diagonal walking regression
This commit is contained in:
parent
950730a77f
commit
ad310e2baf
|
@ -46,6 +46,7 @@ Creature::Creature() : Thing()
|
||||||
m_direction = Otc::South;
|
m_direction = Otc::South;
|
||||||
m_walking = false;
|
m_walking = false;
|
||||||
m_walkInterval = 0;
|
m_walkInterval = 0;
|
||||||
|
m_walkAnimationInterval = 0;
|
||||||
m_walkTurnDirection = Otc::InvalidDirection;
|
m_walkTurnDirection = Otc::InvalidDirection;
|
||||||
m_skull = Otc::SkullNone;
|
m_skull = Otc::SkullNone;
|
||||||
m_shield = Otc::ShieldNone;
|
m_shield = Otc::ShieldNone;
|
||||||
|
@ -207,16 +208,19 @@ void Creature::walk(const Position& oldPos, const Position& newPos)
|
||||||
m_walkTimer.restart();
|
m_walkTimer.restart();
|
||||||
|
|
||||||
// calculates walk interval
|
// calculates walk interval
|
||||||
float walkInterval = 1000;
|
float interval = 1000;
|
||||||
int groundSpeed = g_map.getTile(oldPos)->getGroundSpeed();
|
int groundSpeed = g_map.getTile(oldPos)->getGroundSpeed();
|
||||||
if(groundSpeed != 0)
|
if(groundSpeed != 0)
|
||||||
walkInterval = (1000.0f * groundSpeed) / m_speed;
|
interval = (1000.0f * groundSpeed) / m_speed;
|
||||||
|
|
||||||
|
interval = std::ceil(interval / g_game.getServerBeat()) * g_game.getServerBeat();
|
||||||
|
|
||||||
|
m_walkAnimationInterval = interval;
|
||||||
|
m_walkInterval = interval;
|
||||||
|
|
||||||
// diagonal walking lasts 3 times more.
|
// diagonal walking lasts 3 times more.
|
||||||
//if(direction == Otc::NorthWest || direction == Otc::NorthEast || direction == Otc::SouthWest || direction == Otc::SouthEast)
|
if(direction == Otc::NorthWest || direction == Otc::NorthEast || direction == Otc::SouthWest || direction == Otc::SouthEast)
|
||||||
// walkInterval *= 3;
|
m_walkInterval *= 3;
|
||||||
|
|
||||||
m_walkInterval = std::ceil(walkInterval / g_game.getServerBeat()) * g_game.getServerBeat();
|
|
||||||
|
|
||||||
// no direction needs to be changed when the walk ends
|
// no direction needs to be changed when the walk ends
|
||||||
m_walkTurnDirection = Otc::InvalidDirection;
|
m_walkTurnDirection = Otc::InvalidDirection;
|
||||||
|
@ -278,13 +282,13 @@ void Creature::nextWalkUpdate()
|
||||||
m_walkUpdateEvent = g_dispatcher.scheduleEvent([self] {
|
m_walkUpdateEvent = g_dispatcher.scheduleEvent([self] {
|
||||||
self->m_walkUpdateEvent = nullptr;
|
self->m_walkUpdateEvent = nullptr;
|
||||||
self->nextWalkUpdate();
|
self->nextWalkUpdate();
|
||||||
}, m_walkInterval / 32);
|
}, m_walkAnimationInterval / 32);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Creature::updateWalk()
|
void Creature::updateWalk()
|
||||||
{
|
{
|
||||||
float walkTicksPerPixel = m_walkInterval / 32.0f;
|
float walkTicksPerPixel = m_walkAnimationInterval / 32;
|
||||||
int totalPixelsWalked = std::min(m_walkTimer.ticksElapsed() / walkTicksPerPixel, 32.0f);
|
int totalPixelsWalked = std::min(m_walkTimer.ticksElapsed() / walkTicksPerPixel, 32.0f);
|
||||||
|
|
||||||
// update walk animation and offsets
|
// update walk animation and offsets
|
||||||
|
|
|
@ -117,6 +117,7 @@ protected:
|
||||||
// walk related
|
// walk related
|
||||||
Timer m_walkTimer;
|
Timer m_walkTimer;
|
||||||
int m_walkInterval;
|
int m_walkInterval;
|
||||||
|
int m_walkAnimationInterval;
|
||||||
bool m_walking;
|
bool m_walking;
|
||||||
ScheduledEventPtr m_walkUpdateEvent;
|
ScheduledEventPtr m_walkUpdateEvent;
|
||||||
Point m_walkOffset;
|
Point m_walkOffset;
|
||||||
|
|
|
@ -140,7 +140,7 @@ void LocalPlayer::updateWalkOffset(int totalPixelsWalked)
|
||||||
|
|
||||||
void LocalPlayer::updateWalk()
|
void LocalPlayer::updateWalk()
|
||||||
{
|
{
|
||||||
float walkTicksPerPixel = m_walkInterval / 32.0f;
|
float walkTicksPerPixel = m_walkAnimationInterval / 32.0f;
|
||||||
int totalPixelsWalked = std::min(m_walkTimer.ticksElapsed() / walkTicksPerPixel, 32.0f);
|
int totalPixelsWalked = std::min(m_walkTimer.ticksElapsed() / walkTicksPerPixel, 32.0f);
|
||||||
|
|
||||||
// update walk animation and offsets
|
// update walk animation and offsets
|
||||||
|
|
Loading…
Reference in New Issue