Fix camera for levels smaller that viewport

scene_man
En Yi 2023-08-14 21:22:03 +08:00
parent 70d7fda22c
commit e670af2519
6 changed files with 22 additions and 10 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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