diff options
author | Andrei Karas <akaras@inbox.ru> | 2013-09-17 21:09:37 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2013-09-17 21:12:04 +0300 |
commit | 17f2adad3ba9e6a5c64d2d923d9cbb190f234b6f (patch) | |
tree | 7599d726f1c640cb94c675f4e889b91a9fabe67b | |
parent | 01e2baa778318150bdd1829836cfff9e677cf72c (diff) | |
download | mv-17f2adad3ba9e6a5c64d2d923d9cbb190f234b6f.tar.gz mv-17f2adad3ba9e6a5c64d2d923d9cbb190f234b6f.tar.bz2 mv-17f2adad3ba9e6a5c64d2d923d9cbb190f234b6f.tar.xz mv-17f2adad3ba9e6a5c64d2d923d9cbb190f234b6f.zip |
fix beings draw order with tile heights.
-rw-r--r-- | src/being/being.cpp | 7 | ||||
-rw-r--r-- | src/being/being.h | 11 |
2 files changed, 11 insertions, 7 deletions
diff --git a/src/being/being.cpp b/src/being/being.cpp index 00df60848..6d1307fab 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -147,7 +147,7 @@ Being::Being(const int id, const Type type, const uint16_t subtype, mSpecialParticle(nullptr), mX(0), mY(0), - mOffsetX(0), + mSortOffsetY(0), mOffsetY(0), mOldHeight(0), mDamageTaken(0), @@ -1527,8 +1527,9 @@ void Being::logic() if (!offset) offset = yOffset; - const int yOffset2 = getYOffset() - (mOldHeight * 16) - - (mOffsetY * 16) * (32 - abs(offset)) / 32; + mSortOffsetY = (mOldHeight * 16) + (mOffsetY * 16) + * (32 - abs(offset)) / 32; + const int yOffset2 = yOffset - mSortOffsetY; // Update pixel coordinates setPosition(static_cast<float>(mX * 32 + 16 + xOffset), diff --git a/src/being/being.h b/src/being/being.h index 8ac288137..f6e2d3f49 100644 --- a/src/being/being.h +++ b/src/being/being.h @@ -897,6 +897,9 @@ class Being : public ActorSprite, public ConfigListener */ void setPath(const Path &path); + int getSortPixelY() const A_WARN_UNUSED + { return static_cast<int>(mPos.y) - mYDiff - mSortOffsetY; } + protected: /** * Updates name's location. @@ -1001,10 +1004,10 @@ class Being : public ActorSprite, public ConfigListener Being *mOwner; Particle *mSpecialParticle; - int mX; // position in tiles - int mY; // position in tiles - int mOffsetX; // offset in pixels - int mOffsetY; // offset in pixels + 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 uint8_t mOldHeight; int mDamageTaken; |