feat: add a checkbox to enable/disable the debug renderer in the testbed
This commit is contained in:
@@ -7,17 +7,23 @@ use rapier::pipeline::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Resource)]
|
#[derive(Resource)]
|
||||||
pub struct DebugRenderPipelineResource(pub DebugRenderPipeline);
|
pub struct DebugRenderPipelineResource {
|
||||||
|
pub pipeline: DebugRenderPipeline,
|
||||||
|
pub enabled: bool,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct RapierDebugRenderPlugin {}
|
pub struct RapierDebugRenderPlugin {}
|
||||||
|
|
||||||
impl Plugin for RapierDebugRenderPlugin {
|
impl Plugin for RapierDebugRenderPlugin {
|
||||||
fn build(&self, app: &mut App) {
|
fn build(&self, app: &mut App) {
|
||||||
app.insert_resource(DebugRenderPipelineResource(DebugRenderPipeline::new(
|
app.insert_resource(DebugRenderPipelineResource {
|
||||||
|
pipeline: DebugRenderPipeline::new(
|
||||||
Default::default(),
|
Default::default(),
|
||||||
!DebugRenderMode::RIGID_BODY_AXES & !DebugRenderMode::COLLIDER_AABBS,
|
!DebugRenderMode::RIGID_BODY_AXES & !DebugRenderMode::COLLIDER_AABBS,
|
||||||
)))
|
),
|
||||||
|
enabled: false,
|
||||||
|
})
|
||||||
.add_systems(Update, debug_render_scene);
|
.add_systems(Update, debug_render_scene);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -46,12 +52,13 @@ impl<'a> DebugRenderBackend for BevyLinesRenderBackend<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn debug_render_scene(
|
fn debug_render_scene(
|
||||||
mut pipeline: ResMut<DebugRenderPipelineResource>,
|
mut debug_render: ResMut<DebugRenderPipelineResource>,
|
||||||
harness: NonSend<Harness>,
|
harness: NonSend<Harness>,
|
||||||
gizmos: Gizmos,
|
gizmos: Gizmos,
|
||||||
) {
|
) {
|
||||||
|
if debug_render.enabled {
|
||||||
let mut backend = BevyLinesRenderBackend { gizmos };
|
let mut backend = BevyLinesRenderBackend { gizmos };
|
||||||
pipeline.0.render(
|
debug_render.pipeline.render(
|
||||||
&mut backend,
|
&mut backend,
|
||||||
&harness.physics.bodies,
|
&harness.physics.bodies,
|
||||||
&harness.physics.colliders,
|
&harness.physics.colliders,
|
||||||
@@ -59,4 +66,5 @@ fn debug_render_scene(
|
|||||||
&harness.physics.multibody_joints,
|
&harness.physics.multibody_joints,
|
||||||
&harness.physics.narrow_phase,
|
&harness.physics.narrow_phase,
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ use std::mem;
|
|||||||
|
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
|
||||||
|
use crate::debug_render::{DebugRenderPipelineResource, RapierDebugRenderPlugin};
|
||||||
use crate::physics::{PhysicsEvents, PhysicsSnapshot, PhysicsState};
|
use crate::physics::{PhysicsEvents, PhysicsSnapshot, PhysicsState};
|
||||||
use crate::plugin::TestbedPlugin;
|
use crate::plugin::TestbedPlugin;
|
||||||
use crate::ui;
|
use crate::ui;
|
||||||
@@ -391,7 +392,7 @@ impl TestbedApp {
|
|||||||
.add_plugins(DefaultPlugins.set(window_plugin))
|
.add_plugins(DefaultPlugins.set(window_plugin))
|
||||||
.add_plugins(OrbitCameraPlugin)
|
.add_plugins(OrbitCameraPlugin)
|
||||||
.add_plugins(WireframePlugin)
|
.add_plugins(WireframePlugin)
|
||||||
// .add_plugins(debug_render::RapierDebugRenderPlugin::default())
|
.add_plugins(RapierDebugRenderPlugin::default())
|
||||||
.add_plugins(bevy_egui::EguiPlugin);
|
.add_plugins(bevy_egui::EguiPlugin);
|
||||||
|
|
||||||
#[cfg(target_arch = "wasm32")]
|
#[cfg(target_arch = "wasm32")]
|
||||||
@@ -1083,6 +1084,7 @@ fn update_testbed(
|
|||||||
builders: ResMut<SceneBuilders>,
|
builders: ResMut<SceneBuilders>,
|
||||||
mut graphics: NonSendMut<GraphicsManager>,
|
mut graphics: NonSendMut<GraphicsManager>,
|
||||||
mut state: ResMut<TestbedState>,
|
mut state: ResMut<TestbedState>,
|
||||||
|
mut debug_render: ResMut<DebugRenderPipelineResource>,
|
||||||
mut harness: NonSendMut<Harness>,
|
mut harness: NonSendMut<Harness>,
|
||||||
#[cfg(feature = "other-backends")] mut other_backends: NonSendMut<OtherBackends>,
|
#[cfg(feature = "other-backends")] mut other_backends: NonSendMut<OtherBackends>,
|
||||||
mut plugins: NonSendMut<Plugins>,
|
mut plugins: NonSendMut<Plugins>,
|
||||||
@@ -1127,7 +1129,7 @@ fn update_testbed(
|
|||||||
// Update UI
|
// Update UI
|
||||||
{
|
{
|
||||||
let harness = &mut *harness;
|
let harness = &mut *harness;
|
||||||
ui::update_ui(&mut ui_context, &mut state, harness);
|
ui::update_ui(&mut ui_context, &mut state, harness, &mut debug_render);
|
||||||
|
|
||||||
for plugin in &mut plugins.0 {
|
for plugin in &mut plugins.0 {
|
||||||
plugin.update_ui(
|
plugin.update_ui(
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
use rapier::counters::Counters;
|
use rapier::counters::Counters;
|
||||||
use rapier::math::Real;
|
use rapier::math::Real;
|
||||||
|
|
||||||
|
use crate::debug_render::DebugRenderPipelineResource;
|
||||||
use crate::harness::Harness;
|
use crate::harness::Harness;
|
||||||
use crate::testbed::{
|
use crate::testbed::{
|
||||||
RunMode, TestbedActionFlags, TestbedState, TestbedStateFlags, PHYSX_BACKEND_PATCH_FRICTION,
|
RunMode, TestbedActionFlags, TestbedState, TestbedStateFlags, PHYSX_BACKEND_PATCH_FRICTION,
|
||||||
@@ -11,7 +12,12 @@ use crate::PhysicsState;
|
|||||||
use bevy_egui::egui::Slider;
|
use bevy_egui::egui::Slider;
|
||||||
use bevy_egui::{egui, EguiContexts};
|
use bevy_egui::{egui, EguiContexts};
|
||||||
|
|
||||||
pub fn update_ui(ui_context: &mut EguiContexts, state: &mut TestbedState, harness: &mut Harness) {
|
pub fn update_ui(
|
||||||
|
ui_context: &mut EguiContexts,
|
||||||
|
state: &mut TestbedState,
|
||||||
|
harness: &mut Harness,
|
||||||
|
debug_render: &mut DebugRenderPipelineResource,
|
||||||
|
) {
|
||||||
egui::Window::new("Parameters").show(ui_context.ctx_mut(), |ui| {
|
egui::Window::new("Parameters").show(ui_context.ctx_mut(), |ui| {
|
||||||
if state.backend_names.len() > 1 && !state.example_names.is_empty() {
|
if state.backend_names.len() > 1 && !state.example_names.is_empty() {
|
||||||
let mut changed = false;
|
let mut changed = false;
|
||||||
@@ -157,6 +163,7 @@ pub fn update_ui(ui_context: &mut EguiContexts, state: &mut TestbedState, harnes
|
|||||||
ui.checkbox(&mut sleep, "sleep enabled");
|
ui.checkbox(&mut sleep, "sleep enabled");
|
||||||
// ui.checkbox(&mut contact_points, "draw contacts");
|
// ui.checkbox(&mut contact_points, "draw contacts");
|
||||||
// ui.checkbox(&mut wireframe, "draw wireframes");
|
// ui.checkbox(&mut wireframe, "draw wireframes");
|
||||||
|
ui.checkbox(&mut debug_render.enabled, "debug render enabled");
|
||||||
|
|
||||||
state.flags.set(TestbedStateFlags::SLEEP, sleep);
|
state.flags.set(TestbedStateFlags::SLEEP, sleep);
|
||||||
// state
|
// state
|
||||||
|
|||||||
Reference in New Issue
Block a user