Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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.2", default-features = false, features = ["std"] }
nalgebra = { version = "0.34.1", features = ["convert-glam030"] }
rapier2d = "0.30.1"
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.2", 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.2", default-features = false, features = ["std"] }
nalgebra = { version = "0.34.1", features = ["convert-glam030"] }
rapier3d = "0.30.1"
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.2", 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