Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use direction types in ray and shape casting APIs and add RayCaster::from_ray #329

Merged
merged 7 commits into from
Feb 18, 2024

Conversation

Jondolf
Copy link
Owner

@Jondolf Jondolf commented Feb 18, 2024

Objective

Bevy 0.13 added the Direction2d and Direction3d types along with Ray2d and Ray3d types. The new direction types are a great fit for ray directions, as they guarantee that the direction is normalized. This avoids the potential footgun where unnormalized directions are actually treated like velocity, which affects the time of impact.

Ray and shape casting APIs should use the direction types. It should also be possible to make a RayCaster from a ray conveniently.

Solution

Add Ray and Dir type aliases to support 2D and 3D, and use Dir for directions for RayCaster, ShapeCaster, and SpatialQuery methods. I also added a RayCaster::from_ray constructor.


Migration Guide

For spatial queries, replace Vec2/Vec3 directions with Direction2d/Direction3d.

// Before
let caster = RayCaster::new(Vec3::ZERO, Vec3::X);

// After
let caster = RayCaster::new(Vec3::ZERO, Direction3d::X);

@Jondolf Jondolf added C-Enhancement New feature or request A-Spatial-Query Relates to spatial queries, such as ray casting, shape casting, and intersection tests C-Breaking-Change This change removes or changes behavior or APIs, requiring users to adapt labels Feb 18, 2024
@Jondolf Jondolf merged commit c248ad5 into bevy-main Feb 18, 2024
4 checks passed
@Jondolf Jondolf deleted the use-ray-and-dir branch February 18, 2024 18:07
@Jondolf Jondolf mentioned this pull request Feb 19, 2024
5 tasks
Jondolf added a commit that referenced this pull request Feb 20, 2024
# Objective

Closes #314 and #317.

This PR will be merged once Bevy 0.13 is released. Feel free to use this `bevy-main` branch in the meantime if you want to use the main branch of Bevy with `bevy_xpbd`.

## Solution

Update to the latest Bevy version.

For the 0.13 migration, I will be trying to implement various changes, mostly surrounding the new geometric primitives and ray structs. I will probably do these in PRs that I merge into this one, and it will all be merged into main once 0.13 is actually released.

- [x] Combine `PhysicsDebugRenderer` and `PhysicsDebugConfig` into `PhysicsGizmos` gizmo configuration group
- [x] Support creating colliders from primitives #326
- [x] Support ellipses and regular polygons as colliders (conical frusta and tori later) #326
- [x] Support creating `ShapeCaster`s with primitive shapes
- [x] Use `Direction2d`/`Direction3d` in spatial query APIs #329

---

## Migration Guide

### Debug rendering

The `PhysicsDebugConfig` resource and `PhysicsDebugRenderer` system parameter have been removed in favor of the new `PhysicsGizmos` [gizmo configuration group](https://bevyengine.org/news/bevy-0-13/#multiple-gizmo-configurations).

Before:

```rust
fn main() {
    App::new()
        .add_plugins((
            DefaultPlugins,
            PhysicsPlugins::default(),
            PhysicsDebugPlugin::default(),
        ))
        // Configure physics debug rendering
        .insert_resource(PhysicsDebugConfig {
            aabb_color: Some(Color::WHITE),
            ..default()
        })
        .run();
}
```

After:

```rust
fn main() {
    App::new()
        .add_plugins((
            DefaultPlugins,
            PhysicsPlugins::default(),
            PhysicsDebugPlugin::default(),
        ))
        // Configure physics debug rendering
        .insert_gizmo_group(
            PhysicsGizmos {
                aabb_color: Some(Color::WHITE),
                ..default()
            },
            GizmoConfig::default(),
        )
        .run();
}
```

This also allows you to configure e.g. line width for just physics gizmos by configuring their `GizmoConfig`.

### Renamed `Collider` constructors (#326)

- Replace `Collider::ball` with `Collider::circle` in 2D and `Collider::sphere` in 3D
- Replace `Collider::cuboid` with `Collider::rectangle` in 2D

### Ray and shape casting (#329)

For spatial queries, replace `Vec2`/`Vec3` directions with [`Direction2d`](https://docs.rs/bevy/0.13.0/bevy/math/primitives/struct.Direction2d.html)/[`Direction3d`](https://docs.rs/bevy/0.13.0/bevy/math/primitives/struct.Direction3d.html).

```rust
// Before
let caster = RayCaster::new(Vec3::ZERO, Vec3::X);

// After
let caster = RayCaster::new(Vec3::ZERO, Direction3d::X);
```

This applies to `RayCaster`, `ShapeCaster`, `SpatialQuery` methods like `cast_ray`, and many other methods that use directions.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-Spatial-Query Relates to spatial queries, such as ray casting, shape casting, and intersection tests C-Breaking-Change This change removes or changes behavior or APIs, requiring users to adapt C-Enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant