From a95028547981614e06ea7a6d22b853b85418cea3 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Wed, 15 Apr 2009 17:08:51 +0000 Subject: added info registry, list_info added network info transfer added info based buy menu and related game changes --- src/client/buymenu.cc | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 src/client/buymenu.cc (limited to 'src/client/buymenu.cc') diff --git a/src/client/buymenu.cc b/src/client/buymenu.cc new file mode 100644 index 0000000..b0a0b48 --- /dev/null +++ b/src/client/buymenu.cc @@ -0,0 +1,132 @@ +/* + client/buymenu.cc + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#include "ui/ui.h" +#include "ui/button.h" +#include "ui/paint.h" +#include "client/buymenu.h" +#include "core/info.h" +#include "core/application.h" +namespace client +{ + +BuyMenu::BuyMenu(ui::Widget *parent, const char * label) : ui::Window(parent) +{ + set_border(false); + set_background(true); + + if (label) + set_label(label); + else + set_label("buymenu"); + + // model pane (left) + menu_modelpane = new ui::Window(this); + menu_modelpane->set_label("modelpane"); + menu_modelpane->set_background(true); + menu_modelpane->set_border(true); + + menu_closebutton = new ui::Button(menu_modelpane, "Close","view hide"); + + // text pane (right) + menu_textpane = new ui::Window(this); + menu_textpane->set_label("textpane"); + menu_textpane->set_background(true); + menu_textpane->set_border(true); + + menu_namelabel = new ui::Label(menu_textpane); + menu_namelabel->set_label("infolabel"); + menu_namelabel->set_background(false); + menu_namelabel->set_border(false); + menu_namelabel->set_font(ui::root()->font_large()); + menu_namelabel->set_alignment(ui::AlignCenter); + menu_buybutton = new ui::Button(menu_textpane, "Buy"); + menu_scrollpane = new ui::ScrollPane(menu_textpane, menu_infotext); + menu_scrollpane->set_background(false); + menu_scrollpane->set_border(false); + menu_scrollpane->set_alignment(ui::AlignTop); + + menu_infotimestamp = 0; + menu_inforecord = 0; + + hide(); +} + +BuyMenu::~BuyMenu() +{ + +} + +void BuyMenu::set_item(std::string const & itemtype, std::string const & itemname) +{ + menu_itemtype.assign(itemtype); + aux::to_label(menu_itemtype); + + menu_itemname.assign(itemname); + aux::to_label(menu_itemname); + + menu_buybutton->set_command("remote buy " + itemtype + ' ' + itemname + "; view hide"); + menu_buybutton->set_label("buy " + itemname); + + menu_infotext.clear(); + menu_namelabel->set_text(0); + + core::Info *info = core::game()->info(itemtype+'/'+itemname); + if (info) { + menu_namelabel->set_text(info->name()); + for (core::Info::Text::iterator it = info->text().begin(); it != info->text().end(); it++) { + menu_infotext.push_back((*it)); + } + menu_infotimestamp = info->timestamp(); + } else { + menu_infotext.push_back("Information is not available"); + menu_infotimestamp = 0; + } + + menu_inforecord = info; +} + +void BuyMenu::resize() +{ + const float smallmargin = ui::UI::elementsize.height(); + + set_size(parent()->size()); + + // reposition model pane (left) + menu_modelpane->set_size(ui::UI::elementsize.width() * 1.5f, height() - smallmargin * 4.0f); + menu_modelpane->set_location(smallmargin, smallmargin * 2.0f); + + menu_closebutton->set_size(ui::UI::elementsize); + menu_closebutton->set_location((menu_modelpane->width() - menu_closebutton->width()) * 0.5f, + menu_modelpane->height() - menu_closebutton->height() - ui::UI::elementsize.height() * 0.5f); + + // reposition text pane (right) + menu_textpane->set_size(width() - smallmargin * 3.0f - menu_modelpane->width(), height() - smallmargin * 4.0f); + menu_textpane->set_location(smallmargin * 2.0f + menu_modelpane->width(), smallmargin * 2.0f); + + menu_buybutton->set_size(ui::UI::elementsize); + menu_buybutton->set_location((menu_textpane->width() - menu_buybutton->width()) * 0.5f, + menu_textpane->height() - menu_buybutton->height() - ui::UI::elementsize.height() * 0.5f); + + menu_namelabel->set_size(menu_textpane->width(), menu_namelabel->font()->height() * 2.0f); + menu_namelabel->set_location(0, 4); + + menu_scrollpane->set_size(menu_textpane->width() - 8, menu_buybutton->top() - menu_namelabel->bottom() - 8 ); + menu_scrollpane->set_location(4, menu_namelabel->bottom() + 4); + +} + +void BuyMenu::draw() +{ + // update content if necessary + if (menu_infotimestamp && (menu_infotimestamp != menu_inforecord->timestamp())) + set_item(menu_itemtype, menu_itemname); + + ui::Window::draw(); +} + +} + -- cgit v1.2.3