diff options
-rw-r--r-- | src/being/being.cpp | 10 | ||||
-rw-r--r-- | src/being/compoundsprite.cpp | 30 | ||||
-rw-r--r-- | src/being/compoundsprite.h | 4 |
3 files changed, 38 insertions, 6 deletions
diff --git a/src/being/being.cpp b/src/being/being.cpp index c3e63d41c..f31e45447 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -3050,7 +3050,7 @@ void Being::drawOtherSpriteAt(Graphics *restrict const graphics, const int x, const int y) const restrict2 { - CompoundSprite::draw(graphics, x, y); + CompoundSprite::drawSimple(graphics, x, y); } void Being::drawMonsterSpriteAt(Graphics *restrict const graphics, @@ -3063,7 +3063,7 @@ void Being::drawMonsterSpriteAt(Graphics *restrict const graphics, { if (!userPalette) { - CompoundSprite::draw(graphics, x, y); + CompoundSprite::drawSimple(graphics, x, y); return; } @@ -3081,7 +3081,7 @@ void Being::drawMonsterSpriteAt(Graphics *restrict const graphics, 2 * attackRange + mapTileSize, 2 * attackRange + mapTileSize)); } - CompoundSprite::draw(graphics, x, y); + CompoundSprite::drawSimple(graphics, x, y); if (mShowMobHP && mInfo && @@ -3118,7 +3118,7 @@ void Being::drawPortalSpriteAt(Graphics *restrict const graphics, { if (!userPalette) { - CompoundSprite::draw(graphics, x, y); + CompoundSprite::drawSimple(graphics, x, y); return; } @@ -3135,7 +3135,7 @@ void Being::drawPortalSpriteAt(Graphics *restrict const graphics, } } - CompoundSprite::draw(graphics, x, y); + CompoundSprite::drawSimple(graphics, x, y); } void Being::drawHpBar(Graphics *restrict const graphics, diff --git a/src/being/compoundsprite.cpp b/src/being/compoundsprite.cpp index f19b479a6..2af54f247 100644 --- a/src/being/compoundsprite.cpp +++ b/src/being/compoundsprite.cpp @@ -137,7 +137,8 @@ bool CompoundSprite::update(const int time) } void CompoundSprite::draw(Graphics *const graphics, - const int posX, const int posY) const + const int posX, + const int posY) const { FUNC_BLOCK("CompoundSprite::draw", 1) if (mNeedsRedraw) @@ -162,6 +163,33 @@ void CompoundSprite::draw(Graphics *const graphics, } } +void CompoundSprite::drawSimple(Graphics *const graphics, + const int posX, + const int posY) const +{ + FUNC_BLOCK("CompoundSprite::draw", 1) + if (mNeedsRedraw) + updateImages(); + + if (mSprites.empty()) // Nothing to draw + return; + + if (mAlpha == 1.0F && mImage) + { + graphics->drawImage(mImage, posX + mOffsetX, posY + mOffsetY); + } + else if (mAlpha && mAlphaImage) + { + mAlphaImage->setAlpha(mAlpha); + graphics->drawImage(mAlphaImage, + posX + mOffsetX, posY + mOffsetY); + } + else + { + CompoundSprite::drawSprites(graphics, posX, posY); + } +} + void CompoundSprite::drawSprites(Graphics *const graphics, const int posX, const int posY) const diff --git a/src/being/compoundsprite.h b/src/being/compoundsprite.h index d50f20b2d..a1a0e9742 100644 --- a/src/being/compoundsprite.h +++ b/src/being/compoundsprite.h @@ -54,6 +54,10 @@ class CompoundSprite notfinal : public Sprite const int posX, const int posY) const override A_NONNULL(2); + void drawSimple(Graphics *const graphics, + const int posX, + const int posY) const A_NONNULL(2); + /** * Gets the width in pixels of the first sprite in the list. */ |