diff --git a/Cargo.lock b/Cargo.lock index a588b80..b5bc72f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -320,39 +320,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" -[[package]] -name = "avian2d" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715a2bd9f406078b91e7cc371533c2a61795dd8ad02b93c91b4c9eb2f606336b" -dependencies = [ - "arrayvec", - "avian_derive", - "bevy", - "bevy_heavy", - "bevy_math", - "bevy_transform_interpolation", - "bitflags 2.9.0", - "derive_more", - "itertools 0.13.0", - "nalgebra", - "parry2d", - "parry2d-f64", - "thread_local", -] - -[[package]] -name = "avian_derive" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b257f601a1535e0d4a7a7796f535e3a13de62fd422b16dff7c14d27f0d4048" -dependencies = [ - "proc-macro-error2", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "base64" version = "0.21.7" @@ -672,16 +639,6 @@ dependencies = [ "syn", ] -[[package]] -name = "bevy_heavy" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ccc861fea2ff58c67f4df119512e204050bd7631a3a9c65e1a5e9d162cce28" -dependencies = [ - "bevy_math", - "bevy_reflect", -] - [[package]] name = "bevy_image" version = "0.16.0" @@ -762,7 +719,6 @@ dependencies = [ "bevy_image", "bevy_input", "bevy_input_focus", - "bevy_log", "bevy_math", "bevy_pbr", "bevy_picking", @@ -948,6 +904,18 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86f1275dfb4cfef4ffc90c3fa75408964864facf833acc932413d52aa5364ba4" +[[package]] +name = "bevy_rapier2d" +version = "0.29.0" +source = "git+https://github.com/dimforge/bevy_rapier.git#8fffb260a8de4cab5a1064a669dbf5860c097d54" +dependencies = [ + "bevy", + "bitflags 2.9.0", + "log", + "nalgebra", + "rapier2d", +] + [[package]] name = "bevy_reflect" version = "0.16.0" @@ -1212,15 +1180,6 @@ dependencies = [ "thiserror 2.0.12", ] -[[package]] -name = "bevy_transform_interpolation" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c7c6c4e6a3d5415b3a29a17bd20c17cd0e2f068b96b24e263316d58d5346ea" -dependencies = [ - "bevy", -] - [[package]] name = "bevy_ui" version = "0.16.0" @@ -1322,10 +1281,10 @@ dependencies = [ name = "bevy_workshop-rustweek-2025" version = "0.1.0" dependencies = [ - "avian2d", "bevy", "bevy_enhanced_input", "bevy_enoki", + "bevy_rapier2d", "rand", "thiserror 2.0.12", ] @@ -1749,6 +1708,19 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + [[package]] name = "crossbeam-channel" version = "0.5.15" @@ -3186,6 +3158,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "ordered-float" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" +dependencies = [ + "num-traits", +] + [[package]] name = "overload" version = "0.1.1" @@ -3232,54 +3213,26 @@ dependencies = [ [[package]] name = "parry2d" -version = "0.17.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02da9fbab5b42b6f5cc5550bfc14bfe4564f36d40beef3fa43752ed53fd3c6f1" -dependencies = [ - "approx", - "arrayvec", - "bitflags 2.9.0", - "downcast-rs 1.2.1", - "either", - "ena", - "log", - "nalgebra", - "num-derive", - "num-traits", - "ordered-float", - "rayon", - "rustc-hash 2.1.1", - "simba", - "slab", - "smallvec", - "spade", - "thiserror 1.0.69", -] - -[[package]] -name = "parry2d-f64" -version = "0.17.5" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab001060f2a0e960d56ce566b9dc0bb46e52989c654c62a3e5ede9c9978b802f" +checksum = "6b89f8a3309b82a3a81a6957c7916fe00834e79678451683b048e8d75109b9e4" dependencies = [ "approx", "arrayvec", "bitflags 2.9.0", - "downcast-rs 1.2.1", + "downcast-rs 2.0.1", "either", "ena", + "hashbrown", "log", "nalgebra", "num-derive", "num-traits", - "ordered-float", - "rayon", - "rustc-hash 2.1.1", + "ordered-float 5.0.0", "simba", "slab", - "smallvec", "spade", - "thiserror 1.0.69", + "thiserror 2.0.12", ] [[package]] @@ -3423,28 +3376,6 @@ dependencies = [ "toml_edit", ] -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "proc-macro2" version = "1.0.95" @@ -3459,6 +3390,19 @@ name = "profiling" version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" +dependencies = [ + "quote", + "syn", +] [[package]] name = "quick-xml" @@ -3542,6 +3486,30 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f60fcc7d6849342eff22c4350c8b9a989ee8ceabc4b481253e8946b9fe83d684" +[[package]] +name = "rapier2d" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ec6acdc5db3699c64e000945450c844d34b215dae3bf875b40e20b1909c0063" +dependencies = [ + "approx", + "arrayvec", + "bit-vec 0.8.0", + "bitflags 2.9.0", + "crossbeam", + "downcast-rs 2.0.1", + "log", + "nalgebra", + "num-derive", + "num-traits", + "ordered-float 5.0.0", + "parry2d", + "profiling", + "rustc-hash 2.1.1", + "simba", + "thiserror 2.0.12", +] + [[package]] name = "raw-window-handle" version = "0.6.2" @@ -3554,26 +3522,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - [[package]] name = "read-fonts" version = "0.29.0" @@ -4684,7 +4632,7 @@ dependencies = [ "ndk-sys 0.5.0+25.2.9519653", "objc", "once_cell", - "ordered-float", + "ordered-float 4.6.0", "parking_lot", "profiling", "range-alloc", diff --git a/Cargo.toml b/Cargo.toml index 85d8501..64617bc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2024" [dependencies] -avian2d = "0.3" +bevy_rapier2d = { git = "https://github.com/dimforge/bevy_rapier.git" } bevy = { version = "0.16", default-features = false, features = [ "bevy_asset", "bevy_audio", diff --git a/src/game.rs b/src/game.rs index 90cc560..c31942e 100644 --- a/src/game.rs +++ b/src/game.rs @@ -1,12 +1,15 @@ use std::{f32::consts::TAU, time::Duration}; -use avian2d::prelude::*; use bevy::{audio::Volume, prelude::*}; use bevy_enhanced_input::prelude::*; use bevy_enoki::prelude::*; +use bevy_rapier2d::prelude::*; use rand::Rng; -use crate::{AudioAssets, GameAssets, GameState, LoadedLevel, audio::AudioStart, level::Level}; +use crate::{ + AudioAssets, GameAssets, GameState, LoadedLevel, audio::AudioStart, level::Level, + rapier_events::OnCollisionStart, +}; pub fn game_plugin(app: &mut App) { app.add_input_context::() @@ -69,9 +72,11 @@ fn display_level( Sprite::from_image(game_assets.asteroid.clone()), Transform::from_xyz(x, y, 0.0), RigidBody::Dynamic, - Collider::circle(45.0), - LinearVelocity(Vec2::from_angle(rng.gen_range(0.0..TAU)) * rng.gen_range(10.0..100.0)), - AngularVelocity(rng.gen_range(-1.5..1.5)), + Collider::ball(45.0), + Velocity { + linvel: Vec2::from_angle(rng.gen_range(0.0..TAU)) * rng.gen_range(10.0..100.0), + angvel: rng.gen_range(-1.5..1.5), + }, Asteroid, StateScoped(GameState::Game), )); @@ -119,11 +124,16 @@ fn spawn_player(commands: &mut Commands, game_assets: &GameAssets, position: Vec .spawn(( Sprite::from_image(game_assets.player_ship.clone()), RigidBody::Dynamic, - Collider::circle(40.0), - AngularDamping(5.0), + Collider::ball(40.0), + Damping { + linear_damping: 0.0, + angular_damping: 5.0, + }, + // TODO: add automatically to RigidBody::dynamic ? otherwise it crashes + Velocity::zero(), Player, Transform::from_translation(position.extend(0.0)), - CollisionEventsEnabled, + ActiveEvents::COLLISION_EVENTS, StateScoped(GameState::Game), children![ ( @@ -167,27 +177,27 @@ struct FireLaser; fn rotate( trigger: Trigger>, - mut player: Query<&mut AngularVelocity>, + mut player: Query<&mut Velocity>, time: Res