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

///|
#external
pub type Camera

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

///|
pub extern "js" fn Camera::projection_matrix(self : Camera) -> Matrix4 =
  #| (self) => self.projectionMatrix

///|
pub extern "js" fn Camera::projection_matrix_inverse(self : Camera) -> Matrix4 =
  #| (self) => self.projectionMatrixInverse

///|
extern "js" fn Camera::ffi_as_perspective_camera(
  self : Camera,
) -> Nullable[PerspectiveCamera] =
  #| (self) => self.isPerspectiveCamera ? self : null

///|
pub fn Camera::as_perspective_camera(self : Camera) -> PerspectiveCamera? {
  self.ffi_as_perspective_camera().to_option()
}

///|
extern "js" fn Camera::ffi_as_orthographic_camera(
  self : Camera,
) -> Nullable[OrthographicCamera] =
  #| (self) => self.isOrthographicCamera ? self : null

///|
pub fn Camera::as_orthographic_camera(self : Camera) -> OrthographicCamera? {
  self.ffi_as_orthographic_camera().to_option()
}

///|
pub extern "js" fn Camera::matrix_world_inverse(self : Camera) -> Matrix4 =
  #| (self) => self.matrixWorldInverse

///|
pub extern "js" fn Camera::coordinate_system(self : Camera) -> CoordinateSystem =
  #| (self) => self.coordinateSystem

///|
pub extern "js" fn Camera::set_coordinate_system(
  self : Camera,
  value : CoordinateSystem,
) -> Unit =
  #| (self, value) => { self.coordinateSystem = value; }

///|
extern "js" fn Camera::ffi_viewport(self : Camera) -> Nullable[Vector4] =
  #| (self) => self.viewport

///|
pub fn Camera::viewport(self : Camera) -> Vector4? {
  self.ffi_viewport().to_option()
}

///|
extern "js" fn Camera::ffi_set_viewport(
  self : Camera,
  value : Nullable[Vector4],
) -> Unit =
  #| (self, value) => { self.viewport = value; }

///|
pub fn Camera::set_viewport(self : Camera, value : Vector4?) -> Unit {
  self.ffi_set_viewport(Nullable::from_option(value))
}

///|
pub extern "js" fn Camera::reversed_depth(self : Camera) -> Bool =
  #| (self) => self.reversedDepth

///|
pub extern "js" fn Camera::clone(self : Camera) -> Camera =
  #| (self) => self.clone()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

///|
/// Copies coordinates into the live position vector; does not retain the input vector.
pub extern "js" fn Camera::set_position(
  self : Camera,
  position : Vector3,
) -> Unit =
  #| (self, position) => { self.position.copy(position); }

///|
/// Sets local position coordinates while preserving the live position reference.
pub extern "js" fn Camera::set_position_xyz(
  self : Camera,
  x : Double,
  y : Double,
  z : Double,
) -> Unit =
  #| (self, x, y, z) => { self.position.set(x, y, z); }

///|
/// Copies Euler angles and order; native quaternion synchronization is preserved.
pub extern "js" fn Camera::set_rotation(
  self : Camera,
  rotation : Euler,
) -> Unit =
  #| (self, rotation) => { self.rotation.copy(rotation); }

///|
/// Sets local Euler angles in radians, retaining the current Euler order.
pub extern "js" fn Camera::set_rotation_xyz(
  self : Camera,
  x : Double,
  y : Double,
  z : Double,
) -> Unit =
  #| (self, x, y, z) => { self.rotation.set(x, y, z); }

///|
/// Copies quaternion components; native Euler synchronization is preserved. Does not normalize.
pub extern "js" fn Camera::set_quaternion(
  self : Camera,
  quaternion : Quaternion,
) -> Unit =
  #| (self, quaternion) => { self.quaternion.copy(quaternion); }

///|
/// Copies local scale components into the existing live scale vector.
pub extern "js" fn Camera::set_scale(self : Camera, scale : Vector3) -> Unit =
  #| (self, scale) => { self.scale.copy(scale); }

///|
/// Sets the three local scale components.
pub extern "js" fn Camera::set_scale_xyz(
  self : Camera,
  x : Double,
  y : Double,
  z : Double,
) -> Unit =
  #| (self, x, y, z) => { self.scale.set(x, y, z); }

///|
/// Sets all local scale components to the supplied value.
pub extern "js" fn Camera::set_uniform_scale(
  self : Camera,
  scale : Double,
) -> Unit =
  #| (self, scale) => { self.scale.setScalar(scale); }

///|
/// Adds a child using native reparenting and event behavior.
pub extern "js" fn Camera::add_child(self : Camera, child : Object3D) -> Unit =
  #| (self, child) => { self.add(child); }

///|
/// Adds children in order using native reparenting and event behavior. An empty list is a no-op.
pub extern "js" fn Camera::add_children(
  self : Camera,
  children : FixedArray[Object3D],
) -> Unit =
  #| (self, children) => { if (children.length > 0) { self.add(...children); }; }

///|
/// Adds this object to the parent, retaining this object as the cascade receiver.
pub extern "js" fn Camera::add_to(self : Camera, parent : Object3D) -> Unit =
  #| (self, parent) => { parent.add(self); }

///|
/// Removes a child using native event behavior. Does not dispose resources.
pub extern "js" fn Camera::remove_child(
  self : Camera,
  child : Object3D,
) -> Unit =
  #| (self, child) => { self.remove(child); }