use bevy::{ app::{App, Update}, ecs::{event::EventWriter, system::Res}, input::{ButtonInput, keyboard::KeyCode}, }; use bevy::color::palettes::css::{FUCHSIA, GREEN}; use bevy::dev_tools::picking_debug::DebugPickingMode; use bevy::gizmos::AppGizmoBuilder; use bevy::log::{debug, info}; use bevy::math::Vec3Swizzles; use bevy::prelude::{ChildOf, GizmoConfigGroup, Gizmos, GlobalTransform, IntoScheduleConfigs, Query, Reflect, ResMut, Resource, Transform, With}; use bevy_rapier2d::render::DebugRenderContext; use crate::attachment::{Joint, JointSnapFor}; use crate::ecs::{Part, ThrustEvent}; pub fn key_input_plugin(app: &mut App) { app.add_systems(Update, directional_keys) .add_systems(Update, debug_render_keybind) .init_resource::() .add_systems(Update, draw_attachment_debug); } #[derive(Resource, Default)] struct AttachmentDebugRes(bool); fn debug_render_keybind( keys: Res>, mut debug_render: ResMut, mut picking_debug_mode: ResMut, mut attachment_debug: ResMut, ) { if keys.just_pressed(KeyCode::F3) { debug_render.enabled = !debug_render.enabled; } if keys.just_pressed(KeyCode::F4) { *picking_debug_mode = DebugPickingMode::Noisy; } if keys.just_pressed(KeyCode::F5) { attachment_debug.0 = !attachment_debug.0; } } fn directional_keys( keys: Res>, mut thrust_event: EventWriter, ) { if keys.just_pressed(KeyCode::KeyW) || keys.just_pressed(KeyCode::ArrowUp) { thrust_event.write(ThrustEvent::Up(true)); } else if keys.just_released(KeyCode::KeyW) || keys.just_released(KeyCode::ArrowUp) { thrust_event.write(ThrustEvent::Up(false)); } if keys.just_pressed(KeyCode::KeyS) || keys.just_pressed(KeyCode::ArrowDown) { thrust_event.write(ThrustEvent::Down(true)); } else if keys.just_released(KeyCode::KeyS) || keys.just_released(KeyCode::ArrowDown) { thrust_event.write(ThrustEvent::Down(false)); } if keys.just_pressed(KeyCode::KeyA) || keys.just_pressed(KeyCode::ArrowLeft) { thrust_event.write(ThrustEvent::Left(true)); } else if keys.just_released(KeyCode::KeyA) || keys.just_released(KeyCode::ArrowLeft) { thrust_event.write(ThrustEvent::Left(false)); } if keys.just_pressed(KeyCode::KeyD) || keys.just_pressed(KeyCode::ArrowRight) { thrust_event.write(ThrustEvent::Right(true)); } else if keys.just_released(KeyCode::KeyD) || keys.just_released(KeyCode::ArrowRight) { thrust_event.write(ThrustEvent::Right(false)); } } fn draw_attachment_debug(joints: Query<&GlobalTransform, With>, snaps: Query<&GlobalTransform, With>, mut gizmos: Gizmos, mut state: ResMut) { if !state.0 { return; } for joint_target in joints.iter() { gizmos.cross_2d( joint_target.translation().xy(), 4.0, FUCHSIA ); } for joint_snap in snaps.iter() { gizmos.cross_2d( joint_snap.translation().xy(), 4.0, GREEN ); } }