use games::*; fn main() { App::new() .add_plugins((BaseGamePlugin { name: "parallax example".into(), title: "Parallax".into(), game_type: GameType::Two, },)) .add_systems(Startup, spawn_background) .add_systems(Update, move_camera) .add_systems(Update, parallax_gizmos) .run(); } fn spawn_background( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, ) { let mesh = Mesh2d(meshes.add(Circle::new(1.0))); commands.spawn(( Name::new("Depth: 1.1"), Transform::default().with_translation(Vec3::new(0.0, 0.0, 0.0)).with_scale(Vec3::splat(50.0)), mesh.clone(), MeshMaterial2d(materials.add(ColorMaterial::from_color(RED))), ParallaxDepth(1.1), Visibility::Inherited, children![(Text2d("1.1".into()), Transform::from_xyz(0.0, 35.0, 0.0))], )); commands.spawn(( Name::new("Depth: 2.1"), Transform::default().with_translation(Vec3::new(0.0, 0.0, -1.0)).with_scale(Vec3::splat(50.0)), mesh.clone(), MeshMaterial2d(materials.add(ColorMaterial::from_color(GREEN))), ParallaxDepth(2.1), Visibility::Inherited, children![(Text2d("2.0".into()), Transform::from_xyz(0.0, 35.0, 0.0))], )); commands.spawn(( Name::new("Depth: 4.1"), Transform::default().with_translation(Vec3::new(0.0, 0.0, -2.0)).with_scale(Vec3::splat(50.0)), mesh.clone(), MeshMaterial2d(materials.add(ColorMaterial::from_color(BLUE))), ParallaxDepth(4.1), Visibility::Inherited, children![(Text2d("4.1".into()), Transform::from_xyz(0.0, 35.0, 0.0))], )); commands.spawn(( Name::new("Depth: 8.1"), Transform::default().with_translation(Vec3::new(0.0, 0.0, -3.0)).with_scale(Vec3::splat(50.0)), mesh.clone(), MeshMaterial2d(materials.add(ColorMaterial::from_color(YELLOW))), ParallaxDepth(8.1), Visibility::Inherited, children![(Text2d("8.1".into()), Transform::from_xyz(0.0, 35.0, 0.0))], )); } fn move_camera(mut t: Single<&mut Transform, With>, keys: Res>) { if keys.pressed(KeyCode::ArrowLeft) { t.translation.x -= 5.0; } else if keys.pressed(KeyCode::ArrowRight) { t.translation.x += 5.0; } if keys.pressed(KeyCode::ArrowDown) { t.translation.y -= 5.0; } else if keys.pressed(KeyCode::ArrowUp) { t.translation.y += 5.0; } } fn parallax_gizmos(mut gizmos: Gizmos, q: Query<&Transform, With>) { // Closest to camera // Parallax(1) q.iter().for_each(|t| { gizmos .grid_2d( t.translation.truncate(), UVec2::new(5, 5), Vec2::splat(10.), MAGENTA, ) .outer_edges(); }); }