use bevy::prelude::*;
use bevy_atmosphere::*;
use bevy_flycam::PlayerPlugin;
fn main() {
App::build()
.insert_resource(Msaa { samples: 4 })
.insert_resource(AtmosphereMat::default()) .add_plugins(DefaultPlugins)
.add_plugin(PlayerPlugin) .add_plugin(AtmospherePlugin { dynamic: true }) .add_startup_system(setup_environment.system())
.add_system(daylight_cycle.system())
.run();
}
struct Sun;
fn daylight_cycle(mut sky_mat: ResMut<AtmosphereMat>, mut query: Query<&mut Transform, With<Sun>>, time: Res<Time>) {
let mut pos = sky_mat.sun_position;
let t = time.time_since_startup().as_millis() as f32 / 2000.0;
pos.y = t.sin();
pos.z = t.cos();
sky_mat.sun_position = pos;
if let Some(mut light_trans) = query.iter_mut().next() {
light_trans.translation = pos * 5.0;
}
}
fn setup_environment(mut commands: Commands, mut meshes: ResMut<Assets<Mesh>>, mut materials: ResMut<Assets<StandardMaterial>>) {
commands.spawn_bundle(LightBundle {
transform: Transform::from_translation(Vec3::new(2.0, 1.0, 2.5)),
..Default::default()
})
.insert(Sun);
commands.spawn_bundle(PbrBundle {
mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })),
material: materials.add(StandardMaterial::from(Color::rgb(1.0, 0.0, 0.5))),
..Default::default()
});
}