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

///|
#external
pub type PerspectiveCamera

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn PerspectiveCamera::PerspectiveCamera(
  fov : Double,
  aspect : Double,
  near : Double,
  far : Double,
) -> PerspectiveCamera = "perspectiveCamera"

///|
pub fn PerspectiveCamera::as_camera(self : PerspectiveCamera) -> Camera = "%identity"

///|
pub fn PerspectiveCamera::as_object3d(self : PerspectiveCamera) -> Object3D = "%identity"

///|
pub extern "js" fn PerspectiveCamera::update_projection_matrix(
  self : PerspectiveCamera,
) -> Unit =
  #| (self) => self.updateProjectionMatrix()

///|
pub extern "js" fn PerspectiveCamera::fov(self : PerspectiveCamera) -> Double =
  #| (self) => self.fov

///|
pub extern "js" fn PerspectiveCamera::set_fov(
  self : PerspectiveCamera,
  value : Double,
) -> Unit =
  #| (self, value) => { self.fov = value; }

///|
pub extern "js" fn PerspectiveCamera::aspect(
  self : PerspectiveCamera,
) -> Double =
  #| (self) => self.aspect

///|
pub extern "js" fn PerspectiveCamera::set_aspect(
  self : PerspectiveCamera,
  value : Double,
) -> Unit =
  #| (self, value) => { self.aspect = value; }

///|
pub extern "js" fn PerspectiveCamera::near(self : PerspectiveCamera) -> Double =
  #| (self) => self.near

///|
pub extern "js" fn PerspectiveCamera::set_near(
  self : PerspectiveCamera,
  value : Double,
) -> Unit =
  #| (self, value) => { self.near = value; }

///|
pub extern "js" fn PerspectiveCamera::far(self : PerspectiveCamera) -> Double =
  #| (self) => self.far

///|
pub extern "js" fn PerspectiveCamera::set_far(
  self : PerspectiveCamera,
  value : Double,
) -> Unit =
  #| (self, value) => { self.far = value; }

///|
pub extern "js" fn PerspectiveCamera::zoom(self : PerspectiveCamera) -> Double =
  #| (self) => self.zoom

///|
pub extern "js" fn PerspectiveCamera::set_zoom(
  self : PerspectiveCamera,
  value : Double,
) -> Unit =
  #| (self, value) => { self.zoom = value; }

///|
pub extern "js" fn PerspectiveCamera::set_focal_length(
  self : PerspectiveCamera,
  length : Double,
) -> Unit =
  #| (self, length) => self.setFocalLength(length)

///|
pub extern "js" fn PerspectiveCamera::get_focal_length(
  self : PerspectiveCamera,
) -> Double =
  #| (self) => self.getFocalLength()

///|
extern "js" fn PerspectiveCamera::ffi_view(
  self : PerspectiveCamera,
) -> Nullable[CameraView] =
  #| (self) => self.view

///|
pub fn PerspectiveCamera::view(self : PerspectiveCamera) -> CameraView? {
  self.ffi_view().to_option()
}

///|
pub extern "js" fn PerspectiveCamera::copy(
  self : PerspectiveCamera,
  other : PerspectiveCamera,
  recursive : Bool,
) -> PerspectiveCamera =
  #| (self, other, recursive) => self.copy(other, recursive)

///|
pub extern "js" fn PerspectiveCamera::set_view_offset(
  self : PerspectiveCamera,
  full_width : Double,
  full_height : Double,
  x : Double,
  y : Double,
  width : Double,
  height : Double,
) -> Unit =
  #| (self, full_width, full_height, x, y, width, height) => self.setViewOffset(full_width, full_height, x, y, width, height)

///|
pub extern "js" fn PerspectiveCamera::clear_view_offset(
  self : PerspectiveCamera,
) -> Unit =
  #| (self) => self.clearViewOffset()

///|
pub extern "js" fn PerspectiveCamera::focus(self : PerspectiveCamera) -> Double =
  #| (self) => self.focus

///|
pub extern "js" fn PerspectiveCamera::set_focus(
  self : PerspectiveCamera,
  value : Double,
) -> Unit =
  #| (self, value) => { self.focus = value; }

///|
pub extern "js" fn PerspectiveCamera::film_gauge(
  self : PerspectiveCamera,
) -> Double =
  #| (self) => self.filmGauge

///|
pub extern "js" fn PerspectiveCamera::set_film_gauge(
  self : PerspectiveCamera,
  value : Double,
) -> Unit =
  #| (self, value) => { self.filmGauge = value; }

///|
pub extern "js" fn PerspectiveCamera::film_offset(
  self : PerspectiveCamera,
) -> Double =
  #| (self) => self.filmOffset

///|
pub extern "js" fn PerspectiveCamera::set_film_offset(
  self : PerspectiveCamera,
  value : Double,
) -> Unit =
  #| (self, value) => { self.filmOffset = value; }

///|
pub extern "js" fn PerspectiveCamera::get_effective_fov(
  self : PerspectiveCamera,
) -> Double =
  #| (self) => self.getEffectiveFOV()

///|
pub extern "js" fn PerspectiveCamera::get_film_width(
  self : PerspectiveCamera,
) -> Double =
  #| (self) => self.getFilmWidth()

///|
pub extern "js" fn PerspectiveCamera::get_film_height(
  self : PerspectiveCamera,
) -> Double =
  #| (self) => self.getFilmHeight()

///|
pub extern "js" fn PerspectiveCamera::get_view_bounds(
  self : PerspectiveCamera,
  distance : Double,
  min_target : Vector2,
  max_target : Vector2,
) -> Unit =
  #| (self, distance, min_target, max_target) => self.getViewBounds(distance, min_target, max_target)

///|
pub extern "js" fn PerspectiveCamera::get_view_size(
  self : PerspectiveCamera,
  distance : Double,
  target : Vector2,
) -> Vector2 =
  #| (self, distance, target) => self.getViewSize(distance, target)

///|
pub extern "js" fn PerspectiveCamera::cast_shadow(
  self : PerspectiveCamera,
) -> Bool =
  #| (self) => self.castShadow

///|
pub extern "js" fn PerspectiveCamera::set_cast_shadow(
  self : PerspectiveCamera,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.castShadow = value; }

///|
pub extern "js" fn PerspectiveCamera::receive_shadow(
  self : PerspectiveCamera,
) -> Bool =
  #| (self) => self.receiveShadow

///|
pub extern "js" fn PerspectiveCamera::set_receive_shadow(
  self : PerspectiveCamera,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.receiveShadow = value; }

///|
pub extern "js" fn PerspectiveCamera::id(self : PerspectiveCamera) -> Int =
  #| (self) => self.id

///|
pub extern "js" fn PerspectiveCamera::uuid(self : PerspectiveCamera) -> String =
  #| (self) => self.uuid

///|
pub extern "js" fn PerspectiveCamera::kind(self : PerspectiveCamera) -> String =
  #| (self) => self.type

///|
pub extern "js" fn PerspectiveCamera::name(self : PerspectiveCamera) -> String =
  #| (self) => self.name

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

///|
/// Returns the live three.js reference, not a copy.
pub extern "js" fn PerspectiveCamera::position(
  self : PerspectiveCamera,
) -> Vector3 =
  #| (self) => self.position

///|
/// Returns the live three.js reference, not a copy.
pub extern "js" fn PerspectiveCamera::rotation(
  self : PerspectiveCamera,
) -> Euler =
  #| (self) => self.rotation

///|
/// Returns the live three.js reference, not a copy.
pub extern "js" fn PerspectiveCamera::quaternion(
  self : PerspectiveCamera,
) -> Quaternion =
  #| (self) => self.quaternion

///|
/// Returns the live three.js reference, not a copy.
pub extern "js" fn PerspectiveCamera::scale(
  self : PerspectiveCamera,
) -> Vector3 =
  #| (self) => self.scale

///|
/// Returns the live three.js reference, not a copy.
pub extern "js" fn PerspectiveCamera::up(self : PerspectiveCamera) -> Vector3 =
  #| (self) => self.up

///|
/// Returns the live three.js reference, not a copy.
pub extern "js" fn PerspectiveCamera::matrix(
  self : PerspectiveCamera,
) -> Matrix4 =
  #| (self) => self.matrix

///|
/// Returns the live three.js reference, not a copy.
pub extern "js" fn PerspectiveCamera::matrix_world(
  self : PerspectiveCamera,
) -> Matrix4 =
  #| (self) => self.matrixWorld

///|
pub extern "js" fn PerspectiveCamera::set_name(
  self : PerspectiveCamera,
  name : String,
) -> Unit =
  #| (self, name) => { self.name = name; }

///|
pub extern "js" fn PerspectiveCamera::set_visible(
  self : PerspectiveCamera,
  visible : Bool,
) -> Unit =
  #| (self, visible) => { self.visible = visible; }

///|
pub extern "js" fn PerspectiveCamera::children(
  self : PerspectiveCamera,
) -> FixedArray[Object3D] =
  #| (self) => self.children.slice()

///|
pub extern "js" fn PerspectiveCamera::add(
  self : PerspectiveCamera,
  child : Object3D,
) -> Object3D =
  #| (self, child) => self.add(child)

///|
pub extern "js" fn PerspectiveCamera::remove(
  self : PerspectiveCamera,
  child : Object3D,
) -> Object3D =
  #| (self, child) => self.remove(child)

///|
pub extern "js" fn PerspectiveCamera::attach(
  self : PerspectiveCamera,
  child : Object3D,
) -> Object3D =
  #| (self, child) => self.attach(child)

///|
pub extern "js" fn PerspectiveCamera::remove_from_parent(
  self : PerspectiveCamera,
) -> Object3D =
  #| (self) => self.removeFromParent()

///|
pub extern "js" fn PerspectiveCamera::look_at(
  self : PerspectiveCamera,
  target : Vector3,
) -> Unit =
  #| (self, target) => self.lookAt(target)

///|
pub extern "js" fn PerspectiveCamera::rotate_x(
  self : PerspectiveCamera,
  angle : Double,
) -> Object3D =
  #| (self, angle) => self.rotateX(angle)

///|
pub extern "js" fn PerspectiveCamera::rotate_y(
  self : PerspectiveCamera,
  angle : Double,
) -> Object3D =
  #| (self, angle) => self.rotateY(angle)

///|
pub extern "js" fn PerspectiveCamera::rotate_z(
  self : PerspectiveCamera,
  angle : Double,
) -> Object3D =
  #| (self, angle) => self.rotateZ(angle)

///|
pub extern "js" fn PerspectiveCamera::translate_x(
  self : PerspectiveCamera,
  distance : Double,
) -> Object3D =
  #| (self, distance) => self.translateX(distance)

///|
pub extern "js" fn PerspectiveCamera::translate_y(
  self : PerspectiveCamera,
  distance : Double,
) -> Object3D =
  #| (self, distance) => self.translateY(distance)

///|
pub extern "js" fn PerspectiveCamera::translate_z(
  self : PerspectiveCamera,
  distance : Double,
) -> Object3D =
  #| (self, distance) => self.translateZ(distance)

///|
pub extern "js" fn PerspectiveCamera::apply_matrix4(
  self : PerspectiveCamera,
  matrix : Matrix4,
) -> Unit =
  #| (self, matrix) => self.applyMatrix4(matrix)

///|
pub extern "js" fn PerspectiveCamera::apply_quaternion(
  self : PerspectiveCamera,
  quaternion : Quaternion,
) -> Object3D =
  #| (self, quaternion) => self.applyQuaternion(quaternion)

///|
pub extern "js" fn PerspectiveCamera::update_matrix(
  self : PerspectiveCamera,
) -> Unit =
  #| (self) => self.updateMatrix()

///|
pub extern "js" fn PerspectiveCamera::update_matrix_world(
  self : PerspectiveCamera,
  force : Bool,
) -> Unit =
  #| (self, force) => self.updateMatrixWorld(force)

///|
pub extern "js" fn PerspectiveCamera::update_world_matrix(
  self : PerspectiveCamera,
  update_parents : Bool,
  update_children : Bool,
) -> Unit =
  #| (self, update_parents, update_children) => self.updateWorldMatrix(update_parents, update_children)

///|
pub extern "js" fn PerspectiveCamera::get_world_position(
  self : PerspectiveCamera,
  target : Vector3,
) -> Vector3 =
  #| (self, target) => self.getWorldPosition(target)

///|
pub extern "js" fn PerspectiveCamera::get_world_quaternion(
  self : PerspectiveCamera,
  target : Quaternion,
) -> Quaternion =
  #| (self, target) => self.getWorldQuaternion(target)

///|
pub extern "js" fn PerspectiveCamera::get_world_scale(
  self : PerspectiveCamera,
  target : Vector3,
) -> Vector3 =
  #| (self, target) => self.getWorldScale(target)

///|
pub extern "js" fn PerspectiveCamera::get_world_direction(
  self : PerspectiveCamera,
  target : Vector3,
) -> Vector3 =
  #| (self, target) => self.getWorldDirection(target)

///|
pub extern "js" fn PerspectiveCamera::local_to_world(
  self : PerspectiveCamera,
  vector : Vector3,
) -> Vector3 =
  #| (self, vector) => self.localToWorld(vector)

///|
pub extern "js" fn PerspectiveCamera::world_to_local(
  self : PerspectiveCamera,
  vector : Vector3,
) -> Vector3 =
  #| (self, vector) => self.worldToLocal(vector)

///|
pub extern "js" fn PerspectiveCamera::traverse(
  self : PerspectiveCamera,
  callback : (Object3D) -> Unit,
) -> Unit =
  #| (self, callback) => self.traverse(callback)

///|
pub extern "js" fn PerspectiveCamera::traverse_visible(
  self : PerspectiveCamera,
  callback : (Object3D) -> Unit,
) -> Unit =
  #| (self, callback) => self.traverseVisible(callback)