Integrate Level Selection scene transition

Internal Changelog:
- Changing scene now return the scene to change into
- Set the level pack and selected level
main
En Yi 2024-07-08 18:18:48 +08:00
parent 98b957a8ff
commit 41f3656ba1
4 changed files with 22 additions and 11 deletions

View File

@ -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 // 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) 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; 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->scenes[engine->curr_scene]->state = 0;
engine->curr_scene = idx; engine->curr_scene = idx;
engine->scenes[engine->curr_scene]->state = SCENE_COMPLETE_ACTIVE; 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) void change_focused_scene(GameEngine_t* engine, unsigned int idx)

View File

@ -86,8 +86,8 @@ void process_active_scene_inputs(GameEngine_t* engine);
void update_curr_scene(GameEngine_t* engine); void update_curr_scene(GameEngine_t* engine);
void render_curr_scene(GameEngine_t* engine); void render_curr_scene(GameEngine_t* engine);
void change_scene(GameEngine_t* engine, unsigned int idx); Scene_t* change_scene(GameEngine_t* engine, unsigned int idx);
void change_active_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); void change_focused_scene(GameEngine_t* engine, unsigned int idx);
bool load_sfx(GameEngine_t* engine, const char* snd_name, uint32_t tag_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); void play_sfx(GameEngine_t* engine, unsigned int tag_idx);

1
main.c
View File

@ -68,7 +68,6 @@ int main(void)
{ {
level_scene.data.level_pack = pack; level_scene.data.level_pack = pack;
level_scene.data.current_level = 0; level_scene.data.current_level = 0;
load_level_tilemap(&level_scene, 0);
} }
MenuScene_t menu_scene; MenuScene_t menu_scene;

View File

@ -39,18 +39,27 @@ static void level_select_do_action(Scene_t* scene, ActionType_t action, bool pre
} }
break; break;
case ACTION_EXIT: case ACTION_EXIT:
if (!pressed)
{
if(scene->engine != NULL) if(scene->engine != NULL)
{ {
change_scene(scene->engine, MAIN_MENU_SCENE); change_scene(scene->engine, MAIN_MENU_SCENE);
} }
}
break; break;
case ACTION_CONFIRM: case ACTION_CONFIRM:
if (!pressed)
{
if (data->level_pack != NULL && data->scroll_area.curr_selection < data->level_pack->n_levels) if (data->level_pack != NULL && data->scroll_area.curr_selection < data->level_pack->n_levels)
{ {
// TODO: Need to load the current level // TODO: Need to load the current level
change_scene(scene->engine, LEVEL_SELECT_SCENE); 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; break;
default: default:
break; break;
@ -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_UP, ACTION_UP);
sc_map_put_64(&scene->scene.action_map, KEY_DOWN, ACTION_DOWN); 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_Q, ACTION_EXIT);
sc_map_put_64(&scene->scene.action_map, KEY_ENTER, ACTION_CONFIRM);
} }
void free_level_select_scene(LevelSelectScene_t* scene) void free_level_select_scene(LevelSelectScene_t* scene)
{ {