remove native collider when its shape cannot be created

This commit is contained in:
Dmitry Stepanov
2024-08-14 10:16:36 +03:00
parent 497349c21a
commit 6164370ce1
2 changed files with 39 additions and 24 deletions
+18 -11
View File
@@ -1108,17 +1108,6 @@ impl PhysicsWorld {
});
}
collider_node.shape.try_sync_model(|v| {
let inv_global_transform = isometric_global_transform(nodes, handle)
.try_inverse()
.unwrap();
if let Some(shape) =
collider_shape_into_native_shape(&v, inv_global_transform, nodes)
{
native.set_shape(shape);
}
});
collider_node
.restitution
.try_sync_model(|v| native.set_restitution(v));
@@ -1146,6 +1135,24 @@ impl PhysicsWorld {
collider_node
.restitution_combine_rule
.try_sync_model(|v| native.set_restitution_combine_rule(v.into()));
let mut remove_collider = false;
collider_node.shape.try_sync_model(|v| {
let inv_global_transform = isometric_global_transform(nodes, handle)
.try_inverse()
.unwrap_or_default();
if let Some(shape) =
collider_shape_into_native_shape(&v, inv_global_transform, nodes)
{
native.set_shape(shape);
} else {
remove_collider = true;
}
});
if remove_collider {
self.remove_collider(collider_node.native.get());
collider_node.native.set(ColliderHandle::invalid());
}
}
}
} else if let Some(parent_body) = nodes
+21 -13
View File
@@ -1605,19 +1605,6 @@ impl PhysicsWorld {
});
}
collider_node.shape.try_sync_model(|v| {
let inv_global_transform = isometric_global_transform(nodes, handle)
.try_inverse()
.unwrap();
if let Some(shape) = collider_shape_into_native_shape(
&v,
inv_global_transform,
handle,
nodes,
) {
native.set_shape(shape);
}
});
collider_node
.restitution
.try_sync_model(|v| native.set_restitution(v));
@@ -1645,6 +1632,27 @@ impl PhysicsWorld {
collider_node
.restitution_combine_rule
.try_sync_model(|v| native.set_restitution_combine_rule(v.into()));
let mut remove_collider = false;
collider_node.shape.try_sync_model(|v| {
let inv_global_transform = isometric_global_transform(nodes, handle)
.try_inverse()
.unwrap_or_default();
if let Some(shape) = collider_shape_into_native_shape(
&v,
inv_global_transform,
handle,
nodes,
) {
native.set_shape(shape);
} else {
remove_collider = true;
}
});
if remove_collider {
self.remove_collider(collider_node.native.get());
collider_node.native.set(ColliderHandle::invalid());
}
}
}
} else if let Some(parent_body) = nodes