diff --git a/Cargo.lock b/Cargo.lock index 8a5241d..787e7ff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -316,6 +316,36 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +[[package]] +name = "avian3d" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54325576b6efa46576db611624db749b553d0c66e439862bdc60c43e01f012f9" +dependencies = [ + "avian_derive", + "bevy", + "bevy_math", + "bitflags 2.6.0", + "derive_more", + "fxhash", + "indexmap", + "itertools 0.13.0", + "nalgebra 0.32.6", + "parry3d 0.15.1", + "parry3d-f64", +] + +[[package]] +name = "avian_derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4adeeecb6d4628d3ca11836ce9af8309f9552d4bd3e3f6e4368440d8163260c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.70", +] + [[package]] name = "base64" version = "0.21.7" @@ -932,7 +962,7 @@ dependencies = [ "bevy", "bitflags 2.6.0", "log", - "nalgebra", + "nalgebra 0.33.0", "rapier3d", ] @@ -1275,7 +1305,7 @@ dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools", + "itertools 0.12.1", "lazy_static", "lazycell", "proc-macro2", @@ -1619,6 +1649,12 @@ dependencies = [ "const_soft_float", ] +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + [[package]] name = "core-foundation" version = "0.9.4" @@ -1796,6 +1832,19 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.70", +] + [[package]] name = "dispatch" version = "0.2.0" @@ -2097,6 +2146,15 @@ dependencies = [ "thread_local", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "generator" version = "0.8.1" @@ -2499,6 +2557,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.11" @@ -2829,6 +2896,23 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "nalgebra" +version = "0.32.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4" +dependencies = [ + "approx", + "glam", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba 0.8.1", + "typenum", +] + [[package]] name = "nalgebra" version = "0.33.0" @@ -2842,7 +2926,7 @@ dependencies = [ "num-complex", "num-rational", "num-traits", - "simba", + "simba 0.9.0", "typenum", ] @@ -3378,6 +3462,29 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "parry3d" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa342e0cdfc774fed0196714290ba2d85408b8ce9f295c40a0b1e05f3f8256ab" +dependencies = [ + "approx", + "arrayvec", + "bitflags 1.3.2", + "downcast-rs", + "either", + "log", + "nalgebra 0.32.6", + "num-derive", + "num-traits", + "rayon", + "rustc-hash 1.1.0", + "simba 0.8.1", + "slab", + "smallvec", + "spade", +] + [[package]] name = "parry3d" version = "0.16.1" @@ -3390,18 +3497,41 @@ dependencies = [ "downcast-rs", "either", "log", - "nalgebra", + "nalgebra 0.33.0", "num-derive", "num-traits", "ordered-float", "rustc-hash 2.0.0", - "simba", + "simba 0.9.0", "slab", "smallvec", "spade", "thiserror", ] +[[package]] +name = "parry3d-f64" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc07fa374273eca29066d59d3ded520bf845ed582e38c0d60109459ea4ed76e" +dependencies = [ + "approx", + "arrayvec", + "bitflags 1.3.2", + "downcast-rs", + "either", + "log", + "nalgebra 0.32.6", + "num-derive", + "num-traits", + "rayon", + "rustc-hash 1.1.0", + "simba 0.8.1", + "slab", + "smallvec", + "spade", +] + [[package]] name = "paste" version = "1.0.15" @@ -3436,10 +3566,10 @@ dependencies = [ name = "phos" version = "0.1.0" dependencies = [ + "avian3d", "bevy", "bevy-inspector-egui", "bevy_asset_loader", - "bevy_rapier3d", "buildings", "iyes_perf_ui", "noise 0.8.2", @@ -3702,16 +3832,14 @@ dependencies = [ "crossbeam", "downcast-rs", "log", - "nalgebra", + "nalgebra 0.33.0", "num-derive", "num-traits", "ordered-float", - "parry3d", - "rayon", + "parry3d 0.16.1", "rustc-hash 2.0.0", - "simba", + "simba 0.9.0", "thiserror", - "vec_map", ] [[package]] @@ -3861,6 +3989,15 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + [[package]] name = "rustix" version = "0.38.34" @@ -3939,6 +4076,12 @@ dependencies = [ "tiny-skia", ] +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + [[package]] name = "send_wrapper" version = "0.6.0" @@ -3999,6 +4142,19 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "simba" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + [[package]] name = "simba" version = "0.9.0" diff --git a/game/main/Cargo.toml b/game/main/Cargo.toml index 657cb9c..b6ddd0b 100644 --- a/game/main/Cargo.toml +++ b/game/main/Cargo.toml @@ -12,7 +12,6 @@ bevy-inspector-egui = "0.25.0" iyes_perf_ui = "0.3.0" noise = "0.8.2" world_generation = { path = "../../engine/world_generation" } -bevy_rapier3d = { version = "0.27.0", features = ["simd-stable", "parallel"] } rayon = "1.10.0" buildings = { path = "../buildings" } shared = { path = "../shared" } @@ -21,6 +20,7 @@ bevy_asset_loader = { version = "0.21.0", features = [ "3d", ] } ron = "0.8.1" +avian3d = { version = "0.1.1" } [features] tracing = ["bevy/trace_tracy", "world_generation/tracing", "buildings/tracing"] diff --git a/game/main/src/map_rendering/chunk_rebuild.rs b/game/main/src/map_rendering/chunk_rebuild.rs index 44000d9..fcb8e5a 100644 --- a/game/main/src/map_rendering/chunk_rebuild.rs +++ b/game/main/src/map_rendering/chunk_rebuild.rs @@ -1,9 +1,8 @@ +use avian3d::prelude::*; use bevy::ecs::world::CommandQueue; use bevy::prelude::*; use bevy::tasks::*; use bevy::utils::futures; -use bevy_rapier3d::geometry::Collider; -use bevy_rapier3d::geometry::TriMeshFlags; use world_generation::prelude::Map; use world_generation::states::GeneratorState; @@ -17,18 +16,12 @@ pub struct ChunkRebuildPlugin; impl Plugin for ChunkRebuildPlugin { fn build(&self, app: &mut App) { - app.insert_resource(ChunkRebuildQueue::default()); app.init_resource::(); app.add_systems(PreUpdate, chunk_rebuilder.run_if(in_state(GeneratorState::SpawnMap))); app.add_systems(PostUpdate, collider_task_resolver); } } -#[derive(Resource, Default)] -pub struct ChunkRebuildQueue { - pub queue: Vec, -} - fn chunk_rebuilder( mut commands: Commands, chunk_query: Query<(Entity, &PhosChunk), (With, Without)>, @@ -51,11 +44,7 @@ fn chunk_rebuilder( let (mesh, collider_data, _, _) = prepare_chunk_mesh(&chunk_data, chunk_offset, chunk_index); #[cfg(feature = "tracing")] let trimesh_span = info_span!("Chunk Trimesh").entered(); - let c = Collider::trimesh_with_flags( - collider_data.0, - collider_data.1, - TriMeshFlags::DELETE_DUPLICATE_TRIANGLES, - ); + let c = Collider::trimesh(collider_data.0, collider_data.1); #[cfg(feature = "tracing")] drop(trimesh_span); queue.push(move |world: &mut World| { diff --git a/game/main/src/map_rendering/terraforming_test.rs b/game/main/src/map_rendering/terraforming_test.rs index 1525c21..c8ced94 100644 --- a/game/main/src/map_rendering/terraforming_test.rs +++ b/game/main/src/map_rendering/terraforming_test.rs @@ -1,5 +1,5 @@ +use avian3d::prelude::*; use bevy::{prelude::*, window::PrimaryWindow}; -use bevy_rapier3d::{pipeline::QueryFilter, plugin::RapierContext}; use world_generation::{hex_utils::HexCoord, prelude::Map, states::GeneratorState}; use crate::{ @@ -20,7 +20,7 @@ fn deform( mut commands: Commands, window: Query<&Window, With>, mouse: Res>, - rapier_context: Res, + spatial_query: SpatialQuery, mut heightmap: ResMut, chunks: Res, ) { @@ -45,17 +45,20 @@ fn deform( return; }; - let collision = rapier_context.cast_ray( + let collision = spatial_query.cast_ray( cam_ray.origin, cam_ray.direction.into(), 500., true, - QueryFilter::only_fixed(), + SpatialQueryFilter::default(), ); - if let Some((e, dist)) = collision { + if let Some(hit) = collision { #[cfg(feature = "tracing")] let span = info_span!("Deform Mesh").entered(); + + let e = hit.entity; + let dist = hit.time_of_impact; let contact_point = cam_ray.get_point(dist); let contact_coord = HexCoord::from_world_pos(contact_point); let modified_chunks = heightmap.create_crater(&contact_coord, 5, 5. * multi); diff --git a/game/main/src/phos.rs b/game/main/src/phos.rs index e230447..2389f9b 100644 --- a/game/main/src/phos.rs +++ b/game/main/src/phos.rs @@ -2,14 +2,13 @@ use crate::camera_system::camera_plugin::PhosCameraPlugin; use crate::camera_system::components::PhosCamera; use crate::map_rendering::map_init::MapInitPlugin; use crate::utlis::render_distance_system::RenderDistancePlugin; +use avian3d::prelude::*; +use avian3d::PhysicsPlugins; use bevy::{ pbr::{wireframe::WireframeConfig, CascadeShadowConfig}, prelude::*, }; use bevy_asset_loader::prelude::*; -use bevy_rapier3d::dynamics::{Ccd, RigidBody, Velocity}; -use bevy_rapier3d::geometry::Collider; -use bevy_rapier3d::plugin::{NoUserData, RapierPhysicsPlugin}; use buildings::BuildingPugin; use iyes_perf_ui::prelude::*; use shared::states::{GameplayState, MenuState}; @@ -31,7 +30,7 @@ impl Plugin for PhosGamePlugin { PhosCameraPlugin, MapInitPlugin, RenderDistancePlugin, - // BuildingPugin, + //BuildingPugin, DespawnPuglin, )); @@ -48,7 +47,7 @@ impl Plugin for PhosGamePlugin { .add_plugins(PerfUiPlugin); //Physics - app.add_plugins(RapierPhysicsPlugin::::default()); + app.add_plugins(PhysicsPlugins::default()); // app.add_plugins(RapierDebugRenderPlugin::default()); app.insert_resource(WireframeConfig { @@ -107,10 +106,9 @@ fn spawn_sphere( transform: Transform::from_translation(cam_transform.translation), ..default() }, - Collider::ball(0.3), + Collider::sphere(0.3), RigidBody::Dynamic, - Ccd::enabled(), - Velocity::linear(cam_transform.forward() * 50.), + LinearVelocity(cam_transform.forward() * 50.), )); } } diff --git a/game/main/src/utlis/chunk_utils.rs b/game/main/src/utlis/chunk_utils.rs index e37870e..3844cdf 100644 --- a/game/main/src/utlis/chunk_utils.rs +++ b/game/main/src/utlis/chunk_utils.rs @@ -1,3 +1,4 @@ +use avian3d::prelude::*; #[cfg(feature = "tracing")] use bevy::log::*; use bevy::{ @@ -6,7 +7,6 @@ use bevy::{ math::{IVec2, Vec3}, render::mesh::Mesh, }; -use bevy_rapier3d::geometry::{Collider, TriMeshFlags}; use rayon::iter::{IntoParallelRefMutIterator, ParallelIterator}; use world_generation::{ biome_painter::BiomePainter, @@ -76,7 +76,7 @@ pub fn prepare_chunk_mesh_with_collider( { #[cfg(feature = "tracing")] let _collider_span = info_span!("Create Collider Trimesh").entered(); - collider = Collider::trimesh_with_flags(col_verts, col_indicies, TriMeshFlags::DELETE_DUPLICATE_TRIANGLES); + collider = Collider::trimesh(col_verts, col_indicies); } return (mesh, collider, pos, index); }