fix walk freeze, fix some texts displaying in pink
This commit is contained in:
parent
3725577aac
commit
9450fab9e7
|
@ -43,6 +43,7 @@ function table.removevalue(t, value)
|
||||||
for k,v in pairs(t) do
|
for k,v in pairs(t) do
|
||||||
if v == value then
|
if v == value then
|
||||||
table.remove(t, k)
|
table.remove(t, k)
|
||||||
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -134,5 +134,11 @@ void Painter::setCompositionMode(Painter::CompositionMode compositionMode)
|
||||||
case CompositionMode_Add:
|
case CompositionMode_Add:
|
||||||
glBlendFunc(GL_ONE, GL_ONE);
|
glBlendFunc(GL_ONE, GL_ONE);
|
||||||
break;
|
break;
|
||||||
|
case CompositionMode_Replace:
|
||||||
|
glBlendFunc(GL_ONE, GL_ZERO);
|
||||||
|
break;
|
||||||
|
case CompositionMode_DestBlending:
|
||||||
|
glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,9 @@ public:
|
||||||
enum CompositionMode {
|
enum CompositionMode {
|
||||||
CompositionMode_Normal,
|
CompositionMode_Normal,
|
||||||
CompositionMode_Multiply,
|
CompositionMode_Multiply,
|
||||||
CompositionMode_Add
|
CompositionMode_Add,
|
||||||
|
CompositionMode_Replace,
|
||||||
|
CompositionMode_DestBlending
|
||||||
};
|
};
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
|
|
|
@ -61,7 +61,7 @@ void UIWidget::drawText(const Rect& screenCoords)
|
||||||
m_textFramebuffer->bind();
|
m_textFramebuffer->bind();
|
||||||
Rect virtualTextRect(0, 0, boxSize);
|
Rect virtualTextRect(0, 0, boxSize);
|
||||||
virtualTextRect.translate(m_textOffset);
|
virtualTextRect.translate(m_textOffset);
|
||||||
g_painter.setCompositionMode(Painter::CompositionMode_Add);
|
g_painter.setCompositionMode(Painter::CompositionMode_DestBlending);
|
||||||
m_font->renderText(m_text, virtualTextRect, m_textAlign, Fw::white);
|
m_font->renderText(m_text, virtualTextRect, m_textAlign, Fw::white);
|
||||||
g_painter.resetCompositionMode();
|
g_painter.resetCompositionMode();
|
||||||
m_textFramebuffer->release();
|
m_textFramebuffer->release();
|
||||||
|
|
|
@ -54,9 +54,8 @@ void LocalPlayer::walk(const Position& oldPos, const Position& newPos)
|
||||||
// switch to normal walking
|
// switch to normal walking
|
||||||
m_preWalking = false;
|
m_preWalking = false;
|
||||||
m_lastPrewalkDone = true;
|
m_lastPrewalkDone = true;
|
||||||
// if is to the destination, updates it preserving the animation
|
// if is to the last prewalk destination, updates the walk preserving the animation
|
||||||
if(newPos == m_lastPrewalkDestionation) {
|
if(newPos == m_lastPrewalkDestionation) {
|
||||||
// walk started by prewalk could already be finished by now
|
|
||||||
updateWalk();
|
updateWalk();
|
||||||
// was to another direction, replace the walk
|
// was to another direction, replace the walk
|
||||||
} else
|
} else
|
||||||
|
@ -77,12 +76,15 @@ void LocalPlayer::preWalk(Otc::Direction direction)
|
||||||
|
|
||||||
bool LocalPlayer::canWalk(Otc::Direction direction)
|
bool LocalPlayer::canWalk(Otc::Direction direction)
|
||||||
{
|
{
|
||||||
|
// prewalk has a timeout, because for some reason that I don't know yet the server sometimes doesn't answer the prewalk
|
||||||
|
bool prewalkTimeouted = m_walking && m_preWalking && m_walkTimer.ticksElapsed() >= m_walkInterval + PREWALK_TIMEOUT;
|
||||||
|
|
||||||
// cannot walk while already walking
|
// cannot walk while already walking
|
||||||
if(m_walking)
|
if(m_walking && !prewalkTimeouted)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// avoid doing more walks than wanted when receiving a lot of walks from server
|
// avoid doing more walks than wanted when receiving a lot of walks from server
|
||||||
if(!m_lastPrewalkDone)
|
if(!m_lastPrewalkDone && !prewalkTimeouted)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// cannot walk while locked
|
// cannot walk while locked
|
||||||
|
|
|
@ -28,7 +28,8 @@
|
||||||
class LocalPlayer : public Player
|
class LocalPlayer : public Player
|
||||||
{
|
{
|
||||||
enum {
|
enum {
|
||||||
WALK_LOCK_INTERVAL = 250
|
WALK_LOCK_INTERVAL = 250,
|
||||||
|
PREWALK_TIMEOUT = 1000
|
||||||
};
|
};
|
||||||
public:
|
public:
|
||||||
LocalPlayer();
|
LocalPlayer();
|
||||||
|
|
Loading…
Reference in New Issue