use bevy::prelude::*; use bevy_rapier2d::prelude::{Collider, ColliderDisabled}; use bevy_replicon::prelude::FromClient; use crate::clientevent::{PartDragControlEvent, PartDragEvent}; use crate::ecs::Part; pub fn part_dragging_plugin(app: &mut App) { app.add_systems(Update, (handle_dragged_parts, handle_start_stop_drag)); } // todo: attachment #[derive(Component)] pub struct BeingDragged; fn handle_dragged_parts(mut transforms: Query<&mut Transform, (With)>, mut events: EventReader>) { for event in events.read() { let Ok(mut transform) = transforms.get_mut(event.0) else { continue; }; transform.translation = (event.1, 0.0).into(); } } fn handle_start_stop_drag(mut colliders: Query<&Collider, With>, mut events: EventReader>, mut commands: Commands) { for event in events.read() { let entity = match &event.event { PartDragControlEvent::Start(e) => *e, PartDragControlEvent::Stop(e) => *e, }; let Ok(_) = colliders.get(entity) else { continue; }; match &event.event { PartDragControlEvent::Start(_) => { commands.entity(entity) .insert(BeingDragged); }, PartDragControlEvent::Stop(_) => { commands.entity(entity).remove::(); } } } }