From 6cd6a96b6461568842425860dead987289c746d4 Mon Sep 17 00:00:00 2001 From: Imbris Date: Sat, 19 Sep 2020 05:16:06 -0400 Subject: [PATCH] Fix projectile/water interaction --- common/src/sys/phys.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/common/src/sys/phys.rs b/common/src/sys/phys.rs index ce461a706d..36a5ed75f6 100644 --- a/common/src/sys/phys.rs +++ b/common/src/sys/phys.rs @@ -618,11 +618,13 @@ impl<'a> System<'a> for Sys { .map(|block_aabb| block_aabb.max.z - pos.0.z); }, Collider::Point => { - let (dist, block) = terrain.ray(pos.0, pos.0 + pos_delta).ignore_error().cast(); + let (dist, block) = terrain.ray(pos.0, pos.0 + pos_delta) + .until(|vox| !vox.is_air() && !vox.is_fluid()) + .ignore_error().cast(); pos.0 += pos_delta.try_normalized().unwrap_or(Vec3::zero()) * dist; - // Can't fair since we do ignore_error above + // Can't fail since we do ignore_error above if block.unwrap().is_some() { let block_center = pos.0.map(|e| e.floor()) + 0.5; let block_rpos = (pos.0 - block_center) @@ -650,6 +652,10 @@ impl<'a> System<'a> for Sys { }); } } + + physics_state.in_fluid = terrain.get(pos.0.map(|e| e.floor() as i32)) + .ok() + .and_then(|vox| vox.is_fluid().then_some(1.0)); }, }