UNPKG

awv3

Version:
65 lines (57 loc) 1.89 kB
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) }, ) }) } }