Refactor 2d_viewport_to_world example with let chains

This commit is contained in:
Tim Blackbird 2025-07-11 20:51:27 +02:00
parent 20dfae9a2d
commit 31ef22aa0a

View File

@ -21,49 +21,32 @@ fn main() {
fn draw_cursor( fn draw_cursor(
camera_query: Single<(&Camera, &GlobalTransform)>, camera_query: Single<(&Camera, &GlobalTransform)>,
window: Query<&Window>, window: Single<&Window>,
mut gizmos: Gizmos, mut gizmos: Gizmos,
) { ) {
let (camera, camera_transform) = *camera_query; let (camera, camera_transform) = *camera_query;
let Ok(window) = window.single() else {
return;
};
let Some(cursor_position) = window.cursor_position() else { if let Some(cursor_position) = window.cursor_position()
return; // Calculate a world position based on the cursor's position.
}; && let Ok(world_pos) = camera.viewport_to_world_2d(camera_transform, cursor_position)
// To test Camera::world_to_viewport, convert result back to viewport space and then back to world space.
// Calculate a world position based on the cursor's position. && let Ok(viewport_check) = camera.world_to_viewport(camera_transform, world_pos.extend(0.0))
let Ok(world_pos) = camera.viewport_to_world_2d(camera_transform, cursor_position) else { && let Ok(world_check) = camera.viewport_to_world_2d(camera_transform, viewport_check.xy())
return; {
}; gizmos.circle_2d(world_pos, 10., WHITE);
// Should be the same as world_pos
// To test Camera::world_to_viewport, convert result back to viewport space and then back to world space. gizmos.circle_2d(world_check, 8., RED);
let Ok(viewport_check) = camera.world_to_viewport(camera_transform, world_pos.extend(0.0)) }
else {
return;
};
let Ok(world_check) = camera.viewport_to_world_2d(camera_transform, viewport_check.xy()) else {
return;
};
gizmos.circle_2d(world_pos, 10., WHITE);
// Should be the same as world_pos
gizmos.circle_2d(world_check, 8., RED);
} }
fn controls( fn controls(
mut camera_query: Query<(&mut Camera, &mut Transform, &mut Projection)>, camera_query: Single<(&mut Camera, &mut Transform, &mut Projection)>,
window: Query<&Window>, window: Single<&Window>,
input: Res<ButtonInput<KeyCode>>, input: Res<ButtonInput<KeyCode>>,
time: Res<Time<Fixed>>, time: Res<Time<Fixed>>,
) { ) {
let Ok(window) = window.single() else { let (mut camera, mut transform, mut projection) = camera_query.into_inner();
return;
};
let Ok((mut camera, mut transform, mut projection)) = camera_query.single_mut() else {
return;
};
let fspeed = 600.0 * time.delta_secs(); let fspeed = 600.0 * time.delta_secs();
let uspeed = fspeed as u32; let uspeed = fspeed as u32;
let window_size = window.resolution.physical_size(); let window_size = window.resolution.physical_size();