From 3941d588a3233176416edf90d1f248ac4cb0fe5e Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 29 Jul 2014 11:27:29 +0300 Subject: Fix sprites draw order with non zero map heights. --- src/being/being.cpp | 19 +++++++++++++++---- src/being/being.h | 11 +++++++---- 2 files changed, 22 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/being/being.cpp b/src/being/being.cpp index 0d86aad94..f5c4611ef 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -177,6 +177,7 @@ Being::Being(const int id, mY(0), mSortOffsetY(0), mOffsetY(0), + mFixedOffsetY(0), mOldHeight(0), mDamageTaken(0), mHP(0), @@ -1358,6 +1359,7 @@ void Being::nextTile() mY = pos.y; const uint8_t height = mMap->getHeightOffset(mX, mY); mOffsetY = height - mOldHeight; + mFixedOffsetY = height; mNeedPosUpdate = true; setAction(BeingAction::MOVE, 0); } @@ -1436,15 +1438,22 @@ void Being::logic() if (!xOffset && !yOffset) mNeedPosUpdate = false; +/* mSortOffsetY = (mOldHeight * mapTileSize / 2) + (mOffsetY * mapTileSize / 2) - * (mapTileSize - abs(offset)) / mapTileSize; - const int yOffset2 = yOffset - mSortOffsetY; + * (mapTileSize - abs(offset)) / mapTileSize - mFixedOffsetY * mapTileSize / 2; + const int yOffset2 = yOffset - mSortOffsetY - mFixedOffsetY * mapTileSize / 2; +*/ + const int halfTile = mapTileSize / 2; + const float offset2 = mOffsetY * abs(offset) / 2; + mSortOffsetY = (mOldHeight - mFixedOffsetY + mOffsetY) + * halfTile - offset2; + const float yOffset3 = (mY + 1) * mapTileSize + yOffset + - (mOldHeight + mOffsetY) * halfTile + offset2; // Update pixel coordinates setPosition(static_cast(mX * mapTileSize - + mapTileSize / 2 + xOffset), static_cast( - mY * mapTileSize + mapTileSize + yOffset2)); + + mapTileSize / 2 + xOffset), yOffset3); } if (mEmotionSprite) @@ -3313,6 +3322,7 @@ void Being::setTileCoords(const int x, const int y) if (mMap) { mOffsetY = mMap->getHeightOffset(mX, mY); + mFixedOffsetY = mOffsetY; mNeedPosUpdate = true; } } @@ -3323,6 +3333,7 @@ void Being::setMap(Map *const map) if (mMap) { mOffsetY = mMap->getHeightOffset(mX, mY); + mFixedOffsetY = mOffsetY; mNeedPosUpdate = true; } } diff --git a/src/being/being.h b/src/being/being.h index 776af36dc..c9d343659 100644 --- a/src/being/being.h +++ b/src/being/being.h @@ -872,6 +872,7 @@ class Being notfinal : public ActorSprite, int getSortPixelY() const A_WARN_UNUSED { return static_cast(mPos.y) - mYDiff - mSortOffsetY; } +// { return static_cast(mPos.y) - mYDiff - mSortOffsetY + 16; } void setMap(Map *const map); @@ -1008,10 +1009,12 @@ class Being notfinal : public ActorSprite, Being *mOwner; Particle *mSpecialParticle; - int mX; // position in tiles - int mY; // position in tiles - int mSortOffsetY; // caculated offset in pixels based on mOffsetY - int mOffsetY; // fixed tile height offset in pixels + int mX; // position in tiles + int mY; // position in tiles + int mSortOffsetY; // caculated offset in pixels based on mOffsetY + int mOffsetY; // tile height offset in pixels + // calculated between tiles + int mFixedOffsetY; // fixed tile height offset in pixels for tile uint8_t mOldHeight; int mDamageTaken; -- cgit v1.2.3-60-g2f50