Skip to content

Commit 8e616d9

Browse files
committed
add example for interpolation using bevy_transform_interpolation
1 parent a57d80c commit 8e616d9

3 files changed

Lines changed: 50 additions & 9 deletions

File tree

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ rust.unexpected_cfgs = { level = "warn", check-cfg = [
99

1010
[profile.dev]
1111
# Use slightly better optimization by default, as examples otherwise seem laggy.
12-
opt-level = 1
12+
#opt-level = 1
1313

1414
[profile.release]
1515
codegen-units = 1
@@ -27,3 +27,4 @@ codegen-units = 1
2727
#rapier3d = { git = "https://github.com/dimforge/rapier", branch = "character-controller" }
2828
bevy_egui = { git = "https://github.com/Vrixyz/bevy_egui", branch = "bevy_main" }
2929
bevy-inspector-egui = { git = "https://github.com/Vrixyz/bevy-inspector-egui", branch = "bevy_0.15" }
30+
# bevy_transform_interpolation = { path = "../bevy_transform_interpolation" }

bevy_rapier2d/examples/interpolation2.rs

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use std::{fs::File, io::Write};
22

3-
use bevy::prelude::*;
3+
use bevy::{color::palettes, prelude::*};
44
use bevy_mod_debugdump::{schedule_graph, schedule_graph_dot};
55
use bevy_rapier2d::prelude::*;
6-
use bevy_transform_interpolation::{
6+
use bevy_transform_interpolation::prelude::{
77
RotationInterpolation, TransformInterpolationPlugin, TranslationInterpolation,
88
};
99

@@ -19,14 +19,18 @@ fn main() {
1919
time_scale: 1f32,
2020
substeps: 10,
2121
})
22-
.insert_resource(Time::<Fixed>::from_seconds(0.4))
22+
.insert_resource(Time::<Fixed>::from_hz(5.0))
2323
.add_plugins((
2424
DefaultPlugins,
2525
TransformInterpolationPlugin::default(),
2626
RapierPhysicsPlugin::<NoUserData>::pixels_per_meter(100.0).in_fixed_schedule(),
2727
RapierDebugRenderPlugin::default(),
2828
))
2929
.add_systems(Startup, (setup_graphics, setup_physics));
30+
app.add_systems(
31+
PostUpdate,
32+
debug_with_transform_info.after(TransformSystem::TransformPropagate),
33+
);
3034
let mut debugdump_settings = schedule_graph::Settings::default();
3135
// Filter out some less relevant systems.
3236
debugdump_settings.include_system =
@@ -50,6 +54,8 @@ fn main() {
5054

5155
app.run();
5256
}
57+
#[derive(Component, Clone)]
58+
pub struct VisualBallDebug;
5359

5460
pub fn setup_graphics(mut commands: Commands) {
5561
commands.spawn((Camera2d::default(), Transform::from_xyz(0.0, 20.0, 0.0)));
@@ -67,24 +73,44 @@ pub fn setup_physics(mut commands: Commands) {
6773
Collider::cuboid(ground_size, ground_height),
6874
));
6975

70-
commands.spawn((
71-
Transform::from_xyz(-40.0, 200.0, 0.0),
76+
let interpolated_ball = (
77+
Transform::from_xyz(-0.0, 200.0, 0.0),
7278
RigidBody::Dynamic,
7379
Collider::ball(20.0),
7480
Restitution {
75-
coefficient: 1.0,
81+
coefficient: 0.99,
7682
combine_rule: CoefficientCombineRule::Max,
7783
},
7884
TranslationInterpolation,
7985
RotationInterpolation,
86+
VisualBallDebug,
87+
);
88+
commands.spawn(interpolated_ball.clone());
89+
commands.spawn(interpolated_ball).insert((
90+
ColliderDebug::NeverRender,
91+
Transform::from_xyz(-80.0, 200.0, 0.0),
8092
));
8193
commands.spawn((
82-
Transform::from_xyz(40.0, 200.0, 0.0),
94+
Transform::from_xyz(80.0, 200.0, 0.0),
8395
RigidBody::Dynamic,
8496
Collider::ball(20.0),
8597
Restitution {
86-
coefficient: 1.0,
98+
coefficient: 0.99,
8799
combine_rule: CoefficientCombineRule::Max,
88100
},
101+
VisualBallDebug,
89102
));
90103
}
104+
105+
pub fn debug_with_transform_info(
106+
mut gizmos: Gizmos,
107+
entities: Query<(&Transform, &Collider), With<VisualBallDebug>>,
108+
) {
109+
for (transform, collider) in entities.iter() {
110+
gizmos.circle(
111+
transform.translation,
112+
collider.as_ball().unwrap().radius(),
113+
palettes::basic::RED,
114+
);
115+
}
116+
}

src/render/mod.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,20 @@ impl<'world, 'state, 'world2, 'state2, 'a, 'b, 'c, 'v, 'p>
161161
};
162162
collider_debug == ColliderDebug::AlwaysRender
163163
}
164+
DebugRenderObject::RigidBody(h, ..) => {
165+
let Some(collider) = self.context.bodies.get(h) else {
166+
return false;
167+
};
168+
let entity = Entity::from_bits(collider.user_data as u64);
169+
170+
let collider_debug =
171+
if let Ok(collider_override) = self.override_visibility.get(entity) {
172+
*collider_override
173+
} else {
174+
self.default_collider_debug
175+
};
176+
collider_debug == ColliderDebug::AlwaysRender
177+
}
164178
_ => true,
165179
}
166180
}

0 commit comments

Comments
 (0)