From 9c2d1a1c867bbd7eea083dbc03c0acf1edace8c2 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Tue, 27 Jan 2009 18:53:24 +0000 Subject: moves docking menus from ui to client, allow map and chat window while docked --- src/client/playerview.cc | 127 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 114 insertions(+), 13 deletions(-) (limited to 'src/client/playerview.cc') 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()); } } -- cgit v1.2.3