odyssey-client/src/graphics/filters/InGameSpace.ts

50 lines
1.3 KiB
TypeScript

import { Filter, Renderer, Texture, WRAP_MODES } from "pixi.js";
import RTTShader from "../utils/RTTShader";
//@ts-expect-error Frag file
import filter_src from "./frag/InGameSpace.frag";
export interface SpaceTextures {
noise_sparse;
noise_fine;
}
export default class InGameSpaceFilter extends RTTShader {
private elapsed: number;
private filter: Filter;
constructor(renderer: Renderer, scale: number, textures: SpaceTextures) {
const noise_sparse = textures.noise_sparse.texture as Texture;
const noise_fine = textures.noise_fine.texture as Texture;
noise_sparse.baseTexture.wrapMode = WRAP_MODES.REPEAT;
noise_fine.baseTexture.wrapMode = WRAP_MODES.REPEAT;
const filter = new Filter(null, filter_src, {
time: 0,
ires: [renderer.width / scale, renderer.height / scale],
noise_sparse,
noise_fine,
scroll_speed: 0,
warp_boost: 0,
warp_opacity: 0,
});
super(renderer, filter, scale);
this.elapsed = 0;
this.filter = filter;
}
rescale(scale: number) {
super.rescale(scale);
this.filter.uniforms.ires = [
this.renderer.width / scale,
this.renderer.height / scale,
];
}
update(delta: number) {
this.filter.uniforms.time = this.elapsed;
this.elapsed += delta / 60;
}
}