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

///|
#external
pub type IKChain

///|
#module("@mizchi/three-mbt/rigging")
pub extern "js" fn IKChain::IKChain(
  target : Int,
  effector : Int,
  links : FixedArray[IKLink],
) -> IKChain = "iKChain"

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

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

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

///|
pub extern "js" fn IKChain::set_iteration(self : IKChain, value : Int) -> Unit =
  #| (self, value) => { self.iteration = value; }

///|
extern "js" fn IKChain::ffi_blend_factor(self : IKChain) -> Nullable[Double] =
  #| (self) => self.blendFactor

///|
pub fn IKChain::blend_factor(self : IKChain) -> Double? {
  self.ffi_blend_factor().to_option()
}

///|
extern "js" fn IKChain::ffi_set_blend_factor(
  self : IKChain,
  value : Nullable[Double],
) -> Unit =
  #| (self, value) => { if(value==null)delete self.blendFactor;else self.blendFactor=value; }

///|
pub fn IKChain::set_blend_factor(self : IKChain, value : Double?) -> Unit {
  self.ffi_set_blend_factor(Nullable::from_option(value))
}

///|
extern "js" fn IKChain::ffi_min_angle(self : IKChain) -> Nullable[Double] =
  #| (self) => self.minAngle

///|
pub fn IKChain::min_angle(self : IKChain) -> Double? {
  self.ffi_min_angle().to_option()
}

///|
extern "js" fn IKChain::ffi_set_min_angle(
  self : IKChain,
  value : Nullable[Double],
) -> Unit =
  #| (self, value) => { self.minAngle = value; }

///|
pub fn IKChain::set_min_angle(self : IKChain, value : Double?) -> Unit {
  self.ffi_set_min_angle(Nullable::from_option(value))
}

///|
extern "js" fn IKChain::ffi_max_angle(self : IKChain) -> Nullable[Double] =
  #| (self) => self.maxAngle

///|
pub fn IKChain::max_angle(self : IKChain) -> Double? {
  self.ffi_max_angle().to_option()
}

///|
extern "js" fn IKChain::ffi_set_max_angle(
  self : IKChain,
  value : Nullable[Double],
) -> Unit =
  #| (self, value) => { self.maxAngle = value; }

///|
pub fn IKChain::set_max_angle(self : IKChain, value : Double?) -> Unit {
  self.ffi_set_max_angle(Nullable::from_option(value))
}

///|
pub extern "js" fn IKChain::links(self : IKChain) -> FixedArray[IKLink] =
  #| (self) => self.links.slice()