polygonjs-engine
Version:
node-based webgl 3D engine https://polygonjs.com
48 lines (47 loc) • 1.52 kB
JavaScript
import {BaseController as BaseController2} from "./_BaseController";
import {TypedMatNode} from "../_Base";
import {Material as Material2} from "three/src/materials/Material";
import {NodeParamsConfig, ParamConfig} from "../../utils/params/ParamsConfig";
export function ColorParamConfig(Base2) {
return class Mixin extends Base2 {
constructor() {
super(...arguments);
this.color = ParamConfig.COLOR([1, 1, 1]);
this.useVertexColors = ParamConfig.BOOLEAN(0);
this.transparent = ParamConfig.BOOLEAN(0);
this.opacity = ParamConfig.FLOAT(1);
this.alphaTest = ParamConfig.FLOAT(0);
this.useFog = ParamConfig.BOOLEAN(0);
}
};
}
class ColoredMaterial extends Material2 {
}
class ColorParamsConfig extends ColorParamConfig(NodeParamsConfig) {
}
class ColoredMatNode extends TypedMatNode {
create_material() {
return new ColoredMaterial();
}
}
export class ColorsController extends BaseController2 {
constructor(node) {
super(node);
this.node = node;
}
static update(node) {
const material = node.material;
const pv = node.pv;
material.color.copy(pv.color);
const newVertexColor = pv.useVertexColors;
if (newVertexColor != material.vertexColors) {
material.vertexColors = newVertexColor;
material.needsUpdate = true;
}
material.opacity = pv.opacity;
material.transparent = pv.transparent || pv.opacity < 1;
material.depthTest = true;
material.alphaTest = pv.alphaTest;
material.fog = pv.useFog;
}
}