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(()) });