diff --git a/src/game/Level.cpp b/src/game/Level.cpp
index 3af9f1fab9583b61ffc528269f42472f0edd17bc..9f6a4dfc3379abf5f1a7d19e0ff71af0997b5432 100644
--- a/src/game/Level.cpp
+++ b/src/game/Level.cpp
@@ -277,26 +277,32 @@ Effect Level::removeEffect(int id)
void Level::handleRecruitingEvent(Engine& engine, SDL_Event& event) {
- Building& b = m_buildings.at(m_selectedBuilding);
- UnitFaction u_faction = static_cast<UnitFaction> (b.m_faction);
-
-
- std::vector<UnitId> recruitableUnits = b.recruitableUnits();
- //m_recruitingmenu.setoptions(recruitableUnits)
- //show appropriate interface -> provide vector of UnitId
-
- //show Interface here
- //select UnitId
- UnitId unit_id = UnitId::INFANTERY;
-
- if(b.check_money(500)) {
- if(b.check_spawn(m_units)){
- addUnit(Unit(b.m_x, b.m_y, u_faction, unit_id, UnitState::IDLE));
- m_state = LevelState::SELECTING_STATE;
- m_selectedBuilding = -1;
+ switch (event.type)
+ {
+ case SDL_KEYDOWN:
+ if (event.key.keysym.sym == SDLK_ESCAPE)
+ {
+ m_state = LevelState::MENUACTIVE_STATE;
}
- }
-}
+ if (event.key.keysym.sym == SDLK_UP || event.key.keysym.sym == SDLK_DOWN)
+ {
+ m_recruitingMenu.handleEvent(engine, event);
+ }
+ if (event.key.keysym.sym == SDLK_RETURN)
+ {
+ Building& b = m_buildings.at(m_selectedBuilding);
+ UnitFaction u_faction = static_cast<UnitFaction> (b.m_faction);
+ UnitId unit_id = m_recruitingMenu.getSelectedOption();
+
+ if(b.check_money(500)) {
+ if(b.check_spawn(m_units)){
+ addUnit(Unit(b.m_x, b.m_y, u_faction, unit_id, UnitState::IDLE));
+ m_state = LevelState::SELECTING_STATE;
+ m_selectedBuilding = -1;
+ }
+ }
+ }
+}}
//*******************helper functions for event Handling*************************************
diff --git a/src/game/ui/Recruitingmenu.cpp b/src/game/ui/Recruitingmenu.cpp
index fee0fc106b14857f9079c48b2594836bdf4e42b7..1ca6289adddee22ad95bbbac612e0a434e19ae98 100644
--- a/src/game/ui/Recruitingmenu.cpp
+++ b/src/game/ui/Recruitingmenu.cpp
@@ -84,7 +84,10 @@ namespace advanced_wars
for (auto& [render_name, cost] : m_options)
{
//std::pair<std::string, int> unit_option = unitNames.at(cost2UnitId.at(cost));
-
+ if(i == m_selectedOption) {
+ m_selectedId = cost2UnitId.at(cost);
+ }
+
SDL_Surface* textSurface = TTF_RenderText_Solid(
font, render_name.c_str(), (i == m_selectedOption) ? yellow : white);
if (!textSurface)
@@ -169,4 +172,8 @@ void RecruitingMenu::update(int x, int y)
this->m_y = y;
}
+UnitId RecruitingMenu::getSelectedOption(){
+ return m_selectedId;
+}
+
}//namespace advance_wars
\ No newline at end of file
diff --git a/src/game/ui/Recruitingmenu.hpp b/src/game/ui/Recruitingmenu.hpp
index a2bfdcb546ddea2841e6a4983b11576ee158e1b4..01bfdb83bd93b2881071bdc027e3b824ad2bcbc8 100644
--- a/src/game/ui/Recruitingmenu.hpp
+++ b/src/game/ui/Recruitingmenu.hpp
@@ -16,17 +16,16 @@ namespace advanced_wars
int m_y;
const std::unordered_map <UnitId ,std::pair <std::string, int>> unitNames;
std::unordered_map<int, UnitId> cost2UnitId;
+ UnitId m_selectedId;
- void handleEvent(Engine& engine, SDL_Event& event);
-
-
-
void selectSprite();
- std::string getSelectedOption();
-
public:
+ UnitId getSelectedOption();
+
+ void handleEvent(Engine& engine, SDL_Event& event);
+
void update(int x, int y);
RecruitingMenu();