summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorChuck Miller <shadowmil@gmail.com>2010-02-21 21:08:49 -0500
committerChuck Miller <shadowmil@gmail.com>2010-02-21 22:43:30 -0500
commitcf90688d139354eeba26d724495869ff9a6842ec (patch)
tree8fe8ea7c4a71d4bb8d08f74d28e863c03bbcf681 /src/gui
parentc8b0d1e56f27c3141895d28b2fc768afffe7bb2d (diff)
downloadmana-client-cf90688d139354eeba26d724495869ff9a6842ec.tar.gz
mana-client-cf90688d139354eeba26d724495869ff9a6842ec.tar.bz2
mana-client-cf90688d139354eeba26d724495869ff9a6842ec.tar.xz
mana-client-cf90688d139354eeba26d724495869ff9a6842ec.zip
Handle packet 0x0195, and shows player's party name in a popup
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/beingpopup.cpp114
-rw-r--r--src/gui/beingpopup.h66
-rw-r--r--src/gui/popupmenu.h6
-rw-r--r--src/gui/viewport.cpp9
-rw-r--r--src/gui/viewport.h2
5 files changed, 194 insertions, 3 deletions
diff --git a/src/gui/beingpopup.cpp b/src/gui/beingpopup.cpp
new file mode 100644
index 00000000..89933067
--- /dev/null
+++ b/src/gui/beingpopup.cpp
@@ -0,0 +1,114 @@
+/*
+ * The Mana Client
+ * Copyright (C) 2008 The Legend of Mazzeroth Development Team
+ * Copyright (C) 2008-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ *
+ * This file is part of The Mana Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "gui/beingpopup.h"
+
+#include "graphics.h"
+#include "units.h"
+
+#include "being.h"
+
+#include "gui/gui.h"
+#include "gui/palette.h"
+
+#include "gui/widgets/textbox.h"
+
+#include "utils/gettext.h"
+#include "utils/stringutils.h"
+
+#include <guichan/font.hpp>
+
+
+BeingPopup::BeingPopup():
+ Popup("BeingPopup")
+{
+ // Item Name
+ mBeingName = new TextBox();
+ mBeingName->setFont(boldFont);
+ mBeingName->setPosition(getPadding(), getPadding());
+
+ const int fontHeight = getFont()->getHeight();
+
+ // Item Description
+ mBeingParty = new TextBox();
+ mBeingParty->setPosition(getPadding(), fontHeight);
+
+ add(mBeingName);
+ add(mBeingParty);
+
+ loadPopupConfiguration();
+}
+
+BeingPopup::~BeingPopup()
+{
+}
+
+void BeingPopup::setBeing(int x, int y, Being *b)
+{
+ if (!b)
+ {
+ setVisible(false);
+ return;
+ }
+
+ if (!(b->getPartyName().empty()))
+ {
+ mBeingName->setTextWrapped(b->getName(), 196);
+ mBeingParty->setTextWrapped(strprintf(_("Party: %s"),b->getPartyName().c_str()), 196);
+
+ int minWidth = mBeingName->getMinWidth();
+
+ if (mBeingParty->getMinWidth() > minWidth)
+ minWidth = mBeingParty->getMinWidth();
+
+ const int height = getFont()->getHeight();
+
+ setContentSize(minWidth, (height * 2) + 10);
+
+ view(x, y);
+ return;
+ }
+
+ setVisible(false);
+}
+
+gcn::Color BeingPopup::getColor()
+{
+ return guiPalette->getColor(Palette::GENERIC);
+}
+
+void BeingPopup::view(int x, int y)
+{
+ const int distance = 20;
+
+ int posX = std::max(0, x - getWidth() / 2);
+ int posY = y + distance;
+
+ if (posX > graphics->getWidth() - getWidth())
+ posX = graphics->getWidth() - getWidth();
+ if (posY > graphics->getHeight() - getHeight())
+ posY = y - getHeight() - distance;
+
+ setPosition(posX, posY);
+ setVisible(true);
+ requestMoveToTop();
+}
diff --git a/src/gui/beingpopup.h b/src/gui/beingpopup.h
new file mode 100644
index 00000000..964235bb
--- /dev/null
+++ b/src/gui/beingpopup.h
@@ -0,0 +1,66 @@
+/*
+ * The Mana Client
+ * Copyright (C) 2008 The Legend of Mazzeroth Development Team
+ * Copyright (C) 2008-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ *
+ * This file is part of The Mana Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef BEINGPOPUP_H
+#define BEINGPOPUP_H
+
+#include "gui/widgets/popup.h"
+
+#include <guichan/mouselistener.hpp>
+
+class TextBox;
+class Being;
+
+/**
+ * A popup that displays information about an item.
+ */
+class BeingPopup : public Popup
+{
+ public:
+ /**
+ * Constructor. Initializes the item popup.
+ */
+ BeingPopup();
+
+ /**
+ * Destructor. Cleans up the item popup on deletion.
+ */
+ ~BeingPopup();
+
+ /**
+ * Sets the info to be displayed given a particular item.
+ */
+ void setBeing(int x, int y, Being *b);
+
+ /**
+ * Sets the location to display the item popup.
+ */
+ void view(int x, int y);
+
+ private:
+ TextBox *mBeingName;
+ TextBox *mBeingParty;
+
+ static gcn::Color getColor();
+};
+
+#endif // BEINGPOPUP_H
diff --git a/src/gui/popupmenu.h b/src/gui/popupmenu.h
index 3299694f..57cd5ee1 100644
--- a/src/gui/popupmenu.h
+++ b/src/gui/popupmenu.h
@@ -59,6 +59,12 @@ class PopupMenu : public Popup, public LinkHandler
void showPopup(int x, int y, Item *item, bool isInventory);
/**
+ * Just shows general information about a being
+ */
+ void showPopupBeing(int x, int y, Being *being);
+
+
+ /**
* Handles link action.
*/
void handleLink(const std::string &link);
diff --git a/src/gui/viewport.cpp b/src/gui/viewport.cpp
index b51d4878..543082e7 100644
--- a/src/gui/viewport.cpp
+++ b/src/gui/viewport.cpp
@@ -36,6 +36,7 @@
#include "gui/gui.h"
#include "gui/ministatus.h"
#include "gui/popupmenu.h"
+#include "gui/beingpopup.h"
#include "net/net.h"
@@ -73,6 +74,7 @@ Viewport::Viewport():
config.addListener("visiblenames", this);
mPopupMenu = new PopupMenu;
+ mBeingPopup = new BeingPopup;
}
Viewport::~Viewport()
@@ -472,10 +474,11 @@ void Viewport::mouseMoved(gcn::MouseEvent &event)
if (!mMap || !player_node)
return;
- const int tilex = (event.getX() + (int) mPixelViewX) / 32;
- const int tiley = (event.getY() + (int) mPixelViewY) / 32;
+ const int x = (event.getX() + (int) mPixelViewX);
+ const int y = (event.getY() + (int) mPixelViewY);
- mSelectedBeing = beingManager->findBeing(tilex, tiley);
+ mSelectedBeing = beingManager->findBeingByPixel(x, y);
+ mBeingPopup->setBeing(getMouseX(), getMouseY(), mSelectedBeing);
}
void Viewport::toggleDebugPath()
diff --git a/src/gui/viewport.h b/src/gui/viewport.h
index a52d7806..9a64ff78 100644
--- a/src/gui/viewport.h
+++ b/src/gui/viewport.h
@@ -36,6 +36,7 @@ class ImageSet;
class Item;
class Map;
class PopupMenu;
+class BeingPopup;
/** Delay between two mouse calls when dragging mouse and move the player */
const int walkingMouseDelay = 500;
@@ -187,6 +188,7 @@ class Viewport : public WindowContainer, public gcn::MouseListener,
PopupMenu *mPopupMenu; /**< Popup menu. */
Being *mSelectedBeing; /**< Current selected being. */
+ BeingPopup *mBeingPopup;
};
extern Viewport *viewport; /**< The viewport */