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
rotationz -0.28
angularmomentum 30 30 30
clickable no
actor 0 593051 0 suit
relativeto jupiter

View file

@ -598,17 +598,20 @@ fn handle_input(
ew_togglemusic.send(audio::ToggleMusicEvent());
}
if mouse_input.just_pressed(settings.key_selectobject) {
if q_target.is_empty() {
if let Ok(camtrans) = q_camera.get_single() {
let objects: Vec<(Entity, &Transform)> = q_objects
.iter()
.map(|(entity, transform)| (entity, transform))
.collect();
if let (Some(entity), _dist) = camera::find_closest_target::<Entity>(objects, camtrans) {
commands.entity(entity).insert(IsTargeted);
let objects: Vec<(Entity, &Transform)> = q_objects.iter().collect();
if let (Some(new_target), _dist) = camera::find_closest_target::<Entity>(objects, camtrans) {
if let Ok(old_target) = q_target.get_single() {
if old_target != new_target {
commands.entity(old_target).remove::<IsTargeted>();
commands.entity(new_target).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 {
@ -617,4 +620,5 @@ fn handle_input(
}
}
}
}
}