/* client/worldview.cc This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #include "core/application.h" #include "client/targeticonbutton.h" #include "client/worldview.h" #include "client/video.h" #include "ui/ui.h" namespace client { WorldView::WorldView(ui::Widget *parent) : ui::Widget(parent) { set_label("worldview"); set_border(false); set_background(false); // add child widgets view_devinfo = new DevInfoWidget(this); view_statsinfo = new StatsInfoWidget(this); view_keyinfo = new KeyInfoWidget(this); view_playerview = new PlayerView(this); view_playerview->raise(); view_playerview->hide(); // icon buttons view_menubutton = new ui::IconButton(this, "icons/button_menu", "ui_menu"); view_launchbutton = new ui::IconButton(this, "icons/button_launch", "launch"); view_dockbutton = new TargetIconButton(this, "icons/button_dock", "dock", core::Entity::Dockable); view_chatbutton = new ui::IconButton(this, "icons/button_chat", "ui_chat"); view_mapbutton = new ui::IconButton(this, "icons/button_map", "ui_map"); } WorldView::~WorldView() { } void WorldView::resize() { set_size(parent()->size()); //const float largemargin = ui::UI::elementsize.width() * 0.25 const float smallmargin = ui::UI::elementsize.height(); // resize player view view_playerview->set_size(size()); // reposition devinfo widget view_devinfo->set_size(font()->width()*32, font()->height()*5); view_devinfo->set_location(smallmargin, smallmargin); // reposition stats widget view_statsinfo->set_size(font()->width()*12, font()->height()*5); view_statsinfo->set_location(width() - view_statsinfo->width() - smallmargin, smallmargin); // reposition keypress widget view_keyinfo->set_size(font()->width()*12, font()->height()*1); view_keyinfo->set_location(width() - view_keyinfo->width() - smallmargin, height() - view_keyinfo->height() - smallmargin); // icons const float icon_margin = 4.0f; const float icon_size = 48.0f; const float icon_count = 6; const float l = (width() - ((icon_count + 1) * icon_margin) - (icon_count * icon_size)) * 0.5f; view_menubutton->set_geometry(l, icon_margin, icon_size, icon_size); // spacer view_dockbutton->set_geometry(l + 2.0f *(icon_margin + icon_size), icon_margin, icon_size, icon_size); view_launchbutton->set_geometry(l + 2.0f *(icon_margin + icon_size), icon_margin, icon_size, icon_size); // spacer view_chatbutton->set_geometry(l + 4.0f *(icon_margin + icon_size), icon_margin, icon_size, icon_size); view_mapbutton->set_geometry(l + 5.0f *(icon_margin + icon_size), icon_margin, icon_size, icon_size); } void WorldView::clear() { view_playerview->clear(); } void WorldView::event_text(const std::string & text) { view_playerview->event_text(text); } void WorldView::draw() { // worldview is only drawn when the application is connected // and the loader screen is not shown view_devinfo->set_visible(draw_devinfo->value() ? true : false); view_statsinfo->set_visible(draw_stats->value() ? true : false); view_keyinfo->set_visible(draw_keypress->value() ? true : false); if (ui::root()->active() || !core::game()->interactive() || !core::localcontrol() || (core::localplayer()->view() && !core::localplayer()->view()->menus().size())) { view_playerview->hide(); view_menubutton->hide(); view_dockbutton->hide(); view_launchbutton->hide(); view_chatbutton->hide(); view_mapbutton->hide(); } else { view_playerview->show(); view_playerview->set_focus(); if (core::localcontrol()->state() == core::Entity::Docked) { view_launchbutton->show(); view_dockbutton->hide(); } else { view_launchbutton->hide(); view_dockbutton->show(); } view_menubutton->show(); view_chatbutton->show(); view_mapbutton->show(); } } }