Add world delta streaming and viewer smoothing

This commit is contained in:
2026-03-12 19:03:13 -04:00
parent 2fb90162ef
commit 9849dbae61
10 changed files with 966 additions and 177 deletions

View File

@@ -1,4 +1,4 @@
import type { WorldSnapshot } from "./contracts";
import type { WorldDelta, WorldSnapshot } from "./contracts";
export async function fetchWorldSnapshot(signal?: AbortSignal) {
const response = await fetch("/api/world", { signal });
@@ -8,6 +8,24 @@ export async function fetchWorldSnapshot(signal?: AbortSignal) {
return response.json() as Promise<WorldSnapshot>;
}
export function openWorldStream(
afterSequence: number,
handlers: {
onDelta: (delta: WorldDelta) => void;
onOpen?: () => void;
onError?: () => void;
},
) {
const stream = new EventSource(`/api/world/stream?afterSequence=${afterSequence}`);
stream.addEventListener("open", () => handlers.onOpen?.());
stream.addEventListener("error", () => handlers.onError?.());
stream.addEventListener("world-delta", (event) => {
const message = event as MessageEvent<string>;
handlers.onDelta(JSON.parse(message.data) as WorldDelta);
});
return stream;
}
export async function resetWorld() {
const response = await fetch("/api/world/reset", {
method: "POST",