nise/nise-replay-viewer/src/renderer.ts

62 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-03-03 15:22:03 +00:00
import { Vector } from "p5";
import { p, state } from "./utils";
import { OsuRenderer, OsuRendererEvents } from "./osu/OsuRenderer";
import { Drawer } from "./osu/Drawer";
import { toast } from "sonner";
export class Renderer {
2024-03-03 15:39:31 +00:00
static areImagesLoaded = false;
2024-03-03 15:22:03 +00:00
static mouse: Vector;
static OsuRenderer: OsuRenderer = OsuRenderer;
static async setup() {
Renderer.registerEvents();
Drawer.setP(p);
2024-03-03 15:39:31 +00:00
await Drawer.loadDefaultImages().then(
2024-03-03 15:40:57 +00:00
() => {
Renderer.areImagesLoaded = true;
OsuRenderer.setPlaying(true);
}
2024-03-03 15:39:31 +00:00
);
2024-03-03 15:22:03 +00:00
}
static draw() {
2024-03-03 15:39:31 +00:00
if (!OsuRenderer.beatmap || !this.areImagesLoaded) return;
2024-03-03 15:22:03 +00:00
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, () => {
toast(`Successfully loaded replay!`);
});
OsuRenderer.event.on(OsuRendererEvents.PLAY, () => {
state.setState({
playing: OsuRenderer.playing,
});
});
OsuRenderer.event.on(OsuRendererEvents.TIME, () => {
state.setState({
time: OsuRenderer.time,
});
});
2024-03-03 16:26:45 +00:00
OsuRenderer.event.on(OsuRendererEvents.SPEED, () => {
state.setState({
speed: OsuRenderer.speedMultiplier,
});
});
2024-03-03 15:22:03 +00:00
}
}