class_name SonarCaptureRequest extends RefCounted var scan_id: StringName var session_id: StringName var sensor_transform: Transform3D var minimum_range_m: float var maximum_range_m: float var horizontal_opening_radians: float var vertical_opening_radians: float var columns: int var rows: int func _init( p_scan_id: StringName, p_session_id: StringName, p_sensor_transform: Transform3D, p_minimum_range_m: float, p_maximum_range_m: float, p_horizontal_opening_radians: float, p_vertical_opening_radians: float, p_columns: int, p_rows: int ) -> void: scan_id = p_scan_id session_id = p_session_id sensor_transform = p_sensor_transform minimum_range_m = p_minimum_range_m maximum_range_m = p_maximum_range_m horizontal_opening_radians = p_horizontal_opening_radians vertical_opening_radians = p_vertical_opening_radians columns = p_columns rows = p_rows func validation_error() -> String: if scan_id.is_empty() or session_id.is_empty(): return "sonar capture identifiers must not be empty" if minimum_range_m < 0.0 or maximum_range_m <= minimum_range_m: return "sonar capture range is invalid" if horizontal_opening_radians <= 0.0 or horizontal_opening_radians >= PI: return "sonar capture horizontal opening is invalid" if vertical_opening_radians <= 0.0 or vertical_opening_radians >= PI: return "sonar capture vertical opening is invalid" if columns < 2 or rows < 2: return "sonar capture dimensions must be at least 2 by 2" return ""