better targeting handling

This commit is contained in:
yuni 2024-04-05 20:38:44 +02:00
parent 974de97ded
commit 2f65c652c8
2 changed files with 19 additions and 14 deletions

View file

@ -7,6 +7,7 @@ actor 0 0 0 jupiter
rotationx -0.50 rotationx -0.50
rotationz -0.28 rotationz -0.28
angularmomentum 30 30 30 angularmomentum 30 30 30
clickable no
actor 0 593051 0 suit actor 0 593051 0 suit
relativeto jupiter relativeto jupiter

View file

@ -598,23 +598,27 @@ fn handle_input(
ew_togglemusic.send(audio::ToggleMusicEvent()); ew_togglemusic.send(audio::ToggleMusicEvent());
} }
if mouse_input.just_pressed(settings.key_selectobject) { if mouse_input.just_pressed(settings.key_selectobject) {
if q_target.is_empty() { if let Ok(camtrans) = q_camera.get_single() {
if let Ok(camtrans) = q_camera.get_single() { let objects: Vec<(Entity, &Transform)> = q_objects.iter().collect();
let objects: Vec<(Entity, &Transform)> = q_objects if let (Some(new_target), _dist) = camera::find_closest_target::<Entity>(objects, camtrans) {
.iter() if let Ok(old_target) = q_target.get_single() {
.map(|(entity, transform)| (entity, transform)) if old_target != new_target {
.collect(); commands.entity(old_target).remove::<IsTargeted>();
if let (Some(entity), _dist) = camera::find_closest_target::<Entity>(objects, camtrans) { commands.entity(new_target).insert(IsTargeted);
commands.entity(entity).insert(IsTargeted); ew_sfx.send(audio::PlaySfxEvent(audio::Sfx::Click));
}
}
else {
commands.entity(new_target).insert(IsTargeted);
ew_sfx.send(audio::PlaySfxEvent(audio::Sfx::Click));
}
}
else {
for entity in &q_target {
commands.entity(entity).remove::<IsTargeted>();
ew_sfx.send(audio::PlaySfxEvent(audio::Sfx::Click)); ew_sfx.send(audio::PlaySfxEvent(audio::Sfx::Click));
} }
} }
} }
else {
for entity in &q_target {
commands.entity(entity).remove::<IsTargeted>();
ew_sfx.send(audio::PlaySfxEvent(audio::Sfx::Click));
}
}
} }
} }