Files
2025-01-04 00:34:03 +01:00

82 lines
2.5 KiB
JavaScript

/**
* A layer of background alteration effects which change the appearance of the primary group render texture.
* @category - Canvas
*/
class CanvasBackgroundAlterationEffects extends CanvasLayer {
constructor() {
super();
/**
* A collection of effects which provide background vision alterations.
* @type {PIXI.Container}
*/
this.vision = this.addChild(new PIXI.Container());
this.vision.sortableChildren = true;
/**
* A collection of effects which provide background preferred vision alterations.
* @type {PIXI.Container}
*/
this.visionPreferred = this.addChild(new PIXI.Container());
this.visionPreferred.sortableChildren = true;
/**
* A collection of effects which provide other background alterations.
* @type {PIXI.Container}
*/
this.lighting = this.addChild(new PIXI.Container());
this.lighting.sortableChildren = true;
}
/* -------------------------------------------- */
/** @override */
async _draw(options) {
// Add the background vision filter
const vf = this.vision.filter = new VoidFilter();
vf.blendMode = PIXI.BLEND_MODES.NORMAL;
vf.enabled = false;
this.vision.filters = [vf];
this.vision.filterArea = canvas.app.renderer.screen;
// Add the background preferred vision filter
const vpf = this.visionPreferred.filter = new VoidFilter();
vpf.blendMode = PIXI.BLEND_MODES.NORMAL;
vpf.enabled = false;
this.visionPreferred.filters = [vpf];
this.visionPreferred.filterArea = canvas.app.renderer.screen;
// Add the background lighting filter
const maskingFilter = CONFIG.Canvas.visualEffectsMaskingFilter;
const lf = this.lighting.filter = maskingFilter.create({
visionTexture: canvas.masks.vision.renderTexture,
darknessLevelTexture: canvas.effects.illumination.renderTexture,
mode: maskingFilter.FILTER_MODES.BACKGROUND
});
lf.blendMode = PIXI.BLEND_MODES.NORMAL;
this.lighting.filters = [lf];
this.lighting.filterArea = canvas.app.renderer.screen;
canvas.effects.visualEffectsMaskingFilters.add(lf);
}
/* -------------------------------------------- */
/** @override */
async _tearDown(options) {
canvas.effects.visualEffectsMaskingFilters.delete(this.lighting?.filter);
this.clear();
}
/* -------------------------------------------- */
/**
* Clear background alteration effects vision and lighting containers
*/
clear() {
this.vision.removeChildren();
this.visionPreferred.removeChildren();
this.lighting.removeChildren();
}
}