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

///|
#external
pub type RetargetOptions

///|
#module("@mizchi/three-mbt/rigging")
pub extern "js" fn RetargetOptions::RetargetOptions() -> RetargetOptions = "retargetOptions"

///|
pub extern "js" fn RetargetOptions::preserve_bone_matrix(
  self : RetargetOptions,
) -> Bool =
  #| (self) => self.preserveBoneMatrix

///|
pub extern "js" fn RetargetOptions::set_preserve_bone_matrix(
  self : RetargetOptions,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.preserveBoneMatrix = value; }

///|
pub extern "js" fn RetargetOptions::preserve_bone_positions(
  self : RetargetOptions,
) -> Bool =
  #| (self) => self.preserveBonePositions

///|
pub extern "js" fn RetargetOptions::set_preserve_bone_positions(
  self : RetargetOptions,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.preserveBonePositions = value; }

///|
pub extern "js" fn RetargetOptions::use_target_matrix(
  self : RetargetOptions,
) -> Bool =
  #| (self) => self.useTargetMatrix

///|
pub extern "js" fn RetargetOptions::set_use_target_matrix(
  self : RetargetOptions,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.useTargetMatrix = value; }

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

///|
pub extern "js" fn RetargetOptions::set_hip(
  self : RetargetOptions,
  value : String,
) -> Unit =
  #| (self, value) => { self.hip = value; }

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

///|
pub extern "js" fn RetargetOptions::set_scale(
  self : RetargetOptions,
  value : Double,
) -> Unit =
  #| (self, value) => { self.scale = value; }

///|
pub extern "js" fn RetargetOptions::hip_influence(
  self : RetargetOptions,
) -> Vector3 =
  #| (self) => self.hipInfluence

///|
pub extern "js" fn RetargetOptions::set_hip_influence(
  self : RetargetOptions,
  value : Vector3,
) -> Unit =
  #| (self, value) => { self.hipInfluence = value; }

///|
extern "js" fn RetargetOptions::ffi_set_hip_position(
  self : RetargetOptions,
  value : Nullable[Vector3],
) -> Unit =
  #| (self, value) => { self.hipPosition = value; }

///|
pub fn RetargetOptions::set_hip_position(
  self : RetargetOptions,
  value : Vector3?,
) -> Unit {
  self.ffi_set_hip_position(Nullable::from_option(value))
}

///|
pub extern "js" fn RetargetOptions::use_first_frame_position(
  self : RetargetOptions,
) -> Bool =
  #| (self) => self.useFirstFramePosition

///|
pub extern "js" fn RetargetOptions::set_use_first_frame_position(
  self : RetargetOptions,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.useFirstFramePosition = value; }

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

///|
pub fn RetargetOptions::set_fps(
  self : RetargetOptions,
  value : Double?,
) -> Unit {
  self.ffi_set_fps(Nullable::from_option(value))
}

///|
pub extern "js" fn RetargetOptions::map_bone(
  self : RetargetOptions,
  target_name : String,
  source_name : String,
) -> Unit =
  #| (self, target_name, source_name) => { self.names[target_name]=source_name; }

///|
pub extern "js" fn RetargetOptions::set_trim(
  self : RetargetOptions,
  start : Double,
  end : Double,
) -> Unit =
  #| (self, start, end) => { self.trim=[start,end]; }

///|
pub extern "js" fn RetargetOptions::clear_trim(self : RetargetOptions) -> Unit =
  #| (self) => { delete self.trim; }

///|
pub extern "js" fn RetargetOptions::set_bone_name_resolver(
  self : RetargetOptions,
  callback : (Bone) -> String,
) -> Unit =
  #| (self, callback) => { self.getBoneName=callback; }

///|
pub extern "js" fn RetargetOptions::clear_bone_name_resolver(
  self : RetargetOptions,
) -> Unit =
  #| (self) => { delete self.getBoneName; }