Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
prefix-key: ${{ env.RUST_CACHE_KEY }}
- run: sudo apt update && sudo apt-get install pkg-config libx11-dev libasound2-dev libudev-dev
- run: sudo apt update && sudo apt-get install pkg-config libx11-dev libasound2-dev libudev-dev libwayland-dev libxkbcommon-dev
- name: Cargo doc
run: cargo doc --no-deps
test:
Expand All @@ -46,7 +46,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
prefix-key: ${{ env.RUST_CACHE_KEY }}
- run: sudo apt update && sudo apt-get install pkg-config libx11-dev libasound2-dev libudev-dev
- run: sudo apt update && sudo apt-get install pkg-config libx11-dev libasound2-dev libudev-dev libwayland-dev libxkbcommon-dev
- run: cargo install cargo-all-features
- name: Clippy for bevy_rapier2d
run: cargo clippy --verbose -p bevy_rapier2d --examples
Expand Down
2 changes: 1 addition & 1 deletion .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,4 @@
}
}
]
}
}
28 changes: 19 additions & 9 deletions bevy_rapier2d/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -64,27 +64,37 @@ async-collider = [
to-bevy-mesh = ["bevy/bevy_render", "bevy/bevy_asset"]

[dependencies]
bevy = { version = "0.16.0", default-features = false, features = ["std"] }
nalgebra = { version = "0.33", features = ["convert-glam029"] }
rapier2d = "0.27.0-beta.0"
bitflags = "2.4"
bevy = { version = "0.17.3", default-features = false, features = ["std"] }
nalgebra = { version = "0.34.1", features = ["convert-glam030"] }
rapier2d = "0.31.0"
bitflags = "2.10.0"
log = "0.4"
serde = { version = "1", features = ["derive"], optional = true }

[dev-dependencies]
bevy = { version = "0.16.0", default-features = false, features = [
bevy = { version = "0.17.3", default-features = false, features = [
"x11",
"bevy_state",
"bevy_window",
"bevy_debug_stepping",
"bevy_log",
"bevy_text",
"default_font",
"bevy_winit",
"bevy_render",
"bevy_core_pipeline",
"bevy_sprite",
"bevy_sprite_render",
"bevy_gizmos",
"bevy_color",
"bevy_camera",
] }
oorandom = "11"
approx = "0.5.1"
glam = { version = "0.29", features = ["approx"] }
bevy-inspector-egui = "0.31"
bevy_egui = "0.34"
bevy_mod_debugdump = "0.13"
glam = { version = "0.30.9", features = ["approx"] }
bevy-inspector-egui = "0.35.0"
bevy_egui = "0.38.0"
bevy_mod_debugdump = "0.14.0"
serde_json = "1.0"

[package.metadata.docs.rs]
Expand Down
4 changes: 2 additions & 2 deletions bevy_rapier2d/examples/custom_system_setup2.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use bevy::{diagnostic::FrameCount, prelude::*, transform::TransformSystem};
use bevy::{diagnostic::FrameCount, prelude::*};
use bevy_rapier2d::prelude::*;

fn main() {
Expand All @@ -24,7 +24,7 @@ fn main() {
PhysicsSet::Writeback,
)
.chain()
.before(TransformSystem::TransformPropagate),
.before(TransformSystems::Propagate),
);

app.add_systems(
Expand Down
4 changes: 2 additions & 2 deletions bevy_rapier2d/examples/events2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ pub fn setup_graphics(mut commands: Commands) {
}

pub fn display_events(
mut collision_events: EventReader<CollisionEvent>,
mut contact_force_events: EventReader<ContactForceEvent>,
mut collision_events: MessageReader<CollisionEvent>,
mut contact_force_events: MessageReader<ContactForceEvent>,
) {
for collision_event in collision_events.read() {
println!("Received collision event: {collision_event:?}");
Expand Down
2 changes: 1 addition & 1 deletion bevy_rapier2d/examples/player_movement2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ fn main() {
.add_plugins((
DefaultPlugins.set(WindowPlugin {
primary_window: Some(Window {
resolution: WindowResolution::new(1000., 1000.),
resolution: WindowResolution::new(1000, 1000),
title: "Player Movement Example".to_string(),
..default()
}),
Expand Down
2 changes: 1 addition & 1 deletion bevy_rapier2d/examples/serialization2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,6 @@ pub fn print_physics(_context: ReadRapierContext) {
panic!("Example 'serialization' should be run with '--features serde-serialize'.");
}

fn quit(mut exit_event: EventWriter<AppExit>) {
fn quit(mut exit_event: MessageWriter<AppExit>) {
exit_event.write(AppExit::Success);
}
30 changes: 22 additions & 8 deletions bevy_rapier2d/examples/testbed2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ mod rope_joint2;
mod voxels2;

use bevy::{
camera::visibility::RenderLayers,
ecs::world::error::{EntityDespawnError, EntityMutableFetchError},
prelude::*,
};
Expand Down Expand Up @@ -67,9 +68,7 @@ fn main() {
app.init_resource::<ExamplesRes>()
.add_plugins((
DefaultPlugins,
EguiPlugin {
enable_multipass_for_primary_context: false,
},
EguiPlugin::default(),
RapierPhysicsPlugin::<NoUserData>::pixels_per_meter(10.0),
RapierDebugRenderPlugin::default(),
WorldInspectorPlugin::new(),
Expand All @@ -92,6 +91,17 @@ fn main() {
(Examples::PlayerMovement2, "PlayerMovement2").into(),
]))
.init_resource::<ExampleSelected>()
.add_systems(PreStartup, |mut commands: Commands| {
commands.spawn((
Camera2d,
bevy_egui::PrimaryEguiContext,
Camera {
order: 999,
..Default::default()
},
RenderLayers::none(),
));
})
//
//boxes2
.add_systems(
Expand Down Expand Up @@ -254,17 +264,21 @@ fn main() {
}

fn init(world: &mut World) {
//save all entities that are in the world before setting up any example
// save all entities that are in the world before setting up any example
// to be able to always return to this state when switching from one example to the other
world.resource_mut::<ExamplesRes>().entities_before =
world.iter_entities().map(|e| e.id()).collect::<Vec<_>>();
world.resource_mut::<ExamplesRes>().entities_before = world
.query::<EntityRef>()
.iter(world)
.map(|e| e.id())
.collect::<Vec<_>>();
}

fn cleanup(world: &mut World) {
let keep_alive = world.resource::<ExamplesRes>().entities_before.clone();

let remove = world
.iter_entities()
.query::<EntityRef>()
.iter(world)
.filter_map(|e| (!keep_alive.contains(&e.id())).then_some(e.id()))
.collect::<Vec<_>>();

Expand All @@ -290,7 +304,7 @@ fn ui_example_system(
mut current_example: ResMut<ExampleSelected>,
examples_available: Res<ExampleSet>,
) {
egui::Window::new("Testbed").show(contexts.ctx_mut(), |ui| {
egui::Window::new("Testbed").show(contexts.ctx_mut().unwrap(), |ui| {
let mut changed = false;
egui::ComboBox::from_label("example")
.width(150.0)
Expand Down
119 changes: 119 additions & 0 deletions bevy_rapier2d/examples/voxels2_no_collider.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
use bevy::prelude::*;
use bevy_rapier2d::geometry::RapierColliderHandle;
use bevy_rapier2d::prelude::*;

fn main() {
App::new()
.insert_resource(ClearColor(Color::srgb(
0xF9 as f32 / 255.0,
0xF9 as f32 / 255.0,
0xFF as f32 / 255.0,
)))
.add_plugins((
DefaultPlugins,
RapierPhysicsPlugin::<NoUserData>::pixels_per_meter(10.0),
RapierDebugRenderPlugin::default(),
))
.add_systems(Startup, setup)
.add_systems(Update, (check_collisions, check_collider_enabled))
.run();
}

fn setup(mut commands: Commands) {
// 2D camera
commands.spawn((Camera2d, Transform::from_xyz(0.0, 20.0, 0.0)));

let scale = 15f32;

let nx = 50;
for i in 0..nx {
for j in 0..10 {
let falling_objects = (j + i) % 3;
let ball_radius = 0.5 * scale;

let collider = match falling_objects {
0 => Collider::ball(ball_radius),
1 => Collider::cuboid(ball_radius, ball_radius),
2 => Collider::capsule_y(ball_radius, ball_radius),
_ => unreachable!(),
};

commands
.spawn((
Transform::from_xyz(
(i as f32 * 2.0 - nx as f32 / 2.0) * scale,
(20.0 + j as f32 * 2.0) * scale,
0.0,
),
RigidBody::Dynamic,
AdditionalMassProperties::Mass(1.0),
))
.with_children(|parent| {
parent.spawn((collider, ColliderDisabled));
});
}
}

let polyline = [
Vec2::new(0.0, 0.0),
Vec2::new(0.0, 10.0),
Vec2::new(7.0, 4.0),
Vec2::new(14.0, 10.0),
Vec2::new(14.0, 0.0),
Vec2::new(13.0, 7.0),
Vec2::new(7.0, 2.0),
Vec2::new(1.0, 7.0),
]
.iter()
.map(|p| p * scale)
.collect::<Vec<_>>();
let indices: Vec<_> = (0..polyline.len() as u32)
.map(|i| [i, (i + 1) % polyline.len() as u32])
.collect();

commands.spawn((
Transform::from_xyz(-20.0 * scale, -10.0 * scale, 0.0),
Collider::voxelized_mesh(&polyline, &indices, 0.2 * scale, FillMode::default()),
ColliderDisabled,
));

let voxel_size = Vec2::new(scale, scale);
let voxels: Vec<_> = (0..300)
.map(|i| {
let y = (i as f32 / 20.0).sin().clamp(-0.5, 0.5) * 20.0;
Vec2::new((i as f32 - 125.0) * voxel_size.x / 2.0, y * voxel_size.y)
})
.collect();
commands.spawn((
Transform::from_xyz(0.0, 0.0, 0.0),
Collider::voxels_from_points(voxel_size, &voxels),
));
}

fn check_collisions(mut collision_events: MessageReader<CollisionEvent>) {
for event in collision_events.read() {
info!("Collision event: {:?}", event);
}
}

fn check_collider_enabled(
rapier_context: ReadRapierContext,
query: Query<&RapierColliderHandle, With<ColliderDisabled>>,
) {
let context = match rapier_context.single() {
Ok(c) => c,
Err(_) => return,
};

for rapier_handle in &query {
let handle = rapier_handle.0;
if let Some(col) = context.colliders.colliders.get(handle) {
if col.is_enabled() {
info!(
"FIX ME: Voxel collider should NOT be enabled: {}",
col.is_enabled()
);
}
}
}
}
18 changes: 9 additions & 9 deletions bevy_rapier3d/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,15 @@ async-collider = [
to-bevy-mesh = ["bevy/bevy_render", "bevy/bevy_asset"]

[dependencies]
bevy = { version = "0.16.0", default-features = false, features = ["std"] }
nalgebra = { version = "0.33", features = ["convert-glam029"] }
rapier3d = "0.27.0-beta.0"
bitflags = "2.4"
bevy = { version = "0.17.3", default-features = false, features = ["std"] }
nalgebra = { version = "0.34.1", features = ["convert-glam030"] }
rapier3d = "0.31.0"
bitflags = "2.10.0"
log = "0.4"
serde = { version = "1", features = ["derive"], optional = true }

[dev-dependencies]
bevy = { version = "0.16.0", default-features = false, features = [
bevy = { version = "0.17.3", default-features = false, features = [
"bevy_window",
"x11",
"tonemapping_luts",
Expand All @@ -85,10 +85,10 @@ bevy = { version = "0.16.0", default-features = false, features = [
"bevy_log",
] }
approx = "0.5.1"
glam = { version = "0.29", features = ["approx"] }
bevy-inspector-egui = "0.31"
bevy_egui = "0.34"
bevy_mod_debugdump = "0.13"
glam = { version = "0.30.9", features = ["approx"] }
bevy-inspector-egui = "0.35.0"
bevy_egui = "0.38.0"
bevy_mod_debugdump = "0.14.0"

[package.metadata.docs.rs]
# Enable all the features when building the docs on docs.rs
Expand Down
6 changes: 3 additions & 3 deletions bevy_rapier3d/examples/character_controller3.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use bevy::{
input::{mouse::MouseMotion, InputSystem},
input::{mouse::MouseMotion, InputSystems},
prelude::*,
};
use bevy_rapier3d::{control::KinematicCharacterController, prelude::*};
Expand All @@ -25,7 +25,7 @@ fn main() {
RapierDebugRenderPlugin::default(),
))
.add_systems(Startup, (setup_player, setup_map))
.add_systems(PreUpdate, handle_input.after(InputSystem))
.add_systems(PreUpdate, handle_input.after(InputSystems))
.add_systems(Update, player_look)
.add_systems(FixedUpdate, player_movement)
.run();
Expand Down Expand Up @@ -112,7 +112,7 @@ fn handle_input(
keyboard: Res<ButtonInput<KeyCode>>,
mut movement: ResMut<MovementInput>,
mut look: ResMut<LookInput>,
mut mouse_events: EventReader<MouseMotion>,
mut mouse_events: MessageReader<MouseMotion>,
) {
if keyboard.pressed(KeyCode::KeyW) {
movement.z -= 1.0;
Expand Down
4 changes: 2 additions & 2 deletions bevy_rapier3d/examples/custom_system_setup3.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use bevy::{diagnostic::FrameCount, prelude::*, transform::TransformSystem};
use bevy::{diagnostic::FrameCount, prelude::*};
use bevy_rapier3d::prelude::*;

fn main() {
Expand All @@ -24,7 +24,7 @@ fn main() {
PhysicsSet::Writeback,
)
.chain()
.before(TransformSystem::TransformPropagate),
.before(TransformSystems::Propagate),
);

app.add_systems(
Expand Down
2 changes: 1 addition & 1 deletion bevy_rapier3d/examples/despawn3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ pub fn despawn(
mut despawn: ResMut<DespawnResource>,
query: Query<Entity, With<Despawn>>,
) {
if despawn.timer.tick(time.delta()).finished() {
if despawn.timer.tick(time.delta()).is_finished() {
for entity in &query {
println!("Despawning ground entity");
commands.entity(entity).despawn();
Expand Down
Loading