UNPKG

@petkoneo/phaser3-rex-plugins

Version:
87 lines (74 loc) 2.34 kB
import FragSrc from './shockwave-frag.js'; const PostFXPipeline = Phaser.Renderer.WebGL.Pipelines.PostFXPipeline; const GetValue = Phaser.Utils.Objects.GetValue; const Clamp = Phaser.Math.Clamp; class ShockwavePostFxPipeline extends PostFXPipeline { constructor(game) { super({ name: 'rexShockwavePostFx', game: game, renderTarget: true, fragShader: FragSrc }); this.centerX = 0; // position wo resolution this.centerY = 0; // position wo resolution this.waveWidth = 20; this.powBaseScale = 0.8; this.powExponent = 0.1; } resetFromJSON(o) { this.setCenter(GetValue(o, 'center.x', undefined), GetValue(o, 'center.y', undefined)); this.setWaveRadius(GetValue(o, 'waveRadius', 0)); this.setWaveWidth(GetValue(o, 'waveWidth', 20)); this.setPowBaseScale(GetValue(o, 'powBaseScale', 0.8)); this.setPowExponent(GetValue(o, 'powExponent', 0.1)); return this; } onPreRender() { this.set1f('waveRadius', this.waveRadius); this.set1f('waveHalfWidth', this.waveWidth / 2); this.set1f('powBaseScale', this.powBaseScale); this.set1f('powExponent', this.powExponent); var texWidth = this.renderer.width, textHeight = this.renderer.height; this.set2f('center', this.centerX, (textHeight - this.centerY)); this.set2f('texSize', texWidth, textHeight); } // center setCenter(x, y) { if (x === undefined) { x = this.renderer.width / 2; y = this.renderer.height / 2; } this.centerX = x; this.centerY = y; return this; } // waveRadius setWaveRadius(value) { if (value === undefined) { value = 0; } this.waveRadius = value; return this; } // waveWidth setWaveWidth(value) { if (value === undefined) { value = 0; } this.waveWidth = value; return this; } // powBaseScale setPowBaseScale(value) { this.powBaseScale = value; return this; } // powExponent setPowExponent(value) { this.powExponent = value; return this; } } export default ShockwavePostFxPipeline;