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<Pointer<Click>>,
mut parts: Query<(Entity, &Transform, &PartConfigHolder, &mut Selectable), With<Part>>,
drag: Res<ShipEditorDrag>,
mut commands: Commands,
asset_server: Res<AssetServer>,
) {
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();
}
}
}