cyber_rider/src/lights.rs
2025-01-26 16:45:43 -08:00

90 lines
2.5 KiB
Rust

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<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>>,
) {
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);
}
}