use crate::attachment::{Joint, SnapOfJoint}; use crate::ecs::ThrustEvent; use bevy::color::palettes::css::{FUCHSIA, GREEN}; use bevy::dev_tools::picking_debug::DebugPickingMode; use bevy::math::Vec3Swizzles; use bevy::prelude::{ Gizmos, GlobalTransform, Query, ResMut, Resource, With, }; use bevy::{ app::{App, Update}, ecs::{event::EventWriter, system::Res}, input::{ButtonInput, keyboard::KeyCode}, }; use bevy::log::debug; use bevy_rapier2d::render::DebugRenderContext; 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, 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); } }