@startuml

class Player {
  + Player()
}

class AMCLLaserData {
  + AMCLLaserData()
  + ~AMCLLaserData()
  # range_count: int
  # range_max: double
  # ranges: double[][]

}

class AMCLLaser {
  - model_type: laser_model_t
  - time: double
  - map: map_t
  - laser_pose: pf_vector_t
  - max_beams: int
  - do_beamskip: bool
  - beam_skip_distance: double
  - beam_skip_threshold: double
  - beam_skip_error_threshold: double
  - max_samples: int
  - max_obs: int
  - temp_obs: double[][]
  - z_hit: double
  - z_short: double
  - z_max: double
  - z_rand: double
  - sigma_hit: double
  - lambda_short: double
  - chi_outlier: double

  + AMCLLaser(max_beams: size_t, map: map_t)
  + ~AMCLLaser()
  + SetModelBeam(z_hit: double, z_short: double, z_max: double, z_rand: double, sigma_hit: double, lambda_short: double, chi_outlier: double)
  + SetModelLikelihoodField(z_hit: double, z_rand: double, sigma_hit: double, max_occ_dist: double)
  + SetModelLikelihoodFieldProb(z_hit: double, z_rand: double, sigma_hit: double, max_occ_dist: double, do_beamskip: bool, beam_skip_distance: double, beam_skip_threshold: double, beam_skip_error_threshold: double)
  + UpdateSensor(pf: pf_t, data: AMCLSensorData): bool
  + SetLaserPose(laser_pose: pf_vector_t)
  + BeamModel(data: AMCLLaserData, set: pf_sample_set_t): double
  + LikelihoodFieldModel(data: AMCLLaserData, set: pf_sample_set_t): double
  + LikelihoodFieldModelProb(data: AMCLLaserData, set: pf_sample_set_t): double
  + reallocTempData(max_samples: int, max_obs: int)
}

Player --|> AMCLSensor

AMCLLaserData --|> AMCLSensorData

@enduml