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

///|
#external
pub type MeshStandardMaterial

///|
#module("@mizchi/three-mbt/constructors")
extern "js" fn MeshStandardMaterial::ffi_create_MeshStandardMaterial(
  color : Int,
  roughness : Double,
  metalness : Double,
  flat_shading : Bool,
) -> MeshStandardMaterial = "meshStandardMaterial"

///|
pub fn MeshStandardMaterial::MeshStandardMaterial(
  color : Int,
  roughness? : Double = 1,
  metalness? : Double = 0,
  flat_shading? : Bool = false,
) -> MeshStandardMaterial {
  MeshStandardMaterial::ffi_create_MeshStandardMaterial(
    color, roughness, metalness, flat_shading,
  )
}

///|
pub fn MeshStandardMaterial::as_material(
  self : MeshStandardMaterial,
) -> Material = "%identity"

///|
pub extern "js" fn MeshStandardMaterial::color(
  self : MeshStandardMaterial,
) -> Color =
  #| (self) => self.color

///|
extern "js" fn MeshStandardMaterial::ffi_map(
  self : MeshStandardMaterial,
) -> Nullable[Texture] =
  #| (self) => self.map

///|
pub fn MeshStandardMaterial::map(self : MeshStandardMaterial) -> Texture? {
  self.ffi_map().to_option()
}

///|
extern "js" fn MeshStandardMaterial::ffi_set_map(
  self : MeshStandardMaterial,
  value : Nullable[Texture],
) -> Unit =
  #| (self, value) => { self.map = value; }

///|
pub fn MeshStandardMaterial::set_map(
  self : MeshStandardMaterial,
  value : Texture?,
) -> Unit {
  self.ffi_set_map(Nullable::from_option(value))
}

///|
pub extern "js" fn MeshStandardMaterial::roughness(
  self : MeshStandardMaterial,
) -> Double =
  #| (self) => self.roughness

///|
pub extern "js" fn MeshStandardMaterial::set_roughness(
  self : MeshStandardMaterial,
  value : Double,
) -> Unit =
  #| (self, value) => { self.roughness = value; }

///|
pub extern "js" fn MeshStandardMaterial::metalness(
  self : MeshStandardMaterial,
) -> Double =
  #| (self) => self.metalness

///|
pub extern "js" fn MeshStandardMaterial::set_metalness(
  self : MeshStandardMaterial,
  value : Double,
) -> Unit =
  #| (self, value) => { self.metalness = value; }

///|
pub extern "js" fn MeshStandardMaterial::wireframe(
  self : MeshStandardMaterial,
) -> Bool =
  #| (self) => self.wireframe

///|
pub extern "js" fn MeshStandardMaterial::set_wireframe(
  self : MeshStandardMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.wireframe = value; }

///|
pub extern "js" fn MeshStandardMaterial::emissive(
  self : MeshStandardMaterial,
) -> Color =
  #| (self) => self.emissive

///|
pub extern "js" fn MeshStandardMaterial::emissive_intensity(
  self : MeshStandardMaterial,
) -> Double =
  #| (self) => self.emissiveIntensity

///|
pub extern "js" fn MeshStandardMaterial::set_emissive_intensity(
  self : MeshStandardMaterial,
  value : Double,
) -> Unit =
  #| (self, value) => { self.emissiveIntensity = value; }

///|
extern "js" fn MeshStandardMaterial::ffi_normal_map(
  self : MeshStandardMaterial,
) -> Nullable[Texture] =
  #| (self) => self.normalMap

///|
pub fn MeshStandardMaterial::normal_map(
  self : MeshStandardMaterial,
) -> Texture? {
  self.ffi_normal_map().to_option()
}

///|
extern "js" fn MeshStandardMaterial::ffi_set_normal_map(
  self : MeshStandardMaterial,
  value : Nullable[Texture],
) -> Unit =
  #| (self, value) => { self.normalMap = value; }

///|
pub fn MeshStandardMaterial::set_normal_map(
  self : MeshStandardMaterial,
  value : Texture?,
) -> Unit {
  self.ffi_set_normal_map(Nullable::from_option(value))
}

///|
extern "js" fn MeshStandardMaterial::ffi_roughness_map(
  self : MeshStandardMaterial,
) -> Nullable[Texture] =
  #| (self) => self.roughnessMap

///|
pub fn MeshStandardMaterial::roughness_map(
  self : MeshStandardMaterial,
) -> Texture? {
  self.ffi_roughness_map().to_option()
}

///|
extern "js" fn MeshStandardMaterial::ffi_set_roughness_map(
  self : MeshStandardMaterial,
  value : Nullable[Texture],
) -> Unit =
  #| (self, value) => { self.roughnessMap = value; }

///|
pub fn MeshStandardMaterial::set_roughness_map(
  self : MeshStandardMaterial,
  value : Texture?,
) -> Unit {
  self.ffi_set_roughness_map(Nullable::from_option(value))
}

///|
extern "js" fn MeshStandardMaterial::ffi_metalness_map(
  self : MeshStandardMaterial,
) -> Nullable[Texture] =
  #| (self) => self.metalnessMap

///|
pub fn MeshStandardMaterial::metalness_map(
  self : MeshStandardMaterial,
) -> Texture? {
  self.ffi_metalness_map().to_option()
}

///|
extern "js" fn MeshStandardMaterial::ffi_set_metalness_map(
  self : MeshStandardMaterial,
  value : Nullable[Texture],
) -> Unit =
  #| (self, value) => { self.metalnessMap = value; }

///|
pub fn MeshStandardMaterial::set_metalness_map(
  self : MeshStandardMaterial,
  value : Texture?,
) -> Unit {
  self.ffi_set_metalness_map(Nullable::from_option(value))
}

///|
extern "js" fn MeshStandardMaterial::ffi_emissive_map(
  self : MeshStandardMaterial,
) -> Nullable[Texture] =
  #| (self) => self.emissiveMap

///|
pub fn MeshStandardMaterial::emissive_map(
  self : MeshStandardMaterial,
) -> Texture? {
  self.ffi_emissive_map().to_option()
}

///|
extern "js" fn MeshStandardMaterial::ffi_set_emissive_map(
  self : MeshStandardMaterial,
  value : Nullable[Texture],
) -> Unit =
  #| (self, value) => { self.emissiveMap = value; }

///|
pub fn MeshStandardMaterial::set_emissive_map(
  self : MeshStandardMaterial,
  value : Texture?,
) -> Unit {
  self.ffi_set_emissive_map(Nullable::from_option(value))
}

///|
extern "js" fn MeshStandardMaterial::ffi_ao_map(
  self : MeshStandardMaterial,
) -> Nullable[Texture] =
  #| (self) => self.aoMap

///|
pub fn MeshStandardMaterial::ao_map(self : MeshStandardMaterial) -> Texture? {
  self.ffi_ao_map().to_option()
}

///|
extern "js" fn MeshStandardMaterial::ffi_set_ao_map(
  self : MeshStandardMaterial,
  value : Nullable[Texture],
) -> Unit =
  #| (self, value) => { self.aoMap = value; }

///|
pub fn MeshStandardMaterial::set_ao_map(
  self : MeshStandardMaterial,
  value : Texture?,
) -> Unit {
  self.ffi_set_ao_map(Nullable::from_option(value))
}

///|
extern "js" fn MeshStandardMaterial::ffi_env_map(
  self : MeshStandardMaterial,
) -> Nullable[Texture] =
  #| (self) => self.envMap

///|
pub fn MeshStandardMaterial::env_map(self : MeshStandardMaterial) -> Texture? {
  self.ffi_env_map().to_option()
}

///|
extern "js" fn MeshStandardMaterial::ffi_set_env_map(
  self : MeshStandardMaterial,
  value : Nullable[Texture],
) -> Unit =
  #| (self, value) => { self.envMap = value; }

///|
pub fn MeshStandardMaterial::set_env_map(
  self : MeshStandardMaterial,
  value : Texture?,
) -> Unit {
  self.ffi_set_env_map(Nullable::from_option(value))
}

///|
pub extern "js" fn MeshStandardMaterial::normal_scale(
  self : MeshStandardMaterial,
) -> Vector2 =
  #| (self) => self.normalScale

///|
pub extern "js" fn MeshStandardMaterial::normal_map_type(
  self : MeshStandardMaterial,
) -> NormalMapType =
  #| (self) => self.normalMapType

///|
pub extern "js" fn MeshStandardMaterial::set_normal_map_type(
  self : MeshStandardMaterial,
  value : NormalMapType,
) -> Unit =
  #| (self, value) => { self.normalMapType = value; }

///|
pub extern "js" fn MeshStandardMaterial::env_map_rotation(
  self : MeshStandardMaterial,
) -> Euler =
  #| (self) => self.envMapRotation

///|
pub extern "js" fn MeshStandardMaterial::flat_shading(
  self : MeshStandardMaterial,
) -> Bool =
  #| (self) => self.flatShading

///|
pub extern "js" fn MeshStandardMaterial::set_flat_shading(
  self : MeshStandardMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.flatShading = value; }

///|
pub extern "js" fn MeshStandardMaterial::env_map_intensity(
  self : MeshStandardMaterial,
) -> Double =
  #| (self) => self.envMapIntensity

///|
pub extern "js" fn MeshStandardMaterial::set_env_map_intensity(
  self : MeshStandardMaterial,
  value : Double,
) -> Unit =
  #| (self, value) => { self.envMapIntensity = value; }

///|
pub extern "js" fn MeshStandardMaterial::ao_map_intensity(
  self : MeshStandardMaterial,
) -> Double =
  #| (self) => self.aoMapIntensity

///|
pub extern "js" fn MeshStandardMaterial::set_ao_map_intensity(
  self : MeshStandardMaterial,
  value : Double,
) -> Unit =
  #| (self, value) => { self.aoMapIntensity = value; }

///|
pub extern "js" fn MeshStandardMaterial::bump_scale(
  self : MeshStandardMaterial,
) -> Double =
  #| (self) => self.bumpScale

///|
pub extern "js" fn MeshStandardMaterial::set_bump_scale(
  self : MeshStandardMaterial,
  value : Double,
) -> Unit =
  #| (self, value) => { self.bumpScale = value; }

///|
pub extern "js" fn MeshStandardMaterial::displacement_scale(
  self : MeshStandardMaterial,
) -> Double =
  #| (self) => self.displacementScale

///|
pub extern "js" fn MeshStandardMaterial::set_displacement_scale(
  self : MeshStandardMaterial,
  value : Double,
) -> Unit =
  #| (self, value) => { self.displacementScale = value; }

///|
pub extern "js" fn MeshStandardMaterial::displacement_bias(
  self : MeshStandardMaterial,
) -> Double =
  #| (self) => self.displacementBias

///|
pub extern "js" fn MeshStandardMaterial::set_displacement_bias(
  self : MeshStandardMaterial,
  value : Double,
) -> Unit =
  #| (self, value) => { self.displacementBias = value; }

///|
pub extern "js" fn MeshStandardMaterial::light_map_intensity(
  self : MeshStandardMaterial,
) -> Double =
  #| (self) => self.lightMapIntensity

///|
pub extern "js" fn MeshStandardMaterial::set_light_map_intensity(
  self : MeshStandardMaterial,
  value : Double,
) -> Unit =
  #| (self, value) => { self.lightMapIntensity = value; }

///|
extern "js" fn MeshStandardMaterial::ffi_bump_map(
  self : MeshStandardMaterial,
) -> Nullable[Texture] =
  #| (self) => self.bumpMap

///|
pub fn MeshStandardMaterial::bump_map(self : MeshStandardMaterial) -> Texture? {
  self.ffi_bump_map().to_option()
}

///|
extern "js" fn MeshStandardMaterial::ffi_set_bump_map(
  self : MeshStandardMaterial,
  value : Nullable[Texture],
) -> Unit =
  #| (self, value) => { self.bumpMap = value; }

///|
pub fn MeshStandardMaterial::set_bump_map(
  self : MeshStandardMaterial,
  value : Texture?,
) -> Unit {
  self.ffi_set_bump_map(Nullable::from_option(value))
}

///|
extern "js" fn MeshStandardMaterial::ffi_displacement_map(
  self : MeshStandardMaterial,
) -> Nullable[Texture] =
  #| (self) => self.displacementMap

///|
pub fn MeshStandardMaterial::displacement_map(
  self : MeshStandardMaterial,
) -> Texture? {
  self.ffi_displacement_map().to_option()
}

///|
extern "js" fn MeshStandardMaterial::ffi_set_displacement_map(
  self : MeshStandardMaterial,
  value : Nullable[Texture],
) -> Unit =
  #| (self, value) => { self.displacementMap = value; }

///|
pub fn MeshStandardMaterial::set_displacement_map(
  self : MeshStandardMaterial,
  value : Texture?,
) -> Unit {
  self.ffi_set_displacement_map(Nullable::from_option(value))
}

///|
extern "js" fn MeshStandardMaterial::ffi_alpha_map(
  self : MeshStandardMaterial,
) -> Nullable[Texture] =
  #| (self) => self.alphaMap

///|
pub fn MeshStandardMaterial::alpha_map(self : MeshStandardMaterial) -> Texture? {
  self.ffi_alpha_map().to_option()
}

///|
extern "js" fn MeshStandardMaterial::ffi_set_alpha_map(
  self : MeshStandardMaterial,
  value : Nullable[Texture],
) -> Unit =
  #| (self, value) => { self.alphaMap = value; }

///|
pub fn MeshStandardMaterial::set_alpha_map(
  self : MeshStandardMaterial,
  value : Texture?,
) -> Unit {
  self.ffi_set_alpha_map(Nullable::from_option(value))
}

///|
extern "js" fn MeshStandardMaterial::ffi_light_map(
  self : MeshStandardMaterial,
) -> Nullable[Texture] =
  #| (self) => self.lightMap

///|
pub fn MeshStandardMaterial::light_map(self : MeshStandardMaterial) -> Texture? {
  self.ffi_light_map().to_option()
}

///|
extern "js" fn MeshStandardMaterial::ffi_set_light_map(
  self : MeshStandardMaterial,
  value : Nullable[Texture],
) -> Unit =
  #| (self, value) => { self.lightMap = value; }

///|
pub fn MeshStandardMaterial::set_light_map(
  self : MeshStandardMaterial,
  value : Texture?,
) -> Unit {
  self.ffi_set_light_map(Nullable::from_option(value))
}

///|
pub extern "js" fn MeshStandardMaterial::wireframe_linewidth(
  self : MeshStandardMaterial,
) -> Double =
  #| (self) => self.wireframeLinewidth

///|
pub extern "js" fn MeshStandardMaterial::set_wireframe_linewidth(
  self : MeshStandardMaterial,
  value : Double,
) -> Unit =
  #| (self, value) => { self.wireframeLinewidth = value; }

///|
pub extern "js" fn MeshStandardMaterial::fog(
  self : MeshStandardMaterial,
) -> Bool =
  #| (self) => self.fog

///|
pub extern "js" fn MeshStandardMaterial::set_fog(
  self : MeshStandardMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.fog = value; }

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

///|
pub extern "js" fn MeshStandardMaterial::kind(
  self : MeshStandardMaterial,
) -> String =
  #| (self) => self.type

///|
pub extern "js" fn MeshStandardMaterial::name(
  self : MeshStandardMaterial,
) -> String =
  #| (self) => self.name

///|
pub extern "js" fn MeshStandardMaterial::set_name(
  self : MeshStandardMaterial,
  value : String,
) -> Unit =
  #| (self, value) => { self.name = value; }

///|
pub extern "js" fn MeshStandardMaterial::opacity(
  self : MeshStandardMaterial,
) -> Double =
  #| (self) => self.opacity

///|
pub extern "js" fn MeshStandardMaterial::set_opacity(
  self : MeshStandardMaterial,
  value : Double,
) -> Unit =
  #| (self, value) => { self.opacity = value; }

///|
pub extern "js" fn MeshStandardMaterial::transparent(
  self : MeshStandardMaterial,
) -> Bool =
  #| (self) => self.transparent

///|
pub extern "js" fn MeshStandardMaterial::set_transparent(
  self : MeshStandardMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.transparent = value; }

///|
pub extern "js" fn MeshStandardMaterial::visible(
  self : MeshStandardMaterial,
) -> Bool =
  #| (self) => self.visible

///|
pub extern "js" fn MeshStandardMaterial::set_visible(
  self : MeshStandardMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.visible = value; }

///|
pub extern "js" fn MeshStandardMaterial::depth_test(
  self : MeshStandardMaterial,
) -> Bool =
  #| (self) => self.depthTest

///|
pub extern "js" fn MeshStandardMaterial::set_depth_test(
  self : MeshStandardMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.depthTest = value; }

///|
pub extern "js" fn MeshStandardMaterial::depth_write(
  self : MeshStandardMaterial,
) -> Bool =
  #| (self) => self.depthWrite

///|
pub extern "js" fn MeshStandardMaterial::set_depth_write(
  self : MeshStandardMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.depthWrite = value; }

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

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