Fix editor regressions and add Blender scene and animated material import

This commit is contained in:
emil28092005
2026-09-12 00:53:20 +03:00
parent 1a0bf725fa
commit 6f497d1977
34 changed files with 1241 additions and 213 deletions
+38
View File
@@ -0,0 +1,38 @@
/** Shared by the editor and both standalone player presentations. */
export function bindViewInput(
canvas: HTMLCanvasElement,
runtime: { playing: boolean; paused: boolean; firstPerson: () => boolean; lookBy: (x: number, y: number) => void },
) {
let pointer: { id: number; x: number; y: number } | null = null;
const down = (event: PointerEvent) => {
if (!runtime.playing || runtime.paused || !runtime.firstPerson()) return;
if (event.pointerType === "mouse") {
if (event.button !== 0) return;
try { void canvas.requestPointerLock?.()?.catch(() => {}); } catch {}
} else {
pointer = { id: event.pointerId, x: event.clientX, y: event.clientY };
canvas.setPointerCapture(event.pointerId);
}
};
const move = (event: PointerEvent) => {
if (!pointer || event.pointerId !== pointer.id) return;
if (!runtime.playing || runtime.paused || !runtime.firstPerson()) { pointer = null; return; }
runtime.lookBy((event.clientX - pointer.x) * .004, (pointer.y - event.clientY) * .004);
pointer = { id: event.pointerId, x: event.clientX, y: event.clientY };
};
const release = () => { pointer = null; };
canvas.addEventListener("pointerdown", down);
canvas.addEventListener("pointermove", move);
canvas.addEventListener("pointerup", release);
canvas.addEventListener("pointercancel", release);
canvas.addEventListener("lostpointercapture", release);
canvas.addEventListener("blur", release);
return () => {
canvas.removeEventListener("pointerdown", down);
canvas.removeEventListener("pointermove", move);
canvas.removeEventListener("pointerup", release);
canvas.removeEventListener("pointercancel", release);
canvas.removeEventListener("lostpointercapture", release);
canvas.removeEventListener("blur", release);
};
}