diff options
Diffstat (limited to 'src/being')
-rw-r--r-- | src/being/being.cpp | 18 | ||||
-rw-r--r-- | src/being/being.h | 1 |
2 files changed, 12 insertions, 7 deletions
diff --git a/src/being/being.cpp b/src/being/being.cpp index 35e90590c..487749a0d 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -204,7 +204,8 @@ Being::Being(const int id, mAdvanced(false), mShop(false), mAway(false), - mInactive(false) + mInactive(false), + mNeedPosUpdate(true) { for (int f = 0; f < 20; f ++) { @@ -1385,6 +1386,7 @@ void Being::nextTile() mY = pos.y; const uint8_t height = mMap->getHeightOffset(mX, mY); mOffsetY = height - mOldHeight; + mNeedPosUpdate = true; setAction(BeingAction::MOVE, 0); } @@ -1451,8 +1453,9 @@ void Being::logic() } } - if (mAction == BeingAction::MOVE) + if (mAction == BeingAction::MOVE || mNeedPosUpdate) { + mNeedPosUpdate = false; const int xOffset = getXOffset(); const int yOffset = getYOffset(); int offset = xOffset; @@ -1469,11 +1472,6 @@ void Being::logic() + mapTileSize / 2 + xOffset), static_cast<float>( mY * mapTileSize + mapTileSize + yOffset2)); } - else - { - setPosition(static_cast<float>(mX * mapTileSize + mapTileSize / 2), - static_cast<float>(mY * mapTileSize + mapTileSize)); - } if (mEmotionSprite) { @@ -3339,14 +3337,20 @@ void Being::setTileCoords(const int x, const int y) mX = x; mY = y; if (mMap) + { mOffsetY = mMap->getHeightOffset(mX, mY); + mNeedPosUpdate = true; + } } void Being::setMap(Map *const map) { ActorSprite::setMap(map); if (mMap) + { mOffsetY = mMap->getHeightOffset(mX, mY); + mNeedPosUpdate = true; + } } void Being::removeAllItemsParticles() diff --git a/src/being/being.h b/src/being/being.h index ccfabe9a1..776af36dc 100644 --- a/src/being/being.h +++ b/src/being/being.h @@ -1061,6 +1061,7 @@ class Being notfinal : public ActorSprite, bool mShop; bool mAway; bool mInactive; + bool mNeedPosUpdate; }; extern std::list<BeingCacheEntry*> beingInfoCache; |