1 Commits

Author SHA1 Message Date
9a76bef2a4 Update map_init.rs 2024-05-09 18:56:47 -04:00
8 changed files with 113 additions and 128 deletions

159
Cargo.lock generated
View File

@@ -886,6 +886,19 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8050e2869fe341db6874203b5a01ff12673807a2c7c80cb829f6c7bea6997268"
[[package]]
name = "bevy_rapier3d"
version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ac2b344d110e8aff2dab7ca6ed428dfcbbfeeb8f20827825996538f24e7fcdf"
dependencies = [
"bevy",
"bitflags 2.5.0",
"log",
"nalgebra",
"rapier3d",
]
[[package]]
name = "bevy_reflect"
version = "0.13.2"
@@ -1185,34 +1198,6 @@ dependencies = [
"winit",
]
[[package]]
name = "bevy_xpbd_3d"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0425ea7361b9b27c2a382e0663deb42f41147eee60fb2b3d5fa7e42d363ea848"
dependencies = [
"bevy",
"bevy_math",
"bevy_xpbd_derive",
"derive_more",
"fxhash",
"indexmap",
"itertools",
"nalgebra",
"parry3d",
"parry3d-f64",
]
[[package]]
name = "bevy_xpbd_derive"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e1ef1d5e328abe1b76df974245f78e17fd17867583883d5e77444c6a8223a64"
dependencies = [
"quote",
"syn 2.0.55",
]
[[package]]
name = "bindgen"
version = "0.69.4"
@@ -1576,12 +1561,6 @@ 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"
@@ -1674,6 +1653,19 @@ dependencies = [
"cfg-if",
]
[[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.12"
@@ -1702,6 +1694,15 @@ dependencies = [
"crossbeam-utils",
]
[[package]]
name = "crossbeam-queue"
version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.19"
@@ -1743,10 +1744,8 @@ version = "0.99.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
dependencies = [
"convert_case",
"proc-macro2",
"quote",
"rustc_version",
"syn 1.0.109",
]
@@ -2101,15 +2100,6 @@ 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"
@@ -2959,9 +2949,9 @@ dependencies = [
[[package]]
name = "num-complex"
version = "0.4.6"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6"
dependencies = [
"num-traits",
]
@@ -2988,10 +2978,11 @@ dependencies = [
[[package]]
name = "num-rational"
version = "0.4.2"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
]
@@ -3207,9 +3198,9 @@ dependencies = [
[[package]]
name = "parry3d"
version = "0.13.8"
version = "0.13.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d27f5ab3d42400056b5b6a6306dbaa91fc3033d8628146dca0d8ed7fbc20730"
checksum = "6ccba18a65dba56c08dadfa936e0c9efbc883b3a26dc77d2685f78be10f7667c"
dependencies = [
"approx",
"arrayvec",
@@ -3219,29 +3210,6 @@ dependencies = [
"nalgebra",
"num-derive",
"num-traits",
"rayon",
"rustc-hash",
"simba",
"slab",
"smallvec",
"spade",
]
[[package]]
name = "parry3d-f64"
version = "0.13.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c46e77bfaf70d3f26dd0615dfab06a39f17ef2ae989bad44561318f47997ca7"
dependencies = [
"approx",
"arrayvec",
"bitflags 1.3.2",
"downcast-rs",
"either",
"nalgebra",
"num-derive",
"num-traits",
"rayon",
"rustc-hash",
"simba",
"slab",
@@ -3277,7 +3245,7 @@ version = "0.1.0"
dependencies = [
"bevy",
"bevy-inspector-egui 0.23.4",
"bevy_xpbd_3d",
"bevy_rapier3d",
"iyes_perf_ui",
"noise 0.8.2",
"rayon",
@@ -3504,6 +3472,28 @@ version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab"
[[package]]
name = "rapier3d"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92d07a833e0aa3bc57010caaa50bf75fa78afc03a74207607db740da4e4579a1"
dependencies = [
"approx",
"arrayvec",
"bit-vec",
"bitflags 1.3.2",
"crossbeam",
"downcast-rs",
"nalgebra",
"num-derive",
"num-traits",
"parry3d",
"rayon",
"rustc-hash",
"simba",
"vec_map",
]
[[package]]
name = "raw-window-handle"
version = "0.5.2"
@@ -3650,15 +3640,6 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[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.32"
@@ -3738,12 +3719,6 @@ dependencies = [
"tiny-skia",
]
[[package]]
name = "semver"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
[[package]]
name = "serde"
version = "1.0.197"
@@ -4637,9 +4612,9 @@ dependencies = [
[[package]]
name = "wide"
version = "0.7.17"
version = "0.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f0e39d2c603fdc0504b12b458cf1f34e0b937ed2f4f2dc20796e3e86f34e11f"
checksum = "89beec544f246e679fc25490e3f8e08003bc4bf612068f325120dad4cea02c1c"
dependencies = [
"bytemuck",
"safe_arch",

View File

@@ -12,6 +12,3 @@ opt-level = 1
# Enable high optimizations for dependencies (incl. Bevy), but not for our code:
[profile.dev.package."*"]
opt-level = 3
[profile.release]
codegen-units = 1

View File

@@ -12,8 +12,8 @@ bevy-inspector-egui = "0.23.4"
iyes_perf_ui = "0.2.3"
noise = "0.8.2"
world_generation ={path="../../engine/world_generation"}
bevy_rapier3d = { version = "0.25.0", features = [ "simd-stable", "debug-render-3d","parallel" ] }
rayon = "1.10.0"
bevy_xpbd_3d = { version= "0.4.2", features= ["simd", "parallel"] }
[features]

View File

@@ -1,7 +1,9 @@
use bevy::core_pipeline::experimental::taa::{TemporalAntiAliasBundle, TemporalAntiAliasPlugin};
use bevy::input::mouse::{MouseMotion, MouseScrollUnit, MouseWheel};
use bevy::pbr::ScreenSpaceAmbientOcclusionBundle;
use bevy::prelude::*;
use bevy::window::CursorGrabMode;
use bevy_rapier3d::plugin::RapierContext;
use world_generation::hex_utils::HexCoord;
use world_generation::prelude::Map;

View File

@@ -1,5 +1,5 @@
use bevy::prelude::*;
use bevy_xpbd_3d::plugins::collision::Collider;
use bevy_rapier3d::geometry::{Collider, TriMeshFlags};
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
use world_generation::{
biome_painter::BiomePainterAsset,
@@ -65,7 +65,8 @@ fn chunk_rebuilder(
let chunk = &heightmap.chunks[*idx];
let mesh = generate_chunk_mesh(chunk, &heightmap, cur_painter, &tile_assets, &tile_mappers);
let (col_verts, col_indicies) = generate_chunk_collider(chunk, &heightmap);
let collider = Collider::trimesh(col_verts, col_indicies);
let collider =
Collider::trimesh_with_flags(col_verts, col_indicies, TriMeshFlags::MERGE_DUPLICATE_VERTICES);
return (
mesh,
collider,

View File

@@ -2,13 +2,13 @@
use bevy::log::*;
use bevy::{asset::LoadState, pbr::ExtendedMaterial, prelude::*};
use bevy_inspector_egui::quick::ResourceInspectorPlugin;
use bevy_xpbd_3d::plugins::collision::Collider;
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
use bevy_rapier3d::geometry::Collider;
use rayon::iter::{IntoParallelIterator, IntoParallelRefIterator, ParallelIterator};
use world_generation::{
biome_painter::*,
chunk_colliders::generate_chunk_collider,
heightmap::generate_heightmap,
hex_utils::{self, offset_to_world, SHORT_DIAGONAL},
hex_utils::{self, offset_to_world, OUTER_RADIUS, SHORT_DIAGONAL},
mesh_generator::generate_chunk_mesh,
prelude::*,
tile_manager::*,
@@ -181,8 +181,8 @@ fn create_map(mut commands: Commands, mut cam: Query<(&mut Transform, Entity), W
noise_scale: 450.,
sea_level: 8.5,
border_size: 64.,
//size: UVec2::splat(1024 / Chunk::SIZE as u32),
size: UVec2::splat(2),
size: UVec2::splat(1),
// size: UVec2::splat(1),
};
let heightmap = generate_heightmap(&config, 4);
@@ -213,7 +213,7 @@ fn spawn_map(
map.regenerate = false;
let cur_painter = b_painter.unwrap();
let tile_collider = Collider::cylinder(10., OUTER_RADIUS);
let chunk_meshes: Vec<_> = heightmap
.chunks
.par_iter()
@@ -221,16 +221,9 @@ fn spawn_map(
#[cfg(feature = "tracing")]
let _gen_mesh = info_span!("Generate Chunk").entered();
let mesh = generate_chunk_mesh(chunk, &heightmap, cur_painter, &tile_assets, &tile_mappers);
let (col_verts, col_indicies) = generate_chunk_collider(chunk, &heightmap);
let collider: Collider;
{
#[cfg(feature = "tracing")]
let _collider_span = info_span!("Create Collider Trimesh").entered();
collider = Collider::trimesh(col_verts, col_indicies);
}
return (
mesh,
collider,
offset_to_world(chunk.chunk_offset * Chunk::SIZE as i32, 0.),
hex_utils::offset_to_index(chunk.chunk_offset, heightmap.width),
);
@@ -247,9 +240,9 @@ fn spawn_map(
0.,
(Chunk::SIZE / 2) as f32 * 1.5,
);
for (mesh, collider, pos, index) in chunk_meshes {
for (mesh, pos, index) in chunk_meshes {
// let mesh_handle = meshes.a
let chunk = commands.spawn((
let mut chunk = commands.spawn((
MaterialMeshBundle {
mesh: meshes.add(mesh),
material: atlas.chunk_material_handle.clone(),
@@ -258,8 +251,23 @@ fn spawn_map(
},
PhosChunk::new(index),
RenderDistanceVisibility::default().with_offset(visibility_offset),
collider,
));
chunk.with_children(|b| {
let heights = &heightmap.chunks[index];
let mut colliders: Vec<_> = (0..(Chunk::SIZE * Chunk::SIZE))
.into_par_iter()
.map(|_| Collider::capsule_y(10., OUTER_RADIUS))
.collect();
for z in 0..Chunk::SIZE {
for x in 0..Chunk::SIZE {
let h = heights.heights[x + z * Chunk::SIZE];
b.spawn((
colliders.remove(0),
Transform::from_translation(offset_to_world(IVec2::new(x as i32, z as i32), h)),
));
}
}
});
registry.chunks.push(chunk.id());
}
}

View File

@@ -1,5 +1,5 @@
use bevy::{prelude::*, window::PrimaryWindow};
use bevy_xpbd_3d::plugins::spatial_query::{SpatialQuery, SpatialQueryFilter};
use bevy_rapier3d::{pipeline::QueryFilter, plugin::RapierContext};
use world_generation::{hex_utils::HexCoord, prelude::Map};
use crate::{camera_system::components::PhosCamera, prelude::PhosChunkRegistry};
@@ -18,7 +18,7 @@ fn deform(
cam_query: Query<(&GlobalTransform, &Camera), With<PhosCamera>>,
window: Query<&Window, With<PrimaryWindow>>,
mouse: Res<ButtonInput<MouseButton>>,
spatial_query: SpatialQuery,
rapier_context: Res<RapierContext>,
mut heightmap: ResMut<Map>,
mut rebuild: ResMut<ChunkRebuildQueue>,
time: Res<Time>,
@@ -44,16 +44,16 @@ fn deform(
return;
};
let collision = spatial_query.cast_ray(
let collision = rapier_context.cast_ray(
cam_ray.origin,
cam_ray.direction.into(),
100.,
true,
SpatialQueryFilter::default(),
QueryFilter::only_fixed(),
);
if let Some(hit) = collision {
let contact_point = cam_ray.get_point(hit.time_of_impact);
if let Some((_, dist)) = collision {
let contact_point = cam_ray.get_point(dist);
let contact_coord = HexCoord::from_world_pos(contact_point);
let cur_height = heightmap.sample_height(&contact_coord);
heightmap.set_height(&contact_coord, cur_height + 1. * time.delta_seconds() * multi);

View File

@@ -1,5 +1,6 @@
use crate::camera_system::camera_plugin::PhosCameraPlugin;
use crate::camera_system::components::PhosCamera;
use crate::map_rendering::chunk_rebuild::ChunkRebuildPlugin;
use crate::map_rendering::map_init::MapInitPlugin;
use crate::shader_extensions::chunk_material::ChunkMaterial;
use crate::utlis::render_distance_system::RenderDistancePlugin;
@@ -8,9 +9,9 @@ use bevy::{
pbr::{wireframe::WireframeConfig, CascadeShadowConfig},
prelude::*,
};
use bevy_xpbd_3d::components::{LinearVelocity, RigidBody};
use bevy_xpbd_3d::plugins::collision::Collider;
use bevy_xpbd_3d::plugins::PhysicsPlugins;
use bevy_rapier3d::dynamics::{Ccd, RigidBody, Velocity};
use bevy_rapier3d::geometry::Collider;
use bevy_rapier3d::plugin::{NoUserData, RapierPhysicsPlugin};
use iyes_perf_ui::prelude::*;
use world_generation::biome_painter::BiomePainterPlugin;
use world_generation::tile_manager::TileAssetPlugin;
@@ -44,7 +45,7 @@ impl Plugin for PhosGamePlugin {
app.add_plugins(TileMapperAssetPlugin);
app.add_plugins(BiomePainterPlugin);
//Physics
app.add_plugins(PhysicsPlugins::default());
app.add_plugins(RapierPhysicsPlugin::<NoUserData>::default());
// app.add_plugins(RapierDebugRenderPlugin::default());
app.insert_resource(WireframeConfig {
@@ -103,9 +104,10 @@ fn spawn_sphere(
transform: Transform::from_translation(cam_transform.translation),
..default()
},
Collider::sphere(0.3),
Collider::ball(0.3),
RigidBody::Dynamic,
LinearVelocity(cam_transform.forward() * 50.),
Ccd::enabled(),
Velocity::linear(cam_transform.forward() * 50.),
));
}
}