summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-12-02 19:05:34 +0300
committerAndrei Karas <akaras@inbox.ru>2014-12-02 19:05:34 +0300
commitf924674239571a40b0806136a49b4da3edcadbbf (patch)
tree5a5cd954acf5832e6cf01c59b8960d6b06657fa3 /src/gui
parent1003a7a74f72f17f59f4a74eacf95a1744a64506 (diff)
downloadplus-f924674239571a40b0806136a49b4da3edcadbbf.tar.gz
plus-f924674239571a40b0806136a49b4da3edcadbbf.tar.bz2
plus-f924674239571a40b0806136a49b4da3edcadbbf.tar.xz
plus-f924674239571a40b0806136a49b4da3edcadbbf.zip
Move weight notification from playerhander.
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/dialogsmanager.cpp56
-rw-r--r--src/gui/dialogsmanager.h8
-rw-r--r--src/gui/windows/okdialog.cpp2
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,