nise/nise-replay-viewer/src/renderer.ts
2024-03-03 18:24:36 +01:00

61 lines
1.4 KiB
TypeScript

import { Vector } from "p5";
import { p, state } from "./utils";
import { OsuRenderer, OsuRendererEvents } from "./osu/OsuRenderer";
import { Drawer } from "./osu/Drawer";
export class Renderer {
static areImagesLoaded = false;
static mouse: Vector;
static OsuRenderer: OsuRenderer = OsuRenderer;
static async setup() {
Renderer.registerEvents();
Drawer.setP(p);
await Drawer.loadDefaultImages().then(
() => {
Renderer.areImagesLoaded = true;
OsuRenderer.setPlaying(true);
}
);
}
static draw() {
if (!OsuRenderer.beatmap || !this.areImagesLoaded) return;
OsuRenderer.render();
}
static registerEvents() {
// Sync UI with datapath classes
OsuRenderer.event.on(OsuRendererEvents.UPDATE, () => {
const options = OsuRenderer.getOptions();
state.setState({
beatmap: options.beatmap,
replay: options.replay,
mods: options.mods,
});
});
OsuRenderer.event.on(OsuRendererEvents.LOAD, () => {
});
OsuRenderer.event.on(OsuRendererEvents.PLAY, () => {
state.setState({
playing: OsuRenderer.playing,
});
});
OsuRenderer.event.on(OsuRendererEvents.TIME, () => {
state.setState({
time: OsuRenderer.time,
});
});
OsuRenderer.event.on(OsuRendererEvents.SPEED, () => {
state.setState({
speed: OsuRenderer.speedMultiplier,
});
});
}
}