Skip to main content

subtr_actor/stats/calculators/
settings.rs

1use super::*;
2
3#[derive(Debug, Clone, Default, PartialEq)]
4pub struct PlayerSettings {
5    pub steering_sensitivity: Option<f32>,
6    pub camera_fov: Option<f32>,
7    pub camera_height: Option<f32>,
8    pub camera_pitch: Option<f32>,
9    pub camera_distance: Option<f32>,
10    pub camera_stiffness: Option<f32>,
11    pub camera_swivel_speed: Option<f32>,
12    pub camera_transition_speed: Option<f32>,
13}
14
15#[derive(Debug, Clone, Default, PartialEq)]
16pub struct SettingsCalculator {
17    player_settings: HashMap<PlayerId, PlayerSettings>,
18}
19
20impl SettingsCalculator {
21    pub fn new() -> Self {
22        Self::default()
23    }
24
25    pub fn player_settings(&self) -> &HashMap<PlayerId, PlayerSettings> {
26        &self.player_settings
27    }
28
29    pub fn apply_replay_meta(&mut self, meta: &ReplayMeta) -> SubtrActorResult<()> {
30        for player in meta.player_order() {
31            let Some(stats) = &player.stats else {
32                continue;
33            };
34            self.player_settings.insert(
35                player.remote_id.clone(),
36                PlayerSettings {
37                    steering_sensitivity: get_header_f32(
38                        stats,
39                        &["SteeringSensitivity", "SteerSensitivity"],
40                    ),
41                    camera_fov: get_header_f32(stats, &["CameraFOV"]),
42                    camera_height: get_header_f32(stats, &["CameraHeight"]),
43                    camera_pitch: get_header_f32(stats, &["CameraPitch"]),
44                    camera_distance: get_header_f32(stats, &["CameraDistance"]),
45                    camera_stiffness: get_header_f32(stats, &["CameraStiffness"]),
46                    camera_swivel_speed: get_header_f32(stats, &["CameraSwivelSpeed"]),
47                    camera_transition_speed: get_header_f32(stats, &["CameraTransitionSpeed"]),
48                },
49            );
50        }
51        Ok(())
52    }
53
54    pub fn update(&mut self) -> SubtrActorResult<()> {
55        Ok(())
56    }
57}