diff --git a/Cargo.lock b/Cargo.lock index 173d2d36..312a27f3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -413,6 +413,44 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "avian3d" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e09c07567e520b22bd6890a055877cd584fc3fd4317e4a0ba599f4833a4b61bc" +dependencies = [ + "approx 0.5.1", + "avian_derive", + "bevy", + "bevy_heavy", + "bevy_math", + "bevy_transform_interpolation", + "bitflags 2.10.0", + "derive_more", + "disqualified", + "glam_matrix_extras", + "itertools 0.13.0", + "nalgebra", + "parry3d", + "parry3d-f64", + "slab", + "smallvec", + "thiserror 2.0.17", + "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.22.1" @@ -999,8 +1037,8 @@ version = "17.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "207dee2dc66cbf55670c6c01932591c19febeaee9396d123c9c630b89237d87e" dependencies = [ + "avian3d", "bevy", - "bevy_rapier3d", ] [[package]] @@ -1094,6 +1132,17 @@ dependencies = [ "tracing", ] +[[package]] +name = "bevy_heavy" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7c0651daa331c326e1460cb19ee5bf497ed2810982dafca8784db44725f5c4b" +dependencies = [ + "bevy_math", + "bevy_reflect", + "glam_matrix_extras", +] + [[package]] name = "bevy_image" version = "0.17.3" @@ -1439,19 +1488,6 @@ version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17d24d7906c7de556033168b3485de36c59049fbaef0c2c44c715a23e0329b10" -[[package]] -name = "bevy_rapier3d" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "802f869a3f9e1fecffcbc8d1c4593ded900ee90aef359ef430a49cf3964067ee" -dependencies = [ - "bevy", - "bitflags 2.10.0", - "log", - "nalgebra", - "rapier3d", -] - [[package]] name = "bevy_reflect" version = "0.17.3" @@ -1767,6 +1803,15 @@ dependencies = [ "thiserror 2.0.17", ] +[[package]] +name = "bevy_transform_interpolation" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284738382605476667bbe80cf0959f4dffb61adbdb0149e22e67f4dbf97a5bc2" +dependencies = [ + "bevy", +] + [[package]] name = "bevy_ui" version = "0.17.3" @@ -3277,12 +3322,23 @@ version = "0.30.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19fc433e8437a212d1b6f1e68c7824af3aed907da60afa994e7f542d18d12aa9" dependencies = [ + "approx 0.5.1", "bytemuck", "libm", "rand 0.9.2", "serde_core", ] +[[package]] +name = "glam_matrix_extras" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb141d04d0bbebc52c325352ae0c930a6d42c77ccd02b7c591a73bd7bc1d859" +dependencies = [ + "bevy_reflect", + "glam 0.30.10", +] + [[package]] name = "glob" version = "0.3.3" @@ -4741,6 +4797,7 @@ dependencies = [ "num-derive", "num-traits", "ordered-float 5.1.0", + "rayon", "rstar", "simba", "slab", @@ -4750,6 +4807,34 @@ dependencies = [ "thiserror 2.0.17", ] +[[package]] +name = "parry3d-f64" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38fe282b81b60a2aee7f24db25ea73b3c82f6451888eeb5936b621adb87aa653" +dependencies = [ + "approx 0.5.1", + "arrayvec", + "bitflags 2.10.0", + "downcast-rs 2.0.2", + "either", + "ena", + "foldhash 0.2.0", + "hashbrown 0.16.1", + "log", + "nalgebra", + "num-derive", + "num-traits", + "ordered-float 5.1.0", + "rayon", + "rstar", + "simba", + "slab", + "smallvec", + "spade", + "thiserror 2.0.17", +] + [[package]] name = "paste" version = "1.0.15" @@ -4972,33 +5057,42 @@ dependencies = [ ] [[package]] -name = "proc-macro2" -version = "1.0.105" +name = "proc-macro-error-attr2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" dependencies = [ - "unicode-ident", + "proc-macro2", + "quote", ] [[package]] -name = "profiling" -version = "1.0.17" +name = "proc-macro-error2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" dependencies = [ - "profiling-procmacros", + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "profiling-procmacros" -version = "1.0.17" +name = "proc-macro2" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" +checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" dependencies = [ - "quote", - "syn", + "unicode-ident", ] +[[package]] +name = "profiling" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" + [[package]] name = "pxfm" version = "0.1.27" @@ -5122,31 +5216,6 @@ version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "973443cf09a9c8656b574a866ab68dfa19f0867d0340648c7d2f6a71b8a8ea68" -[[package]] -name = "rapier3d" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68073fdc88f6b709002767ce8deffffb05ac06824bf9f98a23e270bcea64ba9f" -dependencies = [ - "approx 0.5.1", - "arrayvec", - "bit-vec", - "bitflags 2.10.0", - "downcast-rs 2.0.2", - "log", - "nalgebra", - "num-derive", - "num-traits", - "ordered-float 5.1.0", - "parry3d", - "profiling", - "rustc-hash 2.1.1", - "simba", - "static_assertions", - "thiserror 2.0.17", - "wide", -] - [[package]] name = "raw-window-handle" version = "0.6.2" @@ -5337,6 +5406,7 @@ checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" name = "rsmc" version = "0.1.1" dependencies = [ + "avian3d", "bevy", "bevy-inspector-egui", "bevy_asset", @@ -5348,7 +5418,6 @@ dependencies = [ "bevy_fps_controller", "bevy_mesh", "bevy_mod_billboard", - "bevy_rapier3d", "bevy_renet", "bincode", "cgmath", diff --git a/Cargo.toml b/Cargo.toml index b2801226..fb768602 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,8 +13,8 @@ bevy_asset = "0.17.3" bevy_camera = "0.17.3" bevy_mesh = "0.17.3" bevy_dev_tools = "0.17.3" -bevy_fps_controller = {version = "17.1.0", features = ["rapier"]} -bevy_rapier3d = {version ="0.32"} +bevy_fps_controller = {version = "17.1.0", features = ["avian"]} +avian3d = {version="0.4", features = ["debug-plugin"]} bevy_flair = "0.6.0" bevy_egui = { version = "0.38.1", features = ["immutable_ctx"]} bevy_diagnostic = "0.17.3" @@ -51,6 +51,9 @@ opt-level = 3 [profile.release] opt-level = 3 +lto = "thin" +codegen-units = 1 +strip = true [[bin]] name = "client" diff --git a/src/client/collider/systems.rs b/src/client/collider/systems.rs index 1b579e9f..390347c8 100644 --- a/src/client/collider/systems.rs +++ b/src/client/collider/systems.rs @@ -19,10 +19,11 @@ pub fn setup_coliders_system(mut commands: Commands) { for z in collider_range.clone() { commands .spawn(( + RigidBody::Static, Collider::cuboid( - COLLIDER_CUBOID_WIDTH / 2.0, - COLLIDER_CUBOID_WIDTH / 2.0, - COLLIDER_CUBOID_WIDTH / 2.0, + COLLIDER_CUBOID_WIDTH, + COLLIDER_CUBOID_WIDTH, + COLLIDER_CUBOID_WIDTH, ), Transform::from_xyz(x as f32, y as f32, z as f32), )) diff --git a/src/client/gui/mod.rs b/src/client/gui/mod.rs index e1158bc4..5dbea118 100644 --- a/src/client/gui/mod.rs +++ b/src/client/gui/mod.rs @@ -24,7 +24,7 @@ impl Plugin for GuiPlugin { ..default() }, text_color: Color::srgb(0.0, 1.0, 0.0), - refresh_interval: core::time::Duration::from_millis(10), + refresh_interval: core::time::Duration::from_millis(200), enabled: true, frame_time_graph_config: FrameTimeGraphConfig { enabled: true, diff --git a/src/client/player/mod.rs b/src/client/player/mod.rs index 642042f2..a34085eb 100644 --- a/src/client/player/mod.rs +++ b/src/client/player/mod.rs @@ -4,6 +4,7 @@ pub mod resources; pub mod systems; use crate::prelude::*; +use avian3d::PhysicsPlugins; pub struct PlayerPlugin; @@ -12,9 +13,9 @@ impl Plugin for PlayerPlugin { debug!("Building PlayerPlugin"); info!("Building PlayerPlugin"); app.add_plugins(FpsControllerPlugin); - app.add_plugins(RapierPhysicsPlugin::::default()); + app.add_plugins(PhysicsPlugins::default()); #[cfg(feature = "physics_debug")] - app.add_plugins(RapierDebugRenderPlugin::default()); + app.add_plugins(PhysicsDebugPlugin::default()); app.add_message::(); app.insert_resource(player_resources::BlockSelection::new()); app.insert_resource(player_resources::PlayerSpawned(false)); diff --git a/src/client/player/systems/controller.rs b/src/client/player/systems/controller.rs index 39412044..b418c9ec 100644 --- a/src/client/player/systems/controller.rs +++ b/src/client/player/systems/controller.rs @@ -36,26 +36,24 @@ pub fn setup_controller_on_area_ready_system( let logical_entity = commands .spawn(( - Collider::capsule(Vec3::Y * 0.5, Vec3::Y * 1.5, 0.5), + Collider::cylinder(0.25, 1.5), Friction { - coefficient: 0.0, - combine_rule: CoefficientCombineRule::Min, + dynamic_coefficient: 0.0, + static_coefficient: 0.0, + combine_rule: CoefficientCombine::Min, }, Restitution { coefficient: 0.0, - combine_rule: CoefficientCombineRule::Min, + combine_rule: CoefficientCombine::Min, }, - ActiveEvents::COLLISION_EVENTS, - Velocity::zero(), + LinearVelocity::ZERO, #[cfg(feature = "lock_player")] - RigidBody::Fixed, + RigidBody::Static, #[cfg(not(feature = "lock_player"))] RigidBody::Dynamic, - Sleeping::disabled(), LockedAxes::ROTATION_LOCKED, - AdditionalMassProperties::Mass(1.0), + Mass(1.0), GravityScale(0.0), - Ccd { enabled: true }, Transform::from_translation(spawn_position), LogicalPlayer, #[cfg(not(feature = "lock_player"))] @@ -79,6 +77,8 @@ pub fn setup_controller_on_area_ready_system( crouch_height: 1.2, air_acceleration: 80.0, radius: 0.75, + experimental_step_offset: 0.1, + experimental_enable_ledge_cling: true, ..default() }, )) diff --git a/src/client/prelude.rs b/src/client/prelude.rs index 00d6f172..d412a522 100644 --- a/src/client/prelude.rs +++ b/src/client/prelude.rs @@ -14,12 +14,9 @@ pub use bevy::prelude::*; pub use bevy::transform::components::Transform; pub use bevy::window::*; +pub use avian3d::prelude::*; pub use bevy_fps_controller::controller::*; -pub use bevy_rapier3d::geometry::Collider; -pub use bevy_rapier3d::{dynamics::*, geometry::*}; -pub use bevy_rapier3d::{plugin::*, render::RapierDebugRenderPlugin}; - // networking crates pub use renet::{ClientId, ConnectionConfig, DefaultChannel, RenetClient}; diff --git a/src/server/terrain/systems.rs b/src/server/terrain/systems.rs index 0fa1187d..9e26f5c0 100644 --- a/src/server/terrain/systems.rs +++ b/src/server/terrain/systems.rs @@ -87,9 +87,11 @@ pub fn save_world_system( mut timer: ResMut, ) { if timer.is_ready() { + timer.reset(); info!("Saving world..."); - if save_world(&world_name.0, &chunk_manager, &generator).is_ok() { - timer.reset(); + match save_world(&world_name.0, &chunk_manager, &generator) { + Ok(_) => info!("World has been saved!"), + Err(err) => error!("Err saving world: {err}"), } } } @@ -101,9 +103,11 @@ pub fn backup_world_system( mut timer: ResMut, ) { if timer.is_ready() { - println!("Backing up world..."); - if backup_world(&world_name.0, &chunk_manager, &generator).is_ok() { - timer.reset(); + timer.reset(); + info!("Backing up world..."); + match backup_world(&world_name.0, &chunk_manager, &generator) { + Ok(_) => info!("World has been backed up!"), + Err(err) => error!("Err backing up world: {err}"), } } }