class_name SonarContact extends RefCounted const SonarMaterial = preload("res://game/domain/sonar/sonar_material.gd") var contact_id: StringName var material: SonarMaterial.Value var center_m: Vector3 var bounds: AABB var maximum_intensity: float var sample_count: int func _init( p_contact_id: StringName, p_material: SonarMaterial.Value, p_center_m: Vector3, p_bounds: AABB, p_maximum_intensity: float, p_sample_count: int ) -> void: contact_id = p_contact_id material = p_material center_m = p_center_m bounds = p_bounds maximum_intensity = p_maximum_intensity sample_count = p_sample_count func validation_error() -> String: if contact_id.is_empty(): return "sonar contact id is empty" if material == SonarMaterial.Value.UNKNOWN or not SonarMaterial.is_valid(material): return "sonar contact material is invalid" if sample_count <= 0: return "sonar contact sample count must be positive" if not is_finite(maximum_intensity) or maximum_intensity < 0.0 or maximum_intensity > 1.0: return "sonar contact intensity must be between 0 and 1" return ""