gmp(M02): extract player terrain query
Work-Package: M02-GMP-TERRAIN-QUERY-001 Agent: sindo-main-codex Tests: terrain query, player input and movement regressions; asset-free scene; renderer dry-run; coordinate, streaming, documentation and coordination gates Fidelity: preserves existing ADT outer-grid interpolation and player ground snap; build-12340 collision parity remains unverified
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
class_name TerrainGroundSample
|
||||
extends RefCounted
|
||||
|
||||
## Immutable result of a terrain ground-height query in Godot world units.
|
||||
## An unavailable sample carries a stable failure code instead of overloading a
|
||||
## numeric height with `NAN` at the public boundary.
|
||||
|
||||
var is_available: bool:
|
||||
get:
|
||||
return _is_available
|
||||
|
||||
var height_units: float:
|
||||
get:
|
||||
return _height_units
|
||||
|
||||
var failure_code: StringName:
|
||||
get:
|
||||
return _failure_code
|
||||
|
||||
var _is_available: bool
|
||||
var _height_units: float
|
||||
var _failure_code: StringName
|
||||
|
||||
|
||||
## Creates an available ground sample in Godot world units.
|
||||
static func available(height_units_value: float) -> TerrainGroundSample:
|
||||
return TerrainGroundSample.new(true, height_units_value, &"")
|
||||
|
||||
|
||||
## Creates an unavailable sample with a stable diagnostic code.
|
||||
static func unavailable(failure_code_value: StringName) -> TerrainGroundSample:
|
||||
return TerrainGroundSample.new(false, 0.0, failure_code_value)
|
||||
|
||||
|
||||
## Normalizes factory inputs so available samples are finite and unavailable
|
||||
## samples always carry a non-empty failure code.
|
||||
func _init(
|
||||
is_available_value: bool,
|
||||
height_units_value: float,
|
||||
failure_code_value: StringName
|
||||
) -> void:
|
||||
_is_available = is_available_value and is_finite(height_units_value)
|
||||
_height_units = height_units_value if _is_available else 0.0
|
||||
if _is_available:
|
||||
_failure_code = &""
|
||||
elif not is_finite(height_units_value):
|
||||
_failure_code = &"terrain_height_not_finite"
|
||||
else:
|
||||
_failure_code = failure_code_value if not failure_code_value.is_empty() else &"terrain_unavailable"
|
||||
Reference in New Issue
Block a user