bevy_xpbd
bevy_xpbd copied to clipboard
`Collider::compound` from an ellipse doesn't work correctly
trafficstars
Versions
bevy 0.13.2 bevy_xpbd_2d 0.4.2
Description
Collider::compound from an ellipse collider doesn't register (at least some) collisions.
Example
Below code spawns a compound collider consisting of a single ellipse and a square. The two shapes are overlapping at spawn, so that should be printed, and shapes should be moved to be disjoint. Neither of these happen.
If I use Circle::new(100.0) instead of the ellipse, everything works as expected - I get a message about entities overlapping at spawn, and the shapes are moved to no longer overlap.
use bevy::{prelude::*, sprite::MaterialMesh2dBundle};
use bevy_xpbd_2d::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(PhysicsPlugins::default())
.insert_resource(Gravity(Vec2::ZERO))
.add_systems(Startup, (setup_camera, spawn_objects))
.run();
}
fn setup_camera(mut commands: Commands) {
commands.spawn(Camera2dBundle::default());
}
fn spawn_objects(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<ColorMaterial>>,
) {
let shape = Ellipse::new(100.0, 200.0);
commands.spawn((
MaterialMesh2dBundle {
mesh: meshes.add(shape).into(),
material: materials.add(Color::BLUE),
transform: Transform::from_translation(Vec3::new(-50.0, 0.0, 0.0)),
..default()
},
RigidBody::Dynamic,
Collider::compound(vec![(Vec2::ZERO, 0.0, shape)]),
));
let shape = Rectangle::new(100.0, 100.0);
commands.spawn((
MaterialMesh2dBundle {
mesh: meshes.add(shape).into(),
material: materials.add(Color::YELLOW),
transform: Transform::from_translation(Vec3::new(50.0, 0.0, 0.0)),
..default()
},
RigidBody::Dynamic,
shape.collider(),
));
}