Skill::Secondary Dialog::SelectSecondarySkill(void) { Display & display = Display::Get(); Cursor & cursor = Cursor::Get(); LocalEvent & le = LocalEvent::Get(); std::vector<int> skills(MAXSECONDARYSKILL * 3, 0); cursor.Hide(); cursor.SetThemes(cursor.POINTER); for(size_t ii = 0; ii < MAXSECONDARYSKILL * 3; ++ii) skills[ii] = ii; Dialog::FrameBorder frameborder(Size(310, 280), AGG::GetICN(ICN::TEXTBAK2, 0)); const Rect & area = frameborder.GetArea(); SelectEnumSecSkill listbox(area); listbox.SetListContent(skills); listbox.Redraw(); ButtonGroups btnGroups(area, Dialog::OK|Dialog::CANCEL); btnGroups.Draw(); cursor.Show(); display.Flip(); int result = Dialog::ZERO; while(result == Dialog::ZERO && ! listbox.ok && le.HandleEvents()) { result = btnGroups.QueueEventProcessing(); listbox.QueueEventProcessing(); if(!cursor.isVisible()) { listbox.Redraw(); cursor.Show(); display.Flip(); } } Skill::Secondary skill; if(result == Dialog::OK || listbox.ok) { skill.SetSkill(1 + (listbox.GetCurrent() / 3)); skill.SetLevel(1 + (listbox.GetCurrent() % 3)); } return skill; }
int Dialog::SelectHeroes(int cur) { Display & display = Display::Get(); Cursor & cursor = Cursor::Get(); LocalEvent & le = LocalEvent::Get(); std::vector<int> heroes(static_cast<int>(Heroes::SANDYSANDY), Heroes::UNKNOWN); cursor.Hide(); cursor.SetThemes(cursor.POINTER); for(size_t ii = 0; ii < heroes.size(); ++ii) heroes[ii] = ii; Dialog::FrameBorder frameborder(Size(240, 280), AGG::GetICN(ICN::TEXTBAK2, 0)); const Rect & area = frameborder.GetArea(); SelectEnumHeroes listbox(area); listbox.SetListContent(heroes); if(cur != Heroes::UNKNOWN) listbox.SetCurrent(cur); listbox.Redraw(); ButtonGroups btnGroups(area, Dialog::OK|Dialog::CANCEL); btnGroups.Draw(); cursor.Show(); display.Flip(); int result = Dialog::ZERO; while(result == Dialog::ZERO && ! listbox.ok && le.HandleEvents()) { result = btnGroups.QueueEventProcessing(); listbox.QueueEventProcessing(); if(!cursor.isVisible()) { listbox.Redraw(); cursor.Show(); display.Flip(); } } return result == Dialog::OK || listbox.ok ? listbox.GetCurrent() : Heroes::UNKNOWN; }
Monster Dialog::SelectMonster(int id) { Display & display = Display::Get(); Cursor & cursor = Cursor::Get(); LocalEvent & le = LocalEvent::Get(); std::vector<int> monsters(static_cast<int>(Monster::WATER_ELEMENT), Monster::UNKNOWN); cursor.Hide(); cursor.SetThemes(cursor.POINTER); for(size_t ii = 0; ii < monsters.size(); ++ii) monsters[ii] = ii + 1; // skip Monser::UNKNOWN Dialog::FrameBorder frameborder(Size(260, 280), AGG::GetICN(ICN::TEXTBAK2, 0)); const Rect & area = frameborder.GetArea(); SelectEnumMonster listbox(area); listbox.SetListContent(monsters); if(id != Monster::UNKNOWN) listbox.SetCurrent(static_cast<int>(id)); listbox.Redraw(); ButtonGroups btnGroups(area, Dialog::OK|Dialog::CANCEL); btnGroups.Draw(); cursor.Show(); display.Flip(); int result = Dialog::ZERO; while(result == Dialog::ZERO && ! listbox.ok && le.HandleEvents()) { result = btnGroups.QueueEventProcessing(); listbox.QueueEventProcessing(); if(!cursor.isVisible()) { listbox.Redraw(); cursor.Show(); display.Flip(); } } return result == Dialog::OK || listbox.ok ? Monster(listbox.GetCurrent()) : Monster(Monster::UNKNOWN); }
Spell Dialog::SelectSpell(int cur) { Display & display = Display::Get(); Cursor & cursor = Cursor::Get(); LocalEvent & le = LocalEvent::Get(); std::vector<int> spells(static_cast<int>(Spell::STONE - 1), Spell::NONE); cursor.Hide(); cursor.SetThemes(cursor.POINTER); for(size_t ii = 0; ii < spells.size(); ++ii) spells[ii] = ii + 1; Dialog::FrameBorder frameborder(Size(340, 280), AGG::GetICN(ICN::TEXTBAK2, 0)); const Rect & area = frameborder.GetArea(); SelectEnumSpell listbox(area); listbox.SetListContent(spells); if(cur != Spell::NONE) listbox.SetCurrent(static_cast<int>(cur)); listbox.Redraw(); ButtonGroups btnGroups(area, Dialog::OK|Dialog::CANCEL); btnGroups.Draw(); cursor.Show(); display.Flip(); int result = Dialog::ZERO; while(result == Dialog::ZERO && ! listbox.ok && le.HandleEvents()) { result = btnGroups.QueueEventProcessing(); listbox.QueueEventProcessing(); if(!cursor.isVisible()) { listbox.Redraw(); cursor.Show(); display.Flip(); } } return result == Dialog::OK || listbox.ok ? Spell(listbox.GetCurrent()) : Spell(Spell::NONE); }
void Dialog::ExtSettings(bool readonly) { Display & display = Display::Get(); const Settings & conf = Settings::Get(); // cursor Cursor & cursor = Cursor::Get(); cursor.Hide(); cursor.SetThemes(cursor.POINTER); const int window_h = conf.QVGA() ? 224 : 400; Dialog::FrameBorder frameborder(Size(320, window_h)); const Rect & area = frameborder.GetArea(); Text text("FHeroes2 Settings", Font::YELLOW_BIG); text.Blit(area.x + (area.w - text.w()) / 2, area.y + 6); std::vector<u32> states; states.reserve(64); states.push_back(Settings::GAME_SAVE_REWRITE_CONFIRM); states.push_back(Settings::GAME_ALSO_CONFIRM_AUTOSAVE); states.push_back(Settings::GAME_REMEMBER_LAST_FOCUS); states.push_back(Settings::GAME_SHOW_SYSTEM_INFO); states.push_back(Settings::GAME_EVIL_INTERFACE); states.push_back(Settings::GAME_BATTLE_SHOW_GRID); states.push_back(Settings::GAME_BATTLE_SHOW_MOUSE_SHADOW); states.push_back(Settings::GAME_BATTLE_SHOW_MOVE_SHADOW); states.push_back(Settings::GAME_BATTLE_SHOW_DAMAGE); if(! conf.QVGA()) { states.push_back(Settings::GAME_CASTLE_FLASH_BUILDING); states.push_back(Settings::GAME_HIDE_INTERFACE); } if(!conf.PocketPC()) states.push_back(Settings::GAME_DYNAMIC_INTERFACE); states.push_back(Settings::GAME_AUTOSAVE_ON); states.push_back(Settings::GAME_AUTOSAVE_BEGIN_DAY); if(conf.VideoMode().w == 640 && conf.VideoMode().h == 480) states.push_back(Settings::GAME_USE_FADE); #ifdef BUILD_RELEASE states.push_back(Settings::GAME_SHOW_SDL_LOGO); #endif states.push_back(Settings::GAME_CONTINUE_AFTER_VICTORY); states.push_back(Settings::WORLD_SHOW_VISITED_CONTENT); states.push_back(Settings::WORLD_ABANDONED_MINE_RANDOM); states.push_back(Settings::WORLD_SAVE_MONSTER_BATTLE); states.push_back(Settings::WORLD_ALLOW_SET_GUARDIAN); states.push_back(Settings::WORLD_GUARDIAN_TWO_DEFENSE); states.push_back(Settings::WORLD_EXT_OBJECTS_CAPTURED); states.push_back(Settings::WORLD_NOREQ_FOR_ARTIFACTS); states.push_back(Settings::WORLD_SCOUTING_EXTENDED); states.push_back(Settings::WORLD_ARTSPRING_SEPARATELY_VISIT); states.push_back(Settings::WORLD_ARTIFACT_CRYSTAL_BALL); states.push_back(Settings::WORLD_ONLY_FIRST_MONSTER_ATTACK); states.push_back(Settings::WORLD_EYE_EAGLE_AS_SCHOLAR); states.push_back(Settings::WORLD_BAN_WEEKOF); states.push_back(Settings::WORLD_NEW_VERSION_WEEKOF); states.push_back(Settings::WORLD_BAN_PLAGUES); states.push_back(Settings::WORLD_BAN_MONTHOF_MONSTERS); states.push_back(Settings::WORLD_STARTHERO_LOSSCOND4HUMANS); states.push_back(Settings::WORLD_1HERO_HIRED_EVERY_WEEK); states.push_back(Settings::CASTLE_1HERO_HIRED_EVERY_WEEK); states.push_back(Settings::WORLD_DWELLING_ACCUMULATE_UNITS); states.push_back(Settings::WORLD_USE_UNIQUE_ARTIFACTS_ML); states.push_back(Settings::WORLD_USE_UNIQUE_ARTIFACTS_RS); states.push_back(Settings::WORLD_USE_UNIQUE_ARTIFACTS_PS); states.push_back(Settings::WORLD_USE_UNIQUE_ARTIFACTS_SS); states.push_back(Settings::WORLD_DISABLE_BARROW_MOUNDS); states.push_back(Settings::HEROES_BUY_BOOK_FROM_SHRINES); states.push_back(Settings::HEROES_LEARN_SPELLS_WITH_DAY); states.push_back(Settings::HEROES_COST_DEPENDED_FROM_LEVEL); states.push_back(Settings::HEROES_REMEMBER_POINTS_RETREAT); states.push_back(Settings::HEROES_SURRENDERING_GIVE_EXP); states.push_back(Settings::HEROES_RECALCULATE_MOVEMENT); states.push_back(Settings::HEROES_PATROL_ALLOW_PICKUP); states.push_back(Settings::HEROES_AUTO_MOVE_BATTLE_DST); states.push_back(Settings::HEROES_TRANSCRIBING_SCROLLS); states.push_back(Settings::HEROES_ALLOW_BANNED_SECSKILLS); states.push_back(Settings::HEROES_ARENA_ANY_SKILLS); if(! conf.QVGA()) states.push_back(Settings::CASTLE_ALLOW_BUY_FROM_WELL); states.push_back(Settings::CASTLE_ALLOW_GUARDIANS); states.push_back(Settings::CASTLE_MAGEGUILD_POINTS_TURN); states.push_back(Settings::CASTLE_ALLOW_RECRUITS_SPECIAL); states.push_back(Settings::UNIONS_ALLOW_HERO_MEETINGS); states.push_back(Settings::UNIONS_ALLOW_CASTLE_VISITING); states.push_back(Settings::BATTLE_SOFT_WAITING); states.push_back(Settings::BATTLE_OBJECTS_ARCHERS_PENALTY); states.push_back(Settings::BATTLE_MERGE_ARMIES); states.push_back(Settings::BATTLE_ARCHMAGE_RESIST_BAD_SPELL); states.push_back(Settings::BATTLE_MAGIC_TROOP_RESIST); states.push_back(Settings::BATTLE_SKIP_INCREASE_DEFENSE); states.push_back(Settings::BATTLE_REVERSE_WAIT_ORDER); if(conf.PocketPC()) { states.push_back(Settings::POCKETPC_HIDE_CURSOR); states.push_back(Settings::POCKETPC_TAP_MODE); states.push_back(Settings::POCKETPC_LOW_MEMORY); states.push_back(Settings::POCKETPC_DRAG_DROP_SCROLL); #ifdef ANDROID states.push_back(Settings::POCKETPC_LOW_RESOLUTION); #endif } SettingsListBox listbox(area, readonly); const int ah = window_h - 60; listbox.RedrawBackground(area); listbox.SetScrollButtonUp(ICN::DROPLISL, 6, 7, Point(area.x + 295, area.y + 25)); listbox.SetScrollButtonDn(ICN::DROPLISL, 8, 9, Point(area.x + 295, area.y + ah + 5)); listbox.SetScrollSplitter(AGG::GetICN(ICN::DROPLISL, 13), Rect(area.x + 300, area.y + 49, 12, ah - 43)); listbox.SetAreaMaxItems(ah / 40); listbox.SetAreaItems(Rect(area.x + 10, area.y + 30, 290, ah + 5)); listbox.SetListContent(states); listbox.Redraw(); LocalEvent & le = LocalEvent::Get(); ButtonGroups btnGroups(area, Dialog::OK|Dialog::CANCEL); btnGroups.Draw(); cursor.Show(); display.Flip(); // message loop int result = Dialog::ZERO; while(result == Dialog::ZERO && le.HandleEvents()) { result = btnGroups.QueueEventProcessing(); listbox.QueueEventProcessing(); if(!cursor.isVisible()) { listbox.Redraw(); cursor.Show(); display.Flip(); } } // store if(result == Dialog::OK) { le.SetTapMode(conf.ExtPocketTapMode()); Settings::Get().BinarySave(); } }