NS-19: large bump — wider underfoot rays + shallower frustum

- Add xz-offset down-rays (~0.42 m) so rim/lean on the 1 m Bump A still
  counts as on-bump for nav skip (single center column could miss).
- Widen Bump A convex base 0.65→0.72 (top 0.5 unchanged): gentler ~34°
  sides vs ~45° to reduce CharacterBody3D snags; mesh unchanged.
pull/23/head
VinPropane 2026-04-05 01:19:28 -04:00
parent 35d16d15db
commit fba2c8e171
2 changed files with 14 additions and 5 deletions

View File

@ -49,7 +49,7 @@ size = Vector3(1, 0.15, 1)
size = Vector3(0.85, 0.12, 0.85)
[sub_resource type="ConvexPolygonShape3D" id="Convex_ns19a_frustum"]
points = PackedVector3Array(-0.65, -0.075, -0.65, 0.65, -0.075, -0.65, 0.65, -0.075, 0.65, -0.65, -0.075, 0.65, -0.5, 0.075, -0.5, 0.5, 0.075, -0.5, 0.5, 0.075, 0.5, -0.5, 0.075, 0.5)
points = PackedVector3Array(-0.72, -0.075, -0.72, 0.72, -0.075, -0.72, 0.72, -0.075, 0.72, -0.72, -0.075, 0.72, -0.5, 0.075, -0.5, 0.5, 0.075, -0.5, 0.5, 0.075, 0.5, -0.5, 0.075, 0.5)
[sub_resource type="ConvexPolygonShape3D" id="Convex_ns19b_frustum"]
points = PackedVector3Array(-0.575, -0.06, -0.575, 0.575, -0.06, -0.575, 0.575, -0.06, 0.575, -0.575, -0.06, 0.575, -0.425, 0.06, -0.425, 0.425, 0.06, -0.425, 0.425, 0.06, 0.425, -0.425, 0.06, 0.425)

View File

@ -12,8 +12,17 @@ const MAX_CLIMB_SPEED: float = 2.6
const MAX_DESCENT_SPEED: float = 2.2
const DIRECT_APPROACH_RADIUS: float = 0.85
const NS19_RAY_DOWN: float = 3.0
## Downward ray origins (Y offset from body origin) so we still detect bump under a tall capsule.
const NS19_UNDERFOOT_RAY_Y: Array[float] = [0.0, -0.45, -0.82]
## Origins (world-space offset from body) before casting down. Wider xz helps the 1 m Bump A rim
## where a single vertical line can clear the frustum; Bump B stays covered too.
const NS19_UNDERFOOT_OFFSETS: Array[Vector3] = [
Vector3(0, 0, 0),
Vector3(0, -0.45, 0),
Vector3(0, -0.82, 0),
Vector3(0.42, -0.28, 0),
Vector3(-0.42, -0.28, 0),
Vector3(0, -0.28, 0.42),
Vector3(0, -0.28, -0.42),
]
var _has_walk_goal: bool = false
var _auth_walk_goal: Vector3 = Vector3.ZERO
@ -45,8 +54,8 @@ func snap_to_server(world_pos: Vector3) -> void:
func _should_skip_nav_for_ns19_bump() -> bool:
for y_off: float in NS19_UNDERFOOT_RAY_Y:
if _ns19_bump_under_ray(global_position + Vector3(0.0, y_off, 0.0)):
for off: Vector3 in NS19_UNDERFOOT_OFFSETS:
if _ns19_bump_under_ray(global_position + off):
return true
return false