40 lines
1.1 KiB
GDScript
40 lines
1.1 KiB
GDScript
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 ""
|