use bevy::{pbr::CascadeShadowConfigBuilder, prelude::*}; use crate::planet::PLANET_RADIUS; pub const LIGHT_RANGE: f32 = 900.0; static BLUE: Color = Color::linear_rgb(0.0, 0.0, 1.0); static PINK: Color = Color::linear_rgb(199.0 / 255.0, 21.0 / 255.0, 113.0 / 255.0); fn spawn_static_lights( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, ) { let pink_light = PointLight { intensity: 1_000_000.0, range: LIGHT_RANGE, color: PINK, radius: 1.0, shadows_enabled: true, ..Default::default() }; let blue_light = PointLight { intensity: 1_000_000.0, range: LIGHT_RANGE, color: BLUE, radius: 1.0, shadows_enabled: true, ..Default::default() }; commands.insert_resource(AmbientLight { color: Color::WHITE, brightness: 8_000.0, }); let _cascade_shadow_config = CascadeShadowConfigBuilder { first_cascade_far_bound: 0.3, maximum_distance: 3.0, ..default() } .build(); // up light commands .spawn(( Transform::from_xyz(0.0, PLANET_RADIUS + 30.0, 0.0), pink_light, Visibility::Visible, )) .with_children(|builder| { builder.spawn(( Mesh3d(meshes.add(Mesh::from(Sphere::new(10.0)))), MeshMaterial3d(materials.add(StandardMaterial { base_color: BLUE, emissive: PINK.into(), ..Default::default() })), Transform::default(), Visibility::Inherited, )); }); // down light commands .spawn(( Transform::from_xyz(0.0, -PLANET_RADIUS - 30.0, 0.0), blue_light, Visibility::Visible, )) .with_children(|builder| { builder.spawn(( Mesh3d(meshes.add(Mesh::from(Sphere::new(10.0)))), MeshMaterial3d(materials.add(StandardMaterial { base_color: PINK, emissive: BLUE.into(), ..Default::default() })), Transform::default(), Visibility::Inherited, )); }); } pub struct CyberSpaceLightsPlugin; impl Plugin for CyberSpaceLightsPlugin { fn build(&self, app: &mut App) { app.add_systems(Startup, spawn_static_lights); } }