Added x and y camera offsets when aiming in third person

This commit is contained in:
Woeful_Wolf 2024-01-28 16:10:10 +02:00
parent c78f6c0bc2
commit 43566bca32

View File

@ -526,6 +526,7 @@ impl Scene {
audio: &mut AudioFrontend, audio: &mut AudioFrontend,
scene_data: &SceneData, scene_data: &SceneData,
client: &Client, client: &Client,
settings: &Settings,
) { ) {
span!(_guard, "maintain", "Scene::maintain"); span!(_guard, "maintain", "Scene::maintain");
// Get player position. // Get player position.
@ -632,15 +633,28 @@ impl Scene {
viewpoint_eye_height viewpoint_eye_height
} }
}, },
CameraMode::ThirdPerson if scene_data.is_aiming => viewpoint_height * 1.16, CameraMode::ThirdPerson if scene_data.is_aiming => {
viewpoint_height * 1.16 + settings.gameplay.aim_offset_y
},
CameraMode::ThirdPerson => viewpoint_eye_height, CameraMode::ThirdPerson => viewpoint_eye_height,
CameraMode::Freefly => 0.0, CameraMode::Freefly => 0.0,
}; };
let right = match self.camera.get_mode() {
CameraMode::FirstPerson => 0.0,
CameraMode::ThirdPerson if scene_data.is_aiming => {
settings.gameplay.aim_offset_x
},
CameraMode::ThirdPerson => 0.0,
CameraMode::Freefly => 0.0,
};
// Alter camera position to match player. // Alter camera position to match player.
let tilt = self.camera.get_orientation().y; let tilt = self.camera.get_orientation().y;
let dist = self.camera.get_distance(); let dist = self.camera.get_distance();
Vec3::unit_z() * (up * viewpoint_scale - tilt.min(0.0).sin() * dist * 0.6) Vec3::unit_z() * (up * viewpoint_scale - tilt.min(0.0).sin() * dist * 0.6)
+ self.camera.right() * (right * viewpoint_scale)
} else { } else {
self.figure_mgr self.figure_mgr
.viewpoint_offset(scene_data, scene_data.viewpoint_entity) .viewpoint_offset(scene_data, scene_data.viewpoint_entity)