use core::ops::RangeInclusive;
use super::compensation_curve::AutoExposureCompensationCurve;
use bevy_asset::Handle;
use bevy_ecs::{prelude::Component, reflect::ReflectComponent};
use bevy_image::Image;
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
use bevy_render::{extract_component::ExtractComponent, view::Hdr};
use bevy_utils::default;
#[derive(Component, Clone, Reflect, ExtractComponent)]
#[reflect(Component, Default, Clone)]
#[require(Hdr)]
pub struct AutoExposure {
pub range: RangeInclusive<f32>,
pub filter: RangeInclusive<f32>,
pub speed_brighten: f32,
pub speed_darken: f32,
pub exponential_transition_distance: f32,
pub metering_mask: Handle<Image>,
pub compensation_curve: Handle<AutoExposureCompensationCurve>,
}
impl Default for AutoExposure {
fn default() -> Self {
Self {
range: -8.0..=8.0,
filter: 0.10..=0.90,
speed_brighten: 3.0,
speed_darken: 1.0,
exponential_transition_distance: 1.5,
metering_mask: default(),
compensation_curve: default(),
}
}
}