diff --git a/fyrox-animation/src/machine/layer.rs b/fyrox-animation/src/machine/layer.rs index af2c675f3..aaaaebdc3 100644 --- a/fyrox-animation/src/machine/layer.rs +++ b/fyrox-animation/src/machine/layer.rs @@ -316,12 +316,13 @@ impl MachineLayer { handle: self.active_state, name: state.name.clone(), }, - events: self.nodes[state.root].collect_animation_events( - &self.nodes, - params, - animations, - strategy, - ), + events: self + .nodes + .try_borrow(state.root) + .map(|root| { + root.collect_animation_events(&self.nodes, params, animations, strategy) + }) + .unwrap_or_default(), }; } else if let Some(transition) = self.transitions.try_borrow(self.active_transition) { if let (Some(source_state), Some(dest_state)) = ( diff --git a/fyrox-impl/src/scene/dim2/physics.rs b/fyrox-impl/src/scene/dim2/physics.rs index 49fd7d837..f8ebd6e2b 100644 --- a/fyrox-impl/src/scene/dim2/physics.rs +++ b/fyrox-impl/src/scene/dim2/physics.rs @@ -1336,17 +1336,15 @@ impl PhysicsWorld { &self, collider: ColliderHandle, ) -> impl Iterator + '_ { - self.narrow_phase.intersection_pairs_with(collider).map( - |(collider1, collider2, intersecting)| IntersectionPair { - collider1: Handle::decode_from_u128( - self.colliders.get(collider1).unwrap().user_data, - ), - collider2: Handle::decode_from_u128( - self.colliders.get(collider2).unwrap().user_data, - ), - has_any_active_contact: intersecting, - }, - ) + self.narrow_phase + .intersection_pairs_with(collider) + .filter_map(|(collider1, collider2, intersecting)| { + Some(IntersectionPair { + collider1: Handle::decode_from_u128(self.colliders.get(collider1)?.user_data), + collider2: Handle::decode_from_u128(self.colliders.get(collider2)?.user_data), + has_any_active_contact: intersecting, + }) + }) } /// Contacts checks between two regular colliders diff --git a/fyrox-impl/src/scene/graph/physics.rs b/fyrox-impl/src/scene/graph/physics.rs index 4630c33f6..f96b7c292 100644 --- a/fyrox-impl/src/scene/graph/physics.rs +++ b/fyrox-impl/src/scene/graph/physics.rs @@ -1872,17 +1872,15 @@ impl PhysicsWorld { &self, collider: ColliderHandle, ) -> impl Iterator + '_ { - self.narrow_phase.intersection_pairs_with(collider).map( - |(collider1, collider2, intersecting)| IntersectionPair { - collider1: Handle::decode_from_u128( - self.colliders.get(collider1).unwrap().user_data, - ), - collider2: Handle::decode_from_u128( - self.colliders.get(collider2).unwrap().user_data, - ), - has_any_active_contact: intersecting, - }, - ) + self.narrow_phase + .intersection_pairs_with(collider) + .filter_map(|(collider1, collider2, intersecting)| { + Some(IntersectionPair { + collider1: Handle::decode_from_u128(self.colliders.get(collider1)?.user_data), + collider2: Handle::decode_from_u128(self.colliders.get(collider2)?.user_data), + has_any_active_contact: intersecting, + }) + }) } /// Contacts checks between two regular colliders