Skip to content

Commit

Permalink
Do not panic on non-UI child of UI entity (bevyengine#9621)
Browse files Browse the repository at this point in the history
Legitimately, bevy emits a WARN when encountering entities in UI trees
without NodeBunlde components.

Bevy pretty much always panics when such a thing happens, due to the
update_clipping system.

However, sometimes, it's perfectly legitimate to have a child without UI
nodes in a UI tree. For example, as a "seed" entity that is consumed by
a 3rd party plugin, which will later spawn a valid UI tree. In loading
scenarios, you are pretty much guaranteed to have incomplete children.

The presence of the WARN hints that bevy does not intend to panic on
such occasion (otherwise the warn! would be a panic!) so I assume panic
is an unintended behavior, aka a bug.

## Solution

Early-return instead of panicking.

I did only test that it indeed fixed the panic, not checked for UI
inconsistencies. Though on a logical level, it can only have changed
code that would otherwise panic.

## Alternatives

Instead of early-returning on invalid entity in `update_clipping`, do
not call it with invalid entity in its recursive call.

---

## Changelog

- Do not panic on non-UI child of UI entity
  • Loading branch information
nicopap authored and Ray Redondo committed Jan 9, 2024
1 parent 77d0070 commit 85e6fdd
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions crates/bevy_ui/src/update.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,10 @@ fn update_clipping(
entity: Entity,
maybe_inherited_clip: Option<Rect>,
) {
let (node, global_transform, style, maybe_calculated_clip) =
node_query.get_mut(entity).unwrap();
let Ok((node, global_transform, style, maybe_calculated_clip)) = node_query.get_mut(entity)
else {
return;
};

// Update this node's CalculatedClip component
if let Some(mut calculated_clip) = maybe_calculated_clip {
Expand Down

0 comments on commit 85e6fdd

Please sign in to comment.