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

///|
#external
pub type Raycaster

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn Raycaster::Raycaster(
  origin : Vector3,
  direction : Vector3,
) -> Raycaster = "raycaster"

///|
pub extern "js" fn Raycaster::layers(self : Raycaster) -> Layers =
  #| (self) => self.layers

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

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

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

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

///|
pub extern "js" fn Raycaster::set(
  self : Raycaster,
  origin : Vector3,
  direction : Vector3,
) -> Unit =
  #| (self, origin, direction) => self.set(origin, direction)

///|
pub extern "js" fn Raycaster::set_from_camera(
  self : Raycaster,
  coords : Vector2,
  camera : Camera,
) -> Unit =
  #| (self, coords, camera) => self.setFromCamera(coords, camera)

///|
pub extern "js" fn Raycaster::intersect_object(
  self : Raycaster,
  object : Object3D,
  recursive : Bool,
) -> FixedArray[Intersection] =
  #| (self, object, recursive) => self.intersectObject(object, recursive)

///|
pub extern "js" fn Raycaster::intersect_objects(
  self : Raycaster,
  objects : FixedArray[Object3D],
  recursive : Bool,
) -> FixedArray[Intersection] =
  #| (self, objects, recursive) => self.intersectObjects(objects, recursive)

///|
pub extern "js" fn Raycaster::ray(self : Raycaster) -> Ray =
  #| (self) => self.ray

///|
extern "js" fn Raycaster::ffi_camera(self : Raycaster) -> Nullable[Camera] =
  #| (self) => self.camera

///|
pub fn Raycaster::camera(self : Raycaster) -> Camera? {
  self.ffi_camera().to_option()
}

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

///|
pub fn Raycaster::set_camera(self : Raycaster, value : Camera?) -> Unit {
  self.ffi_set_camera(Nullable::from_option(value))
}

///|
pub extern "js" fn Raycaster::line_threshold(self : Raycaster) -> Double =
  #| (self) => self.params.Line.threshold

///|
pub extern "js" fn Raycaster::set_line_threshold(
  self : Raycaster,
  threshold : Double,
) -> Unit =
  #| (self, threshold) => { self.params.Line.threshold = threshold; }

///|
pub extern "js" fn Raycaster::points_threshold(self : Raycaster) -> Double =
  #| (self) => self.params.Points.threshold

///|
pub extern "js" fn Raycaster::set_points_threshold(
  self : Raycaster,
  threshold : Double,
) -> Unit =
  #| (self, threshold) => { self.params.Points.threshold = threshold; }