fix clam surface spawn validation
This commit is contained in:
parent
135fd9110f
commit
046f5e0fdb
5 changed files with 208 additions and 27 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue