Skip to content

Commit 07c1168

Browse files
committed
Implement main menu with (not validated) user selection.
1 parent 610d986 commit 07c1168

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

src/anim.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,34 @@ void print_splash_screen(const std::filesystem::path& assets_dir)
5353
}
5454
}
5555

56+
std::vector<models::Pokemon> load_main_menu(utils::Manifest manifest)
57+
{
58+
// 1. set difficulty
59+
int selection{};
60+
utils::print_enum_table({"easy", "moderate", "hard"}, "difficulty");
61+
selection = utils::get_user_input<int>(">>> ");
62+
auto difficulty = (selection == 1) ? models::Difficulty::EASY : (selection == 2) ? models::Difficulty::MODERATE : models::Difficulty::HARD;
63+
64+
// 2. instantiate all available pokemons
65+
std::vector<models::Pokemon> pkmns{};
66+
pkmns.reserve(manifest.duplicates.size());
67+
std::for_each(manifest.duplicates.begin(), manifest.duplicates.end(),
68+
[&manifest, &pkmns, &difficulty](int id) { pkmns.push_back(models::Pokemon(id, manifest.asset_dir, difficulty)); });
69+
70+
// 3. select pokemon
71+
std::vector<std::string> names{};
72+
names.reserve(pkmns.size());
73+
std::for_each(pkmns.begin(), pkmns.end(), [&names](models::Pokemon& pkmn) { names.push_back(pkmn.name); });
74+
utils::print_enum_table(names, "pokemons");
75+
selection = utils::get_user_input<int>(">>> ");
76+
models::Pokemon player = pkmns[selection - 1];
77+
78+
// 4. remove selection from pkmns, so that player won't fight against his doppelganger
79+
pkmns.erase(std::remove_if(pkmns.begin(), pkmns.end(), [player](models::Pokemon pkmn) { return player.id == pkmn.id; }), pkmns.end());
80+
81+
return {player, pkmns.size() > 1 ? utils::random_choice(pkmns) : pkmns[0]};
82+
}
83+
5684
void print_frame(models::Pokemon& pkmn1, models::Pokemon& pkmn2)
5785
{
5886
std::string healthbars{};

src/anim.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,7 @@ std::vector<std::string> gen_healthbar(models::Pokemon& pkmn);
1111

1212
void print_splash_screen(const std::filesystem::path& assets_dir);
1313

14+
std::vector<models::Pokemon> load_main_menu(utils::Manifest manifest);
15+
1416
void print_frame(models::Pokemon& pkmn1, models::Pokemon& pkmn2);
1517
} // namespace anim

0 commit comments

Comments
 (0)