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

View File

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

View File

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

4
main.c
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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