fix clam surface spawn validation

This commit is contained in:
Alexander Sellite 2026-08-25 02:05:52 -04:00
parent 135fd9110f
commit 046f5e0fdb
5 changed files with 208 additions and 27 deletions

View file

@ -518,7 +518,12 @@ func _sample_surface_position(
)
if triangles.is_empty() or total_area <= 0.0:
return Vector3(INF, INF, INF)
var attempts: int = 48 if is_finite(maximum_distance) else 1
var validates_diggable_surface := not entry.diggable_area_id.is_empty()
var attempts: int = (
48
if validates_diggable_surface or is_finite(maximum_distance)
else 1
)
var fallback: Vector3 = Vector3(INF, INF, INF)
for _attempt: int in attempts:
var roll: float = _rng.randf() * total_area
@ -534,12 +539,22 @@ func _sample_surface_position(
+ triangle[2] * barycentric_c
)
fallback = point
if (
var within_requested_distance := (
not is_finite(maximum_distance)
or Vector2(point.x - origin.x, point.z - origin.z).length()
<= maximum_distance
):
)
var valid_diggable_surface := (
not validates_diggable_surface
or _world.is_diggable_surface_point_valid(
entry.diggable_area_id,
point,
)
)
if within_requested_distance and valid_diggable_surface:
return point
if validates_diggable_surface:
return Vector3(INF, INF, INF)
if origin.is_finite() and is_finite(maximum_distance):
return origin
return fallback