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, ) { commands.spawn((Parallax(1.0), children![(Text2d("1.0".into()), Transform::from_xyz(0.0, 35.0, 0.0))])); commands.spawn((Parallax(2.0), children![(Text2d("2.0".into()), Transform::from_xyz(0.0, 35.0, 0.0))])); commands.spawn((Parallax(4.0), children![(Text2d("4.0".into()), Transform::from_xyz(0.0, 35.0, 0.0))])); commands.spawn((Parallax(8.0), 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(); }); }