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

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn Vector3::Vector3(
  x : Double,
  y : Double,
  z : Double,
) -> Vector3 = "vector3"

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

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

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

///|
pub extern "js" fn Vector3::set(
  self : Vector3,
  x : Double,
  y : Double,
  z : Double,
) -> Vector3 =
  #| (self, x, y, z) => self.set(x, y, z)

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

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

///|
pub extern "js" fn Vector3::equals(self : Vector3, other : Vector3) -> Bool =
  #| (self, other) => self.equals(other)

///|
pub extern "js" fn Vector3::same_reference(
  self : Vector3,
  other : Vector3,
) -> Bool =
  #| (self, other) => self === other

///|
pub extern "js" fn Vector3::add(self : Vector3, other : Vector3) -> Vector3 =
  #| (self, other) => self.add(other)

///|
pub extern "js" fn Vector3::sub(self : Vector3, other : Vector3) -> Vector3 =
  #| (self, other) => self.sub(other)

///|
pub extern "js" fn Vector3::multiply(
  self : Vector3,
  other : Vector3,
) -> Vector3 =
  #| (self, other) => self.multiply(other)

///|
pub extern "js" fn Vector3::divide(self : Vector3, other : Vector3) -> Vector3 =
  #| (self, other) => self.divide(other)

///|
pub extern "js" fn Vector3::min(self : Vector3, other : Vector3) -> Vector3 =
  #| (self, other) => self.min(other)

///|
pub extern "js" fn Vector3::max(self : Vector3, other : Vector3) -> Vector3 =
  #| (self, other) => self.max(other)

///|
pub extern "js" fn Vector3::multiply_scalar(
  self : Vector3,
  scalar : Double,
) -> Vector3 =
  #| (self, scalar) => self.multiplyScalar(scalar)

///|
pub extern "js" fn Vector3::divide_scalar(
  self : Vector3,
  scalar : Double,
) -> Vector3 =
  #| (self, scalar) => self.divideScalar(scalar)

///|
pub extern "js" fn Vector3::dot(self : Vector3, other : Vector3) -> Double =
  #| (self, other) => self.dot(other)

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

///|
pub extern "js" fn Vector3::length_squared(self : Vector3) -> Double =
  #| (self) => self.lengthSq()

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

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

///|
pub extern "js" fn Vector3::distance_to(
  self : Vector3,
  other : Vector3,
) -> Double =
  #| (self, other) => self.distanceTo(other)

///|
pub extern "js" fn Vector3::lerp(
  self : Vector3,
  other : Vector3,
  alpha : Double,
) -> Vector3 =
  #| (self, other, alpha) => self.lerp(other, alpha)

///|
pub extern "js" fn Vector3::cross(self : Vector3, other : Vector3) -> Vector3 =
  #| (self, other) => self.cross(other)

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

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

///|
pub extern "js" fn Vector3::apply_matrix3(
  self : Vector3,
  matrix : Matrix3,
) -> Vector3 =
  #| (self, matrix) => self.applyMatrix3(matrix)

///|
pub extern "js" fn Vector3::set_from_spherical(
  self : Vector3,
  spherical : Spherical,
) -> Vector3 =
  #| (self, spherical) => self.setFromSpherical(spherical)

///|
pub extern "js" fn Vector3::transform_direction(
  self : Vector3,
  matrix : Matrix4,
) -> Vector3 =
  #| (self, matrix) => self.transformDirection(matrix)

///|
pub extern "js" fn Vector3::project(self : Vector3, camera : Camera) -> Vector3 =
  #| (self, camera) => self.project(camera)

///|
pub extern "js" fn Vector3::unproject(
  self : Vector3,
  camera : Camera,
) -> Vector3 =
  #| (self, camera) => self.unproject(camera)

///|
pub extern "js" fn Vector3::from_array(
  self : Vector3,
  values : FixedArray[Double],
  offset : Int,
) -> Vector3 =
  #| (self, values, offset) => self.fromArray(values, offset)

///|
pub extern "js" fn Vector3::to_array(self : Vector3) -> FixedArray[Double] =
  #| (self) => self.toArray()

///|
pub extern "js" fn Vector3::to_array_into(
  self : Vector3,
  values : FixedArray[Double],
  offset : Int,
) -> FixedArray[Double] =
  #| (self, values, offset) => self.toArray(values, offset)

///|
pub extern "js" fn Vector3::is_vector3(self : Vector3) -> Bool =
  #| (self) => self.isVector3

///|
pub extern "js" fn Vector3::set_x(self : Vector3, value : Double) -> Vector3 =
  #| (self, value) => self.setX(value)

///|
pub extern "js" fn Vector3::set_y(self : Vector3, value : Double) -> Vector3 =
  #| (self, value) => self.setY(value)

///|
pub extern "js" fn Vector3::set_z(self : Vector3, value : Double) -> Vector3 =
  #| (self, value) => self.setZ(value)

///|
pub extern "js" fn Vector3::set_component(
  self : Vector3,
  index : Int,
  value : Double,
) -> Vector3 =
  #| (self, index, value) => self.setComponent(index, value)

///|
pub extern "js" fn Vector3::get_component(
  self : Vector3,
  index : Int,
) -> Double =
  #| (self, index) => self.getComponent(index)

///|
pub extern "js" fn Vector3::set_scalar(
  self : Vector3,
  value : Double,
) -> Vector3 =
  #| (self, value) => self.setScalar(value)

///|
pub extern "js" fn Vector3::add_scalar(
  self : Vector3,
  value : Double,
) -> Vector3 =
  #| (self, value) => self.addScalar(value)

///|
pub extern "js" fn Vector3::sub_scalar(
  self : Vector3,
  value : Double,
) -> Vector3 =
  #| (self, value) => self.subScalar(value)

///|
pub extern "js" fn Vector3::set_length(
  self : Vector3,
  value : Double,
) -> Vector3 =
  #| (self, value) => self.setLength(value)

///|
pub extern "js" fn Vector3::add_vectors(
  self : Vector3,
  a : Vector3,
  b : Vector3,
) -> Vector3 =
  #| (self, a, b) => self.addVectors(a, b)

///|
pub extern "js" fn Vector3::sub_vectors(
  self : Vector3,
  a : Vector3,
  b : Vector3,
) -> Vector3 =
  #| (self, a, b) => self.subVectors(a, b)

///|
pub extern "js" fn Vector3::add_scaled_vector(
  self : Vector3,
  other : Vector3,
  scale : Double,
) -> Vector3 =
  #| (self, other, scale) => self.addScaledVector(other, scale)

///|
pub extern "js" fn Vector3::clamp(
  self : Vector3,
  min : Vector3,
  max : Vector3,
) -> Vector3 =
  #| (self, min, max) => self.clamp(min, max)

///|
pub extern "js" fn Vector3::clamp_scalar(
  self : Vector3,
  min : Double,
  max : Double,
) -> Vector3 =
  #| (self, min, max) => self.clampScalar(min, max)

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

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

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

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

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

///|
pub extern "js" fn Vector3::manhattan_length(self : Vector3) -> Double =
  #| (self) => self.manhattanLength()

///|
pub extern "js" fn Vector3::lerp_vectors(
  self : Vector3,
  a : Vector3,
  b : Vector3,
  alpha : Double,
) -> Vector3 =
  #| (self, a, b, alpha) => self.lerpVectors(a, b, alpha)

///|
pub extern "js" fn Vector3::from_buffer_attribute(
  self : Vector3,
  attribute : BufferAttribute,
  index : Int,
) -> Vector3 =
  #| (self, attribute, index) => self.fromBufferAttribute(attribute, index)

///|
pub extern "js" fn Vector3::clamp_length(
  self : Vector3,
  min : Double,
  max : Double,
) -> Vector3 =
  #| (self, min, max) => self.clampLength(min, max)

///|
pub extern "js" fn Vector3::angle_to(self : Vector3, other : Vector3) -> Double =
  #| (self, other) => self.angleTo(other)

///|
pub extern "js" fn Vector3::distance_to_squared(
  self : Vector3,
  other : Vector3,
) -> Double =
  #| (self, other) => self.distanceToSquared(other)

///|
pub extern "js" fn Vector3::manhattan_distance_to(
  self : Vector3,
  other : Vector3,
) -> Double =
  #| (self, other) => self.manhattanDistanceTo(other)

///|
pub extern "js" fn Vector3::multiply_vectors(
  self : Vector3,
  a : Vector3,
  b : Vector3,
) -> Vector3 =
  #| (self, a, b) => self.multiplyVectors(a, b)

///|
pub extern "js" fn Vector3::cross_vectors(
  self : Vector3,
  a : Vector3,
  b : Vector3,
) -> Vector3 =
  #| (self, a, b) => self.crossVectors(a, b)

///|
pub extern "js" fn Vector3::apply_euler(
  self : Vector3,
  euler : Euler,
) -> Vector3 =
  #| (self, euler) => self.applyEuler(euler)

///|
pub extern "js" fn Vector3::apply_axis_angle(
  self : Vector3,
  axis : Vector3,
  angle : Double,
) -> Vector3 =
  #| (self, axis, angle) => self.applyAxisAngle(axis, angle)

///|
pub extern "js" fn Vector3::apply_normal_matrix(
  self : Vector3,
  matrix : Matrix3,
) -> Vector3 =
  #| (self, matrix) => self.applyNormalMatrix(matrix)

///|
pub extern "js" fn Vector3::project_on_vector(
  self : Vector3,
  vector : Vector3,
) -> Vector3 =
  #| (self, vector) => self.projectOnVector(vector)

///|
pub extern "js" fn Vector3::project_on_plane(
  self : Vector3,
  vector : Vector3,
) -> Vector3 =
  #| (self, vector) => self.projectOnPlane(vector)

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

///|
pub extern "js" fn Vector3::set_from_spherical_coords(
  self : Vector3,
  radius : Double,
  phi : Double,
  theta : Double,
) -> Vector3 =
  #| (self, radius, phi, theta) => self.setFromSphericalCoords(radius, phi, theta)

///|
pub extern "js" fn Vector3::set_from_cylindrical(
  self : Vector3,
  cylindrical : Cylindrical,
) -> Vector3 =
  #| (self, cylindrical) => self.setFromCylindrical(cylindrical)

///|
pub extern "js" fn Vector3::set_from_cylindrical_coords(
  self : Vector3,
  radius : Double,
  theta : Double,
  y : Double,
) -> Vector3 =
  #| (self, radius, theta, y) => self.setFromCylindricalCoords(radius, theta, y)

///|
pub extern "js" fn Vector3::set_from_matrix_position(
  self : Vector3,
  matrix : Matrix4,
) -> Vector3 =
  #| (self, matrix) => self.setFromMatrixPosition(matrix)

///|
pub extern "js" fn Vector3::set_from_matrix_scale(
  self : Vector3,
  matrix : Matrix4,
) -> Vector3 =
  #| (self, matrix) => self.setFromMatrixScale(matrix)

///|
pub extern "js" fn Vector3::set_from_matrix_column(
  self : Vector3,
  matrix : Matrix4,
  index : Int,
) -> Vector3 =
  #| (self, matrix, index) => self.setFromMatrixColumn(matrix, index)

///|
pub extern "js" fn Vector3::set_from_matrix3_column(
  self : Vector3,
  matrix : Matrix3,
  index : Int,
) -> Vector3 =
  #| (self, matrix, index) => self.setFromMatrix3Column(matrix, index)

///|
pub extern "js" fn Vector3::set_from_euler(
  self : Vector3,
  euler : Euler,
) -> Vector3 =
  #| (self, euler) => self.setFromEuler(euler)

///|
pub extern "js" fn Vector3::set_from_color(
  self : Vector3,
  color : Color,
) -> Vector3 =
  #| (self, color) => self.setFromColor(color)

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