UNPKG

@petkoneo/phaser3-rex-plugins

Version:
139 lines (109 loc) 4.42 kB
import FragSrc from './horrifi-frag.js'; import Methods from './methods/Methods.js'; import GetTickDelta from '../../utils/system/GetTickDelta.js'; const PostFXPipeline = Phaser.Renderer.WebGL.Pipelines.PostFXPipeline; const GetValue = Phaser.Utils.Objects.GetValue; class HorrifiPostFxPipeline extends PostFXPipeline { constructor(game) { super({ name: 'rexHorrifiPostFx', game: game, renderTarget: true, fragShader: FragSrc }); this.now = 0; // Bloon this.bloomEnable = false; this.bloomRadius = 0; this.bloomIntensity = 0; this.bloomThreshold = 0; this.bloomTexelWidth = 0; this.bloomTexelHeight = 0; // Chromatic abberation this.chromaticEnable = false; this.chabIntensity = 0; // Vignette this.vignetteEnable = false; this.vignetteStrength = 0; this.vignetteIntensity = 0; // Noise this.noiseEnable = false; this.noiseStrength = 0; this.noiseSeed = Math.random(); // VHS this.vhsEnable = false; this.vhsStrength = 0; // Scanlines this.scanlinesEnable = false; this.scanStrength = 0; // CRT this.crtEnable = false; this.crtWidth = 0; this.crtHeight = 0; } resetFromJSON(o) { var enable = GetValue(o, 'enable', false); // Bloom this.setBloomEnable(GetValue(o, 'bloomEnable', enable)); this.setBloomRadius(GetValue(o, 'bloomRadius', 0)); this.setBloomIntensity(GetValue(o, 'bloomIntensity', 0)); this.setBloomThreshold(GetValue(o, 'bloomThreshold', 0)); this.setBloomTexelSize(GetValue(o, 'bloomTexelWidth', 0), GetValue(o, 'bloomTexelHeight')); // Chromatic abberation this.setChromaticEnable(GetValue(o, 'chromaticEnable', enable)); this.setChabIntensity(GetValue(o, 'chabIntensity', 0)); // Vignette this.setVignetteEnable(GetValue(o, 'vignetteEnable', enable)); this.setVignetteStrength(GetValue(o, 'vignetteStrength', 0)); this.setVignetteIntensity(GetValue(o, 'vignetteIntensity', 0)); // Noise this.setNoiseEnable(GetValue(o, 'noiseEnable', enable)); this.setNoiseStrength(GetValue(o, 'noiseStrength', 0)); this.setNoiseSeed(GetValue(0, 'noiseSeed', Math.random())); // VHS this.setVHSEnable(GetValue(o, 'vhsEnable', enable)); this.setVhsStrength(GetValue(o, 'vhsStrength', 0)); // Scanlines this.setScanlinesEnable(GetValue(o, 'scanlinesEnable', enable)); this.setScanStrength(GetValue(o, 'scanStrength', 0)); // CRT this.setCRTEnable(GetValue(o, 'crtEnable', enable)); this.setCrtSize(GetValue(o, 'crtWidth', 0), GetValue(o, 'crtHeight', undefined)); return this; } onPreRender() { this.set1f('noiseSeed', this.noiseSeed); // Bloon this.set1f('bloomEnable', (this.bloomEnable) ? 1 : 0); this.set3f('bloom', this.bloomRadius, this.bloomIntensity, this.bloomThreshold); this.set2f('bloomTexel', this.bloomTexelWidth, this.bloomTexelHeight); // Chromatic abberation this.set1f('chromaticEnable', (this.chromaticEnable) ? 1 : 0); this.set1f('chabIntensity', this.chabIntensity); // Vignette this.set1f('vignetteEnable', (this.vignetteEnable) ? 1 : 0); this.set2f('vignette', this.vignetteStrength, this.vignetteIntensity); // Noise this.set1f('noiseEnable', (this.noiseEnable) ? 1 : 0); this.set1f('noiseStrength', this.noiseStrength); // VHS this.set1f('vhsEnable', (this.vhsEnable) ? 1 : 0); this.set1f('vhsStrength', this.vhsStrength); // Scanlines this.set1f('scanlinesEnable', (this.scanlinesEnable) ? 1 : 0); this.set1f('scanStrength', this.scanStrength); // CRT this.set1f('crtEnable', (this.crtEnable) ? 1 : 0); this.set2f('crtSize', this.crtWidth, this.crtHeight); // Eanble by VHS if (this.vhsEnable) { this.now += GetTickDelta(this.game); } this.set1f('time', this.now); } } Object.assign( HorrifiPostFxPipeline.prototype, Methods ) export default HorrifiPostFxPipeline;