subtr-actor 0.5.0

Rocket League replay transformer
Documentation
use super::*;

#[derive(Debug, Clone, Default, PartialEq)]
pub struct PlayerSettings {
    pub steering_sensitivity: Option<f32>,
    pub camera_fov: Option<f32>,
    pub camera_height: Option<f32>,
    pub camera_pitch: Option<f32>,
    pub camera_distance: Option<f32>,
    pub camera_stiffness: Option<f32>,
    pub camera_swivel_speed: Option<f32>,
    pub camera_transition_speed: Option<f32>,
}

#[derive(Debug, Clone, Default, PartialEq)]
pub struct SettingsCalculator {
    player_settings: HashMap<PlayerId, PlayerSettings>,
}

impl SettingsCalculator {
    pub fn new() -> Self {
        Self::default()
    }

    pub fn player_settings(&self) -> &HashMap<PlayerId, PlayerSettings> {
        &self.player_settings
    }

    pub fn apply_replay_meta(&mut self, meta: &ReplayMeta) -> SubtrActorResult<()> {
        for player in meta.player_order() {
            let Some(stats) = &player.stats else {
                continue;
            };
            self.player_settings.insert(
                player.remote_id.clone(),
                PlayerSettings {
                    steering_sensitivity: get_header_f32(
                        stats,
                        &["SteeringSensitivity", "SteerSensitivity"],
                    ),
                    camera_fov: get_header_f32(stats, &["CameraFOV"]),
                    camera_height: get_header_f32(stats, &["CameraHeight"]),
                    camera_pitch: get_header_f32(stats, &["CameraPitch"]),
                    camera_distance: get_header_f32(stats, &["CameraDistance"]),
                    camera_stiffness: get_header_f32(stats, &["CameraStiffness"]),
                    camera_swivel_speed: get_header_f32(stats, &["CameraSwivelSpeed"]),
                    camera_transition_speed: get_header_f32(stats, &["CameraTransitionSpeed"]),
                },
            );
        }
        Ok(())
    }

    pub fn update(&mut self) -> SubtrActorResult<()> {
        Ok(())
    }
}