|
|
|
@ -48,6 +48,7 @@ Creature::Creature() : Thing()
|
|
|
|
|
m_direction = Otc::South;
|
|
|
|
|
m_walkAnimationPhase = 0;
|
|
|
|
|
m_walkedPixels = 0;
|
|
|
|
|
m_walkStepDuration = 0;
|
|
|
|
|
m_walkTurnDirection = Otc::InvalidDirection;
|
|
|
|
|
m_skull = Otc::SkullNone;
|
|
|
|
|
m_shield = Otc::ShieldNone;
|
|
|
|
@ -265,6 +266,7 @@ void Creature::walk(const Position& oldPos, const Position& newPos)
|
|
|
|
|
m_walking = true;
|
|
|
|
|
m_walkTimer.restart();
|
|
|
|
|
m_walkedPixels = 0;
|
|
|
|
|
m_walkStepDuration = getStepDuration();
|
|
|
|
|
|
|
|
|
|
// no direction need to be changed when the walk ends
|
|
|
|
|
m_walkTurnDirection = Otc::InvalidDirection;
|
|
|
|
@ -349,7 +351,7 @@ void Creature::updateWalkAnimation(int totalPixelsWalked)
|
|
|
|
|
int footAnimPhases = getAnimationPhases() - 1;
|
|
|
|
|
if(totalPixelsWalked == 32 || footAnimPhases == 0)
|
|
|
|
|
m_walkAnimationPhase = 0;
|
|
|
|
|
else if(m_footStepDrawn && m_footTimer.ticksElapsed() >= getStepDuration() / 4 ) {
|
|
|
|
|
else if(m_footStepDrawn && m_footTimer.ticksElapsed() >= m_walkStepDuration / 4 ) {
|
|
|
|
|
m_footStep++;
|
|
|
|
|
m_walkAnimationPhase = 1 + (m_footStep % footAnimPhases);
|
|
|
|
|
m_footStepDrawn = false;
|
|
|
|
@ -413,14 +415,13 @@ void Creature::nextWalkUpdate()
|
|
|
|
|
m_walkUpdateEvent = g_dispatcher.scheduleEvent([self] {
|
|
|
|
|
self->m_walkUpdateEvent = nullptr;
|
|
|
|
|
self->nextWalkUpdate();
|
|
|
|
|
}, getStepDuration() / 32);
|
|
|
|
|
}, m_walkStepDuration / 32);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Creature::updateWalk()
|
|
|
|
|
{
|
|
|
|
|
int stepDuration = getStepDuration();
|
|
|
|
|
float walkTicksPerPixel = stepDuration / 32;
|
|
|
|
|
float walkTicksPerPixel = m_walkStepDuration / 32;
|
|
|
|
|
int totalPixelsWalked = std::min(m_walkTimer.ticksElapsed() / walkTicksPerPixel, 32.0f);
|
|
|
|
|
|
|
|
|
|
// needed for paralyze effect
|
|
|
|
@ -432,7 +433,7 @@ void Creature::updateWalk()
|
|
|
|
|
updateWalkingTile();
|
|
|
|
|
|
|
|
|
|
// terminate walk
|
|
|
|
|
if(m_walking && m_walkTimer.ticksElapsed() >= stepDuration)
|
|
|
|
|
if(m_walking && m_walkTimer.ticksElapsed() >= m_walkStepDuration)
|
|
|
|
|
terminateWalk();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|