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.cc127
1 files changed, 114 insertions, 13 deletions
diff --git a/src/client/playerview.cc b/src/client/playerview.cc
index 703f392..f129a1e 100644
--- a/src/client/playerview.cc
+++ b/src/client/playerview.cc
@@ -4,6 +4,7 @@
the terms and conditions of the GNU General Public License version 2
*/
+#include "audio/audio.h"
#include "client/playerview.h"
#include "ui/ui.h"
@@ -14,20 +15,27 @@ PlayerView::PlayerView(ui::Widget *parent) : ui::Widget(parent)
set_label("playerview");
set_border(false);
set_background(false);
+
+ view_lastentity = 0;
label_zonename = new ui::Label(this);
label_zonename->set_alignment(ui::AlignCenter);
label_zonename->set_background(true);
+ label_zonename->set_font(ui::root()->font_large());
label_viewname = new ui::Label(this);
label_viewname->set_alignment(ui::AlignCenter);
label_viewname->set_background(true);
+ label_viewname->set_font(ui::root()->font_large());
view_notify = new Notifications(this);
view_chat = new Chat(this);
view_map = new Map(this);
view_hud = new HUD(this);
+ view_menu = new EntityMenu(this);
+
view_hud->lower();
+ view_menu->raise();
}
PlayerView::~PlayerView()
@@ -41,6 +49,9 @@ void PlayerView::clear()
view_chat->hide();
view_map->hide();
+ view_menu->hide();
+
+ view_lastentity = 0;
}
void PlayerView::event_text(const std::string & text)
@@ -49,6 +60,60 @@ void PlayerView::event_text(const std::string & text)
view_notify->event_text(text);
}
+void PlayerView::toggle_map()
+{
+
+ if (!map()->visible()) {
+ if(chat()->visible() && !chat()->small_view())
+ chat()->hide();
+
+ if (view_menu->visible())
+ view_menu->hide();
+ }
+
+ map()->toggle();
+ audio::play("ui/menu");
+
+ if (map()->visible() && chat()->visible() && chat()->small_view()) {
+ chat()->raise();
+ }
+}
+
+void PlayerView::toggle_chat()
+{
+ if (!chat()->visible()) {
+ if(map()->visible())
+ map()->hide();
+
+ if (view_menu->visible())
+ view_menu->hide();
+ }
+ chat()->set_small_view(false);
+ chat()->toggle();
+ audio::play("ui/menu");
+}
+
+void PlayerView::toggle_chatbar()
+{
+ chat()->set_small_view(true);
+ chat()->toggle();
+}
+
+void PlayerView::show_menu(const std::string & label)
+{
+ if (!core::localplayer()->view())
+ return;
+
+ if (!core::localplayer()->view()->menus().size())
+ return;
+
+ view_menu->generate(core::localplayer()->view(), label.c_str());
+ view_menu->show();
+
+ if (chat()->visible() && chat()->small_view())
+ chat()->raise();
+}
+
void PlayerView::resize()
{
//const float largemargin = ui::UI::elementsize.width() * 0.25;
@@ -68,15 +133,62 @@ void PlayerView::resize()
view_notify->set_geometry(view_map->location(), view_map->size());
// reposition labels
- label_viewname->set_size(ui::UI::elementsize.width(), ui::UI::elementsize.height());
+ label_viewname->set_size(ui::UI::elementsize.width() * 1.5f, ui::UI::elementsize.height());
label_viewname->set_location(smallmargin, smallmargin * 0.5f);
- label_zonename->set_size(ui::UI::elementsize.width(), ui::UI::elementsize.height());
+ label_zonename->set_size(ui::UI::elementsize.width() * 1.5f, ui::UI::elementsize.height());
label_zonename->set_location(width() - label_zonename->width() - smallmargin, height() - label_zonename->height() - smallmargin * 0.5f);
}
void PlayerView::draw()
{
+ if (core::localplayer()->view()) {
+
+ // docking view
+ if (core::localplayer()->view()->menus().size()) {
+
+ // entity with menus
+ label_viewname->show();
+ label_viewname->set_text(core::localplayer()->view()->name());
+
+ label_zonename->show();
+
+ if (view_lastentity != core::localplayer()->view()) {
+ // initialy show the menu
+ show_menu("main");
+ map()->hide();
+ chat()->hide();
+ audio::play("ui/menu");
+ } else if (!view_menu->visible() && !map()->visible() && (!chat()->visible() || chat()->small_view()) ) {
+ // show the menu if there's no other window open
+ menu()->show();
+ audio::play("ui/menu");
+ }
+
+ } else {
+ // entity without menus, plain view
+ this->hide();
+ return;
+ }
+
+ view_hud->hide();
+ view_lastentity = core::localplayer()->view();
+
+ } else {
+ if (view_menu->visible()) {
+ view_menu->hide();
+ }
+
+ label_viewname->hide();
+ label_zonename->set_visible(view_map->visible());
+ view_hud->show();
+ view_lastentity = 0;
+ }
+
+ if (label_zonename->visible()) {
+ label_zonename->set_text(core::localplayer()->zone()->name());
+ }
+
//const float largemargin = ui::UI::elementsize.width() * 0.25;
const float smallmargin = ui::UI::elementsize.height();
@@ -88,17 +200,6 @@ void PlayerView::draw()
view_chat->set_geometry(view_map->location(), view_map->size());
}
view_chat->event_resize();
-
- if (core::localplayer()->view()) {
- label_viewname->show();
- label_zonename->show();
- } else {
- label_viewname->hide();
- label_zonename->set_visible(view_map->visible());
- }
-
- if (label_zonename->visible())
- label_zonename->set_text(core::localplayer()->zone()->name());
}
}