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

///|
#external
pub type LightShadow

///|
pub extern "js" fn LightShadow::map_size(self : LightShadow) -> Vector2 =
  #| (self) => self.mapSize

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

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

///|
pub extern "js" fn LightShadow::set_bias(
  self : LightShadow,
  value : Double,
) -> Unit =
  #| (self, value) => { self.bias = value; }

///|
pub extern "js" fn LightShadow::normal_bias(self : LightShadow) -> Double =
  #| (self) => self.normalBias

///|
pub extern "js" fn LightShadow::set_normal_bias(
  self : LightShadow,
  value : Double,
) -> Unit =
  #| (self, value) => { self.normalBias = value; }

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

///|
pub extern "js" fn LightShadow::set_radius(
  self : LightShadow,
  value : Double,
) -> Unit =
  #| (self, value) => { self.radius = value; }

///|
pub extern "js" fn LightShadow::dispose(self : LightShadow) -> Unit =
  #| (self) => self.dispose()

///|
pub extern "js" fn LightShadow::auto_update(self : LightShadow) -> Bool =
  #| (self) => self.autoUpdate

///|
pub extern "js" fn LightShadow::set_auto_update(
  self : LightShadow,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.autoUpdate = value; }

///|
pub extern "js" fn LightShadow::needs_update(self : LightShadow) -> Bool =
  #| (self) => self.needsUpdate

///|
pub extern "js" fn LightShadow::mark_needs_update(self : LightShadow) -> Unit =
  #| (self) => { self.needsUpdate = true; }

///|
pub extern "js" fn LightShadow::blur_samples(self : LightShadow) -> Int =
  #| (self) => self.blurSamples

///|
pub extern "js" fn LightShadow::set_blur_samples(
  self : LightShadow,
  value : Int,
) -> Unit =
  #| (self, value) => { self.blurSamples = value; }

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

///|
pub extern "js" fn LightShadow::set_intensity(
  self : LightShadow,
  value : Double,
) -> Unit =
  #| (self, value) => { self.intensity = value; }

///|
pub extern "js" fn LightShadow::matrix(self : LightShadow) -> Matrix4 =
  #| (self) => self.matrix

///|
pub extern "js" fn LightShadow::get_viewport_count(self : LightShadow) -> Int =
  #| (self) => self.getViewportCount()

///|
pub extern "js" fn LightShadow::get_frustum(self : LightShadow) -> Frustum =
  #| (self) => self.getFrustum()

///|
pub extern "js" fn LightShadow::update_matrices(
  self : LightShadow,
  light : Light,
) -> Unit =
  #| (self, light) => self.updateMatrices(light)

///|
pub extern "js" fn LightShadow::get_viewport(
  self : LightShadow,
  index : Int,
) -> Vector4 =
  #| (self, index) => self.getViewport(index)

///|
pub extern "js" fn LightShadow::get_frame_extents(
  self : LightShadow,
) -> Vector2 =
  #| (self) => self.getFrameExtents()

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

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

///|
extern "js" fn LightShadow::ffi_to_json(self : LightShadow) -> JsResult[String] =
  #| (self) => { try { return { ok: true, value: (() => JSON.stringify(self.toJSON()))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn LightShadow::to_json(
  self : LightShadow,
) -> Json raise SerializationError {
  match self.ffi_to_json().into_result() {
    Ok(value) =>
      @json.parse(value) catch {
        error => raise SerializationError((error : Error).to_string())
      }
    Err(message) => raise SerializationError(message)
  }
}

///|
extern "js" fn LightShadow::ffi_to_json_string(
  self : LightShadow,
) -> JsResult[String] =
  #| (self) => { try { return { ok: true, value: (() => JSON.stringify(self.toJSON()))() }; } catch (error) { return { ok: false, error: String(error) }; } }

///|
pub fn LightShadow::to_json_string(
  self : LightShadow,
) -> String raise SerializationError {
  match self.ffi_to_json_string().into_result() {
    Ok(value) => value
    Err(message) => raise SerializationError(message)
  }
}