Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/playerview.cc')
-rw-r--r--src/client/playerview.cc79
1 files changed, 63 insertions, 16 deletions
diff --git a/src/client/playerview.cc b/src/client/playerview.cc
index 54d444d..e4a889a 100644
--- a/src/client/playerview.cc
+++ b/src/client/playerview.cc
@@ -4,6 +4,9 @@
the terms and conditions of the GNU General Public License version 2
*/
+#include <string>
+#include <sstream>
+
#include "audio/audio.h"
#include "client/playerview.h"
#include "ui/ui.h"
@@ -32,10 +35,11 @@ PlayerView::PlayerView(ui::Widget *parent) : ui::Widget(parent)
view_chat = new Chat(this);
view_map = new Map(this);
view_hud = new HUD(this);
- view_menu = new EntityMenu(this);
+ view_entitymenu = new EntityMenu(this);
+ view_buymenu = new BuyMenu(this);
view_hud->lower();
- view_menu->raise();
+ view_entitymenu->raise();
}
PlayerView::~PlayerView()
@@ -49,7 +53,7 @@ void PlayerView::clear()
view_chat->hide();
view_map->hide();
- view_menu->hide();
+ view_entitymenu->hide();
view_lastentity = 0;
}
@@ -67,8 +71,8 @@ void PlayerView::toggle_map()
if(chat()->visible() && !chat()->small_view())
chat()->hide();
- if (view_menu->visible())
- view_menu->hide();
+ if (view_entitymenu->visible())
+ view_entitymenu->hide();
}
map()->toggle();
@@ -85,8 +89,8 @@ void PlayerView::toggle_chat()
if(map()->visible())
map()->hide();
- if (view_menu->visible())
- view_menu->hide();
+ if (view_entitymenu->visible())
+ view_entitymenu->hide();
}
chat()->set_small_view(false);
chat()->toggle();
@@ -99,16 +103,47 @@ void PlayerView::toggle_chatbar()
chat()->toggle();
}
-void PlayerView::show_menu(const std::string & label)
+void PlayerView::show_menu(const std::string & args)
{
+ if (!args.size())
+ return;
+
if (!core::localplayer()->view())
return;
if (!core::localplayer()->view()->menus().size())
return;
- view_menu->generate(core::localplayer()->view(), label.c_str());
- view_menu->show();
+ std::stringstream argstr(args);
+ std::string label;
+ if (!(argstr >> label))
+ return;
+
+ if (label.compare("buy") == 0) {
+ // buy menu, single item
+ std::string itemtype;
+ std::string itemname;
+
+ if ((argstr >> itemtype) && (argstr >> itemname)) {
+ view_buymenu->set_item(itemtype, itemname);
+ view_buymenu->show();
+ view_entitymenu->hide();
+ } else {
+ con_print << "usage: view buy [string] [string] buy menu for item type and name" << std::endl;
+ }
+
+ } else if (label.compare("trade") == 0) {
+ // trade menu, multiple items
+
+ } else if (label.compare("hide") == 0) {
+ view_buymenu->hide();
+ view_entitymenu->hide();
+
+ } else {
+ view_entitymenu->generate(core::localplayer()->view(), label.c_str());
+ view_entitymenu->show();
+ view_buymenu->hide();
+ }
if (chat()->visible() && chat()->small_view())
chat()->raise();
@@ -121,6 +156,9 @@ void PlayerView::resize()
set_size(parent()->size());
+ // reposition buy menu
+ view_buymenu->event_resize();
+
// set hud geometry
view_hud->set_geometry(0,0, width(), height());
view_hud->event_resize();
@@ -142,6 +180,8 @@ void PlayerView::resize()
void PlayerView::draw()
{
+ const float smallmargin = ui::UI::elementsize.height();
+
if (core::localplayer()->view()) {
// hide hide when a view is set
@@ -164,12 +204,17 @@ void PlayerView::draw()
audio::play("ui/menu");
view_lastentity = core::localplayer()->view();
- } else if (!view_menu->visible() && !map()->visible() && (!chat()->visible() || chat()->small_view()) ) {
+ } else if (!view_entitymenu->visible() && !view_buymenu->visible() &&
+ !map()->visible() && (!chat()->visible() || chat()->small_view()) ) {
+
// show the menu if there's no other window open
menu()->show();
audio::play("ui/menu");
}
+ view_notify->set_size(width() - smallmargin * 3.0f - ui::UI::elementsize.width() * 1.5f, height() - smallmargin * 4.0f);
+ view_notify->set_location(smallmargin * 2.0f + ui::UI::elementsize.width() * 1.5f, smallmargin * 2.0f);
+
} else {
// entity without menus, plain view
view_lastentity = 0;
@@ -179,8 +224,13 @@ void PlayerView::draw()
}
} else {
- if (view_menu->visible()) {
- view_menu->hide();
+ view_notify->set_geometry(view_map->location(), view_map->size());
+
+ if (view_entitymenu->visible()) {
+ view_entitymenu->hide();
+ }
+ if (view_buymenu->visible()) {
+ view_buymenu->hide();
}
label_viewname->hide();
@@ -193,9 +243,6 @@ void PlayerView::draw()
label_zonename->set_text(core::localplayer()->zone()->name());
}
- //const float largemargin = ui::UI::elementsize.width() * 0.25;
- const float smallmargin = ui::UI::elementsize.height();
-
// reposition chat widget
if (view_chat->small_view()) {
view_chat->set_size(width() - smallmargin * 2, font()->height() * 2);