use bevy::prelude::*; use crate::deck::Card; /// Debugging systems pub struct DebugPlugin; impl Plugin for DebugPlugin { fn build(&self, app: &mut App) { app.add_observer(track_card_info) .add_systems(Startup, init_ui); } } #[derive(Component)] pub(crate) struct DebugText; fn init_ui(mut commands: Commands) { commands .spawn(( Sprite::from_color(Color::BLACK.with_alpha(0.9), [250.0, 150.0].into()), DebugText, Visibility::Hidden, Transform::default().with_translation(Vec3::new(0.0, 0.0, 1.0)), PickingBehavior::IGNORE, )) .with_children(|parent| { parent.spawn(( Text2d("...".to_string()), DebugText, Transform::default().with_translation(Vec3::new(0.0, 0.0, 2.0)), PickingBehavior::IGNORE, )); }); } fn track_card_info( trigger: Trigger>, mut transforms: Query<&mut Transform, (With, With)>, window: Query<&Window>, ) { let p = trigger.pointer_location.position; transforms.iter_mut().for_each(|mut t| { let offset = window.single().resolution.size() / 2.0; let pos = p - offset + Vec2::new(-125.0, 75.0); t.translation.x = pos.x; t.translation.y = -pos.y; }); } pub(crate) fn set_debug_card( trigger: Trigger>, cards: Query<&Card>, mut vis: Query<&mut Visibility, With>, mut debug_text: Query<&mut Text2d, With>, ) { let card = cards.get(trigger.entity()).unwrap(); debug_text.iter_mut().for_each(|mut text| { text.0 = format!("{:#?}", card); }); vis.iter_mut().for_each(|mut v| { *v = Visibility::Inherited; }); } pub(crate) fn hide_debug_card( _trigger: Trigger>, mut vis: Query<&mut Visibility, With>, ) { vis.iter_mut().for_each(|mut v| { *v = Visibility::Hidden; }); }