@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
49 lines (48 loc) • 1.35 kB
JavaScript
;
import { TypedMatNode } from "../_Base";
import { BaseController } from "./_BaseController";
import { NodeParamsConfig, ParamConfig } from "../../utils/params/ParamsConfig";
export function FlatShadingParamConfig(Base) {
return class Mixin extends Base {
constructor() {
super(...arguments);
/** @param defines if the material is flat shaded */
this.flatShading = ParamConfig.BOOLEAN(0, {
separatorAfter: true
});
}
};
}
class FlatShadingParamsConfig extends FlatShadingParamConfig(NodeParamsConfig) {
}
function _isValidMaterial(material) {
if (!material) {
return false;
}
return material.flatShading != null;
}
class FlatShadingMapMatNode extends TypedMatNode {
async material() {
const container = await this.compute();
return container.material();
}
}
export class FlatShadingController extends BaseController {
constructor(node) {
super(node);
this.node = node;
}
static async update(node) {
const material = await node.material();
if (!_isValidMaterial(material)) {
return;
}
node.controllers.flatShading.updateMaterial(material);
}
updateMaterial(material) {
material.flatShading = this.node.pv.flatShading;
}
setParamsFromMaterial(material, record) {
this.node.p.flatShading.set(material.flatShading);
}
}