fix terrain collision and water recovery

This commit is contained in:
Alexander Sellite 2026-08-25 00:12:01 -04:00
parent da7f072365
commit 1ab2a291d2
13 changed files with 110 additions and 11 deletions

View file

@ -490,6 +490,10 @@ func _validate_generated_region(
== PlayerWaterTrigger.EntryHeightReference.PLAYER_ORIGIN
)
assert(is_equal_approx(fresh_recovery.entry_depth_threshold, 0.1))
assert(is_equal_approx(
fresh_recovery.entry_confirmation_seconds,
0.2,
))
var coordinate_tokens := child.name.trim_prefix("FreshWater_").split("_")
assert(coordinate_tokens.size() == 2)
var coordinate := Vector2i(
@ -1043,6 +1047,25 @@ func _validate_prop_catalog(region: GeneratedWorldRegion) -> void:
assert(palm.maximum_cluster_radius > palm.minimum_cluster_radius)
assert(palm.prefer_ocean_facing)
assert(not palm.local_overhang_direction.is_zero_approx())
var aligned_tree_collisions: Dictionary[StringName, Vector2] = {
&"prop_tree_1": Vector2(0.08, 0.01),
&"prop_tree_2": Vector2(0.1, 0.075),
&"prop_tree_3": Vector2(-0.1, 0.18),
&"prop_tree_large": Vector2(0.084, 0.504),
&"prop_pine": Vector2(-0.044, 0.083),
&"prop_pine_large": Vector2(-0.04, 0.075),
&"prop_palm": Vector2(0.15, -0.1),
}
for tree_id: StringName in aligned_tree_collisions:
var aligned_tree := catalog.definition_for_id(tree_id)
assert(aligned_tree != null and aligned_tree.has_cylinder_collision())
var collision_center := Vector2(
aligned_tree.collision_offset.x,
aligned_tree.collision_offset.z,
)
assert(collision_center.is_equal_approx(
aligned_tree_collisions[tree_id]
))
var forest := region.get_biome_catalog().definition_for_id(&"biome_forest")
var forest_rule := forest.prop_rule_for_group(&"grass_tree")
var large_tree := catalog.definition_for_id(&"prop_tree_large")
@ -1139,6 +1162,20 @@ func _validate_decoration_transform(
or collision.shape is BoxShape3D
)
assert(collision.global_basis.get_scale().is_equal_approx(Vector3.ONE))
if collision.shape is CylinderShape3D:
var cylinder := collision.shape as CylinderShape3D
assert(is_equal_approx(
cylinder.radius,
definition.collision_radius * visual_scale,
))
assert(is_equal_approx(
cylinder.height,
definition.collision_height * visual_scale,
))
assert(collision.position.is_equal_approx(
definition.collision_offset * visual_scale
+ Vector3.UP * cylinder.height * 0.5
))
else:
assert(collision == null)
var query := PhysicsRayQueryParameters3D.create(