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
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)

View File

@ -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);

1
main.c
View File

@ -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;

View File

@ -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)
{