use crate::prelude::*; use crate::ship_editor::components::{Part, PartConfigHolder, Selectable, OUTLINE_RENDER_LAYER}; use crate::ship_editor::input::ShipEditorDrag; pub fn click_select( ev: On>, mut parts: Query<(Entity, &Transform, &PartConfigHolder, &mut Selectable), With>, drag: Res, mut commands: Commands, asset_server: Res, ) { debug!("click detected"); if !drag.can_select { return } let Ok((part_entity, part_transform, part, mut part_selectable)) = parts.get_mut(ev.entity) else { error!("No Part found upon part selection. The observer probably wasn't removed."); return; }; if !part_selectable.is_selected { let mut sprite = Sprite::from_image(asset_server.load("textures/outline.png")); sprite.custom_size = Some(vec2(part.0.physics.width as f32, part.0.physics.height as f32) * 1.0625); let outline_entity = commands.spawn(( part_transform.clone(), sprite, )); part_selectable.outline_entity = Some(outline_entity.id()); part_selectable.is_selected = true; } else { part_selectable.is_selected = false; if let Some(outline_entity) = part_selectable.outline_entity { commands.entity(outline_entity).despawn(); } } }