void CAPopUp::showSingleton () { #if 1 QString uifile = p_data->m_filename; //qDebug("uifile-name:%s", uifile.toStdString().c_str()); if(uifile.isEmpty() == true || bshow == 0 ) return; //qDebug("uifile-name-1:%s", uifile.toStdString().c_str()); if(p_data->m_singleton != 0) return; QUiLoader loader; QString filename = QString("/usr/local/opi/ui/") + uifile; QFile file; file.setFileName(filename); file.open(QFile::ReadOnly); QDialog *pDia = (QDialog*)loader.load(&file); if(!pDia) return; connect(pDia, SIGNAL(rejected()), this, SLOT(buttonCancel())); QDialogButtonBox *pBBox = pDia->findChild<QDialogButtonBox *> ("buttonBox"); if(pBBox!=0) { connect(pBBox, SIGNAL(rejected()), this, SLOT(buttonCancel())); } pDia -> show(); p_data->m_singleton = 1; #endif }
u8 Game::SelectCountPlayers(void) { // cursor Cursor & cursor = Cursor::Get(); cursor.Hide(); cursor.SetThemes(cursor.POINTER); Display & display = Display::Get(); // image background const Sprite &back = AGG::GetICN(ICN::HEROES, 0); const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2); back.Blit(top); const Sprite &panel = AGG::GetICN(ICN::REDBACK, 0); panel.Blit(top.x + 405, top.y + 5); LocalEvent & le = LocalEvent::Get(); Button button2Players(top.x + 455, top.y + 45, ICN::BTNHOTST, 0, 1); Button button3Players(top.x + 455, top.y + 110, ICN::BTNHOTST, 2, 3); Button button4Players(top.x + 455, top.y + 175, ICN::BTNHOTST, 4, 5); Button button5Players(top.x + 455, top.y + 240, ICN::BTNHOTST, 6, 7); Button button6Players(top.x + 455, top.y + 305, ICN::BTNHOTST, 8, 9); Button buttonCancel(top.x + 455, top.y + 375, ICN::BTNNEWGM, 6, 7); button2Players.Draw(); button3Players.Draw(); button4Players.Draw(); button5Players.Draw(); button6Players.Draw(); buttonCancel.Draw(); cursor.Show(); display.Flip(); // newgame loop while(le.HandleEvents()) { le.MousePressLeft(button2Players) ? button2Players.PressDraw() : button2Players.ReleaseDraw(); le.MousePressLeft(button3Players) ? button3Players.PressDraw() : button3Players.ReleaseDraw(); le.MousePressLeft(button4Players) ? button4Players.PressDraw() : button4Players.ReleaseDraw(); le.MousePressLeft(button5Players) ? button5Players.PressDraw() : button5Players.ReleaseDraw(); le.MousePressLeft(button6Players) ? button6Players.PressDraw() : button6Players.ReleaseDraw(); le.MousePressLeft(buttonCancel) ? buttonCancel.PressDraw() : buttonCancel.ReleaseDraw(); if(le.MouseClickLeft(button2Players) || le.KeyPress(KEY_2)) return 2; if(le.MouseClickLeft(button3Players) || le.KeyPress(KEY_3)) return 3; if(le.MouseClickLeft(button4Players) || le.KeyPress(KEY_4)) return 4; if(le.MouseClickLeft(button5Players) || le.KeyPress(KEY_5)) return 5; if(le.MouseClickLeft(button6Players) || le.KeyPress(KEY_6)) return 6; if(Game::HotKeyPress(Game::EVENT_DEFAULT_EXIT) || le.MouseClickLeft(buttonCancel)) return 0; // right info if(le.MousePressRight(button2Players)) Dialog::Message(_("2 Players"), _("Play with 2 human players, and optionally, up, to 4 additional computer players."), Font::BIG); if(le.MousePressRight(button3Players)) Dialog::Message(_("3 Players"), _("Play with 3 human players, and optionally, up, to 3 additional computer players."), Font::BIG); if(le.MousePressRight(button4Players)) Dialog::Message(_("4 Players"), _("Play with 4 human players, and optionally, up, to 2 additional computer players."), Font::BIG); if(le.MousePressRight(button5Players)) Dialog::Message(_("5 Players"), _("Play with 5 human players, and optionally, up, to 1 additional computer players."), Font::BIG); if(le.MousePressRight(button6Players)) Dialog::Message(_("6 Players"), _("Play with 6 human players."), Font::BIG); if(le.MousePressRight(buttonCancel)) Dialog::Message(_("Cancel"), _("Cancel back to the main menu."), Font::BIG); } return 0; }
int Dialog::AdventureOptions(bool enabledig) { Display & display = Display::Get(); // preload const int apanbkg = Settings::Get().ExtGameEvilInterface() ? ICN::APANBKGE : ICN::APANBKG; const int apanel = Settings::Get().ExtGameEvilInterface() ? ICN::APANELE : ICN::APANEL; // cursor Cursor & cursor = Cursor::Get(); const int oldcursor = cursor.Themes(); cursor.Hide(); cursor.SetThemes(cursor.POINTER); // image box const Sprite &box = AGG::GetICN(apanbkg, 0); SpriteBack back(Rect((display.w() - box.w()) / 2, (display.h() - box.h()) / 2, box.w(), box.h())); const Point & rb = back.GetPos(); box.Blit(rb.x, rb.y); LocalEvent & le = LocalEvent::Get(); Button buttonWorld(rb.x + 62, rb.y + 30, apanel, 0, 1); Button buttonPuzzle(rb.x + 195, rb.y + 30, apanel, 2, 3); Button buttonInfo(rb.x + 62, rb.y + 107, apanel, 4, 5); Button buttonDig(rb.x + 195, rb.y + 107, apanel, 6, 7); Button buttonCancel(rb.x + 128, rb.y + 184, apanel, 8, 9); if(! enabledig) buttonDig.SetDisable(true); buttonWorld.Draw(); buttonPuzzle.Draw(); buttonInfo.Draw(); buttonDig.Draw(); buttonCancel.Draw(); cursor.Show(); display.Flip(); int result = Dialog::ZERO; // dialog menu loop while(le.HandleEvents()) { le.MousePressLeft(buttonWorld) ? buttonWorld.PressDraw() : buttonWorld.ReleaseDraw(); le.MousePressLeft(buttonPuzzle) ? buttonPuzzle.PressDraw() : buttonPuzzle.ReleaseDraw(); le.MousePressLeft(buttonInfo) ? buttonInfo.PressDraw() : buttonInfo.ReleaseDraw(); le.MousePressLeft(buttonDig) ? buttonDig.PressDraw() : buttonDig.ReleaseDraw(); le.MousePressLeft(buttonCancel) ? buttonCancel.PressDraw() : buttonCancel.ReleaseDraw(); if(le.MouseClickLeft(buttonWorld)){ result = Dialog::WORLD; break; } if(le.MouseClickLeft(buttonPuzzle)){ result = Dialog::PUZZLE; break; } if(le.MouseClickLeft(buttonInfo)){ result = Dialog::INFO; break; } if(le.MouseClickLeft(buttonDig) && buttonDig.isEnable()){ result = Dialog::DIG; break; } if(le.MouseClickLeft(buttonCancel) || Game::HotKeyPressEvent(Game::EVENT_DEFAULT_EXIT)){ result = Dialog::CANCEL; break; } // right info if(le.MousePressRight(buttonWorld)) Dialog::Message("", _("View the entire world."), Font::BIG); if(le.MousePressRight(buttonPuzzle)) Dialog::Message("", _("View the obelisk puzzle."), Font::BIG); if(le.MousePressRight(buttonInfo)) Dialog::Message("", _("View information on the scenario you are currently playing."), Font::BIG); if(le.MousePressRight(buttonDig)) Dialog::Message("", _("Dig for the Ultimate Artifact."), Font::BIG); if(le.MousePressRight(buttonCancel)) Dialog::Message("", _("Exit this menu without doing anything."), Font::BIG); } // restore background cursor.Hide(); back.Restore(); cursor.SetThemes(oldcursor); cursor.Show(); display.Flip(); return result; }
QvvConfirmDeleteDialog::QvvConfirmDeleteDialog() : QDialog() { cd.setupUi( this ); activated_button = QDialogButtonBox::NoButton; connect( cd.buttonBox->button( QDialogButtonBox::Yes ), SIGNAL(clicked()), this, SLOT(buttonYes()) ); connect( cd.buttonBox->button( QDialogButtonBox::YesToAll ), SIGNAL(clicked()), this, SLOT(buttonYesToAll()) ); connect( cd.buttonBox->button( QDialogButtonBox::No ), SIGNAL(clicked()), this, SLOT(buttonNo()) ); connect( cd.buttonBox->button( QDialogButtonBox::Cancel ), SIGNAL(clicked()), this, SLOT(buttonCancel()) ); }
bool Dialog::SelectCount(const std::string &header, u32 min, u32 max, u32 & cur, u8 step) { Display & display = Display::Get(); if(min >= max) min = 0; if(cur > max || cur < min) cur = min; const ICN::icn_t system = Settings::Get().ExtGameEvilInterface() ? ICN::SYSTEME : ICN::SYSTEM; // preload AGG::Cache::PreloadObject(system); // cursor Cursor & cursor = Cursor::Get(); cursor.Hide(); Text text(header, Font::BIG); const u8 spacer = Settings::Get().QVGA() ? 5 : 10; Box box(text.h() + spacer + 30, true); const Rect & pos = box.GetArea(); Point pt; // text pt.x = pos.x + (pos.w - text.w()) / 2; pt.y = pos.y; text.Blit(pt); // sprite edit const Surface & sprite_edit = AGG::GetICN(ICN::TOWNWIND, 4); pt.x = pos.x + 80; pt.y = pos.y + 35; sprite_edit.Blit(pt, display); text.Set(GetString(cur)); pt.x = pos.x + 80 + (sprite_edit.w() - text.w()) / 2; pt.y = pos.y + 36; text.Blit(pt); // buttons pt.x = pos.x + 150; pt.y = pos.y + 31; Button buttonUp(pt, ICN::TOWNWIND, 5, 6); pt.x = pos.x + 150; pt.y = pos.y + 47; Button buttonDn(pt, ICN::TOWNWIND, 7, 8); pt.x = pos.x; pt.y = box.GetArea().y + box.GetArea().h - AGG::GetICN(system, 1).h(); Button buttonOk(pt, system, 1, 2); pt.x = pos.x + pos.w - AGG::GetICN(system, 3).w(); pt.y = box.GetArea().y + box.GetArea().h - AGG::GetICN(system, 3).h(); Button buttonCancel(pt, system, 3, 4); text.Set("MAX", Font::SMALL); const Rect rectMax(pos.x + 173, pos.y + 38, text.w(), text.h()); text.Blit(rectMax.x, rectMax.y); LocalEvent & le = LocalEvent::Get(); buttonUp.Draw(); buttonDn.Draw(); buttonOk.Draw(); buttonCancel.Draw(); bool redraw_count = false; cursor.Show(); display.Flip(); // message loop while(le.HandleEvents()) { le.MousePressLeft(buttonOk) ? buttonOk.PressDraw() : buttonOk.ReleaseDraw(); le.MousePressLeft(buttonCancel) ? buttonCancel.PressDraw() : buttonCancel.ReleaseDraw(); le.MousePressLeft(buttonUp) ? buttonUp.PressDraw() : buttonUp.ReleaseDraw(); le.MousePressLeft(buttonDn) ? buttonDn.PressDraw() : buttonDn.ReleaseDraw(); if(PressIntKey(min, max, cur)) redraw_count = true; // max if(le.MouseClickLeft(rectMax)) { cur = max; redraw_count = true; } else // up if((le.MouseWheelUp(pos) || le.MouseClickLeft(buttonUp)) && cur < max) { cur += cur + step <= max ? step : max - cur; redraw_count = true; } else // down if((le.MouseWheelDn(pos) || le.MouseClickLeft(buttonDn)) && min < cur) { cur -= min + cur >= step ? step : cur; redraw_count = true; } if(redraw_count) { cursor.Hide(); pt.x = pos.x + 80; pt.y = pos.y + 35; sprite_edit.Blit(pt, display); text.Set(GetString(cur), Font::BIG); pt.x = pos.x + 80 + (sprite_edit.w() - text.w()) / 2; pt.y = pos.y + 36; text.Blit(pt); cursor.Show(); display.Flip(); redraw_count = false; } if(Game::HotKeyPress(Game::EVENT_DEFAULT_READY) || le.MouseClickLeft(buttonOk)){ return true; } else if(Game::HotKeyPress(Game::EVENT_DEFAULT_EXIT) || le.MouseClickLeft(buttonCancel)){ cur = 0; break; } } return false; }
bool Dialog::InputString(const std::string &header, std::string &res) { const ICN::icn_t system = Settings::Get().ExtGameEvilInterface() ? ICN::SYSTEME : ICN::SYSTEM; Display & display = Display::Get(); Cursor & cursor = Cursor::Get(); cursor.Hide(); Cursor::themes_t oldcursor = cursor.Themes(); cursor.SetThemes(cursor.POINTER); //const bool pda = Settings::Get().PocketPC(); if(res.size()) res.clear(); res.reserve(48); size_t charInsertPos = 0; TextBox textbox(header, Font::BIG, BOXAREA_WIDTH); Point dst_pt; const Surface & sprite = AGG::GetICN((Settings::Get().ExtGameEvilInterface() ? ICN::BUYBUILD : ICN::BUYBUILE), 3); Box box(10 + textbox.h() + 10 + sprite.h(), OK|CANCEL); const Rect & box_rt = box.GetArea(); // text dst_pt.x = box_rt.x + (box_rt.w - textbox.w()) / 2; dst_pt.y = box_rt.y + 10; textbox.Blit(dst_pt); dst_pt.y = box_rt.y + 10 + textbox.h() + 10; dst_pt.x = box_rt.x + (box_rt.w - sprite.w()) / 2; sprite.Blit(dst_pt, display); const Rect text_rt(dst_pt.x, dst_pt.y, sprite.w(), sprite.h()); Text text("_", Font::BIG); sprite.Blit(text_rt, display); text.Blit(dst_pt.x + (sprite.w() - text.w()) / 2, dst_pt.y - 1); dst_pt.x = box_rt.x; dst_pt.y = box_rt.y + box_rt.h - AGG::GetICN(system, 1).h(); Button buttonOk(dst_pt, system, 1, 2); dst_pt.x = box_rt.x + box_rt.w - AGG::GetICN(system, 3).w(); dst_pt.y = box_rt.y + box_rt.h - AGG::GetICN(system, 3).h(); Button buttonCancel(dst_pt, system, 3, 4); buttonOk.SetDisable(res.empty()); buttonOk.Draw(); buttonCancel.Draw(); cursor.Show(); display.Flip(); LocalEvent & le = LocalEvent::Get(); bool redraw = true; // message loop while(le.HandleEvents()) { buttonOk.isEnable() && le.MousePressLeft(buttonOk) ? buttonOk.PressDraw() : buttonOk.ReleaseDraw(); le.MousePressLeft(buttonCancel) ? buttonCancel.PressDraw() : buttonCancel.ReleaseDraw(); if(Settings::Get().PocketPC() && le.MousePressLeft(text_rt)) { PocketPC::KeyboardDialog(res); redraw = true; } if(Game::HotKeyPress(Game::EVENT_DEFAULT_READY) || (buttonOk.isEnable() && le.MouseClickLeft(buttonOk))) break; else if(Game::HotKeyPress(Game::EVENT_DEFAULT_EXIT) || le.MouseClickLeft(buttonCancel)){ res.clear(); break; } else if(le.KeyPress()) { charInsertPos = String::InsertKeySym(res, charInsertPos, le.KeyValue(), le.KeyMod()); redraw = true; } if(redraw) { buttonOk.SetDisable(res.empty()); buttonOk.Draw(); text.Set(String::InsertString(res, charInsertPos, "_")); if(text.w() < sprite.w() - 24) { cursor.Hide(); sprite.Blit(text_rt, display); text.Blit(text_rt.x + (text_rt.w - text.w()) / 2, text_rt.y - 1); cursor.Show(); display.Flip(); } redraw = false; } } cursor.SetThemes(oldcursor); cursor.Hide(); return res.size(); }
Game::menu_t Dialog::FileOptions(void) { Display & display = Display::Get(); // preload const ICN::icn_t cpanbkg = Settings::Get().EvilInterface() ? ICN::CPANBKGE : ICN::CPANBKG; const ICN::icn_t cpanel = Settings::Get().EvilInterface() ? ICN::CPANELE : ICN::CPANEL; AGG::PreloadObject(cpanbkg); AGG::PreloadObject(cpanel); // cursor Cursor & cursor = Cursor::Get(); const Cursor::themes_t oldcursor = cursor.Themes(); cursor.Hide(); cursor.SetThemes(Cursor::POINTER); // image box const Sprite &box = AGG::GetICN(cpanbkg, 0); Rect rb((display.w() - box.w()) / 2, (display.h() - box.h()) / 2, box.w(), box.h()); Background back(rb); back.Save(); display.Blit(box, rb.x, rb.y); LocalEvent & le = LocalEvent::Get(); Button buttonNew(rb.x + 62, rb.y + 31, cpanel, 0, 1); Button buttonLoad(rb.x + 195, rb.y + 31, cpanel, 2, 3); Button buttonSave(rb.x + 62, rb.y + 107, cpanel, 4, 5); Button buttonQuit(rb.x + 195, rb.y + 107, cpanel, 6, 7); Button buttonCancel(rb.x + 128, rb.y + 184, cpanel, 8, 9); buttonNew.Draw(); buttonLoad.Draw(); buttonSave.Draw(); buttonQuit.Draw(); buttonCancel.Draw(); cursor.Show(); display.Flip(); Game::menu_t result = Game::QUITGAME; // dialog menu loop while(le.HandleEvents()) { le.MousePressLeft(buttonNew) ? buttonNew.PressDraw() : buttonNew.ReleaseDraw(); le.MousePressLeft(buttonLoad) ? buttonLoad.PressDraw() : buttonLoad.ReleaseDraw(); le.MousePressLeft(buttonSave) ? buttonSave.PressDraw() : buttonSave.ReleaseDraw(); le.MousePressLeft(buttonQuit) ? buttonQuit.PressDraw() : buttonQuit.ReleaseDraw(); le.MousePressLeft(buttonCancel) ? buttonCancel.PressDraw() : buttonCancel.ReleaseDraw(); if(le.MouseClickLeft(buttonNew)) { result = Game::NEWGAME; break; } if(le.MouseClickLeft(buttonLoad)){ result = Game::LOADGAME; break; } if(le.MouseClickLeft(buttonSave)){ result = Game::SAVEGAME; break; } if(le.MouseClickLeft(buttonQuit)){ result = Game::QUITGAME; break; } if(le.MouseClickLeft(buttonCancel) || le.KeyPress(KEY_ESCAPE)){ result = Game::CANCEL; break; } } // restore background cursor.Hide(); back.Restore(); cursor.SetThemes(oldcursor); cursor.Show(); display.Flip(); return result; }
bool FH2LocalClient::ScenarioInfoDialog(void) { Settings & conf = Settings::Get(); Cursor & cursor = Cursor::Get(); Display & display = Display::Get(); LocalEvent & le = LocalEvent::Get(); if(!GetCurrentMapInfo() || !GetPlayersInfo()) return false; const Sprite & panel = AGG::GetICN(ICN::NGHSBKG, 0); const Rect rectPanel(204, 32, panel.w(), panel.h()); const Point pointOpponentInfo(rectPanel.x + 24, rectPanel.y + 202); const Point pointClassInfo(rectPanel.x + 24, rectPanel.y + 282); const Rect box(pointOpponentInfo, 360, 180); Rects::const_iterator itr; Interface::PlayersInfo playersInfo(true, false, false); playersInfo.UpdateInfo(conf.GetPlayers(), pointOpponentInfo, pointClassInfo); RedrawScenarioStaticInfo(rectPanel); playersInfo.RedrawInfo(); Button buttonSelectMaps(rectPanel.x + 309, rectPanel.y + 45, ICN::NGEXTRA, 64, 65); Button buttonOk(rectPanel.x + 31, rectPanel.y + 380, ICN::NGEXTRA, 66, 67); Button buttonCancel(rectPanel.x + 287, rectPanel.y + 380, ICN::NGEXTRA, 68, 69); SpriteCursor sp; sp.SetSprite(AGG::GetICN(ICN::NGEXTRA, 80)); if(! Modes(ST_ADMIN)) { buttonOk.SetDisable(true); buttonSelectMaps.SetDisable(true); } buttonSelectMaps.Draw(); buttonOk.Draw(); buttonCancel.Draw(); cursor.Show(); display.Flip(); bool exit = false; bool update_info = false; u8 change_color = Color::NONE; DEBUG(DBG_NETWORK, DBG_INFO, "start queue"); while(!exit && le.HandleEvents()) { if(Ready()) { QueueMessage packet; if(!Recv(packet)) return false; DEBUG(DBG_NETWORK, DBG_INFO, "recv: " << Network::GetMsgString(packet.GetID())); switch(packet.GetID()) { case MSG_READY: break; case MSG_CHANGE_RACE: Network::UnpackRaceColors(packet); update_info = true; break; case MSG_UPDATE_PLAYERS: { MsgUpdatePlayers(packet); if(Modes(ST_ADMIN)) { buttonOk.Release(); buttonOk.SetDisable(false); buttonSelectMaps.Release(); buttonSelectMaps.SetDisable(false); } else { buttonOk.Press(); buttonOk.SetDisable(true); buttonSelectMaps.Press(); buttonSelectMaps.SetDisable(true); } update_info = true; break; } case MSG_SET_CURRENT_MAP: Network::PacketPopMapsFileInfo(packet, conf.CurrentFileInfo()); playersInfo.UpdateInfo(conf.GetPlayers(), pointOpponentInfo, pointClassInfo); update_info = true; break; case MSG_MESSAGE: break; case MSG_SHUTDOWN: exit = true; break; default: break; } } if(update_info) { cursor.Hide(); RedrawScenarioStaticInfo(rectPanel); playersInfo.RedrawInfo(); buttonSelectMaps.Draw(); buttonOk.Draw(); buttonCancel.Draw(); cursor.Show(); display.Flip(); update_info = false; } // press button if(buttonSelectMaps.isEnable()) le.MousePressLeft(buttonSelectMaps) ? buttonSelectMaps.PressDraw() : buttonSelectMaps.ReleaseDraw(); if(buttonOk.isEnable()) le.MousePressLeft(buttonOk) ? buttonOk.PressDraw() : buttonOk.ReleaseDraw(); le.MousePressLeft(buttonCancel) ? buttonCancel.PressDraw() : buttonCancel.ReleaseDraw(); // click select if(Game::HotKeyPress(Game::EVENT_BUTTON_SELECT) || (buttonSelectMaps.isEnable() && le.MouseClickLeft(buttonSelectMaps))) { cursor.Hide(); sp.Hide(); cursor.Show(); // recv maps_info_list QueueMessage packet(MSG_GET_MAPS_LIST); if(SendWait(packet, MSG_GET_MAPS_LIST, "ScenarioInfoDialog: ")) { MapsFileInfoList lists; Network::PacketPopMapsFileInfoList(packet, lists); if(const Maps::FileInfo *fi = Dialog::SelectScenario(lists)) { // send set_maps_info packet.Reset(); packet.SetID(MSG_SET_CURRENT_MAP); packet.Push(fi->file); DEBUG(DBG_NETWORK, DBG_INFO, "send: " << Network::GetMsgString(packet.GetID())); if(!Send(packet)) return false; } update_info = true; } } else // click cancel if(le.MouseClickLeft(buttonCancel) || Game::HotKeyPress(Game::EVENT_DEFAULT_EXIT)) return false; else // click ok if(Game::HotKeyPress(Game::EVENT_DEFAULT_READY) || (buttonOk.isEnable() && le.MouseClickLeft(buttonOk))) { /* packet.Reset(); packet.SetID(MSG_START_GAME); DEBUG(DBG_NETWORK, DBG_INFO, "send: " << Network::GetMsgString(packet.GetID())); if(!Send(packet)) return false; cursor.Hide(); return true; */ } else if(Modes(ST_ADMIN) && le.MouseClickLeft(box)) { // click colors if(Player* player = playersInfo.GetFromOpponentClick(le.GetMouseCursor())) { u8 humans = conf.GetPlayers().GetColors(CONTROL_HUMAN); if((humans & player->color) && Color::NONE == change_color) { cursor.Hide(); sp.Move((*itr).x - 3, (*itr).y - 3); cursor.Show(); display.Flip(); change_color = player->color; } else if(conf.CurrentFileInfo().AllowHumanColors() & player->color) { cursor.Hide(); sp.Hide(); cursor.Show(); display.Flip(); if(Color::NONE != change_color) { QueueMessage packet(MSG_CHANGE_COLORS); packet.Push(change_color); packet.Push(player->color); DEBUG(DBG_NETWORK, DBG_INFO, "send: " << Network::GetMsgString(packet.GetID())); if(!Send(packet)) return false; change_color = Color::NONE; } } } else // click races if(Player* player = playersInfo.GetFromClassClick(le.GetMouseCursor())) { if(conf.AllowChangeRace(player->color)) { switch(player->race) { case Race::KNGT: player->race = Race::BARB; break; case Race::BARB: player->race = Race::SORC; break; case Race::SORC: player->race = Race::WRLK; break; case Race::WRLK: player->race = Race::WZRD; break; case Race::WZRD: player->race = Race::NECR; break; case Race::NECR: player->race = Race::RAND; break; case Race::RAND: player->race = Race::KNGT; break; default: break; } if(change_color) { cursor.Hide(); sp.Hide(); cursor.Show(); display.Flip(); change_color = Color::NONE; } if((player->race & Race::ALL) || player->race == Race::RAND) { QueueMessage packet(MSG_CHANGE_RACE); packet.Push(player->color); packet.Push(player->race); DEBUG(DBG_NETWORK, DBG_INFO, "send: " << Network::GetMsgString(packet.GetID())); if(!Send(packet)) return false; } } } } DELAY(10); } return false; }
u16 Dialog::RecruitMonster(const Monster & monster, u16 available) { Display & display = Display::Get(); LocalEvent & le = LocalEvent::Get(); // cursor Cursor & cursor = Cursor::Get(); const Cursor::themes_t oldcursor = cursor.Themes(); cursor.Hide(); cursor.SetThemes(Cursor::POINTER); // calculate max count u32 max = 0; const payment_t paymentMonster = monster.GetCost(); const Kingdom & kingdom = world.GetKingdom(Settings::Get().CurrentColor()); while(kingdom.AllowPayment(paymentMonster * max) && max < available) ++max; u32 result = max; payment_t paymentCosts(paymentMonster * result); const Sprite & box = AGG::GetICN(ICN::RECRBKG, 0); const Rect pos((display.w() - box.w()) / 2, Settings::Get().QVGA() ? (display.h() - box.h()) / 2 - 15 : (display.h() - box.h()) / 2, box.w(), box.h()); Background back(pos); back.Save(); box.Blit(pos.x, pos.y); Point dst_pt; std::string str; Text text; // smear hardcore text "Cost per troop:" const Sprite & smear = AGG::GetICN(ICN::TOWNNAME, 0); dst_pt.x = pos.x + 144; dst_pt.y = pos.y + 55; smear.Blit(Rect(8, 1, 120, 12), dst_pt); text.Set(_("Cost per troop:"), Font::SMALL); dst_pt.x = pos.x + 206 - text.w() / 2; dst_pt.y = pos.y + 55; text.Blit(dst_pt); // text recruit monster str = _("Recruit %{name}"); String::Replace(str, "%{name}", monster.GetMultiName()); text.Set(str, Font::BIG); dst_pt.x = pos.x + (pos.w - text.w()) / 2; dst_pt.y = pos.y + 25; text.Blit(dst_pt); // sprite monster const Sprite & smon = AGG::GetICN(monster.ICNMonh(), 0); dst_pt.x = pos.x + 70 - smon.w() / 2; dst_pt.y = pos.y + 130 - smon.h(); smon.Blit(dst_pt); bool extres = 2 == paymentMonster.GetValidItems(); // info resource // gold const Sprite & sgold = AGG::GetICN(ICN::RESOURCE, 6); dst_pt.x = pos.x + (extres ? 150 : 175); dst_pt.y = pos.y + 75; sgold.Blit(dst_pt); dst_pt.x = pos.x + (extres ? 105 : 130); dst_pt.y = pos.y + 200; sgold.Blit(dst_pt); text.Set(GetString(paymentMonster.gold), Font::SMALL); dst_pt.x = pos.x + (extres ? 183 : 205) - text.w() / 2; dst_pt.y = pos.y + 103; text.Blit(dst_pt); // crystal if(paymentMonster.crystal) { const Sprite & sres = AGG::GetICN(ICN::RESOURCE, 4); RedrawResourceInfo(sres, pos, paymentMonster.crystal, 225, 75, 240, 103); dst_pt.x = pos.x + 180; dst_pt.y = pos.y + 200; sres.Blit(dst_pt); } else // mercury if(paymentMonster.mercury) { const Sprite & sres = AGG::GetICN(ICN::RESOURCE, 1); RedrawResourceInfo(sres, pos, paymentMonster.mercury, 225, 72, 240, 103); dst_pt.x = pos.x + 180; dst_pt.y = pos.y + 197; sres.Blit(dst_pt); } else // wood if(paymentMonster.wood) { const Sprite & sres = AGG::GetICN(ICN::RESOURCE, 0); RedrawResourceInfo(sres, pos, paymentMonster.wood, 225, 72, 240, 103); dst_pt.x = pos.x + 180; dst_pt.y = pos.y + 197; sres.Blit(dst_pt); } else // ore if(paymentMonster.ore) { const Sprite & sres = AGG::GetICN(ICN::RESOURCE, 2); RedrawResourceInfo(sres, pos, paymentMonster.ore, 225, 72, 240, 103); dst_pt.x = pos.x + 180; dst_pt.y = pos.y + 197; sres.Blit(dst_pt); } else // sulfur if(paymentMonster.sulfur) { const Sprite & sres = AGG::GetICN(ICN::RESOURCE, 3); RedrawResourceInfo(sres, pos, paymentMonster.sulfur, 225, 75, 240, 103); dst_pt.x = pos.x + 180; dst_pt.y = pos.y + 200; sres.Blit(dst_pt); } else // gems if(paymentMonster.gems) { const Sprite & sres = AGG::GetICN(ICN::RESOURCE, 5); RedrawResourceInfo(sres, pos, paymentMonster.gems, 225, 75, 240, 103); dst_pt.x = pos.x + 180; dst_pt.y = pos.y + 200; sres.Blit(dst_pt); } // text number buy text.Set(_("Number to buy:")); dst_pt.x = pos.x + 30; dst_pt.y = pos.y + 163; text.Blit(dst_pt); Background static_info(Rect(pos.x + 16, pos.y + 125, pos.w - 32, 122)); static_info.Save(); RedrawCurrentInfo(pos, available, result, paymentMonster, paymentCosts); // buttons dst_pt.x = pos.x + 34; dst_pt.y = pos.y + 249; Button buttonOk(dst_pt, ICN::RECRUIT, 8, 9); dst_pt.x = pos.x + 187; dst_pt.y = pos.y + 249; Button buttonCancel(dst_pt, ICN::RECRUIT, 6, 7); dst_pt.x = pos.x + 230; dst_pt.y = pos.y + 155; Button buttonMax(dst_pt, ICN::RECRUIT, 4, 5); dst_pt.x = pos.x + 208; dst_pt.y = pos.y + 156; Button buttonUp(dst_pt, ICN::RECRUIT, 0, 1); dst_pt.x = pos.x + 208; dst_pt.y = pos.y + 171; Button buttonDn(dst_pt, ICN::RECRUIT, 2, 3); buttonOk.Draw(); buttonCancel.Draw(); buttonMax.Draw(); buttonUp.Draw(); buttonDn.Draw(); cursor.Show(); display.Flip(); bool redraw = false; // str loop while(le.HandleEvents()) { le.MousePressLeft(buttonOk) ? buttonOk.PressDraw() : buttonOk.ReleaseDraw(); le.MousePressLeft(buttonCancel) ? buttonCancel.PressDraw() : buttonCancel.ReleaseDraw(); le.MousePressLeft(buttonMax) ? buttonMax.PressDraw() : buttonMax.ReleaseDraw(); le.MousePressLeft(buttonUp) ? buttonUp.PressDraw() : buttonUp.ReleaseDraw(); le.MousePressLeft(buttonDn) ? buttonDn.PressDraw() : buttonDn.ReleaseDraw(); if(PressIntKey(0, max, result)) { paymentCosts = paymentMonster * result; redraw = true; } if(le.MouseClickLeft(buttonUp) && result < max) { ++result; paymentCosts += paymentMonster; redraw = true; } else if(le.MouseClickLeft(buttonDn) && result) { --result; paymentCosts -= paymentMonster; redraw = true; } else if(le.MouseClickLeft(buttonMax) && result != max) { result = max; paymentCosts = paymentMonster * max; redraw = true; } if(redraw) { cursor.Hide(); static_info.Restore(); RedrawCurrentInfo(pos, available, result, paymentMonster, paymentCosts); cursor.Show(); display.Flip(); redraw = false; } if(le.MouseClickLeft(buttonOk) || Game::HotKeyPress(Game::EVENT_DEFAULT_READY)) break; if(le.MouseClickLeft(buttonCancel) || Game::HotKeyPress(Game::EVENT_DEFAULT_EXIT)){ result = 0; break; } } cursor.Hide(); back.Restore(); cursor.SetThemes(oldcursor); cursor.Show(); display.Flip(); return result; }
Game::menu_t Game::Editor::NewMaps(void) { Display & display = Display::Get(); // preload AGG::PreloadObject(ICN::BTNESIZE); AGG::PreloadObject(ICN::REDBACK); // cursor Cursor & cursor = Cursor::Get(); cursor.Hide(); cursor.SetThemes(cursor.POINTER); Display::SetVideoMode(640, 480); // image background const Sprite &back = AGG::GetICN(ICN::EDITOR, 0); display.Blit(back); const Sprite &panel = AGG::GetICN(ICN::REDBACK, 0); display.Blit(panel, 405, 5); LocalEvent & le = LocalEvent::Get(); Button buttonSmall(455, 45, ICN::BTNESIZE, 0, 1); Button buttonMedium(455, 110, ICN::BTNESIZE, 2, 3); Button buttonLarge(455, 175, ICN::BTNESIZE, 4, 5); Button buttonXLarge(455, 240, ICN::BTNESIZE, 6, 7); Button buttonCancel(455, 375, ICN::BTNESIZE, 8, 9); buttonSmall.Draw(); buttonMedium.Draw(); buttonLarge.Draw(); buttonXLarge.Draw(); buttonCancel.Draw(); cursor.Show(); display.Flip(); // NewMap loop while(le.HandleEvents()) { le.MousePressLeft(buttonSmall) ? buttonSmall.PressDraw() : buttonSmall.ReleaseDraw(); le.MousePressLeft(buttonMedium) ? buttonMedium.PressDraw() : buttonMedium.ReleaseDraw(); le.MousePressLeft(buttonLarge) ? buttonLarge.PressDraw() : buttonLarge.ReleaseDraw(); le.MousePressLeft(buttonXLarge) ? buttonXLarge.PressDraw() : buttonXLarge.ReleaseDraw(); le.MousePressLeft(buttonCancel) ? buttonCancel.PressDraw() : buttonCancel.ReleaseDraw(); if(le.MouseClickLeft(buttonSmall)) { Game::ShowLoadMapsText(); world.NewMaps(Maps::SMALL, Maps::SMALL); return EDITSTART; } else if(le.MouseClickLeft(buttonMedium)) { Game::ShowLoadMapsText(); world.NewMaps(Maps::MEDIUM, Maps::MEDIUM); return EDITSTART; } else if(le.MouseClickLeft(buttonLarge)) { Game::ShowLoadMapsText(); world.NewMaps(Maps::LARGE, Maps::LARGE); return EDITSTART; } else if(le.MouseClickLeft(buttonXLarge)) { Game::ShowLoadMapsText(); world.NewMaps(Maps::XLARGE, Maps::XLARGE); return EDITSTART; } if(le.MouseClickLeft(buttonCancel) || le.KeyPress(KEY_ESCAPE)) return EDITMAINMENU; // right info if(le.MousePressRight(buttonSmall)) Dialog::Message("", _("Create a map that is 36 squares wide by 36 squares high. (For reference, all the maps in Heroes where 72 x 72)"), Font::BIG); else if(le.MousePressRight(buttonMedium)) Dialog::Message("", _("Create a map that is 72 squares wide by 72 squares high. (For reference, all the maps in Heroes where 72 x 72)"), Font::BIG); else if(le.MousePressRight(buttonLarge)) Dialog::Message("", _("Create a map that is 108 squares wide by 108 squares high. (For reference, all the maps in Heroes where 72 x 72)"), Font::BIG); else if(le.MousePressRight(buttonXLarge)) Dialog::Message("", _("Create a map that is 144 squares wide by 144 squares high. (For reference, all the maps in Heroes where 72 x 72)"), Font::BIG); else if(le.MousePressRight(buttonCancel)) Dialog::Message("", _("Cancel back to the main menu."), Font::BIG); } return EDITMAINMENU; }