@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
58 lines (57 loc) • 2.11 kB
JavaScript
;
import { TypeAssert } from "../../../../poly/Assert";
import { NodeParamsConfig } from "../../../utils/params/ParamsConfig";
import { CustomMaterialName } from "../../../../../core/geometry/Material";
import { ParamConfig } from "../../../utils/params/ParamsConfig";
import { BaseBuilderParamConfig } from "../../_BaseBuilder";
import { isBooleanTrue } from "../../../../../core/Type";
import { TypedMatNode } from "../../_Base";
export function CustomMaterialPointsParamConfig(Base) {
return class Mixin extends Base {
constructor() {
super(...arguments);
/** @param toggle off to choose which customMaterials will be generated */
this.overrideCustomMaterials = ParamConfig.BOOLEAN(0);
/** @param distance */
this.createCustomMatDistance = ParamConfig.BOOLEAN(1, {
visibleIf: { overrideCustomMaterials: 1 }
});
/** @param depth */
this.createCustomMatDepth = ParamConfig.BOOLEAN(1, {
visibleIf: { overrideCustomMaterials: 1 }
});
/** @param depth DOF */
this.createCustomMatDepthDOF = ParamConfig.BOOLEAN(1, {
visibleIf: { overrideCustomMaterials: 1 }
});
}
};
}
class CustomMaterialPointsParamsConfig extends CustomMaterialPointsParamConfig(
BaseBuilderParamConfig(NodeParamsConfig)
) {
}
class CustomMaterialMatNode extends TypedMatNode {
}
export function materialPointsAssemblerCustomMaterialRequested(node, customName) {
const param = node.p.overrideCustomMaterials;
if (!param) {
console.warn(`param overrideCustomMaterials not found on ${node.path()}, creating all customMaterials`);
return true;
}
if (!isBooleanTrue(node.pv.overrideCustomMaterials)) {
return true;
}
switch (customName) {
case CustomMaterialName.DISTANCE: {
return isBooleanTrue(node.pv.createCustomMatDistance);
}
case CustomMaterialName.DEPTH: {
return isBooleanTrue(node.pv.createCustomMatDepth);
}
case CustomMaterialName.DEPTH_DOF: {
return isBooleanTrue(node.pv.createCustomMatDepthDOF);
}
}
TypeAssert.unreachable(customName);
}