Expose initial window size to scene

This is so that each scene does not need to hardcode render layer size
scene_man
En Yi 2024-05-04 18:28:53 +08:00
parent 75d019aa34
commit bef2ee2813
9 changed files with 40 additions and 20 deletions

View File

@ -1,7 +1,7 @@
#include "engine.h" #include "engine.h"
#include "mempool.h" #include "mempool.h"
void init_engine(GameEngine_t* engine) void init_engine(GameEngine_t* engine, Vector2 starting_win_size)
{ {
InitAudioDevice(); InitAudioDevice();
sc_queue_init(&engine->key_buffer); 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)); memset(engine->sfx_list.sfx, 0, engine->sfx_list.n_sfx * sizeof(SFX_t));
init_memory_pools(); init_memory_pools();
init_assets(&engine->assets); 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) void deinit_engine(GameEngine_t* engine)
@ -17,6 +19,7 @@ void deinit_engine(GameEngine_t* engine)
free_memory_pools(); free_memory_pools();
sc_queue_term(&engine->key_buffer); sc_queue_term(&engine->key_buffer);
CloseAudioDevice(); CloseAudioDevice();
CloseWindow();
} }
void process_inputs(GameEngine_t* engine, Scene_t* scene) void process_inputs(GameEngine_t* engine, Scene_t* scene)

View File

@ -24,6 +24,10 @@ typedef struct GameEngine {
SFXList_t sfx_list; SFXList_t sfx_list;
// Maintain own queue to handle key presses // Maintain own queue to handle key presses
struct sc_queue_32 key_buffer; 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; } GameEngine_t;
//typedef enum SceneType { //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 deinit_engine(GameEngine_t* engine);
void process_inputs(GameEngine_t* engine, Scene_t* scene); void process_inputs(GameEngine_t* engine, Scene_t* scene);

View File

@ -19,8 +19,7 @@ static GameEngine_t engine =
int main(void) int main(void)
{ {
init_engine(&engine); init_engine(&engine, (Vector2){1280,640});
InitWindow(1280, 640, "raylib");
SetTargetFPS(60); SetTargetFPS(60);
load_from_infofile("res/test_assets.info", &engine.assets); load_from_infofile("res/test_assets.info", &engine.assets);
@ -62,6 +61,5 @@ int main(void)
} }
free_scene(&scene.scene); free_scene(&scene.scene);
term_level_scene_data(&scene.data); term_level_scene_data(&scene.data);
CloseWindow();
deinit_engine(&engine); deinit_engine(&engine);
} }

4
main.c
View File

@ -25,8 +25,7 @@ int main(void)
{ {
// Initialization // Initialization
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
init_engine(&engine); init_engine(&engine, (Vector2){screenWidth, screenHeight});
InitWindow(screenWidth, screenHeight, "raylib");
SetTargetFPS(60); // Set our game to run at 60 frames-per-second SetTargetFPS(60); // Set our game to run at 60 frames-per-second
#ifndef NDEBUG #ifndef NDEBUG
load_from_infofile("res/assets.info.raw", &engine.assets); load_from_infofile("res/assets.info.raw", &engine.assets);
@ -114,5 +113,4 @@ int main(void)
free_game_scene(&level_scene); free_game_scene(&level_scene);
free_menu_scene(&menu_scene); free_menu_scene(&menu_scene);
deinit_engine(&engine); deinit_engine(&engine);
CloseWindow();
} }

View File

@ -39,9 +39,8 @@ void update_loop(void)
int main(void) int main(void)
{ {
InitWindow(1280, 640, "raylib"); init_engine(&engine, (Vector2){1280,640});
SetTargetFPS(60); SetTargetFPS(60);
init_engine(&engine);
#ifndef NDEBUG #ifndef NDEBUG
load_from_infofile("res/assets.info.raw", &engine.assets); load_from_infofile("res/assets.info.raw", &engine.assets);
@ -100,6 +99,4 @@ int main(void)
#endif #endif
free_sandbox_scene(&scene); free_sandbox_scene(&scene);
deinit_engine(&engine); deinit_engine(&engine);
CloseWindow();
} }

View File

@ -1009,7 +1009,15 @@ void init_sandbox_scene(LevelScene_t* scene)
SELECTION_REGION_WIDTH, SELECTION_REGION_HEIGHT 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); BeginTextureMode(scene->scene.layers.render_layers[SELECTION_LAYER].layer_tex);
ClearBackground(LIGHTGRAY); ClearBackground(LIGHTGRAY);

View File

@ -360,18 +360,24 @@ void init_game_scene(LevelScene_t* scene)
(Rectangle){25, 25, 32*TILE_SIZE, 18*TILE_SIZE} (Rectangle){25, 25, 32*TILE_SIZE, 18*TILE_SIZE}
); );
// TODO: Remove the hardcoded window size
scene->scene.bg_colour = LIGHTGRAY; scene->scene.bg_colour = LIGHTGRAY;
add_scene_layer( add_scene_layer(
&scene->scene, scene->data.game_rec.width, scene->data.game_rec.height, &scene->scene, scene->data.game_rec.width, scene->data.game_rec.height,
scene->data.game_rec 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); create_player(&scene->scene.ent_manager);
update_entity_manager(&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, &update_tilemap_system);
sc_array_add(&scene->scene.systems, &player_movement_input_system); sc_array_add(&scene->scene.systems, &player_movement_input_system);
sc_array_add(&scene->scene.systems, &player_bbox_update_system); sc_array_add(&scene->scene.systems, &player_bbox_update_system);

View File

@ -160,7 +160,15 @@ void init_menu_scene(MenuScene_t* scene)
scene->data.max_comp = 4; scene->data.max_comp = 4;
scene->data.selected_comp = 0; scene->data.selected_comp = 0;
scene->data.mode = MOUSE_MODE; 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_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);

View File

@ -395,9 +395,8 @@ static void player_simple_movement_system(Scene_t* scene)
int main(void) int main(void)
{ {
InitWindow(1280, 640, "raylib"); init_engine(&engine, (Vector2){1280,640});
SetTargetFPS(60); SetTargetFPS(60);
init_engine(&engine);
LevelScene_t scene; LevelScene_t scene;
scene.scene.engine = &engine; scene.scene.engine = &engine;
@ -470,5 +469,4 @@ int main(void)
free_scene(&scene.scene); free_scene(&scene.scene);
term_level_scene_data(&scene.data); term_level_scene_data(&scene.data);
deinit_engine(&engine); deinit_engine(&engine);
CloseWindow();
} }