diff --git a/engine/engine.c b/engine/engine.c index 2b36796..e7d3eda 100644 --- a/engine/engine.c +++ b/engine/engine.c @@ -89,10 +89,10 @@ void process_inputs(GameEngine_t* engine, Scene_t* scene) } } -void change_scene(GameEngine_t* engine, unsigned int idx) +Scene_t* change_scene(GameEngine_t* engine, unsigned int idx) { // Backwards compat - change_active_scene(engine, idx); + return change_active_scene(engine, idx); } bool load_sfx(GameEngine_t* engine, const char* snd_name, uint32_t tag_idx) @@ -361,11 +361,13 @@ void remove_child_scene(GameEngine_t* engine, unsigned int idx) child->parent_scene = NULL; } -void change_active_scene(GameEngine_t* engine, unsigned int idx) +Scene_t* change_active_scene(GameEngine_t* engine, unsigned int idx) { engine->scenes[engine->curr_scene]->state = 0; engine->curr_scene = idx; engine->scenes[engine->curr_scene]->state = SCENE_COMPLETE_ACTIVE; + sc_queue_clear(&engine->key_buffer); + return engine->scenes[engine->curr_scene]; } void change_focused_scene(GameEngine_t* engine, unsigned int idx) diff --git a/engine/engine.h b/engine/engine.h index e03b0a1..a205116 100644 --- a/engine/engine.h +++ b/engine/engine.h @@ -86,8 +86,8 @@ void process_active_scene_inputs(GameEngine_t* engine); void update_curr_scene(GameEngine_t* engine); void render_curr_scene(GameEngine_t* engine); -void change_scene(GameEngine_t* engine, unsigned int idx); -void change_active_scene(GameEngine_t* engine, unsigned int idx); +Scene_t* change_scene(GameEngine_t* engine, unsigned int idx); +Scene_t* change_active_scene(GameEngine_t* engine, unsigned int idx); void change_focused_scene(GameEngine_t* engine, unsigned int idx); bool load_sfx(GameEngine_t* engine, const char* snd_name, uint32_t tag_idx); void play_sfx(GameEngine_t* engine, unsigned int tag_idx); diff --git a/main.c b/main.c index 30c2f59..231d779 100644 --- a/main.c +++ b/main.c @@ -68,7 +68,6 @@ int main(void) { level_scene.data.level_pack = pack; level_scene.data.current_level = 0; - load_level_tilemap(&level_scene, 0); } MenuScene_t menu_scene; diff --git a/scenes/level_select_scene.c b/scenes/level_select_scene.c index e4fdaa3..7fd8829 100644 --- a/scenes/level_select_scene.c +++ b/scenes/level_select_scene.c @@ -39,17 +39,26 @@ static void level_select_do_action(Scene_t* scene, ActionType_t action, bool pre } break; case ACTION_EXIT: - if(scene->engine != NULL) + if (!pressed) { - change_scene(scene->engine, MAIN_MENU_SCENE); + if(scene->engine != NULL) + { + change_scene(scene->engine, MAIN_MENU_SCENE); + } } break; case ACTION_CONFIRM: - if (data->level_pack != NULL && data->scroll_area.curr_selection < data->level_pack->n_levels) + if (!pressed) { - // TODO: Need to load the current level - change_scene(scene->engine, LEVEL_SELECT_SCENE); + if (data->level_pack != NULL && data->scroll_area.curr_selection < data->level_pack->n_levels) + { + // TODO: Need to load the current level + LevelScene_t* level_scene = (LevelScene_t*)change_scene(scene->engine, GAME_SCENE); + level_scene->data.level_pack = data->level_pack; + level_scene->data.current_level = data->scroll_area.curr_selection; + reload_level_tilemap(level_scene); + } } break; default: @@ -94,6 +103,7 @@ void init_level_select_scene(LevelSelectScene_t* scene) sc_map_put_64(&scene->scene.action_map, KEY_UP, ACTION_UP); sc_map_put_64(&scene->scene.action_map, KEY_DOWN, ACTION_DOWN); sc_map_put_64(&scene->scene.action_map, KEY_Q, ACTION_EXIT); + sc_map_put_64(&scene->scene.action_map, KEY_ENTER, ACTION_CONFIRM); } void free_level_select_scene(LevelSelectScene_t* scene) {