From 1c49a83df05dbf6837687e1bfc5b142a680144ed Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 5 Jan 2011 22:56:42 +0200 Subject: Add hp bar to local player. --- src/being.cpp | 46 ++++++++++++++++++++++++++-------------------- src/being.h | 3 ++- src/defaults.cpp | 1 + src/gui/setup_colors.cpp | 2 ++ src/gui/setup_other.cpp | 17 ++++++++++++++++- src/gui/setup_other.h | 3 +++ src/gui/userpalette.cpp | 5 +++++ src/gui/userpalette.h | 2 ++ 8 files changed, 57 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/being.cpp b/src/being.cpp index 3a9285750..2372cfe1b 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -169,6 +169,7 @@ bool Being::mLowTraffic = true; bool Being::mDrawHotKeys = true; bool Being::mShowBattleEvents = false; bool Being::mShowMobHP = false; +bool Being::mShowOwnHP = false; std::list beingInfoCache; @@ -1551,6 +1552,7 @@ void Being::reReadConfig() mDrawHotKeys = config.getBoolValue("drawHotKeys"); mShowBattleEvents = config.getBoolValue("showBattleEvents"); mShowMobHP = config.getBoolValue("showMobHP"); + mShowOwnHP = config.getBoolValue("showOwnHP"); mUpdateConfigTime = cur_time; } @@ -1745,42 +1747,48 @@ bool Being::drawSpriteAt(Graphics *graphics, int x, int y) const 2 * attackRange + 32, 2 * attackRange + 32)); } - if (mShowMobHP && player_node && player_node->getTarget() == this + if (mShowMobHP && mInfo && player_node && player_node->getTarget() == this && getType() == MONSTER) { // show hp bar here - drawHpBar(graphics, x - 50 + 16, y + 32 - 6, 2 * 50, 4); + int maxHP = mMaxHP; + if (!maxHP) + maxHP = mInfo->getMaxHP(); + + drawHpBar(graphics, maxHP, mHP, mDamageTaken, + UserPalette::MONSTER_HP, UserPalette::MONSTER_HP2, + x - 50 + 16, y + 32 - 6, 2 * 50, 4); + } + if (mShowOwnHP && player_node == this) + { + drawHpBar(graphics, PlayerInfo::getAttribute(MAX_HP), + PlayerInfo::getAttribute(HP), 0, + UserPalette::PLAYER_HP, UserPalette::PLAYER_HP2, + x - 50 + 16, y + 32 - 6, 2 * 50, 4); } return res; } -void Being::drawHpBar(Graphics *graphics, int x, int y, +void Being::drawHpBar(Graphics *graphics, int maxHP, int hp, int damage, + int color1, int color2, int x, int y, int width, int height) const { - if (!mInfo) - return; - - int maxHP = mMaxHP; - - if (!maxHP) - maxHP = mInfo->getMaxHP(); - if (maxHP <= 0) return; - if (!mHP && maxHP < mHP) + if (!hp && maxHP < hp) return; float p; - if (mHP) + if (hp) { - p = static_cast(maxHP) / static_cast(mHP); + p = static_cast(maxHP) / static_cast(hp); } - else if (maxHP != mDamageTaken) + else if (maxHP != damage) { p = static_cast(maxHP) - / static_cast(maxHP - mDamageTaken); + / static_cast(maxHP - damage); } else { @@ -1792,8 +1800,7 @@ void Being::drawHpBar(Graphics *graphics, int x, int y, int dx = width / p; - graphics->setColor(userPalette->getColorWithAlpha( - UserPalette::MONSTER_HP)); + graphics->setColor(userPalette->getColorWithAlpha(color1)); graphics->fillRectangle(gcn::Rectangle( x, y, dx, height)); @@ -1801,8 +1808,7 @@ void Being::drawHpBar(Graphics *graphics, int x, int y, if (width - dx <= 0) return; - graphics->setColor(userPalette->getColorWithAlpha( - UserPalette::MONSTER_HP2)); + graphics->setColor(userPalette->getColorWithAlpha(color2)); graphics->fillRectangle(gcn::Rectangle( x + dx, y, width - dx, height)); diff --git a/src/being.h b/src/being.h index 09466f5af..f9731366a 100644 --- a/src/being.h +++ b/src/being.h @@ -520,6 +520,7 @@ class Being : public ActorSprite, public ConfigListener int posX, int posY) const; void drawHpBar(Graphics *graphics, int x, int y, + int maxHP, int hp, int damage, int color1, int color2, int width, int height) const; static void load(); @@ -751,7 +752,7 @@ class Being : public ActorSprite, public ConfigListener static bool mDrawHotKeys; static bool mShowBattleEvents; static bool mShowMobHP; -// std::string mDisplayName; + static bool mShowOwnHP; unsigned int mMoveTime; unsigned int mAttackTime; diff --git a/src/defaults.cpp b/src/defaults.cpp index 916c20398..190c1816c 100644 --- a/src/defaults.cpp +++ b/src/defaults.cpp @@ -189,6 +189,7 @@ DefaultsData* getConfigDefaults() AddDEF(configData, "enableBattleTab", false); AddDEF(configData, "showBattleEvents", false); AddDEF(configData, "showMobHP", true); + AddDEF(configData, "showOwnHP", true); return configData; } diff --git a/src/gui/setup_colors.cpp b/src/gui/setup_colors.cpp index 76510a283..68d517cae 100644 --- a/src/gui/setup_colors.cpp +++ b/src/gui/setup_colors.cpp @@ -302,6 +302,8 @@ void Setup_Colors::valueChanged(const gcn::SelectionEvent &event _UNUSED_) case UserPalette::ROAD_POINT: case UserPalette::MONSTER_HP: case UserPalette::MONSTER_HP2: + case UserPalette::PLAYER_HP: + case UserPalette::PLAYER_HP2: mGradDelayLabel->setCaption(_("Alpha:")); mGradDelayText->setRange(0, 255); mGradDelaySlider->setScale(0, 255); diff --git a/src/gui/setup_other.cpp b/src/gui/setup_other.cpp index 54ec1c65d..5a2b77a81 100644 --- a/src/gui/setup_other.cpp +++ b/src/gui/setup_other.cpp @@ -63,6 +63,7 @@ #define ACTION_WARP_PARTICLE "warp particle" #define ACTION_AUTO_SHOP "auto shop" #define ACTION_SHOW_MOB_HP "show mob hp" +#define ACTION_SHOW_OWN_HP "show own hp" Setup_Other::Setup_Other(): mShowMonstersTakedDamage(config.getBoolValue("showMonstersTakedDamage")), @@ -87,7 +88,8 @@ Setup_Other::Setup_Other(): mQuickStats(config.getBoolValue("quickStats")), mWarpParticle(config.getBoolValue("warpParticle")), mAutoShop(config.getBoolValue("autoShop")), - mShowMobHP(config.getBoolValue("showMobHP")) + mShowMobHP(config.getBoolValue("showMobHP")), + mShowOwnHP(config.getBoolValue("showOwnHP")) { setName(_("Misc")); @@ -178,6 +180,10 @@ Setup_Other::Setup_Other(): mShowMobHP, this, ACTION_SHOW_MOB_HP); + mShowOwnHPCheckBox = new CheckBox(_("Show own hp bar"), + mShowOwnHP, + this, ACTION_SHOW_OWN_HP); + // Do the layout LayoutHelper h(this); ContainerPlacer place = h.getPlacer(0, 0); @@ -192,6 +198,7 @@ Setup_Other::Setup_Other(): place(12, 4, mWarpParticleCheckBox, 10); place(12, 5, mAutoShopCheckBox, 10); place(12, 6, mShowMobHPCheckBox, 10); + place(12, 7, mShowOwnHPCheckBox, 10); place(0, 3, mFloorItemsHighlightCheckBox, 12); place(0, 4, mHighlightAttackRangeCheckBox, 12); place(0, 5, mHighlightMonsterAttackRangeCheckBox, 12); @@ -320,6 +327,10 @@ void Setup_Other::action(const gcn::ActionEvent &event) { mShowMobHP = mShowMobHPCheckBox->isSelected(); } + else if (event.getId() == ACTION_SHOW_OWN_HP) + { + mShowOwnHP = mShowOwnHPCheckBox->isSelected(); + } } void Setup_Other::cancel() @@ -389,6 +400,9 @@ void Setup_Other::cancel() mShowMobHP = config.getBoolValue("showMobHP"); mShowMobHPCheckBox->setSelected(mShowMobHP); + + mShowOwnHP = config.getBoolValue("showOwnHP"); + mShowOwnHPCheckBox->setSelected(mShowOwnHP); } void Setup_Other::apply() @@ -416,6 +430,7 @@ void Setup_Other::apply() config.setValue("warpParticle", mWarpParticle); config.setValue("autoShop", mAutoShop); config.setValue("showMobHP", mShowMobHP); + config.setValue("showOwnHP", mShowOwnHP); logger->setDebugLog(mDebugLog); } diff --git a/src/gui/setup_other.h b/src/gui/setup_other.h index b20401be5..6a092e93f 100644 --- a/src/gui/setup_other.h +++ b/src/gui/setup_other.h @@ -119,6 +119,9 @@ class Setup_Other : public SetupTab, public gcn::ActionListener gcn::CheckBox *mShowMobHPCheckBox; bool mShowMobHP; + gcn::CheckBox *mShowOwnHPCheckBox; + bool mShowOwnHP; + EditDialog *mEditDialog; }; diff --git a/src/gui/userpalette.cpp b/src/gui/userpalette.cpp index 03e5c1eed..46f1b72b3 100644 --- a/src/gui/userpalette.cpp +++ b/src/gui/userpalette.cpp @@ -52,6 +52,8 @@ const std::string ColorTypeNames[] = "ColorParticle", "ColorPickupInfo", "ColorExpInfo", + "ColorPlayerHp", + "ColorPlayerHp2", "ColorHitPlayerMonster", "ColorHitMonsterPlayer", "ColorHitPlayerPlayer", @@ -124,6 +126,9 @@ UserPalette::UserPalette(): addColor(PARTICLE, 0xffffff, STATIC, _("Particle Effects")); addColor(PICKUP_INFO, 0x28dc28, STATIC, _("Pickup Notification")); addColor(EXP_INFO, 0xffff00, STATIC, _("Exp Notification")); + addColor(PLAYER_HP, 0x00ff00, STATIC, _("Player HP bar"), 50); + addColor(PLAYER_HP2, 0xff0000, STATIC, + _("Player HP bar (second color)"), 50); addColor(HIT_PLAYER_MONSTER, 0x0064ff, STATIC, _("Player Hits Monster")); addColor(HIT_MONSTER_PLAYER, 0xff3232, STATIC, _("Monster Hits Player")); addColor(HIT_PLAYER_PLAYER, 0xff5050, STATIC, diff --git a/src/gui/userpalette.h b/src/gui/userpalette.h index 057d47113..db2463e20 100644 --- a/src/gui/userpalette.h +++ b/src/gui/userpalette.h @@ -53,6 +53,8 @@ class UserPalette : public Palette, public gcn::ListModel PARTICLE, PICKUP_INFO, EXP_INFO, + PLAYER_HP, + PLAYER_HP2, HIT_PLAYER_MONSTER, HIT_MONSTER_PLAYER, HIT_PLAYER_PLAYER, -- cgit v1.2.3-60-g2f50