From b96adc4d1847fc9c2d5852f90c906b9b5d82db6c Mon Sep 17 00:00:00 2001 From: Greeble <166992735+greeble-dev@users.noreply.github.com> Date: Tue, 13 May 2025 11:24:55 +0100 Subject: [PATCH] Added CI screenshot support. --- tests/3d/test_mipmap_filter.rs | 138 ++++++++++++++++++++++++--------- 1 file changed, 103 insertions(+), 35 deletions(-) diff --git a/tests/3d/test_mipmap_filter.rs b/tests/3d/test_mipmap_filter.rs index dd044680a2..15be283db3 100644 --- a/tests/3d/test_mipmap_filter.rs +++ b/tests/3d/test_mipmap_filter.rs @@ -11,16 +11,10 @@ use bevy::{ prelude::*, }; -fn main() { - App::new() - .insert_resource(VisibleCombo(KeyCode::Digit1)) - .add_plugins(DefaultPlugins) - .add_systems(Startup, setup) - .add_systems(Update, (update_controls, update_camera)) - .run(); -} +#[derive(Resource)] +struct Combos(Vec); -fn setup(mut commands: Commands, asset_server: Res) { +fn main() { let default_sampler = ImageSamplerDescriptor { address_mode_u: ImageAddressMode::Repeat, address_mode_v: ImageAddressMode::Repeat, @@ -30,9 +24,7 @@ fn setup(mut commands: Commands, asset_server: Res) { ..Default::default() }; - // Declare combinations of sampler settings linked to a key code. - - let combos: &[Combo] = &[ + let combos = Combos(vec![ Combo { key: KeyCode::Digit1, label: "1: None", @@ -63,11 +55,34 @@ fn setup(mut commands: Commands, asset_server: Res) { ..default_sampler.clone() }, }, - ]; + ]); - // Spawn each combination. + let mut app = App::new(); - for combo in combos.iter() { + app.insert_resource(combos) + .insert_resource(VisibleCombo(KeyCode::Digit1)) + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + ( + update_controls, + update_visibility, + update_text, + update_camera, + ), + ); + + #[cfg(feature = "bevy_ci_testing")] + app.insert_resource(ci::Capture::default()) + .add_systems(Startup, ci::setup) + .add_systems(Update, ci::update); + + app.run(); +} + +fn setup(mut commands: Commands, asset_server: Res, combos: Res) { + for combo in combos.0.iter() { let asset = GltfAssetLabel::Scene(0).from_asset("models/checkerboard/checkerboard.gltf"); let sampler = combo.sampler.clone(); @@ -83,8 +98,6 @@ fn setup(mut commands: Commands, asset_server: Res) { )); } - // Spawn camera and text. - commands.spawn(( Camera3d::default(), Projection::from(PerspectiveProjection { @@ -115,30 +128,17 @@ struct Combo { struct VisibleCombo(KeyCode); fn update_controls( - mut text: Single<&mut Text>, keyboard_input: Res>, mut time: ResMut>, - mut combos: Query<(&Combo, &mut Visibility)>, + combos: Query<&Combo>, mut visible_combo: ResMut, ) { - // Update combo visibility. - - for (combo, _) in &combos { + for combo in &combos { if keyboard_input.just_pressed(combo.key) { *visible_combo = VisibleCombo(combo.key); } } - for (combo, mut visibility) in &mut combos { - *visibility = if *visible_combo == VisibleCombo(combo.key) { - Visibility::Visible - } else { - Visibility::Hidden - }; - } - - // Update pause. - if keyboard_input.just_pressed(KeyCode::Space) { if time.is_paused() { time.unpause(); @@ -146,9 +146,27 @@ fn update_controls( time.pause(); } } +} - // Update help text. +fn update_visibility( + mut combos: Query<(&Combo, &mut Visibility)>, + visible_combo: Res, +) { + for (combo, mut visibility) in &mut combos { + *visibility = if *visible_combo == VisibleCombo(combo.key) { + Visibility::Visible + } else { + Visibility::Hidden + }; + } +} +fn update_text( + mut text: Single<&mut Text>, + time: Res>, + combos: Query<(&Combo, &Visibility)>, + visible_combo: Res, +) { text.clear(); text.push_str(&format!( @@ -169,11 +187,61 @@ fn update_controls( } } -fn update_camera(time: Res