use super::mapping::{AudioVisualMapping, VisualDistanceAttenuation};
use super::sync::VisualSyncSettings;
use super::types::ColorRGBA;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VisualAudioConfig {
pub enabled: bool,
pub master_intensity: f32,
pub audio_mapping: AudioVisualMapping,
pub sync_settings: VisualSyncSettings,
pub distance_attenuation: VisualDistanceAttenuation,
pub color_scheme: ColorScheme,
pub accessibility: VisualAccessibilitySettings,
pub performance: VisualPerformanceSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ColorScheme {
pub scheme_type: ColorSchemeType,
pub source_colors: HashMap<String, ColorRGBA>,
pub ambient_color: ColorRGBA,
pub color_temperature: f32,
pub saturation: f32,
pub brightness: f32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ColorSchemeType {
Default,
HighContrast,
Warm,
Cool,
Monochromatic,
Custom,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VisualAccessibilitySettings {
pub high_contrast: bool,
pub color_blind_friendly: bool,
pub reduced_motion: bool,
pub indicator_scaling: f32,
pub text_scaling: f32,
pub audio_description_mode: bool,
pub screen_reader_compatible: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VisualPerformanceSettings {
pub target_fps: f32,
pub quality_level: f32,
pub lod_enabled: bool,
pub culling_distance: f32,
pub max_particles: usize,
pub anti_aliasing: u8,
pub adaptive_quality: bool,
}
impl Default for VisualAudioConfig {
fn default() -> Self {
Self {
enabled: true,
master_intensity: 0.8,
audio_mapping: AudioVisualMapping::default(),
sync_settings: VisualSyncSettings::default(),
distance_attenuation: VisualDistanceAttenuation::default(),
color_scheme: ColorScheme::default(),
accessibility: VisualAccessibilitySettings::default(),
performance: VisualPerformanceSettings::default(),
}
}
}
impl Default for ColorScheme {
fn default() -> Self {
Self {
scheme_type: ColorSchemeType::Default,
source_colors: HashMap::new(),
ambient_color: ColorRGBA {
r: 0.1,
g: 0.1,
b: 0.2,
a: 1.0,
},
color_temperature: 6500.0, saturation: 0.8,
brightness: 0.7,
}
}
}
impl Default for VisualAccessibilitySettings {
fn default() -> Self {
Self {
high_contrast: false,
color_blind_friendly: false,
reduced_motion: false,
indicator_scaling: 1.0,
text_scaling: 1.0,
audio_description_mode: false,
screen_reader_compatible: false,
}
}
}
impl Default for VisualPerformanceSettings {
fn default() -> Self {
Self {
target_fps: 60.0,
quality_level: 0.8,
lod_enabled: true,
culling_distance: 50.0,
max_particles: 1000,
anti_aliasing: 4,
adaptive_quality: true,
}
}
}