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

Implement From translation and rotation for isometries #15733

Merged
merged 5 commits into from
Oct 8, 2024

Conversation

Jondolf
Copy link
Contributor

@Jondolf Jondolf commented Oct 8, 2024

Objective

Several of our APIs (namely gizmos and bounding) use isometries on current Bevy main. This is nicer than separate properties in a lot of cases, but users have still expressed usability concerns.

One problem is that in a lot of cases, you only care about e.g. translation, so you end up with this:

gizmos.cross_2d(
    Isometry2d::from_translation(Vec2::new(-160.0, 120.0)),
    12.0,
    FUCHSIA,
);

The isometry adds quite a lot of length and verbosity, and isn't really that relevant since only the translation is important here.

It would be nice if you could use the translation directly, and only supply an isometry if both translation and rotation are needed. This would make the following possible:

gizmos.cross_2d(Vec2::new(-160.0, 120.0), 12.0, FUCHSIA);

removing a lot of verbosity.

Solution

Implement From<Vec2> and From<Rot2> for Isometry2d, and From<Vec3>, From<Vec3A>, and From<Quat> for Isometry3d. These are lossless conversions that fit the semantics of From.

This makes the proposed API possible! The methods must now simply take an impl Into<IsometryNd>, and this works:

gizmos.cross_2d(Vec2::new(-160.0, 120.0), 12.0, FUCHSIA);

@Jondolf Jondolf added C-Usability A targeted quality-of-life change that makes Bevy easier to use A-Math Fundamental domain-agnostic mathematical operations D-Straightforward Simple bug fixes and API improvements, docs, test and examples S-Needs-Review Needs reviewer attention (from anyone!) to move forward labels Oct 8, 2024
@Jondolf Jondolf added this to the 0.15 milestone Oct 8, 2024
@Jondolf
Copy link
Contributor Author

Jondolf commented Oct 8, 2024

Added to the 0.15 milestone since the existing isometry API without this could be considered a UX regression by some users. Feel free to remove though

@alice-i-cecile alice-i-cecile added the A-Gizmos Visual editor and debug gizmos label Oct 8, 2024
Copy link
Contributor

@tim-blackbird tim-blackbird left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice, with this I'd say the gizmo API has been improved over what it was before the move to isometry :)

@tim-blackbird tim-blackbird added S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it and removed S-Needs-Review Needs reviewer attention (from anyone!) to move forward labels Oct 8, 2024
@alice-i-cecile alice-i-cecile added this pull request to the merge queue Oct 8, 2024
Merged via the queue into bevyengine:main with commit 21b78b5 Oct 8, 2024
27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-Gizmos Visual editor and debug gizmos A-Math Fundamental domain-agnostic mathematical operations C-Usability A targeted quality-of-life change that makes Bevy easier to use D-Straightforward Simple bug fixes and API improvements, docs, test and examples S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants