awv3
Version:
⚡ AWV3 embedded CAD
65 lines (57 loc) • 1.89 kB
JavaScript
import Plugin from '../../session/plugin'
import { Slider, Group } from '../../session/elements'
import debounce from 'lodash/debounce'
const props = [
'opacity',
'reflectivity',
'metalness',
'roughness',
'clearCoat',
'clearCoatRoughness',
'envMapIntensity',
]
const resources = ['isometric'].reduce(
(prev, item) => ({ ...prev, [item]: require('!!url-loader!awv3-icons/32x32/' + item + '.png') }),
{},
)
export default class ShaderProps extends Plugin {
constructor(session, args) {
super(session, { type: 'ShaderProps', icon: 'isometric', resources, ...args })
let defaults = this.session.options.meshShaderOptions
this.addElement(
new Group(this, {
format: Group.Format.Table,
children: props.map(
name =>
(this[name] = new Slider(this, {
name,
value: defaults[name] || 0,
max: 1,
step: 0.01,
positions: { 0: '0', 1: '1' },
})),
),
}),
)
}
update = debounce(() => this.session.pool.updateMaterials(), 500, { leading: true, trailing: false })
onEnabled() {
this.resetElements()
this.session.pool.updateMaterials()
props.forEach(name => {
this[name].observe(
state => state.value,
value => {
this.update()
this.session.pool
.animate({
materials: {
meshes: [{ [name]: value }],
},
})
.start(0)
},
)
})
}
}