// Generated by scripts/generate.mjs from bindings/api.mjs. Do not edit.

///|
#external
pub type OrbitControls

///|
#module("@mizchi/three-mbt/loaders")
pub extern "js" fn OrbitControls::OrbitControls(
  camera : Camera,
  canvas : Canvas,
) -> OrbitControls = "orbitControls"

///|
pub extern "js" fn OrbitControls::target(self : OrbitControls) -> Vector3 =
  #| (self) => self.target

///|
pub extern "js" fn OrbitControls::enabled(self : OrbitControls) -> Bool =
  #| (self) => self.enabled

///|
pub extern "js" fn OrbitControls::set_enabled(
  self : OrbitControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.enabled = value; }

///|
pub extern "js" fn OrbitControls::enable_damping(self : OrbitControls) -> Bool =
  #| (self) => self.enableDamping

///|
pub extern "js" fn OrbitControls::set_enable_damping(
  self : OrbitControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.enableDamping = value; }

///|
pub extern "js" fn OrbitControls::damping_factor(
  self : OrbitControls,
) -> Double =
  #| (self) => self.dampingFactor

///|
pub extern "js" fn OrbitControls::set_damping_factor(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.dampingFactor = value; }

///|
pub extern "js" fn OrbitControls::auto_rotate(self : OrbitControls) -> Bool =
  #| (self) => self.autoRotate

///|
pub extern "js" fn OrbitControls::set_auto_rotate(
  self : OrbitControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.autoRotate = value; }

///|
pub extern "js" fn OrbitControls::min_distance(self : OrbitControls) -> Double =
  #| (self) => self.minDistance

///|
pub extern "js" fn OrbitControls::set_min_distance(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.minDistance = value; }

///|
pub extern "js" fn OrbitControls::max_distance(self : OrbitControls) -> Double =
  #| (self) => self.maxDistance

///|
pub extern "js" fn OrbitControls::set_max_distance(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.maxDistance = value; }

///|
pub extern "js" fn OrbitControls::update(
  self : OrbitControls,
  delta_seconds : Double,
) -> Bool =
  #| (self, delta_seconds) => self.update(delta_seconds)

///|
pub extern "js" fn OrbitControls::reset(self : OrbitControls) -> Unit =
  #| (self) => self.reset()

///|
pub extern "js" fn OrbitControls::save_state(self : OrbitControls) -> Unit =
  #| (self) => self.saveState()

///|
pub extern "js" fn OrbitControls::dispose(self : OrbitControls) -> Unit =
  #| (self) => self.dispose()

///|
pub extern "js" fn OrbitControls::enable_pan(self : OrbitControls) -> Bool =
  #| (self) => self.enablePan

///|
pub extern "js" fn OrbitControls::set_enable_pan(
  self : OrbitControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.enablePan = value; }

///|
pub extern "js" fn OrbitControls::enable_zoom(self : OrbitControls) -> Bool =
  #| (self) => self.enableZoom

///|
pub extern "js" fn OrbitControls::set_enable_zoom(
  self : OrbitControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.enableZoom = value; }

///|
pub extern "js" fn OrbitControls::enable_rotate(self : OrbitControls) -> Bool =
  #| (self) => self.enableRotate

///|
pub extern "js" fn OrbitControls::set_enable_rotate(
  self : OrbitControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.enableRotate = value; }

///|
pub extern "js" fn OrbitControls::screen_space_panning(
  self : OrbitControls,
) -> Bool =
  #| (self) => self.screenSpacePanning

///|
pub extern "js" fn OrbitControls::set_screen_space_panning(
  self : OrbitControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.screenSpacePanning = value; }

///|
pub extern "js" fn OrbitControls::zoom_to_cursor(self : OrbitControls) -> Bool =
  #| (self) => self.zoomToCursor

///|
pub extern "js" fn OrbitControls::set_zoom_to_cursor(
  self : OrbitControls,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.zoomToCursor = value; }

///|
pub extern "js" fn OrbitControls::pan_speed(self : OrbitControls) -> Double =
  #| (self) => self.panSpeed

///|
pub extern "js" fn OrbitControls::set_pan_speed(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.panSpeed = value; }

///|
pub extern "js" fn OrbitControls::zoom_speed(self : OrbitControls) -> Double =
  #| (self) => self.zoomSpeed

///|
pub extern "js" fn OrbitControls::set_zoom_speed(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.zoomSpeed = value; }

///|
pub extern "js" fn OrbitControls::rotate_speed(self : OrbitControls) -> Double =
  #| (self) => self.rotateSpeed

///|
pub extern "js" fn OrbitControls::set_rotate_speed(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.rotateSpeed = value; }

///|
pub extern "js" fn OrbitControls::auto_rotate_speed(
  self : OrbitControls,
) -> Double =
  #| (self) => self.autoRotateSpeed

///|
pub extern "js" fn OrbitControls::set_auto_rotate_speed(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.autoRotateSpeed = value; }

///|
pub extern "js" fn OrbitControls::min_zoom(self : OrbitControls) -> Double =
  #| (self) => self.minZoom

///|
pub extern "js" fn OrbitControls::set_min_zoom(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.minZoom = value; }

///|
pub extern "js" fn OrbitControls::max_zoom(self : OrbitControls) -> Double =
  #| (self) => self.maxZoom

///|
pub extern "js" fn OrbitControls::set_max_zoom(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.maxZoom = value; }

///|
pub extern "js" fn OrbitControls::min_polar_angle(
  self : OrbitControls,
) -> Double =
  #| (self) => self.minPolarAngle

///|
pub extern "js" fn OrbitControls::set_min_polar_angle(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.minPolarAngle = value; }

///|
pub extern "js" fn OrbitControls::max_polar_angle(
  self : OrbitControls,
) -> Double =
  #| (self) => self.maxPolarAngle

///|
pub extern "js" fn OrbitControls::set_max_polar_angle(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.maxPolarAngle = value; }

///|
pub extern "js" fn OrbitControls::min_azimuth_angle(
  self : OrbitControls,
) -> Double =
  #| (self) => self.minAzimuthAngle

///|
pub extern "js" fn OrbitControls::set_min_azimuth_angle(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.minAzimuthAngle = value; }

///|
pub extern "js" fn OrbitControls::max_azimuth_angle(
  self : OrbitControls,
) -> Double =
  #| (self) => self.maxAzimuthAngle

///|
pub extern "js" fn OrbitControls::set_max_azimuth_angle(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.maxAzimuthAngle = value; }

///|
pub extern "js" fn OrbitControls::get_distance(self : OrbitControls) -> Double =
  #| (self) => self.getDistance()

///|
pub extern "js" fn OrbitControls::get_polar_angle(
  self : OrbitControls,
) -> Double =
  #| (self) => self.getPolarAngle()

///|
pub extern "js" fn OrbitControls::get_azimuthal_angle(
  self : OrbitControls,
) -> Double =
  #| (self) => self.getAzimuthalAngle()

///|
pub extern "js" fn OrbitControls::cursor(self : OrbitControls) -> Vector3 =
  #| (self) => self.cursor

///|
pub extern "js" fn OrbitControls::min_target_radius(
  self : OrbitControls,
) -> Double =
  #| (self) => self.minTargetRadius

///|
pub extern "js" fn OrbitControls::set_min_target_radius(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.minTargetRadius = value; }

///|
pub extern "js" fn OrbitControls::max_target_radius(
  self : OrbitControls,
) -> Double =
  #| (self) => self.maxTargetRadius

///|
pub extern "js" fn OrbitControls::set_max_target_radius(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.maxTargetRadius = value; }

///|
pub extern "js" fn OrbitControls::key_pan_speed(self : OrbitControls) -> Double =
  #| (self) => self.keyPanSpeed

///|
pub extern "js" fn OrbitControls::set_key_pan_speed(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.keyPanSpeed = value; }

///|
pub extern "js" fn OrbitControls::key_rotate_speed(
  self : OrbitControls,
) -> Double =
  #| (self) => self.keyRotateSpeed

///|
pub extern "js" fn OrbitControls::set_key_rotate_speed(
  self : OrbitControls,
  value : Double,
) -> Unit =
  #| (self, value) => { self.keyRotateSpeed = value; }

///|
pub extern "js" fn OrbitControls::set_keys(
  self : OrbitControls,
  left : String,
  up : String,
  right : String,
  down : String,
) -> Unit =
  #| (self, left, up, right, down) => { self.keys = {LEFT:left, UP:up, RIGHT:right, BOTTOM:down}; }

///|
pub extern "js" fn OrbitControls::set_mouse_buttons(
  self : OrbitControls,
  left : MouseAction,
  middle : MouseAction,
  right : MouseAction,
) -> Unit =
  #| (self, left, middle, right) => { const action = n => n === 3 ? null : n; self.mouseButtons = {LEFT:action(left), MIDDLE:action(middle), RIGHT:action(right)}; }

///|
pub extern "js" fn OrbitControls::set_touches(
  self : OrbitControls,
  one : TouchAction,
  two : TouchAction,
) -> Unit =
  #| (self, one, two) => { const action = n => n === 4 ? null : n; self.touches = {ONE:action(one), TWO:action(two)}; }

///|
pub extern "js" fn OrbitControls::listen_to_key_events(
  self : OrbitControls,
) -> Unit =
  #| (self) => self.listenToKeyEvents(window)

///|
pub extern "js" fn OrbitControls::stop_listen_to_key_events(
  self : OrbitControls,
) -> Unit =
  #| (self) => self.stopListenToKeyEvents()

///|
pub extern "js" fn OrbitControls::set_cursor_style(
  self : OrbitControls,
  style : OrbitCursorStyle,
) -> Unit =
  #| (self, style) => { self.cursorStyle = ["auto","grab"][style]; }

///|
pub extern "js" fn OrbitControls::pan(
  self : OrbitControls,
  x : Double,
  y : Double,
) -> Unit =
  #| (self, x, y) => self.pan(x, y)

///|
pub extern "js" fn OrbitControls::dolly_in(
  self : OrbitControls,
  scale : Double,
) -> Unit =
  #| (self, scale) => self.dollyIn(scale)

///|
pub extern "js" fn OrbitControls::dolly_out(
  self : OrbitControls,
  scale : Double,
) -> Unit =
  #| (self, scale) => self.dollyOut(scale)

///|
pub extern "js" fn OrbitControls::rotate_left(
  self : OrbitControls,
  angle : Double,
) -> Unit =
  #| (self, angle) => self.rotateLeft(angle)

///|
pub extern "js" fn OrbitControls::rotate_up(
  self : OrbitControls,
  angle : Double,
) -> Unit =
  #| (self, angle) => self.rotateUp(angle)