From ade967fb675c9dfe23d4f6c06726bf95e1bb3d37 Mon Sep 17 00:00:00 2001 From: "Elijah C. Voigt" Date: Tue, 7 Nov 2023 20:39:34 -0800 Subject: [PATCH] Hey 2d and 3d selection work! Small bug w.r.t. selecting multiple entities at once, should be a quick fix... --- src/display3d.rs | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/display3d.rs b/src/display3d.rs index bc5e69d..56d7a6f 100644 --- a/src/display3d.rs +++ b/src/display3d.rs @@ -493,21 +493,19 @@ fn select( hit::intersects3d(&ray, mesh, >).and_then(|_hit| { selectable .iter() - .find(|&parent| { - children - .iter_descendants(parent) - .any(|child| child == entity) + .find(|&e| { + // A child was hit (pieces) + let primary = entity == e; + // This entity was hit (tile hitboxes) + let secondary = children + .iter_descendants(e) + .any(|child| child == entity); + + primary || secondary }) .iter() - .for_each(|&parent| { - selected.iter().for_each(|s| { - if s != parent { - commands - .entity(s) - .remove::(); - } - }); - commands.entity(parent).insert(game::Selected); + .for_each(|&e| { + commands.entity(e).insert(game::Selected); }); Some(()) });