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

///|
#external
pub type InstancedFlow

///|
#module("@mizchi/three-mbt/modeling-edit")
pub extern "js" fn InstancedFlow::InstancedFlow(
  count : Int,
  curve_count : Int,
  geometry : BufferGeometry,
  material : Material,
) -> InstancedFlow = "instancedFlow"

///|
pub fn InstancedFlow::as_flow(self : InstancedFlow) -> Flow = "%identity"

///|
pub extern "js" fn InstancedFlow::object(self : InstancedFlow) -> InstancedMesh =
  #| (self) => self.object3D

///|
extern "js" fn InstancedFlow::ffi_set_curve(
  self : InstancedFlow,
  index : Int,
  curve_index : Int,
) -> JsResult[Unit] =
  #| (self, index, curve_index) => { try { return { ok: true, value: (() => { if (index < 0 || index >= self.object3D.count || curve_index < 0 || curve_index >= self.curveArray.length || !self.curveArray[curve_index]) throw new RangeError("Instance index or initialized curve required"); self.setCurve(index, curve_index); })() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn InstancedFlow::set_curve(
  self : InstancedFlow,
  index : Int,
  curve_index : Int,
) -> Unit raise ModelingError {
  match self.ffi_set_curve(index, curve_index).into_result() {
    Ok(value) => value
    Err(message) => raise ModelingError(message)
  }
}

///|
extern "js" fn InstancedFlow::ffi_move_individual_along_curve(
  self : InstancedFlow,
  index : Int,
  amount : Double,
) -> JsResult[Unit] =
  #| (self, index, amount) => { try { return { ok: true, value: (() => { if (index < 0 || index >= self.object3D.count || !self.curveArray[self.whichCurve[index]]) throw new RangeError("Instance index or initialized curve required"); self.moveIndividualAlongCurve(index, amount); })() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn InstancedFlow::move_individual_along_curve(
  self : InstancedFlow,
  index : Int,
  amount : Double,
) -> Unit raise ModelingError {
  match self.ffi_move_individual_along_curve(index, amount).into_result() {
    Ok(value) => value
    Err(message) => raise ModelingError(message)
  }
}