diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-12-02 19:05:34 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-12-02 19:05:34 +0300 |
commit | f924674239571a40b0806136a49b4da3edcadbbf (patch) | |
tree | 5a5cd954acf5832e6cf01c59b8960d6b06657fa3 /src/gui | |
parent | 1003a7a74f72f17f59f4a74eacf95a1744a64506 (diff) | |
download | manaplus-f924674239571a40b0806136a49b4da3edcadbbf.tar.gz manaplus-f924674239571a40b0806136a49b4da3edcadbbf.tar.bz2 manaplus-f924674239571a40b0806136a49b4da3edcadbbf.tar.xz manaplus-f924674239571a40b0806136a49b4da3edcadbbf.zip |
Move weight notification from playerhander.
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/dialogsmanager.cpp | 56 | ||||
-rw-r--r-- | src/gui/dialogsmanager.h | 8 | ||||
-rw-r--r-- | src/gui/windows/okdialog.cpp | 2 |
3 files changed, 62 insertions, 4 deletions
diff --git a/src/gui/dialogsmanager.cpp b/src/gui/dialogsmanager.cpp index 0ef8a1582..eb60a574a 100644 --- a/src/gui/dialogsmanager.cpp +++ b/src/gui/dialogsmanager.cpp @@ -25,6 +25,8 @@ #include "configuration.h" #include "settings.h" +#include "being/attributes.h" + #include "gui/dialogtype.h" #include "gui/widgets/selldialog.h" @@ -37,6 +39,7 @@ #include "gui/windows/updaterwindow.h" #include "listeners/playerpostdeathlistener.h" +#include "listeners/weightlistener.h" #include "net/inventoryhandler.h" @@ -50,15 +53,19 @@ #undef ERROR #endif -OkDialog *deathNotice; +OkDialog *deathNotice = nullptr; DialogsManager *dialogsManager = nullptr; +OkDialog *weightNotice = nullptr; +int weightNoticeTime = 0; namespace { PlayerPostDeathListener postDeathListener; + WeightListener weightListener; } // namespace DialogsManager::DialogsManager() : + AttributeListener(), PlayerDeathListener() { } @@ -124,3 +131,50 @@ void DialogsManager::playerDeath() false, true, nullptr, 260); deathNotice->addActionListener(&postDeathListener); } + +void DialogsManager::attributeChanged(const int id, + const int oldVal, + const int newVal) +{ + if (id == Attributes::TOTAL_WEIGHT) + { + if (!weightNotice && config.getBoolValue("weightMsg")) + { + const int max = PlayerInfo::getAttribute( + Attributes::MAX_WEIGHT) / 2; + const int total = oldVal; + if (newVal >= max && total < max) + { + weightNoticeTime = cur_time + 5; + // TRANSLATORS: message header + weightNotice = new OkDialog(_("Message"), + // TRANSLATORS: weight message + _("You are carrying more than " + "half your weight. You are " + "unable to regain health."), + // TRANSLATORS: ok dialog button + _("OK"), + DialogType::OK, + false, true, nullptr, 260); + weightNotice->addActionListener( + &weightListener); + } + else if (newVal < max && total >= max) + { + weightNoticeTime = cur_time + 5; + // TRANSLATORS: message header + weightNotice = new OkDialog(_("Message"), + // TRANSLATORS: weight message + _("You are carrying less than " + "half your weight. You " + "can regain health."), + // TRANSLATORS: ok dialog button + _("OK"), + DialogType::OK, + false, true, nullptr, 260); + weightNotice->addActionListener( + &weightListener); + } + } + } +} diff --git a/src/gui/dialogsmanager.h b/src/gui/dialogsmanager.h index b9625ae07..b45b3b12c 100644 --- a/src/gui/dialogsmanager.h +++ b/src/gui/dialogsmanager.h @@ -23,6 +23,7 @@ #ifndef GUI_DIALOGSMANAGER_H #define GUI_DIALOGSMANAGER_H +#include "listeners/attributelistener.h" #include "listeners/playerdeathlistener.h" #include <string> @@ -31,7 +32,8 @@ class Window; -class DialogsManager final : public PlayerDeathListener +class DialogsManager final : public AttributeListener, + public PlayerDeathListener { public: DialogsManager(); @@ -45,6 +47,10 @@ class DialogsManager final : public PlayerDeathListener const bool modal); void playerDeath() override final; + + void attributeChanged(const int id, + const int oldVal, + const int newVal) override final; }; extern DialogsManager *dialogsManager; diff --git a/src/gui/windows/okdialog.cpp b/src/gui/windows/okdialog.cpp index 37d0d018a..b58987c7c 100644 --- a/src/gui/windows/okdialog.cpp +++ b/src/gui/windows/okdialog.cpp @@ -34,8 +34,6 @@ #include "debug.h" -OkDialog *weightNotice = nullptr; - OkDialog::OkDialog(const std::string &restrict title, const std::string &restrict msg, const std::string &restrict button, |