Files
Ransom-s-wake/game/application/sonar/sonar_capture_sample.gd

51 lines
1.4 KiB
GDScript

class_name SonarCaptureSample
extends RefCounted
const SonarMaterial = preload("res://game/domain/sonar/sonar_material.gd")
var row: int
var column: int
var position_m: Vector3
var normal: Vector3
var intensity: float
var elevation_m: float
var material: SonarMaterial.Value
func _init(
p_row: int,
p_column: int,
p_position_m: Vector3,
p_normal: Vector3,
p_intensity: float,
p_elevation_m: float,
p_material: SonarMaterial.Value
) -> void:
row = p_row
column = p_column
position_m = p_position_m
normal = p_normal
intensity = p_intensity
elevation_m = p_elevation_m
material = p_material
func validation_error(columns: int, rows: int) -> String:
if row < 0 or row >= rows or column < 0 or column >= columns:
return "sonar capture sample coordinates are invalid"
if not _vector_is_finite(position_m) or not _vector_is_finite(normal):
return "sonar capture sample vectors are not finite"
if normal.length_squared() < 0.25:
return "sonar capture sample normal is invalid"
if not is_finite(intensity) or intensity < 0.0 or intensity > 1.0:
return "sonar capture sample intensity is invalid"
if not is_finite(elevation_m):
return "sonar capture sample elevation is invalid"
if material == SonarMaterial.Value.UNKNOWN or not SonarMaterial.is_valid(material):
return "sonar capture sample material is invalid"
return ""
func _vector_is_finite(value: Vector3) -> bool:
return is_finite(value.x) and is_finite(value.y) and is_finite(value.z)