use bevy::{
camera::visibility,
camera::visibility::{InheritedVisibility, ViewVisibility, Visibility, VisibilityClass},
color::Color,
ecs::{bundle::Bundle, component::Component},
prelude::{ReflectComponent, ReflectDefault},
reflect::Reflect,
render::sync_world::SyncToRenderWorld,
transform::components::{GlobalTransform, Transform},
};
#[derive(Component, Default)]
pub struct Light2d {
pub ambient_light: AmbientLight2d,
}
#[derive(Component, Clone, Reflect)]
#[reflect(Component, Default)]
#[require(SyncToRenderWorld, Transform, Visibility, VisibilityClass)]
#[component(on_add = visibility::add_visibility_class::<PointLight2d>)]
pub struct PointLight2d {
pub color: Color,
pub intensity: f32,
pub radius: f32,
pub falloff: f32,
pub cast_shadows: bool,
}
impl Default for PointLight2d {
fn default() -> Self {
Self {
color: Color::WHITE,
intensity: 1.0,
radius: 0.5,
falloff: 0.0,
cast_shadows: false,
}
}
}
#[derive(Component, Clone, Reflect)]
#[reflect(Component, Default)]
#[require(SyncToRenderWorld, Transform, Visibility, VisibilityClass)]
#[component(on_add = visibility::add_visibility_class::<SpotLight2d>)]
pub struct SpotLight2d {
pub color: Color,
pub intensity: f32,
pub radius: f32,
pub falloff: f32,
pub direction: f32,
pub inner_angle: f32,
pub outer_angle: f32,
pub source_width: f32,
pub cast_shadows: bool,
}
impl Default for SpotLight2d {
fn default() -> Self {
Self {
color: Color::WHITE,
intensity: 1.0,
radius: 0.5,
falloff: 0.0,
direction: -90.,
inner_angle: -180.,
outer_angle: -90.,
source_width: 1.,
cast_shadows: false,
}
}
}
#[derive(Bundle, Default)]
#[deprecated(
since = "0.5.0",
note = "Use the `PointLight2d` component instead. Inserting `PointLight2d` will also insert the other components required automatically."
)]
pub struct PointLight2dBundle {
pub point_light: PointLight2d,
pub transform: Transform,
pub global_transform: GlobalTransform,
pub visibility: Visibility,
pub inherited_visibility: InheritedVisibility,
pub view_visibility: ViewVisibility,
}
#[derive(Component, Clone, Reflect)]
#[reflect(Component, Default)]
pub struct AmbientLight2d {
pub color: Color,
pub brightness: f32,
}
impl Default for AmbientLight2d {
fn default() -> Self {
Self {
color: Color::WHITE,
brightness: 1.0,
}
}
}