From 31c28bbd0349475079ed2111c32b3cd07400554e Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer Date: Fri, 27 Mar 2009 14:26:23 +0100 Subject: Fixed position of dots on minimap Also made mPx and mPy private and synchronize with mPos on setPosition(). The side effects of setting destination and clearing the path have been removed from setPosition(). Only the tmwserv PlayerHandler seemed to rely on that feature. Mantis-issue: 672 --- src/being.cpp | 59 +++++++++++---------------------------- src/being.h | 19 ++++--------- src/gui/minimap.cpp | 7 +---- src/localplayer.cpp | 10 +++++-- src/monster.cpp | 9 +++--- src/net/tmwserv/playerhandler.cpp | 1 + src/npc.cpp | 14 ++++------ src/player.cpp | 13 ++++++--- src/position.h | 3 -- 9 files changed, 50 insertions(+), 85 deletions(-) diff --git a/src/being.cpp b/src/being.cpp index e143d506..b0666e8a 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -100,7 +100,6 @@ Being::Being(int id, int job, Map *map): #endif mHairColor(0), mGender(GENDER_UNSPECIFIED), - mPx(0), mPy(0), mStunMode(0), mSprites(VECTOREND_SPRITE, NULL), mSpriteIDs(VECTOREND_SPRITE, 0), @@ -113,6 +112,7 @@ Being::Being(int id, int job, Map *map): #else mWalkSpeed(150), #endif + mPx(0), mPy(0), mUsedTargetCursor(NULL) { setMap(map); @@ -141,8 +141,12 @@ Being::~Being() void Being::setPosition(const Vector &pos) { mPos = pos; - mDest = pos; - mPath.clear(); + + // Update pixel coordinates (convert once, for performance reasons) + mPx = (int) pos.x; + mPy = (int) pos.y; + + updateCoords(); } #ifdef EATHENA_SUPPORT @@ -432,13 +436,8 @@ void Being::takeDamage(Being *attacker, int amount, AttackType type) // Show damage number particleEngine->addTextSplashEffect(damage, -#ifdef TMWSERV_SUPPORT - (int) mPos.x + 16, - (int) mPos.y + 16, -#else mPx + 16, mPy + 16, -#endif - color, font, true); + color, font, true); if (amount > 0) { @@ -649,7 +648,7 @@ void Being::logic() // the jigger caused by moving too far. if (length > 2.0f) { const float speed = mWalkSpeed / 100.0f; - mPos += dir / (length / speed); + setPosition(mPos + (dir / (length / speed))); if (mAction != WALK) setAction(WALK); @@ -672,17 +671,9 @@ void Being::logic() setAction(STAND); } #else - int oldPx = mPx; - int oldPy = mPy; - // Update pixel coordinates - mPx = mX * 32 + getXOffset(); - mPy = mY * 32 + getYOffset(); - - if (mPx != oldPx || mPy != oldPy) - { - updateCoords(); - } + setPosition(mX * 32 + getXOffset(), + mY * 32 + getYOffset()); #endif if (mEmotion != 0) @@ -714,23 +705,13 @@ void Being::logic() } // Update particle effects -#ifdef TMWSERV_SUPPORT - mChildParticleEffects.moveTo((float) mPx + 16.0f, - (float) mPy + 32.0f); -#else mChildParticleEffects.moveTo(mPos.x, mPos.y); -#endif } void Being::draw(Graphics *graphics, int offsetX, int offsetY) const { -#ifdef TMWSERV_SUPPORT - int px = (int) mPos.x + offsetX; - int py = (int) mPos.y + offsetY; -#else - int px = mPx + offsetX; - int py = mPy + offsetY; -#endif + const int px = mPx + offsetX; + const int py = mPy + offsetY; if (mUsedTargetCursor) mUsedTargetCursor->draw(graphics, px, py); @@ -755,13 +736,8 @@ void Being::drawEmotion(Graphics *graphics, int offsetX, int offsetY) if (!mEmotion) return; -#ifdef TMWSERV_SUPPORT - const int px = (int) mPos.x + offsetX; - const int py = (int) mPos.y + offsetY - 64; -#else const int px = mPx - offsetX; const int py = mPy - offsetY - 64; -#endif const int emotionIndex = mEmotion - 1; if (emotionIndex >= 0 && emotionIndex <= EmoteDB::getLast()) @@ -770,13 +746,8 @@ void Being::drawEmotion(Graphics *graphics, int offsetX, int offsetY) void Being::drawSpeech(int offsetX, int offsetY) { -#ifdef TMWSERV_SUPPORT - int px = (int) mPos.x - offsetX; - int py = (int) mPos.y - offsetY; -#else const int px = mPx - offsetX; const int py = mPy - offsetY; -#endif const int speech = (int) config.getValue("speech", NAME_IN_BUBBLE); // Draw speech above this being @@ -814,7 +785,9 @@ void Being::drawSpeech(int offsetX, int offsetY) if (mText) delete mText; - mText = new Text(mSpeech, mPx + X_SPEECH_OFFSET, mPy - Y_SPEECH_OFFSET, + mText = new Text(mSpeech, + mPx + X_SPEECH_OFFSET, + mPy - Y_SPEECH_OFFSET, gcn::Graphics::CENTER, &guiPalette->getColor(Palette::PARTICLE)); } diff --git a/src/being.h b/src/being.h index 158f2f72..0faf794e 100644 --- a/src/being.h +++ b/src/being.h @@ -387,24 +387,16 @@ class Being : public Sprite virtual void draw(Graphics *graphics, int offsetX, int offsetY) const; /** - * Returns the pixel X coordinate. + * Returns the X coordinate in pixels. */ -#ifdef TMWSERV_SUPPORT - int getPixelX() const { return (int) mPos.x; } -#else int getPixelX() const { return mPx; } -#endif /** - * Returns the pixel Y coordinate. + * Returns the Y coordinate in pixels. * * @see Sprite::getPixelY() */ -#ifdef TMWSERV_SUPPORT - int getPixelY() const { return (int) mPos.y; } -#else int getPixelY() const { return mPy; } -#endif #ifdef EATHENA_SUPPORT /** @@ -421,8 +413,7 @@ class Being : public Sprite #endif /** - * Sets the position of this being. When the being was walking, it also - * clears the destination and the path. + * Sets the position of this being. */ void setPosition(const Vector &pos); @@ -545,7 +536,7 @@ class Being : public Sprite void setPath(const Path &path); /** - * Let the sub-classes react to a replacement + * Let the sub-classes react to a replacement. */ virtual void updateCoords() {} @@ -608,7 +599,6 @@ class Being : public Sprite int mHairStyle; int mHairColor; Gender mGender; - int mPx, mPy; /**< Pixel coordinates */ Uint16 mStunMode; /**< Stun mode; zero if not stunned */ std::set mStatusEffects; /**< set of active status effects */ @@ -640,6 +630,7 @@ class Being : public Sprite Vector mPos; Vector mDest; + int mPx, mPy; /**< Position in pixels */ // Target cursor being used SimpleAnimation* mUsedTargetCursor; diff --git a/src/gui/minimap.cpp b/src/gui/minimap.cpp index 93a55688..6bca796d 100644 --- a/src/gui/minimap.cpp +++ b/src/gui/minimap.cpp @@ -119,14 +119,9 @@ void Minimap::draw(gcn::Graphics *graphics) if (mMapImage->getWidth() > a.width || mMapImage->getHeight() > a.height) { -#ifdef TMWSERV_SUPPORT const Vector &p = player_node->getPosition(); mapOriginX = (int) (((a.width) / 2) - (int) (p.x * mProportion) / 32); mapOriginY = (int) (((a.height) / 2) - (int) (p.y * mProportion) / 32); -#else - mapOriginX = (int) (((a.width) / 2) - (player_node->mX * mProportion)); - mapOriginY = (int) (((a.height) / 2) - (player_node->mY * mProportion)); -#endif const int minOriginX = a.width - mMapImage->getWidth(); const int minOriginY = a.height - mMapImage->getHeight(); @@ -181,7 +176,7 @@ void Minimap::draw(gcn::Graphics *graphics) graphics->fillRectangle(gcn::Rectangle( (int) (pos.x * mProportion) / 32 + mapOriginX - offset, - (int) (pos.x * mProportion) / 32 + mapOriginY - offset, + (int) (pos.y * mProportion) / 32 + mapOriginY - offset, dotSize, dotSize)); } diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 4dd8f05f..6046459c 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -1068,7 +1068,10 @@ void LocalPlayer::setXp(int xp) const std::string text = toString(xp - mXp) + " xp"; // Show XP number - particleEngine->addTextRiseFadeOutEffect(text, mPx + 16, mPy - 16, + particleEngine->addTextRiseFadeOutEffect( + text, + getPixelX() + 16, + getPixelY() - 16, &guiPalette->getColor(Palette::EXP_INFO), gui->getInfoParticleFont(), true); } @@ -1082,7 +1085,10 @@ void LocalPlayer::pickedUp(const std::string &item) if (mMap) { // Show pickup notification - particleEngine->addTextRiseFadeOutEffect(item, mPx + 16, mPy - 16, + particleEngine->addTextRiseFadeOutEffect( + item, + getPixelX() + 16, + getPixelY() - 16, &guiPalette->getColor(Palette::PICKUP_INFO), gui->getInfoParticleFont (), true); } diff --git a/src/monster.cpp b/src/monster.cpp index eaea6225..f786471d 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -217,8 +217,9 @@ void Monster::setShowName(bool show) if (show) { - mText = new Text(getInfo().getName(), mPx + NAME_X_OFFSET, - mPy + NAME_Y_OFFSET - getHeight(), + mText = new Text(getInfo().getName(), + getPixelX() + NAME_X_OFFSET, + getPixelY() + NAME_Y_OFFSET - getHeight(), gcn::Graphics::CENTER, &guiPalette->getColor(Palette::MONSTER)); } @@ -232,7 +233,7 @@ void Monster::updateCoords() { if (mText) { - mText->adviseXY(mPx + NAME_X_OFFSET, - mPy + NAME_Y_OFFSET - getHeight()); + mText->adviseXY(getPixelX() + NAME_X_OFFSET, + getPixelY() + NAME_Y_OFFSET - getHeight()); } } diff --git a/src/net/tmwserv/playerhandler.cpp b/src/net/tmwserv/playerhandler.cpp index 863fcb65..f02ed4c1 100644 --- a/src/net/tmwserv/playerhandler.cpp +++ b/src/net/tmwserv/playerhandler.cpp @@ -322,6 +322,7 @@ void PlayerHandler::handleMapChangeMessage(MessageIn &msg) player_node->setAction(Being::STAND); player_node->setPosition(x, y); + player_node->setDestination(x, y); logger->log("Adjust scrolling by %d,%d", (int) scrollOffsetX, (int) scrollOffsetY); diff --git a/src/npc.cpp b/src/npc.cpp index d0a1a523..133f11c6 100644 --- a/src/npc.cpp +++ b/src/npc.cpp @@ -95,7 +95,9 @@ void NPC::setName(const std::string &name) const std::string displayName = name.substr(0, name.find('#', 0)); delete mName; - mName = new Text(displayName, mPx + NAME_X_OFFSET, mPy + NAME_Y_OFFSET, + mName = new Text(displayName, + getPixelX() + NAME_X_OFFSET, + getPixelY() + NAME_Y_OFFSET, gcn::Graphics::CENTER, &guiPalette->getColor(Palette::NPC)); Being::setName(displayName + " (NPC)"); @@ -142,14 +144,8 @@ void NPC::updateCoords() { if (mName) { -#ifdef TMWSERV_SUPPORT - const Vector &pos = getPosition(); - const int px = (int) pos.x + NAME_X_OFFSET; - const int py = (int) pos.y + NAME_Y_OFFSET; -#else - const int px = mPx + NAME_X_OFFSET; - const int py = mPy + NAME_Y_OFFSET; -#endif + const int px = getPixelX() + NAME_X_OFFSET; + const int py = getPixelY() + NAME_Y_OFFSET; mName->adviseXY(px, py); } } diff --git a/src/player.cpp b/src/player.cpp index de4a012b..b966e891 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -58,14 +58,18 @@ void Player::setName(const std::string &name) if (mIsGM) { mNameColor = &guiPalette->getColor(Palette::GM); - mName = new FlashText("(GM) " + name, mPx + NAME_X_OFFSET, mPy + - NAME_Y_OFFSET, gcn::Graphics::CENTER, + mName = new FlashText("(GM) " + name, + getPixelX() + NAME_X_OFFSET, + getPixelY() + NAME_Y_OFFSET, + gcn::Graphics::CENTER, &guiPalette->getColor(Palette::GM_NAME)); } else { mNameColor = &guiPalette->getColor(Palette::PLAYER); - mName = new FlashText(name, mPx + NAME_X_OFFSET, mPy + NAME_Y_OFFSET, + mName = new FlashText(name, + getPixelX() + NAME_X_OFFSET, + getPixelY() + NAME_Y_OFFSET, gcn::Graphics::CENTER, (this == player_node) ? &guiPalette->getColor(Palette::SELF) : @@ -233,7 +237,8 @@ void Player::setSprite(int slot, int id, const std::string &color) void Player::updateCoords() { if (mName) - mName->adviseXY(mPx + NAME_X_OFFSET, mPy + NAME_Y_OFFSET); + mName->adviseXY(getPixelX() + NAME_X_OFFSET, + getPixelY() + NAME_Y_OFFSET); } #ifdef TMWSERV_SUPPORT diff --git a/src/position.h b/src/position.h index cbcf8c99..9cc86602 100644 --- a/src/position.h +++ b/src/position.h @@ -30,9 +30,6 @@ */ struct Position { - /** - * Constructor. - */ Position(int x, int y): x(x), y(y) { } -- cgit v1.2.3-60-g2f50