feat: migrate to glam whenever relevant + migrate testbed to kiss3d instead of bevy + release v0.32.0 (#909)
* feat: migrate to glam whenever relevant + migrate testbed to kiss3d instead of bevy * chore: update changelog * Fix warnings and tests * Release v0.32.0
This commit is contained in:
64
src_testbed/testbed/hover.rs
Normal file
64
src_testbed/testbed/hover.rs
Normal file
@@ -0,0 +1,64 @@
|
||||
#![allow(clippy::useless_conversion)] // Conversions are needed for switching between f32/f64.
|
||||
|
||||
use crate::mouse::SceneMouse;
|
||||
use crate::{GraphicsManager, PhysicsState};
|
||||
use kiss3d::prelude::*;
|
||||
use rapier::prelude::QueryFilter;
|
||||
|
||||
#[cfg(feature = "dim3")]
|
||||
use rapier::prelude::{Ray, Real};
|
||||
|
||||
#[cfg(feature = "dim2")]
|
||||
pub fn highlight_hovered_body(
|
||||
graphics_manager: &mut GraphicsManager,
|
||||
mouse: &SceneMouse,
|
||||
physics: &PhysicsState,
|
||||
) {
|
||||
use rapier::math::Vector;
|
||||
|
||||
if let Some(pt) = mouse.point {
|
||||
// Convert from kiss3d Vec2 (f32) to rapier Vector (may be f64)
|
||||
let pt = Vector::new(pt.x as _, pt.y as _);
|
||||
|
||||
let query_pipeline = physics.broad_phase.as_query_pipeline(
|
||||
physics.narrow_phase.query_dispatcher(),
|
||||
&physics.bodies,
|
||||
&physics.colliders,
|
||||
QueryFilter::only_dynamic(),
|
||||
);
|
||||
|
||||
for (handle, _) in query_pipeline.intersect_point(pt) {
|
||||
let collider = &physics.colliders[handle];
|
||||
if let Some(parent_handle) = collider.parent() {
|
||||
graphics_manager.set_body_color(parent_handle, RED, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "dim3")]
|
||||
pub fn highlight_hovered_body(
|
||||
graphics_manager: &mut GraphicsManager,
|
||||
mouse: &SceneMouse,
|
||||
physics: &PhysicsState,
|
||||
) {
|
||||
if let Some((ray_origin, ray_dir)) = mouse.ray {
|
||||
let ray = Ray::new(ray_origin.into(), ray_dir.into());
|
||||
let query_pipeline = physics.broad_phase.as_query_pipeline(
|
||||
physics.narrow_phase.query_dispatcher(),
|
||||
&physics.bodies,
|
||||
&physics.colliders,
|
||||
QueryFilter::only_dynamic(),
|
||||
);
|
||||
|
||||
let hit = query_pipeline.cast_ray(&ray, Real::MAX, true);
|
||||
|
||||
if let Some((handle, _)) = hit {
|
||||
let collider = &physics.colliders[handle];
|
||||
|
||||
if let Some(parent_handle) = collider.parent() {
|
||||
graphics_manager.set_body_color(parent_handle, RED, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user