rl-loadout-lib
Version:
Load Rocket League assets into three.js
55 lines (53 loc) • 1.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const extended_mesh_standard_material_1 = require("./extended-mesh-standard-material");
const three_1 = require("three");
exports.UNIFORMS = `
uniform sampler2D rgbaMap;
uniform vec3 paintColor;
uniform int painted;
`;
const DIFFUSE_SHADER = `
// Look up a color from the texture.
vec4 texelColor = texture2D(map, vUv);
vec4 rgbaMapColor = texture2D(rgbaMap, vUv);
// paint
if (painted == 1) {
texelColor.rgb = blendNormal(texelColor.rgb, paintColor.rgb, mask);
}
texelColor = mapTexelToLinear(texelColor);
diffuseColor *= texelColor;
`;
class RimMaterial extends extended_mesh_standard_material_1.ExtendedMeshStandardMaterial {
constructor(maskChannel, invertMask = false) {
super();
this.maskChannel = maskChannel;
this.invertMask = invertMask;
this.fragmentShader = extended_mesh_standard_material_1.ExtendedMeshStandardMaterial.createFragmentShader(exports.UNIFORMS, DIFFUSE_SHADER.replace('mask', `${invertMask ? '1.0 - ' : ''}rgbaMapColor.${maskChannel}`));
this.uniforms.rgbaMap = { value: null };
this.uniforms.paintColor = { value: new three_1.Color() };
this.uniforms.painted = { value: 0 };
}
get rgbaMap() {
return this.uniforms.rgbaMap.value;
}
set rgbaMap(rgbaMap) {
this.uniforms.rgbaMap.value = rgbaMap;
}
get paintColor() {
return this.uniforms.paintColor.value;
}
set paintColor(paintColor) {
if (paintColor != undefined) {
this.uniforms.paintColor.value.copy(paintColor);
this.uniforms.painted.value = 1;
}
else {
this.uniforms.painted.value = 0;
}
}
animate(t) {
}
}
exports.RimMaterial = RimMaterial;
//# sourceMappingURL=rim-material.js.map