diff --git a/apps/openmw/mwgui/hud.cpp b/apps/openmw/mwgui/hud.cpp index fbd4dff33b..53cfd89f5b 100644 --- a/apps/openmw/mwgui/hud.cpp +++ b/apps/openmw/mwgui/hud.cpp @@ -19,6 +19,7 @@ #include "../mwworld/class.hpp" #include "../mwworld/esmstore.hpp" +#include "../mwworld/worldmodel.hpp" #include "../mwmechanics/actorutil.hpp" #include "../mwmechanics/npcstats.hpp" @@ -34,36 +35,7 @@ namespace MWGui HUD::HUD(CustomMarkerCollection& customMarkers, DragAndDrop* dragAndDrop, MWRender::LocalMap* localMapRender) : WindowBase("openmw_hud.layout") , LocalMapBase(customMarkers, localMapRender, Settings::map().mLocalMapHudFogOfWar) - , mHealth(nullptr) - , mMagicka(nullptr) - , mStamina(nullptr) - , mDrowning(nullptr) - , mWeapImage(nullptr) - , mSpellImage(nullptr) - , mWeapStatus(nullptr) - , mSpellStatus(nullptr) - , mEffectBox(nullptr) - , mMinimap(nullptr) - , mCrosshair(nullptr) - , mCellNameBox(nullptr) - , mDrowningBar(nullptr) - , mDrowningFlash(nullptr) - , mHealthManaStaminaBaseLeft(0) - , mWeapBoxBaseLeft(0) - , mSpellBoxBaseLeft(0) - , mMinimapBoxBaseRight(0) - , mEffectBoxBaseRight(0) , mDragAndDrop(dragAndDrop) - , mCellNameTimer(0.0f) - , mWeaponSpellTimer(0.f) - , mMapVisible(true) - , mWeaponVisible(true) - , mSpellVisible(true) - , mWorldMouseOver(false) - , mEnemyActorId(-1) - , mEnemyHealthTimer(-1) - , mIsDrowning(false) - , mDrowningFlashTheta(0.f) { // Energy bars getWidget(mHealthFrame, "HealthFrame"); @@ -338,7 +310,7 @@ namespace MWGui mSpellIcons->updateWidgets(mEffectBox, true); - if (mEnemyActorId != -1 && mEnemyHealth->getVisible()) + if (mEnemyActor.isSet() && mEnemyHealth->getVisible()) { updateEnemyHealthBar(); } @@ -579,7 +551,7 @@ namespace MWGui void HUD::updateEnemyHealthBar() { - MWWorld::Ptr enemy = MWBase::Environment::get().getWorld()->searchPtrViaActorId(mEnemyActorId); + MWWorld::Ptr enemy = MWBase::Environment::get().getWorldModel()->getPtr(mEnemyActor); if (enemy.isEmpty()) return; MWMechanics::CreatureStats& stats = enemy.getClass().getCreatureStats(enemy); @@ -599,7 +571,7 @@ namespace MWGui void HUD::setEnemy(const MWWorld::Ptr& enemy) { - mEnemyActorId = enemy.getClass().getCreatureStats(enemy).getActorId(); + mEnemyActor = enemy.getCellRef().getRefNum(); mEnemyHealthTimer = MWBase::Environment::get() .getESMStore() ->get() @@ -613,12 +585,12 @@ namespace MWGui void HUD::clear() { - mEnemyActorId = -1; + mEnemyActor = {}; mEnemyHealthTimer = -1; mWeaponSpellTimer = 0.f; - mWeaponName = std::string(); - mSpellName = std::string(); + mWeaponName.clear(); + mSpellName.clear(); mWeaponSpellBox->setVisible(false); mWeapStatus->setProgressRange(100); diff --git a/apps/openmw/mwgui/hud.hpp b/apps/openmw/mwgui/hud.hpp index 9e9fa4e597..ef71551965 100644 --- a/apps/openmw/mwgui/hud.hpp +++ b/apps/openmw/mwgui/hud.hpp @@ -64,47 +64,42 @@ namespace MWGui void dropDraggedItem(float mouseX, float mouseY); private: - MyGUI::ProgressBar *mHealth, *mMagicka, *mStamina, *mEnemyHealth, *mDrowning; - MyGUI::Widget* mHealthFrame; - MyGUI::Widget *mWeapBox, *mSpellBox, *mSneakBox; - ItemWidget* mWeapImage; - SpellWidget* mSpellImage; - MyGUI::ProgressBar *mWeapStatus, *mSpellStatus; - MyGUI::Widget *mEffectBox, *mMinimapBox; - MyGUI::Button* mMinimapButton; - MyGUI::ScrollView* mMinimap; - MyGUI::ImageBox* mCrosshair; - MyGUI::TextBox* mCellNameBox; - MyGUI::TextBox* mWeaponSpellBox; - MyGUI::Widget *mDrowningBar, *mDrowningFrame, *mDrowningFlash; + MyGUI::ProgressBar *mHealth = nullptr, *mMagicka = nullptr, *mStamina = nullptr, *mEnemyHealth = nullptr, + *mDrowning = nullptr; + MyGUI::Widget* mHealthFrame = nullptr; + MyGUI::Widget *mWeapBox = nullptr, *mSpellBox = nullptr, *mSneakBox = nullptr; + ItemWidget* mWeapImage = nullptr; + SpellWidget* mSpellImage = nullptr; + MyGUI::ProgressBar *mWeapStatus = nullptr, *mSpellStatus = nullptr; + MyGUI::Widget *mEffectBox = nullptr, *mMinimapBox = nullptr; + MyGUI::Button* mMinimapButton = nullptr; + MyGUI::ScrollView* mMinimap = nullptr; + MyGUI::ImageBox* mCrosshair = nullptr; + MyGUI::TextBox* mCellNameBox = nullptr; + MyGUI::TextBox* mWeaponSpellBox = nullptr; + MyGUI::Widget *mDrowningBar = nullptr, *mDrowningFrame = nullptr, *mDrowningFlash = nullptr; + DragAndDrop* mDragAndDrop; + std::string mCellName; + std::string mWeaponName; + std::string mSpellName; + std::unique_ptr mSpellIcons; + ESM::RefNum mEnemyActor; // bottom left elements int mHealthManaStaminaBaseLeft, mWeapBoxBaseLeft, mSpellBoxBaseLeft, mSneakBoxBaseLeft; // bottom right elements int mMinimapBoxBaseRight, mEffectBoxBaseRight; - DragAndDrop* mDragAndDrop; + float mCellNameTimer = 0.f; + float mWeaponSpellTimer = 0.f; + float mEnemyHealthTimer = -1; + float mDrowningFlashTheta = 0.f; - std::string mCellName; - float mCellNameTimer; - - std::string mWeaponName; - std::string mSpellName; - float mWeaponSpellTimer; - - bool mMapVisible; - bool mWeaponVisible; - bool mSpellVisible; - - bool mWorldMouseOver; - - std::unique_ptr mSpellIcons; - - int mEnemyActorId; - float mEnemyHealthTimer; - - bool mIsDrowning; - float mDrowningFlashTheta; + bool mMapVisible = true; + bool mWeaponVisible = true; + bool mSpellVisible = true; + bool mWorldMouseOver = false; + bool mIsDrowning = false; void onWorldClicked(MyGUI::Widget* sender); void onWorldMouseOver(MyGUI::Widget* sender, int x, int y);