summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/being.cpp12
-rw-r--r--src/gui/viewport.cpp13
-rw-r--r--src/localplayer.cpp6
-rw-r--r--src/net/manaserv/beinghandler.cpp16
4 files changed, 33 insertions, 14 deletions
diff --git a/src/being.cpp b/src/being.cpp
index feec617a..be98bfdd 100644
--- a/src/being.cpp
+++ b/src/being.cpp
@@ -539,7 +539,6 @@ void Being::logic()
// When we've not reached our destination, move to it.
if (nominalLength > 1.0f && mWalkSpeed > 0.0f)
{
-
// The private mWalkSpeed member is the speed in tiles per second.
// We translate it into pixels per tick,
// because the logic is called every ticks.
@@ -583,6 +582,7 @@ void Being::logic()
direction |= (dir.x > 0) ? RIGHT : LEFT;
else
direction |= (dir.y > 0) ? DOWN : UP;
+
setDirection(direction);
}
else if (!mPath.empty())
@@ -611,11 +611,11 @@ void Being::logic()
// Update sprite animations
if (mUsedTargetCursor)
- mUsedTargetCursor->update(tick_time * 10);
+ mUsedTargetCursor->update(tick_time * MILLISECONDS_IN_A_TICK);
for (SpriteIterator it = mSprites.begin(); it != mSprites.end(); it++)
if (*it)
- (*it)->update(tick_time * 10);
+ (*it)->update(tick_time * MILLISECONDS_IN_A_TICK);
// Restart status/particle effects, if needed
if (mMustResetParticles) {
@@ -636,9 +636,13 @@ void Being::draw(Graphics *graphics, int offsetX, int offsetY) const
{
// TODO: Eventually, we probably should fix all sprite offsets so that
// these translations aren't necessary anymore. The sprites know
- // best where their centerpoint should be.
+ // best where their base point should be.
const int px = mPx + offsetX - 16;
+#ifdef MANASERV_SUPPORT
+ const int py = mPy + offsetY - 15; // Temporary fix to the Y offset.
+#else
const int py = mPy + offsetY - 32;
+#endif
if (mUsedTargetCursor)
mUsedTargetCursor->draw(graphics, px, py);
diff --git a/src/gui/viewport.cpp b/src/gui/viewport.cpp
index 21a6ec80..6e9720e9 100644
--- a/src/gui/viewport.cpp
+++ b/src/gui/viewport.cpp
@@ -231,8 +231,8 @@ void Viewport::logic()
if (!mMap || !player_node)
return;
-#ifdef EATHENA_SUPPORT
Uint8 button = SDL_GetMouseState(&mMouseX, &mMouseY);
+#ifdef EATHENA_SUPPORT
if (mPlayerFollowMouse && button & SDL_BUTTON(1) &&
mWalkTime != player_node->mWalkTime)
@@ -241,6 +241,17 @@ void Viewport::logic()
mMouseY / 32 + mTileViewY);
mWalkTime = player_node->mWalkTime;
}
+#else // MANASERV_SUPPORT
+ Uint8 *keys = SDL_GetKeyState(NULL);
+ if (mPlayerFollowMouse && button & SDL_BUTTON(1) &&
+ !(keys[SDLK_LSHIFT] || keys[SDLK_RSHIFT]) &&
+ get_elapsed_time(mLocalWalkTime) >= walkingMouseDelay)
+ {
+ mLocalWalkTime = tick_time;
+ player_node->setDestination(mMouseX + (int) mPixelViewX,
+ mMouseY + (int) mPixelViewY);
+ player_node->pathSetByMouse();
+ }
#endif
}
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index a6e558e8..f17fbca4 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -303,7 +303,6 @@ void LocalPlayer::nextStep(unsigned char dir = 0)
const Vector &pos = getPosition();
// Compute where the next step will be set.
-
int dx = 0, dy = 0;
if (dir & UP)
dy--;
@@ -342,7 +341,7 @@ void LocalPlayer::nextStep(unsigned char dir = 0)
}
}
- if (dScaler > 0)
+ if (dScaler > 16)
{
//effectManager->trigger(15, (int) pos.x + (dx * dScaler), (int) pos.y + (dy * dScaler));
setDestination((int) pos.x + (dx * dScaler), (int) pos.y + (dy * dScaler));
@@ -526,13 +525,12 @@ void LocalPlayer::setDestination(Uint16 x, Uint16 y)
mDestX = x;
mDestY = y;
+ Being::setDestination(x, y);
Net::getPlayerHandler()->setDestination(x, y, mDirection);
}
mPickUpTarget = NULL;
mKeepAttacking = false;
-
- Being::setDestination(x, y);
}
void LocalPlayer::setWalkingDir(int dir)
diff --git a/src/net/manaserv/beinghandler.cpp b/src/net/manaserv/beinghandler.cpp
index 3df346a4..d8508f01 100644
--- a/src/net/manaserv/beinghandler.cpp
+++ b/src/net/manaserv/beinghandler.cpp
@@ -313,12 +313,18 @@ void BeingHandler::handleBeingDirChangeMessage(MessageIn &msg)
if (!being)
return;
int data = msg.readInt8();
- switch (data)
+
+ // The direction for the player's character is handled on client side.
+ if (being != player_node)
{
- case DIRECTION_UP: being->setDirection(Being::UP); break;
- case DIRECTION_DOWN: being->setDirection(Being::DOWN); break;
- case DIRECTION_LEFT: being->setDirection(Being::LEFT); break;
- case DIRECTION_RIGHT: being->setDirection(Being::RIGHT); break;
+ switch (data)
+ {
+ case DIRECTION_UP: being->setDirection(Being::UP); break;
+ case DIRECTION_DOWN: being->setDirection(Being::DOWN); break;
+ case DIRECTION_LEFT: being->setDirection(Being::LEFT); break;
+ case DIRECTION_RIGHT: being->setDirection(Being::RIGHT); break;
+ default: break;
+ }
}
}