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" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8050e2869fe341db6874203b5a01ff12673807a2c7c80cb829f6c7bea6997268" 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]] [[package]]
name = "bevy_reflect" name = "bevy_reflect"
version = "0.13.2" version = "0.13.2"
@@ -1185,34 +1198,6 @@ dependencies = [
"winit", "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]] [[package]]
name = "bindgen" name = "bindgen"
version = "0.69.4" version = "0.69.4"
@@ -1576,12 +1561,6 @@ dependencies = [
"const_soft_float", "const_soft_float",
] ]
[[package]]
name = "convert_case"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
[[package]] [[package]]
name = "core-foundation" name = "core-foundation"
version = "0.9.4" version = "0.9.4"
@@ -1674,6 +1653,19 @@ dependencies = [
"cfg-if", "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]] [[package]]
name = "crossbeam-channel" name = "crossbeam-channel"
version = "0.5.12" version = "0.5.12"
@@ -1702,6 +1694,15 @@ dependencies = [
"crossbeam-utils", "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]] [[package]]
name = "crossbeam-utils" name = "crossbeam-utils"
version = "0.8.19" version = "0.8.19"
@@ -1743,10 +1744,8 @@ version = "0.99.17"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
dependencies = [ dependencies = [
"convert_case",
"proc-macro2", "proc-macro2",
"quote", "quote",
"rustc_version",
"syn 1.0.109", "syn 1.0.109",
] ]
@@ -2101,15 +2100,6 @@ dependencies = [
"thread_local", "thread_local",
] ]
[[package]]
name = "fxhash"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
dependencies = [
"byteorder",
]
[[package]] [[package]]
name = "generator" name = "generator"
version = "0.8.1" version = "0.8.1"
@@ -2959,9 +2949,9 @@ dependencies = [
[[package]] [[package]]
name = "num-complex" name = "num-complex"
version = "0.4.6" version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6"
dependencies = [ dependencies = [
"num-traits", "num-traits",
] ]
@@ -2988,10 +2978,11 @@ dependencies = [
[[package]] [[package]]
name = "num-rational" name = "num-rational"
version = "0.4.2" version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
dependencies = [ dependencies = [
"autocfg",
"num-integer", "num-integer",
"num-traits", "num-traits",
] ]
@@ -3207,9 +3198,9 @@ dependencies = [
[[package]] [[package]]
name = "parry3d" name = "parry3d"
version = "0.13.8" version = "0.13.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d27f5ab3d42400056b5b6a6306dbaa91fc3033d8628146dca0d8ed7fbc20730" checksum = "6ccba18a65dba56c08dadfa936e0c9efbc883b3a26dc77d2685f78be10f7667c"
dependencies = [ dependencies = [
"approx", "approx",
"arrayvec", "arrayvec",
@@ -3219,29 +3210,6 @@ dependencies = [
"nalgebra", "nalgebra",
"num-derive", "num-derive",
"num-traits", "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", "rustc-hash",
"simba", "simba",
"slab", "slab",
@@ -3277,7 +3245,7 @@ version = "0.1.0"
dependencies = [ dependencies = [
"bevy", "bevy",
"bevy-inspector-egui 0.23.4", "bevy-inspector-egui 0.23.4",
"bevy_xpbd_3d", "bevy_rapier3d",
"iyes_perf_ui", "iyes_perf_ui",
"noise 0.8.2", "noise 0.8.2",
"rayon", "rayon",
@@ -3504,6 +3472,28 @@ version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" 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]] [[package]]
name = "raw-window-handle" name = "raw-window-handle"
version = "0.5.2" version = "0.5.2"
@@ -3650,15 +3640,6 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 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]] [[package]]
name = "rustix" name = "rustix"
version = "0.38.32" version = "0.38.32"
@@ -3738,12 +3719,6 @@ dependencies = [
"tiny-skia", "tiny-skia",
] ]
[[package]]
name = "semver"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.197" version = "1.0.197"
@@ -4637,9 +4612,9 @@ dependencies = [
[[package]] [[package]]
name = "wide" name = "wide"
version = "0.7.17" version = "0.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f0e39d2c603fdc0504b12b458cf1f34e0b937ed2f4f2dc20796e3e86f34e11f" checksum = "89beec544f246e679fc25490e3f8e08003bc4bf612068f325120dad4cea02c1c"
dependencies = [ dependencies = [
"bytemuck", "bytemuck",
"safe_arch", "safe_arch",

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
use bevy::{prelude::*, window::PrimaryWindow}; 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 world_generation::{hex_utils::HexCoord, prelude::Map};
use crate::{camera_system::components::PhosCamera, prelude::PhosChunkRegistry}; use crate::{camera_system::components::PhosCamera, prelude::PhosChunkRegistry};
@@ -18,7 +18,7 @@ fn deform(
cam_query: Query<(&GlobalTransform, &Camera), With<PhosCamera>>, cam_query: Query<(&GlobalTransform, &Camera), With<PhosCamera>>,
window: Query<&Window, With<PrimaryWindow>>, window: Query<&Window, With<PrimaryWindow>>,
mouse: Res<ButtonInput<MouseButton>>, mouse: Res<ButtonInput<MouseButton>>,
spatial_query: SpatialQuery, rapier_context: Res<RapierContext>,
mut heightmap: ResMut<Map>, mut heightmap: ResMut<Map>,
mut rebuild: ResMut<ChunkRebuildQueue>, mut rebuild: ResMut<ChunkRebuildQueue>,
time: Res<Time>, time: Res<Time>,
@@ -44,16 +44,16 @@ fn deform(
return; return;
}; };
let collision = spatial_query.cast_ray( let collision = rapier_context.cast_ray(
cam_ray.origin, cam_ray.origin,
cam_ray.direction.into(), cam_ray.direction.into(),
100., 100.,
true, true,
SpatialQueryFilter::default(), QueryFilter::only_fixed(),
); );
if let Some(hit) = collision { if let Some((_, dist)) = collision {
let contact_point = cam_ray.get_point(hit.time_of_impact); let contact_point = cam_ray.get_point(dist);
let contact_coord = HexCoord::from_world_pos(contact_point); let contact_coord = HexCoord::from_world_pos(contact_point);
let cur_height = heightmap.sample_height(&contact_coord); let cur_height = heightmap.sample_height(&contact_coord);
heightmap.set_height(&contact_coord, cur_height + 1. * time.delta_seconds() * multi); 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::camera_plugin::PhosCameraPlugin;
use crate::camera_system::components::PhosCamera; use crate::camera_system::components::PhosCamera;
use crate::map_rendering::chunk_rebuild::ChunkRebuildPlugin;
use crate::map_rendering::map_init::MapInitPlugin; use crate::map_rendering::map_init::MapInitPlugin;
use crate::shader_extensions::chunk_material::ChunkMaterial; use crate::shader_extensions::chunk_material::ChunkMaterial;
use crate::utlis::render_distance_system::RenderDistancePlugin; use crate::utlis::render_distance_system::RenderDistancePlugin;
@@ -8,9 +9,9 @@ use bevy::{
pbr::{wireframe::WireframeConfig, CascadeShadowConfig}, pbr::{wireframe::WireframeConfig, CascadeShadowConfig},
prelude::*, prelude::*,
}; };
use bevy_xpbd_3d::components::{LinearVelocity, RigidBody}; use bevy_rapier3d::dynamics::{Ccd, RigidBody, Velocity};
use bevy_xpbd_3d::plugins::collision::Collider; use bevy_rapier3d::geometry::Collider;
use bevy_xpbd_3d::plugins::PhysicsPlugins; use bevy_rapier3d::plugin::{NoUserData, RapierPhysicsPlugin};
use iyes_perf_ui::prelude::*; use iyes_perf_ui::prelude::*;
use world_generation::biome_painter::BiomePainterPlugin; use world_generation::biome_painter::BiomePainterPlugin;
use world_generation::tile_manager::TileAssetPlugin; use world_generation::tile_manager::TileAssetPlugin;
@@ -44,7 +45,7 @@ impl Plugin for PhosGamePlugin {
app.add_plugins(TileMapperAssetPlugin); app.add_plugins(TileMapperAssetPlugin);
app.add_plugins(BiomePainterPlugin); app.add_plugins(BiomePainterPlugin);
//Physics //Physics
app.add_plugins(PhysicsPlugins::default()); app.add_plugins(RapierPhysicsPlugin::<NoUserData>::default());
// app.add_plugins(RapierDebugRenderPlugin::default()); // app.add_plugins(RapierDebugRenderPlugin::default());
app.insert_resource(WireframeConfig { app.insert_resource(WireframeConfig {
@@ -103,9 +104,10 @@ fn spawn_sphere(
transform: Transform::from_translation(cam_transform.translation), transform: Transform::from_translation(cam_transform.translation),
..default() ..default()
}, },
Collider::sphere(0.3), Collider::ball(0.3),
RigidBody::Dynamic, RigidBody::Dynamic,
LinearVelocity(cam_transform.forward() * 50.), Ccd::enabled(),
Velocity::linear(cam_transform.forward() * 50.),
)); ));
} }
} }