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))); let material = MeshMaterial2d(materials.add(ColorMaterial::from_color(RED))); let transform = Transform::default().with_scale(Vec3::splat(50.0)); commands.spawn(( Name::new("Depth: 1"), transform, mesh.clone(), material.clone(), ParallaxDepth(1.0), Visibility::Inherited, children![(Text2d("1.0".into()), Transform::from_xyz(0.0, 35.0, 0.0))], )); commands.spawn(( Name::new("Depth: 2"), transform, mesh.clone(), material.clone(), ParallaxDepth(2.0), Visibility::Inherited, children![(Text2d("2.0".into()), Transform::from_xyz(0.0, 35.0, 0.0))], )); commands.spawn(( Name::new("Depth: 4"), transform, mesh.clone(), material.clone(), ParallaxDepth(4.0), Visibility::Inherited, children![(Text2d("4.0".into()), Transform::from_xyz(0.0, 35.0, 0.0))], )); commands.spawn(( Name::new("Depth: 8"), transform, mesh.clone(), material.clone(), ParallaxDepth(8.0), Visibility::Inherited, children![(Text2d("8.0".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.), RED, ) .outer_edges(); }); }