@petkoneo/phaser3-rex-plugins
Version:
162 lines (131 loc) • 3.71 kB
JavaScript
import FragSrc from './warp-frag.js';
import GetTickDelta from '../../utils/system/GetTickDelta.js';
const PostFXPipeline = Phaser.Renderer.WebGL.Pipelines.PostFXPipeline;
const Vector2 = Phaser.Math.Vector2;
const GetValue = Phaser.Utils.Objects.GetValue;
const PI2 = Math.PI * 2;
class WarpPostFxPipeline extends PostFXPipeline {
constructor(game) {
super({
name: 'rexWarpPostFx',
game: game,
renderTarget: true,
fragShader: FragSrc
});
this.frequencyX = 10;
this.frequencyY = 10;
this.amplitudeX = 10;
this.amplitudeY = 10;
this.speedEnable = false;
this.now = 0;
this.speed = new Vector2(0, 0);
}
resetFromJSON(o) {
var frequency = GetValue(o, 'frequency', 10);
this.setFrequency(GetValue(o, 'frequencyX', frequency), GetValue(o, 'frequencyY', frequency));
var amplitude = GetValue(o, 'amplitude', 10);
this.setAmplitude(GetValue(o, 'amplitudeX', amplitude), GetValue(o, 'amplitudeY', amplitude));
var speed = GetValue(o, 'speed', 0);
this.setSpeed(GetValue(o, 'speedX', speed), GetValue(o, 'speedY', speed));
this.setSpeedEnable(GetValue(o, 'speedEnable', (this.speedX !== 0) || (this.speedY !== 0)));
return this;
}
onPreRender() {
if (this.speedEnable) {
this.now += GetTickDelta(this.game);
}
this.set2f('frequency', this.frequencyX, this.frequencyY);
this.set2f('amplitude', this.amplitudeX, this.amplitudeY);
this.set2f('speed', this.speed.x, this.speed.y);
this.set1f('time', this.now);
this.set2f('texSize', this.renderer.width, this.renderer.height);
}
// frequencyX
setFrequencyX(value) {
this.frequencyX = value;
return this;
}
// frequencyY
setFrequencyY(value) {
this.frequencyY = value;
return this;
}
setFrequency(width, height) {
if (height === undefined) {
height = width;
}
this.frequencyX = width;
this.frequencyY = height;
return this;
}
get frequency() {
return (this.frequencyX + this.frequencyY) / 2;
}
set frequency(value) {
this.frequencyX = value;
this.frequencyY = value;
}
// amplitudeX
setAmplitudeX(value) {
this.amplitudeX = value;
return this;
}
// amplitudeY
setAmplitudeY(value) {
this.amplitudeY = value;
return this;
}
setAmplitude(x, y) {
if (y === undefined) {
y = x;
}
this.amplitudeX = x;
this.amplitudeY = y;
return this;
}
get amplitude() {
return (this.amplitudeX + this.amplitudeY) / 2;
}
set amplitude(value) {
this.amplitudeX = value;
this.amplitudeY = value;
}
// speed
setSpeedX(value) {
this.speedX = value;
return this;
}
setSpeedY(value) {
this.speed.y = value;
return this;
}
get speedX() {
return this.speed.x;
}
set speedX(value) {
this.speed.x = value;
}
get speedY() {
return this.speed.y;
}
set speedY(value) {
this.speed.y = value;
}
setSpeed(x, y) {
if (y === undefined) {
y = x;
}
this.speedX = x;
this.speedY = y;
return this;
}
// Speed enable
setSpeedEnable(enable) {
if (enable === undefined) {
enable = true;
}
this.speedEnable = enable;
return this;
}
}
export default WarpPostFxPipeline;