diff options
-rw-r--r-- | src/being/being.cpp | 34 | ||||
-rw-r--r-- | src/being/being.h | 1 | ||||
-rw-r--r-- | src/defaults.cpp | 1 |
3 files changed, 33 insertions, 3 deletions
diff --git a/src/being/being.cpp b/src/being/being.cpp index 70dcee8a1..987971a78 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -134,6 +134,7 @@ Being::Being(const BeingId id, mInfo(BeingInfo::unknown), mEmotionSprite(nullptr), mAnimationEffect(nullptr), + mGmBadge(nullptr), mGuildBadge(nullptr), mPartyBadge(nullptr), mTeamBadge(nullptr), @@ -293,6 +294,7 @@ Being::~Being() delete2(mText); delete2(mEmotionSprite); delete2(mAnimationEffect); + delete2(mGmBadge); delete2(mGuildBadge); delete2(mPartyBadge); delete2(mTeamBadge); @@ -1386,6 +1388,8 @@ void Being::setAction(const BeingActionT &action, const int attackId) mEmotionSprite->play(currentAction); if (mAnimationEffect) mAnimationEffect->play(currentAction); + if (mGmBadge) + mGmBadge->play(currentAction); if (mGuildBadge) mGuildBadge->play(currentAction); if (mPartyBadge) @@ -1455,6 +1459,8 @@ void Being::setDirection(const uint8_t direction) mEmotionSprite->setSpriteDirection(dir); if (mAnimationEffect) mAnimationEffect->setSpriteDirection(dir); + if (mGmBadge) + mGmBadge->setSpriteDirection(dir); if (mGuildBadge) mGuildBadge->setSpriteDirection(dir); if (mPartyBadge) @@ -1565,6 +1571,8 @@ void Being::logic() if (mAnimationEffect->isTerminated()) delete2(mAnimationEffect) } + if (mGmBadge) + mGmBadge->update(time); if (mGuildBadge) mGuildBadge->update(time); if (mPartyBadge) @@ -1905,6 +1913,11 @@ void Being::drawEmotion(Graphics *const graphics, mTeamBadge->draw(graphics, x, y); x += 16; } + if (mGmBadge) + { + mGmBadge->draw(graphics, x, y); + x += 16; + } if (mGuildBadge) { mGuildBadge->draw(graphics, x, y); @@ -2566,9 +2579,22 @@ void Being::setGender(const GenderT gender) void Being::setGM(const bool gm) { - mIsGM = gm; - - updateColors(); + if (mIsGM != gm) + { + delete2(mGmBadge); + mIsGM = gm; + if (mIsGM && mShowBadges) + { + const std::string gmBadge = paths.getStringValue("gmbadge"); + if (!gmBadge.empty()) + { + mGmBadge = AnimatedSprite::load( + paths.getStringValue("badges") + gmBadge); + } + } + updateColors(); + updateBadgesCount(); + } } void Being::talkTo() const @@ -3798,6 +3824,8 @@ void Being::updateBadgesCount() mBadgesCount = 0; if (mTeamBadge) mBadgesCount ++; + if (mGmBadge) + mBadgesCount ++; if (mGuildBadge) mBadgesCount ++; if (mPartyBadge) diff --git a/src/being/being.h b/src/being/being.h index 1f01001c3..cd56f5626 100644 --- a/src/being/being.h +++ b/src/being/being.h @@ -961,6 +961,7 @@ class Being notfinal : public ActorSprite, BeingInfo *mInfo; AnimatedSprite *mEmotionSprite; AnimatedSprite *mAnimationEffect; + AnimatedSprite *mGmBadge; AnimatedSprite *mGuildBadge; AnimatedSprite *mPartyBadge; AnimatedSprite *mTeamBadge; diff --git a/src/defaults.cpp b/src/defaults.cpp index a7b2c14b7..2d1a4f77b 100644 --- a/src/defaults.cpp +++ b/src/defaults.cpp @@ -603,6 +603,7 @@ DefaultsData* getPathsDefaults() AddDEF("team1badge", "team1.xml"); AddDEF("team2badge", "team2.xml"); AddDEF("team3badge", "team3.xml"); + AddDEF("gmbadge", "gm.xml"); return configData; } |