@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
59 lines (58 loc) • 2.09 kB
JavaScript
;
import { TypedMatNode } from "../_Base";
import { BaseTextureMapController, BooleanParamOptions, NodePathOptions } from "./_BaseTextureController";
import { NodeParamsConfig, ParamConfig } from "../../utils/params/ParamsConfig";
export function SpecularMapParamConfig(Base) {
return class Mixin extends Base {
constructor() {
super(...arguments);
/** @param toggle if you want to use a specular map */
this.useSpecularMap = ParamConfig.BOOLEAN(0, BooleanParamOptions(TextureSpecularMapController));
/** @param specify the specular map COP node */
this.specularMap = ParamConfig.NODE_PATH("", NodePathOptions(TextureSpecularMapController, "useSpecularMap"));
}
};
}
function isTextureSpecularMapMaterial(material) {
if (!material) {
return false;
}
return material.isMeshPhongMaterial != null;
}
class TextureSpecularMapParamsConfig extends SpecularMapParamConfig(NodeParamsConfig) {
}
class TextureSpecularMapMatNode extends TypedMatNode {
// abstract override createMaterial(): TextureSpecularMapControllerCurrentMaterial;
}
export class TextureSpecularMapController extends BaseTextureMapController {
constructor(node) {
super(node);
this.node = node;
}
initializeNode() {
this.add_hooks(this.node.p.useSpecularMap, this.node.p.specularMap);
}
static async update(node) {
node.controllers.specularMap.update();
}
async update() {
const material = await this.node.material();
if (!isTextureSpecularMapMaterial(material)) {
return;
}
this.node.controllers.specularMap.updateMaterial(material);
}
async updateMaterial(material) {
await this._update(material, "specularMap", this.node.p.useSpecularMap, this.node.p.specularMap);
}
getTextures(material, record) {
record.set("specularMap", material.specularMap);
}
setParamsFromMaterial(material, record) {
const mapNode = record.get("specularMap");
this.node.p.useSpecularMap.set(mapNode != null);
if (mapNode) {
this.node.p.specularMap.setNode(mapNode, { relative: true });
}
}
}