From e670af25190dbd41503166fb783f469b18565b85 Mon Sep 17 00:00:00 2001 From: En Yi Date: Mon, 14 Aug 2023 21:22:03 +0800 Subject: [PATCH] Fix camera for levels smaller that viewport --- scenes/editor_scene.c | 5 ++++- scenes/game_scene.c | 5 ++++- scenes/game_systems.c | 4 ++-- scenes/scene_impl.h | 4 ++-- scenes/scene_systems.c | 9 ++++++--- water_test.c | 5 ++++- 6 files changed, 22 insertions(+), 10 deletions(-) diff --git a/scenes/editor_scene.c b/scenes/editor_scene.c index 55d0937..41c07e6 100644 --- a/scenes/editor_scene.c +++ b/scenes/editor_scene.c @@ -782,7 +782,10 @@ void init_sandbox_scene(LevelScene_t* scene) init_scene(&scene->scene, &level_scene_render_func, &level_do_action); scene->data.tilemap.tiles = all_tiles; - init_level_scene_data(&scene->data, MAX_N_TILES, all_tiles); + init_level_scene_data( + &scene->data, MAX_N_TILES, all_tiles, + (Rectangle){25, 25, VIEWABLE_MAP_WIDTH*TILE_SIZE, VIEWABLE_MAP_HEIGHT*TILE_SIZE} + ); for (size_t i = 0; i < scene->data.tilemap.width; ++i) { unsigned int tile_idx = (scene->data.tilemap.height - 1) * scene->data.tilemap.width + i; diff --git a/scenes/game_scene.c b/scenes/game_scene.c index 2b334a2..63eacfe 100644 --- a/scenes/game_scene.c +++ b/scenes/game_scene.c @@ -368,7 +368,10 @@ void init_game_scene(LevelScene_t* scene) init_scene(&scene->scene, &level_scene_render_func, &level_do_action); scene->data.tilemap.tiles = all_tiles; - init_level_scene_data(&scene->data, MAX_N_TILES, all_tiles); + init_level_scene_data( + &scene->data, MAX_N_TILES, all_tiles, + (Rectangle){25, 25, 32*TILE_SIZE, 18*TILE_SIZE} + ); create_player(&scene->scene.ent_manager, &scene->scene.engine->assets); update_entity_manager(&scene->scene.ent_manager); diff --git a/scenes/game_systems.c b/scenes/game_systems.c index 82b4083..b7d85e6 100644 --- a/scenes/game_systems.c +++ b/scenes/game_systems.c @@ -1649,8 +1649,8 @@ void camera_update_system(Scene_t* scene) } Vector2 max = GetWorldToScreen2D( (Vector2){ - lvl_scene->data.tilemap.width * TILE_SIZE, - lvl_scene->data.tilemap.height * TILE_SIZE + fmax(lvl_scene->data.tilemap.width * TILE_SIZE, lvl_scene->data.game_rec.width), + fmax(lvl_scene->data.tilemap.height * TILE_SIZE, lvl_scene->data.game_rec.height) }, lvl_scene->data.cam ); diff --git a/scenes/scene_impl.h b/scenes/scene_impl.h index e594f90..13b285d 100644 --- a/scenes/scene_impl.h +++ b/scenes/scene_impl.h @@ -38,8 +38,8 @@ void init_game_scene(LevelScene_t* scene); void free_game_scene(LevelScene_t* scene); void init_sandbox_scene(LevelScene_t* scene); void free_sandbox_scene(LevelScene_t* scene); -//void init_level_scene_data(LevelSceneData_t* data, uint32_t max_tiles, Tile_t* tiles, Rectangle view_zone); -void init_level_scene_data(LevelSceneData_t* data, uint32_t max_tiles, Tile_t* tiles); +void init_level_scene_data(LevelSceneData_t* data, uint32_t max_tiles, Tile_t* tiles, Rectangle view_zone); +//void init_level_scene_data(LevelSceneData_t* data, uint32_t max_tiles, Tile_t* tiles); void term_level_scene_data(LevelSceneData_t* data); void reload_level_tilemap(LevelScene_t* scene); void load_next_level_tilemap(LevelScene_t* scene); diff --git a/scenes/scene_systems.c b/scenes/scene_systems.c index ca92177..2c1e6c3 100644 --- a/scenes/scene_systems.c +++ b/scenes/scene_systems.c @@ -2,10 +2,13 @@ #include "ent_impl.h" #include "constants.h" -void init_level_scene_data(LevelSceneData_t* data, uint32_t max_tiles, Tile_t* tiles) +void init_level_scene_data(LevelSceneData_t* data, uint32_t max_tiles, Tile_t* tiles, Rectangle view_zone) +//void init_level_scene_data(LevelSceneData_t* data, uint32_t max_tiles, Tile_t* tiles) { - data->game_viewport = LoadRenderTexture(VIEWABLE_MAP_WIDTH*TILE_SIZE, VIEWABLE_MAP_HEIGHT*TILE_SIZE); - data->game_rec = (Rectangle){25, 25, VIEWABLE_MAP_WIDTH*TILE_SIZE, VIEWABLE_MAP_HEIGHT*TILE_SIZE}; + //data->game_viewport = LoadRenderTexture(VIEWABLE_MAP_WIDTH*TILE_SIZE, VIEWABLE_MAP_HEIGHT*TILE_SIZE); + //data->game_rec = (Rectangle){25, 25, VIEWABLE_MAP_WIDTH*TILE_SIZE, VIEWABLE_MAP_HEIGHT*TILE_SIZE}; + data->game_viewport = LoadRenderTexture(view_zone.width, view_zone.height); + data->game_rec = view_zone; data->cam = (Camera2D){0}; data->cam.rotation = 0.0f; data->cam.zoom = 1.0f; diff --git a/water_test.c b/water_test.c index ced83ef..20bb9b3 100644 --- a/water_test.c +++ b/water_test.c @@ -419,7 +419,10 @@ int main(void) LevelScene_t scene; scene.scene.engine = &engine; init_scene(&scene.scene, &level_scene_render_func, &level_do_action); - init_level_scene_data(&scene.data, MAX_N_TILES, all_tiles); + init_level_scene_data( + &scene.data, MAX_N_TILES, all_tiles, + (Rectangle){25, 25, VIEWABLE_MAP_WIDTH*TILE_SIZE, VIEWABLE_MAP_HEIGHT*TILE_SIZE} + ); assert(scene.data.tilemap.n_tiles <= MAX_N_TILES); for (size_t i = 0; i < scene.data.tilemap.width; ++i)