fix chunk rebuilding
This commit is contained in:
@@ -44,6 +44,11 @@ fn chunk_rebuilder(
|
|||||||
biome_painters: Res<Assets<BiomePainterAsset>>,
|
biome_painters: Res<Assets<BiomePainterAsset>>,
|
||||||
painter: Res<CurrentBiomePainter>,
|
painter: Res<CurrentBiomePainter>,
|
||||||
) {
|
) {
|
||||||
|
if queue.queue.len() == 0 {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
queue.queue.dedup();
|
||||||
|
|
||||||
for chunk_index in &queue.queue {
|
for chunk_index in &queue.queue {
|
||||||
let chunk = chunks.chunks[*chunk_index];
|
let chunk = chunks.chunks[*chunk_index];
|
||||||
commands.entity(chunk).despawn();
|
commands.entity(chunk).despawn();
|
||||||
@@ -60,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_with_flags(col_verts, col_indicies, TriMeshFlags::MERGE_DUPLICATE_VERTICES);
|
let collider =
|
||||||
|
Collider::trimesh_with_flags(col_verts, col_indicies, TriMeshFlags::MERGE_DUPLICATE_VERTICES);
|
||||||
return (
|
return (
|
||||||
mesh,
|
mesh,
|
||||||
collider,
|
collider,
|
||||||
|
|||||||
@@ -17,13 +17,20 @@ impl Plugin for TerraFormingTestPlugin {
|
|||||||
fn deform(
|
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>>,
|
||||||
keyboard: Res<ButtonInput<MouseButton>>,
|
mouse: Res<ButtonInput<MouseButton>>,
|
||||||
rapier_context: Res<RapierContext>,
|
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>,
|
||||||
) {
|
) {
|
||||||
if !keyboard.just_pressed(MouseButton::Left) {
|
let mut multi = 0.;
|
||||||
|
if mouse.pressed(MouseButton::Left) {
|
||||||
|
multi = 1.;
|
||||||
|
} else if mouse.pressed(MouseButton::Right) {
|
||||||
|
multi = -1.;
|
||||||
|
}
|
||||||
|
|
||||||
|
if multi == 0. {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,7 +56,7 @@ fn deform(
|
|||||||
let contact_point = cam_ray.get_point(dist);
|
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.);
|
heightmap.set_height(&contact_coord, cur_height + 1. * time.delta_seconds() * multi);
|
||||||
let cur_chunk = contact_coord.to_chunk_index(heightmap.width);
|
let cur_chunk = contact_coord.to_chunk_index(heightmap.width);
|
||||||
|
|
||||||
if contact_coord.is_on_chunk_edge() {
|
if contact_coord.is_on_chunk_edge() {
|
||||||
|
|||||||
Reference in New Issue
Block a user