summaryrefslogtreecommitdiff
path: root/src/being/localplayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/being/localplayer.cpp')
-rw-r--r--src/being/localplayer.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp
index 97845ae31..01e4466bf 100644
--- a/src/being/localplayer.cpp
+++ b/src/being/localplayer.cpp
@@ -158,6 +158,7 @@ LocalPlayer::LocalPlayer(const BeingId id,
mTestParticleTime(0),
mTestParticleHash(0L),
mSyncPlayerMoveDistance(config.getBoolValue("syncPlayerMoveDistance")),
+ mUnfreezeTime(0),
mWalkingDir(0),
mUpdateName(true),
mBlockAdvert(false),
@@ -179,7 +180,8 @@ LocalPlayer::LocalPlayer(const BeingId id,
mPathSetByMouse(false),
mWaitPing(false),
mShowNavigePath(false),
- mAllowRename(false)
+ mAllowRename(false),
+ mFreezed(false)
{
logger->log1("LocalPlayer::LocalPlayer");
@@ -251,6 +253,13 @@ void LocalPlayer::logic()
if (mActivityTime == 0 || mLastAction != -1)
mActivityTime = cur_time;
+ if (mUnfreezeTime > 0 &&
+ mUnfreezeTime <= tick_time)
+ {
+ mUnfreezeTime = 0;
+ mFreezed = false;
+ }
+
if ((mAction != BeingAction::MOVE || mNextStep) && !mNavigatePath.empty())
{
mNextStep = false;
@@ -2714,7 +2723,19 @@ void LocalPlayer::playerDeath()
bool LocalPlayer::canMove() const
{
- return mAction != BeingAction::DEAD &&
+ return !mFreezed &&
+ mAction != BeingAction::DEAD &&
(serverFeatures->haveMoveWhileSit() ||
mAction != BeingAction::SIT);
}
+
+void LocalPlayer::freezeMoving(const int timeWaitTicks)
+{
+ if (timeWaitTicks <= 0)
+ return;
+ const int nextTime = tick_time + timeWaitTicks;
+ if (mUnfreezeTime < nextTime)
+ mUnfreezeTime = nextTime;
+ if (mUnfreezeTime > 0)
+ mFreezed = true;
+}