Compare commits
No commits in common. "09cb13195c5b682bcb16f129b595fd2be83c026a" and "aa5043a81156bd6b31262f0ddea021efc72a3d7f" have entirely different histories.
09cb13195c
...
aa5043a811
@ -35,8 +35,6 @@ std::shared_ptr<SDLPP::TextRenderer> coins = nullptr;
|
|||||||
int coin_count = 0;
|
int coin_count = 0;
|
||||||
int global_frames = 0;
|
int global_frames = 0;
|
||||||
std::string last_load_level = "";
|
std::string last_load_level = "";
|
||||||
bool __right_pressed = false;
|
|
||||||
bool __left_pressed = false;
|
|
||||||
|
|
||||||
std::vector<std::shared_ptr<MarioBlock>> moving_objects = {};
|
std::vector<std::shared_ptr<MarioBlock>> moving_objects = {};
|
||||||
std::vector<SceneStruct> game_scenes{};
|
std::vector<SceneStruct> game_scenes{};
|
||||||
@ -48,12 +46,10 @@ void handleKeyDown(SDL_Keycode key, SDLPP::Scene &scene) {
|
|||||||
switch (key) {
|
switch (key) {
|
||||||
case SDLK_a:
|
case SDLK_a:
|
||||||
case SDLK_LEFT:
|
case SDLK_LEFT:
|
||||||
__left_pressed = true;
|
|
||||||
mario->walkLeft();
|
mario->walkLeft();
|
||||||
break;
|
break;
|
||||||
case SDLK_d:
|
case SDLK_d:
|
||||||
case SDLK_RIGHT:
|
case SDLK_RIGHT:
|
||||||
__right_pressed = true;
|
|
||||||
mario->walkRight();
|
mario->walkRight();
|
||||||
break;
|
break;
|
||||||
case SDLK_SPACE:
|
case SDLK_SPACE:
|
||||||
@ -81,26 +77,16 @@ void handleKeyUp(SDL_Keycode key) {
|
|||||||
switch (key) {
|
switch (key) {
|
||||||
case SDLK_ESCAPE: {
|
case SDLK_ESCAPE: {
|
||||||
std::lock_guard<std::mutex> lock(render_mutex);
|
std::lock_guard<std::mutex> lock(render_mutex);
|
||||||
mario->setMovement(0, mario->getMovement().getY());
|
|
||||||
game_scenes.back().scene->pauseScene();
|
|
||||||
__right_pressed = false;
|
|
||||||
__left_pressed = false;
|
|
||||||
game_scenes.push_back(
|
game_scenes.push_back(
|
||||||
createGameMainMenuScene(renderer, false, true, true));
|
createGameMainMenuScene(renderer, false, true, true));
|
||||||
} break;
|
} break;
|
||||||
case SDLK_a:
|
case SDLK_a:
|
||||||
case SDLK_LEFT:
|
case SDLK_LEFT:
|
||||||
if (__left_pressed) {
|
mario->walkRight();
|
||||||
mario->walkRight();
|
|
||||||
__left_pressed = false;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case SDLK_d:
|
case SDLK_d:
|
||||||
case SDLK_RIGHT:
|
case SDLK_RIGHT:
|
||||||
if (__right_pressed) {
|
mario->walkLeft();
|
||||||
mario->walkLeft();
|
|
||||||
__right_pressed = false;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case SDLK_SPACE:
|
case SDLK_SPACE:
|
||||||
case SDLK_w:
|
case SDLK_w:
|
||||||
|
@ -55,9 +55,8 @@ void resetGlobals() {
|
|||||||
__buttons_main_menu.clear();
|
__buttons_main_menu.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void showLoadMenu(void * /*UNUSED*/, Button * /*UNUSED*/) {
|
void showLoadMenu(void */*UNUSED*/, Button */*UNUSED*/) {
|
||||||
auto loadMenu = createLoadScene(__buttons_main_menu.back()->getRenderer(),
|
auto loadMenu = createLoadScene(__buttons_main_menu.back()->getRenderer(), "levels", loadLevel, false, false);
|
||||||
"levels", loadLevel, false, false);
|
|
||||||
std::lock_guard<std::mutex> lock(render_mutex);
|
std::lock_guard<std::mutex> lock(render_mutex);
|
||||||
game_scenes.pop_back();
|
game_scenes.pop_back();
|
||||||
resetGlobals();
|
resetGlobals();
|
||||||
@ -68,9 +67,9 @@ void __updateSelectedButton_MainMenu(uint64_t new_index) {
|
|||||||
if (new_index != (uint64_t)-1) {
|
if (new_index != (uint64_t)-1) {
|
||||||
__buttons_main_menu[new_index]->setHighlight();
|
__buttons_main_menu[new_index]->setHighlight();
|
||||||
|
|
||||||
if (__cur_button_index_main_menu != (uint64_t)-1 &&
|
if (__cur_button_index_main_menu != (uint64_t)-1 && new_index != __cur_button_index_main_menu) {
|
||||||
new_index != __cur_button_index_main_menu) {
|
__buttons_main_menu[__cur_button_index_main_menu]
|
||||||
__buttons_main_menu[__cur_button_index_main_menu]->unsetHighlight();
|
->unsetHighlight();
|
||||||
}
|
}
|
||||||
__cur_button_index_main_menu = new_index;
|
__cur_button_index_main_menu = new_index;
|
||||||
}
|
}
|
||||||
@ -79,7 +78,7 @@ void __updateSelectedButton_MainMenu(uint64_t new_index) {
|
|||||||
void handleKeyUpMainMenu(SDL_Keycode key, SDLPP::Scene & /*UNUSED*/) {
|
void handleKeyUpMainMenu(SDL_Keycode key, SDLPP::Scene & /*UNUSED*/) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SDLK_ESCAPE:
|
case SDLK_ESCAPE:
|
||||||
if (__include_resume) {
|
if(__include_resume) {
|
||||||
resumeMainMenu();
|
resumeMainMenu();
|
||||||
} else {
|
} else {
|
||||||
quitMainMenu();
|
quitMainMenu();
|
||||||
@ -87,7 +86,7 @@ void handleKeyUpMainMenu(SDL_Keycode key, SDLPP::Scene & /*UNUSED*/) {
|
|||||||
break;
|
break;
|
||||||
case SDLK_DOWN:
|
case SDLK_DOWN:
|
||||||
case SDLK_s:
|
case SDLK_s:
|
||||||
if (__cur_button_index_main_menu == __buttons_main_menu.size() - 1) {
|
if(__cur_button_index_main_menu == __buttons_main_menu.size() - 1) {
|
||||||
__updateSelectedButton_MainMenu(0);
|
__updateSelectedButton_MainMenu(0);
|
||||||
} else {
|
} else {
|
||||||
__updateSelectedButton_MainMenu(__cur_button_index_main_menu + 1);
|
__updateSelectedButton_MainMenu(__cur_button_index_main_menu + 1);
|
||||||
@ -95,15 +94,14 @@ void handleKeyUpMainMenu(SDL_Keycode key, SDLPP::Scene & /*UNUSED*/) {
|
|||||||
break;
|
break;
|
||||||
case SDLK_UP:
|
case SDLK_UP:
|
||||||
case SDLK_w:
|
case SDLK_w:
|
||||||
if (__cur_button_index_main_menu == 0) {
|
if(__cur_button_index_main_menu == 0) {
|
||||||
__updateSelectedButton_MainMenu(__buttons_main_menu.size() - 1);
|
__updateSelectedButton_MainMenu(__buttons_main_menu.size() - 1);
|
||||||
} else {
|
} else {
|
||||||
__updateSelectedButton_MainMenu(__cur_button_index_main_menu - 1);
|
__updateSelectedButton_MainMenu(__cur_button_index_main_menu - 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SDLK_RETURN:
|
case SDLK_RETURN:
|
||||||
if (__cur_button_index_main_menu >= 0 &&
|
if(__cur_button_index_main_menu >= 0 && __cur_button_index_main_menu < __buttons_main_menu.size()) {
|
||||||
__cur_button_index_main_menu < __buttons_main_menu.size()) {
|
|
||||||
__buttons_main_menu[__cur_button_index_main_menu]
|
__buttons_main_menu[__cur_button_index_main_menu]
|
||||||
->performFunction();
|
->performFunction();
|
||||||
}
|
}
|
||||||
@ -114,13 +112,10 @@ void handleKeyUpMainMenu(SDL_Keycode key, SDLPP::Scene & /*UNUSED*/) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<SDLPP::Scene>
|
std::shared_ptr<SDLPP::Scene>
|
||||||
createSceneMainMenu(std::shared_ptr<SDLPP::Renderer> &renderer,
|
createSceneMainMenu(std::shared_ptr<SDLPP::Renderer> &renderer, bool include_restart, bool include_resume, bool transparent_bg) {
|
||||||
bool include_restart, bool include_resume,
|
|
||||||
bool transparent_bg) {
|
|
||||||
auto scene = std::make_shared<SDLPP::Scene>(renderer);
|
auto scene = std::make_shared<SDLPP::Scene>(renderer);
|
||||||
auto bg = std::make_shared<SDLPP::RectangleRender>(
|
auto bg = std::make_shared<SDLPP::RectangleRender>(0, 0, 10, 10, renderer,
|
||||||
0, 0, 10, 10, renderer,
|
transparent_bg ? "#00000088" : MARIO_OVERWORLD_COLORKEY, true);
|
||||||
transparent_bg ? "#00000088" : MARIO_OVERWORLD_COLORKEY, true);
|
|
||||||
bg->setPermanent();
|
bg->setPermanent();
|
||||||
bg->setId(1);
|
bg->setId(1);
|
||||||
scene->addObject(bg);
|
scene->addObject(bg);
|
||||||
@ -146,29 +141,27 @@ createSceneMainMenu(std::shared_ptr<SDLPP::Renderer> &renderer,
|
|||||||
default_button_theme.font_outline_color_disabled = "#787878";
|
default_button_theme.font_outline_color_disabled = "#787878";
|
||||||
default_button_theme.outline = 0.1;
|
default_button_theme.outline = 0.1;
|
||||||
// buttons
|
// buttons
|
||||||
if (include_resume) {
|
if(include_resume) {
|
||||||
__buttons_main_menu.emplace_back(std::make_shared<Button>(
|
__buttons_main_menu.emplace_back(std::make_shared<Button>(
|
||||||
0.2, 0.25, 0.6, 0.1, renderer, "RESUME", default_button_theme,
|
0.2, 0.25, 0.6, 0.1, renderer, "RESUME", default_button_theme,
|
||||||
resumeMainMenuCallback, nullptr));
|
resumeMainMenuCallback, nullptr));
|
||||||
__buttons_main_menu.back()->setAlignment(SDLPP::OBJ_CENTER,
|
__buttons_main_menu.back()->setAlignment(SDLPP::OBJ_CENTER,
|
||||||
SDLPP::OBJ_CENTER);
|
SDLPP::OBJ_CENTER);
|
||||||
__buttons_main_menu.back()->setPermanent();
|
__buttons_main_menu.back()->setPermanent();
|
||||||
__buttons_main_menu.back()->setButtonIndex(__buttons_main_menu.size() -
|
__buttons_main_menu.back()->setButtonIndex(__buttons_main_menu.size() - 1);
|
||||||
1);
|
|
||||||
}
|
}
|
||||||
if (include_restart || include_resume) {
|
if(include_restart || include_resume) {
|
||||||
__buttons_main_menu.emplace_back(std::make_shared<Button>(
|
__buttons_main_menu.emplace_back(std::make_shared<Button>(
|
||||||
0.2, 0.4, 0.6, 0.1, renderer, "RESTART", default_button_theme,
|
0.2, 0.4, 0.6, 0.1, renderer, "RESTART", default_button_theme,
|
||||||
restartMainMenuCallback, nullptr));
|
restartMainMenuCallback, nullptr));
|
||||||
__buttons_main_menu.back()->setAlignment(SDLPP::OBJ_CENTER,
|
__buttons_main_menu.back()->setAlignment(SDLPP::OBJ_CENTER,
|
||||||
SDLPP::OBJ_CENTER);
|
SDLPP::OBJ_CENTER);
|
||||||
__buttons_main_menu.back()->setPermanent();
|
__buttons_main_menu.back()->setPermanent();
|
||||||
__buttons_main_menu.back()->setButtonIndex(__buttons_main_menu.size() -
|
__buttons_main_menu.back()->setButtonIndex(__buttons_main_menu.size() - 1);
|
||||||
1);
|
|
||||||
}
|
}
|
||||||
__buttons_main_menu.emplace_back(
|
__buttons_main_menu.emplace_back(std::make_shared<Button>(
|
||||||
std::make_shared<Button>(0.2, 0.55, 0.6, 0.1, renderer, "LOAD",
|
0.2, 0.55, 0.6, 0.1, renderer, "LOAD", default_button_theme,
|
||||||
default_button_theme, showLoadMenu, nullptr));
|
showLoadMenu, nullptr));
|
||||||
__buttons_main_menu.back()->setAlignment(SDLPP::OBJ_CENTER,
|
__buttons_main_menu.back()->setAlignment(SDLPP::OBJ_CENTER,
|
||||||
SDLPP::OBJ_CENTER);
|
SDLPP::OBJ_CENTER);
|
||||||
__buttons_main_menu.back()->setPermanent();
|
__buttons_main_menu.back()->setPermanent();
|
||||||
@ -199,8 +192,7 @@ void additionalRenderMainMenu(std::shared_ptr<SDLPP::Scene> & /*UNUSED*/) {
|
|||||||
}
|
}
|
||||||
if (__quit_scenes_main_menu) {
|
if (__quit_scenes_main_menu) {
|
||||||
game_scenes.pop_back();
|
game_scenes.pop_back();
|
||||||
game_scenes.back().scene->unpauseScene();
|
if(__restart_scenes_main_menu) {
|
||||||
if (__restart_scenes_main_menu) {
|
|
||||||
loadLastLevel();
|
loadLastLevel();
|
||||||
}
|
}
|
||||||
resetGlobals();
|
resetGlobals();
|
||||||
@ -254,13 +246,11 @@ void pollEventsMainMenu(std::shared_ptr<SDLPP::Scene> &scene) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SceneStruct createGameMainMenuScene(std::shared_ptr<SDLPP::Renderer> &renderer,
|
SceneStruct
|
||||||
bool include_restart, bool include_resume,
|
createGameMainMenuScene(std::shared_ptr<SDLPP::Renderer> &renderer, bool include_restart, bool include_resume, bool transparent_background) {
|
||||||
bool transparent_background) {
|
|
||||||
__include_resume = include_resume;
|
__include_resume = include_resume;
|
||||||
SceneStruct ret{};
|
SceneStruct ret{};
|
||||||
ret.scene = createSceneMainMenu(renderer, include_restart, include_resume,
|
ret.scene = createSceneMainMenu(renderer, include_restart, include_resume, transparent_background);
|
||||||
transparent_background);
|
|
||||||
ret.additionalRender = additionalRenderMainMenu;
|
ret.additionalRender = additionalRenderMainMenu;
|
||||||
ret.doInput = pollEventsMainMenu;
|
ret.doInput = pollEventsMainMenu;
|
||||||
__update_scenes_main_menu = true;
|
__update_scenes_main_menu = true;
|
||||||
|
@ -90,9 +90,6 @@ Scene::getObjects( const std::unordered_set< int > &objectIDs ) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
void Scene::updateScene() {
|
void Scene::updateScene() {
|
||||||
if(paused) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// check for objects that should be removed
|
// check for objects that should be removed
|
||||||
checkKilled();
|
checkKilled();
|
||||||
std::lock_guard< std::mutex > lock( render_mutex );
|
std::lock_guard< std::mutex > lock( render_mutex );
|
||||||
@ -105,14 +102,6 @@ void Scene::updateScene() {
|
|||||||
}
|
}
|
||||||
prev_ticks = now_ticks;
|
prev_ticks = now_ticks;
|
||||||
}
|
}
|
||||||
void Scene::pauseScene() {
|
|
||||||
paused = true;
|
|
||||||
diff_ticks = SDL_GetTicks() - prev_ticks;
|
|
||||||
}
|
|
||||||
void Scene::unpauseScene() {
|
|
||||||
paused = false;
|
|
||||||
prev_ticks = SDL_GetTicks() - diff_ticks;
|
|
||||||
}
|
|
||||||
std::vector< std::pair< uint64_t, std::shared_ptr< RenderObject > > >
|
std::vector< std::pair< uint64_t, std::shared_ptr< RenderObject > > >
|
||||||
Scene::getCollisions( RenderObject &r ) {
|
Scene::getCollisions( RenderObject &r ) {
|
||||||
if ( r.getHidden() )
|
if ( r.getHidden() )
|
||||||
|
@ -28,8 +28,6 @@ public:
|
|||||||
std::vector< std::shared_ptr< RenderObject > >
|
std::vector< std::shared_ptr< RenderObject > >
|
||||||
getObjects( const std::unordered_set< int > &objectIDs );
|
getObjects( const std::unordered_set< int > &objectIDs );
|
||||||
void updateScene();
|
void updateScene();
|
||||||
void pauseScene();
|
|
||||||
void unpauseScene();
|
|
||||||
std::vector< std::pair< uint64_t, std::shared_ptr< RenderObject > > >
|
std::vector< std::pair< uint64_t, std::shared_ptr< RenderObject > > >
|
||||||
getCollisions( RenderObject &r );
|
getCollisions( RenderObject &r );
|
||||||
void visitCollisions( RenderObject &r, Visitor &v );
|
void visitCollisions( RenderObject &r, Visitor &v );
|
||||||
@ -65,14 +63,12 @@ private:
|
|||||||
std::shared_ptr< Renderer > renderer;
|
std::shared_ptr< Renderer > renderer;
|
||||||
std::shared_ptr< Texture > background;
|
std::shared_ptr< Texture > background;
|
||||||
int prev_ticks = 0;
|
int prev_ticks = 0;
|
||||||
int diff_ticks = 0;
|
|
||||||
std::shared_ptr< RenderObject > leftmost_obj;
|
std::shared_ptr< RenderObject > leftmost_obj;
|
||||||
std::shared_ptr< RenderObject > rightmost_obj;
|
std::shared_ptr< RenderObject > rightmost_obj;
|
||||||
uint64_t max_object_id = 0;
|
uint64_t max_object_id = 0;
|
||||||
std::mutex render_mutex;
|
std::mutex render_mutex;
|
||||||
std::unordered_set<uint64_t> background_ids;
|
std::unordered_set<uint64_t> background_ids;
|
||||||
uint64_t first_non_background_index = 1;
|
uint64_t first_non_background_index = 1;
|
||||||
bool paused = false;
|
|
||||||
};
|
};
|
||||||
} // end of namespace SDLPP
|
} // end of namespace SDLPP
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user