From 5b1d7b8a8f98cfaa484a5d27e152c30eedb7edee Mon Sep 17 00:00:00 2001 From: En Yi Date: Sun, 27 Jul 2025 15:14:31 +0800 Subject: [PATCH] Fix camera update Changelog: - Add a delay before shifting the camera when changing facing direction - Fix camera shifting higher when crate jumping --- scenes/camera_systems.c | 16 ++++++++++++++-- scenes/scene_impl.h | 2 ++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/scenes/camera_systems.c b/scenes/camera_systems.c index dcaef3f..ef20b65 100644 --- a/scenes/camera_systems.c +++ b/scenes/camera_systems.c @@ -20,7 +20,18 @@ void camera_update_system(Scene_t* scene) target_vel = p_ctransform->velocity; CMovementState_t* p_movement = get_component(p_player, CMOVEMENTSTATE_T); CPlayerState_t* p_pstate = get_component(p_player, CPLAYERSTATE_T); - data->camera.target_pos.x += (p_movement->x_dir == 1) ? width/6: -width/6; + if (data->camera.offset_dir != p_movement->x_dir) { + data->camera.delay += scene->delta_time; + if (data->camera.delay >= 0.25f) { + data->camera.delay = 0.0f; + data->camera.offset_dir = p_movement->x_dir; + } + } + else + { + data->camera.delay = 0.0f; + } + data->camera.target_pos.x += width * 1.0f * data->camera.offset_dir / 6; if (p_movement->ground_state == 0b01 || (p_movement->water_state & 1) @@ -32,7 +43,8 @@ void camera_update_system(Scene_t* scene) if (p_player->position.y >= data->camera.base_y) { data->camera.target_pos.y = p_player->position.y; - data->camera.target_pos.y += p_ctransform->velocity.y * 0.2; + data->camera.target_pos.y += + (p_ctransform->velocity.y > 0) ? p_ctransform->velocity.y * 0.2 : 0; } } data->camera.target_pos.x = Clamp(data->camera.target_pos.x, data->game_rec.width / 2, diff --git a/scenes/scene_impl.h b/scenes/scene_impl.h index 05ff6a2..f265e06 100644 --- a/scenes/scene_impl.h +++ b/scenes/scene_impl.h @@ -43,6 +43,8 @@ typedef struct LevelCamera { float c; // damping factor float k; // spring constant float range_limit; + int offset_dir; + float delay; }LevelCamera_t; typedef enum LevelSceneState {