Skip to main content

subtr_actor/stats/calculators/
settings.rs

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