From bef2ee2813c889ad522103721a08cbd33e601873 Mon Sep 17 00:00:00 2001 From: En Yi Date: Sat, 4 May 2024 18:28:53 +0800 Subject: [PATCH] Expose initial window size to scene This is so that each scene does not need to hardcode render layer size --- engine/engine.c | 5 ++++- engine/engine.h | 6 +++++- level_load_test.c | 4 +--- main.c | 4 +--- scene_test.c | 5 +---- scenes/editor_scene.c | 10 +++++++++- scenes/game_scene.c | 12 +++++++++--- scenes/menu_scene.c | 10 +++++++++- water_test.c | 4 +--- 9 files changed, 40 insertions(+), 20 deletions(-) diff --git a/engine/engine.c b/engine/engine.c index 4c8a45f..9f90ce7 100644 --- a/engine/engine.c +++ b/engine/engine.c @@ -1,7 +1,7 @@ #include "engine.h" #include "mempool.h" -void init_engine(GameEngine_t* engine) +void init_engine(GameEngine_t* engine, Vector2 starting_win_size) { InitAudioDevice(); sc_queue_init(&engine->key_buffer); @@ -9,6 +9,8 @@ void init_engine(GameEngine_t* engine) memset(engine->sfx_list.sfx, 0, engine->sfx_list.n_sfx * sizeof(SFX_t)); init_memory_pools(); init_assets(&engine->assets); + engine->intended_window_size = starting_win_size; + InitWindow(starting_win_size.x, starting_win_size.y, "raylib"); } void deinit_engine(GameEngine_t* engine) @@ -17,6 +19,7 @@ void deinit_engine(GameEngine_t* engine) free_memory_pools(); sc_queue_term(&engine->key_buffer); CloseAudioDevice(); + CloseWindow(); } void process_inputs(GameEngine_t* engine, Scene_t* scene) diff --git a/engine/engine.h b/engine/engine.h index 3e61a1f..39cf674 100644 --- a/engine/engine.h +++ b/engine/engine.h @@ -24,6 +24,10 @@ typedef struct GameEngine { SFXList_t sfx_list; // Maintain own queue to handle key presses struct sc_queue_32 key_buffer; + // This is the original size of the window. + // This is in case of window scaling, where there needs to be + // an absolute reference + Vector2 intended_window_size; } GameEngine_t; //typedef enum SceneType { @@ -71,7 +75,7 @@ struct Scene { }; -void init_engine(GameEngine_t* engine); +void init_engine(GameEngine_t* engine, Vector2 starting_win_size); void deinit_engine(GameEngine_t* engine); void process_inputs(GameEngine_t* engine, Scene_t* scene); diff --git a/level_load_test.c b/level_load_test.c index a6494de..79d1b9b 100644 --- a/level_load_test.c +++ b/level_load_test.c @@ -19,8 +19,7 @@ static GameEngine_t engine = int main(void) { - init_engine(&engine); - InitWindow(1280, 640, "raylib"); + init_engine(&engine, (Vector2){1280,640}); SetTargetFPS(60); load_from_infofile("res/test_assets.info", &engine.assets); @@ -62,6 +61,5 @@ int main(void) } free_scene(&scene.scene); term_level_scene_data(&scene.data); - CloseWindow(); deinit_engine(&engine); } diff --git a/main.c b/main.c index 2e99e47..2290e59 100644 --- a/main.c +++ b/main.c @@ -25,8 +25,7 @@ int main(void) { // Initialization //-------------------------------------------------------------------------------------- - init_engine(&engine); - InitWindow(screenWidth, screenHeight, "raylib"); + init_engine(&engine, (Vector2){screenWidth, screenHeight}); SetTargetFPS(60); // Set our game to run at 60 frames-per-second #ifndef NDEBUG load_from_infofile("res/assets.info.raw", &engine.assets); @@ -114,5 +113,4 @@ int main(void) free_game_scene(&level_scene); free_menu_scene(&menu_scene); deinit_engine(&engine); - CloseWindow(); } diff --git a/scene_test.c b/scene_test.c index 140895d..48a84ca 100644 --- a/scene_test.c +++ b/scene_test.c @@ -39,9 +39,8 @@ void update_loop(void) int main(void) { - InitWindow(1280, 640, "raylib"); + init_engine(&engine, (Vector2){1280,640}); SetTargetFPS(60); - init_engine(&engine); #ifndef NDEBUG load_from_infofile("res/assets.info.raw", &engine.assets); @@ -100,6 +99,4 @@ int main(void) #endif free_sandbox_scene(&scene); deinit_engine(&engine); - CloseWindow(); - } diff --git a/scenes/editor_scene.c b/scenes/editor_scene.c index ccc9796..4c92513 100644 --- a/scenes/editor_scene.c +++ b/scenes/editor_scene.c @@ -1009,7 +1009,15 @@ void init_sandbox_scene(LevelScene_t* scene) SELECTION_REGION_WIDTH, SELECTION_REGION_HEIGHT } ); - add_scene_layer(&scene->scene, 1280, 640, (Rectangle){0, 0, 1280, 640}); + add_scene_layer( + &scene->scene, scene->scene.engine->intended_window_size.x, + scene->scene.engine->intended_window_size.y, + (Rectangle){ + 0, 0, + scene->scene.engine->intended_window_size.x, + scene->scene.engine->intended_window_size.y + } + ); BeginTextureMode(scene->scene.layers.render_layers[SELECTION_LAYER].layer_tex); ClearBackground(LIGHTGRAY); diff --git a/scenes/game_scene.c b/scenes/game_scene.c index ae533da..1f720e0 100644 --- a/scenes/game_scene.c +++ b/scenes/game_scene.c @@ -360,18 +360,24 @@ void init_game_scene(LevelScene_t* scene) (Rectangle){25, 25, 32*TILE_SIZE, 18*TILE_SIZE} ); - // TODO: Remove the hardcoded window size scene->scene.bg_colour = LIGHTGRAY; add_scene_layer( &scene->scene, scene->data.game_rec.width, scene->data.game_rec.height, scene->data.game_rec ); - add_scene_layer(&scene->scene, 1280, 640, (Rectangle){0, 0, 1280, 640}); + add_scene_layer( + &scene->scene, scene->scene.engine->intended_window_size.x, + scene->scene.engine->intended_window_size.y, + (Rectangle){ + 0, 0, + scene->scene.engine->intended_window_size.x, + scene->scene.engine->intended_window_size.y + } + ); create_player(&scene->scene.ent_manager); update_entity_manager(&scene->scene.ent_manager); - // insert level scene systems sc_array_add(&scene->scene.systems, &update_tilemap_system); sc_array_add(&scene->scene.systems, &player_movement_input_system); sc_array_add(&scene->scene.systems, &player_bbox_update_system); diff --git a/scenes/menu_scene.c b/scenes/menu_scene.c index f9bc55e..5398d8d 100644 --- a/scenes/menu_scene.c +++ b/scenes/menu_scene.c @@ -160,7 +160,15 @@ void init_menu_scene(MenuScene_t* scene) scene->data.max_comp = 4; scene->data.selected_comp = 0; scene->data.mode = MOUSE_MODE; - add_scene_layer(&scene->scene, 1280, 640, (Rectangle){0, 0, 1280, 640}); + add_scene_layer( + &scene->scene, scene->scene.engine->intended_window_size.x, + scene->scene.engine->intended_window_size.y, + (Rectangle){ + 0, 0, + scene->scene.engine->intended_window_size.x, + scene->scene.engine->intended_window_size.y + } + ); sc_map_put_64(&scene->scene.action_map, KEY_UP, ACTION_UP); sc_map_put_64(&scene->scene.action_map, KEY_DOWN, ACTION_DOWN); diff --git a/water_test.c b/water_test.c index 36f01d2..43ecdcb 100644 --- a/water_test.c +++ b/water_test.c @@ -395,9 +395,8 @@ static void player_simple_movement_system(Scene_t* scene) int main(void) { - InitWindow(1280, 640, "raylib"); + init_engine(&engine, (Vector2){1280,640}); SetTargetFPS(60); - init_engine(&engine); LevelScene_t scene; scene.scene.engine = &engine; @@ -470,5 +469,4 @@ int main(void) free_scene(&scene.scene); term_level_scene_data(&scene.data); deinit_engine(&engine); - CloseWindow(); }