Fix camera update

Changelog:
- Add a delay before shifting the camera when changing facing direction
- Fix camera shifting higher when crate jumping
main
En Yi 2025-07-27 15:14:31 +08:00
parent 3c9e425bf1
commit 5b1d7b8a8f
2 changed files with 16 additions and 2 deletions

View File

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

View File

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