main.ts
TypeScript demo · Navigation integration guide · Raw source
Demo files
- cpp_demo_3d_app/main.cpp
- cpp_demo_3d_app/integration.hpp
- cpp_demo_3d_app/diagnostic_view.cpp
- cpp_demo_3d_app/diagnostic_view.hpp
- cpp_demo_3d_app/application.cpp
- cpp_demo_3d_app/application.hpp
- python_demo_3d_app/application.py
- python_demo_3d_app/integration.py
- python_demo_3d_app/main.py
- csharp_demo_3d_app/MyApplication.cs
- csharp_demo_3d_app/RaylibWindow.cs
- csharp_demo_3d_app/MyOpenAxisIntegration.cs
- csharp_demo_3d_app/Program.cs
- typescript_demo_3d_app/application.ts
- typescript_demo_3d_app/integration.ts
- typescript_demo_3d_app/main.ts
- csharp_demo_3d_app/DemoScene.cs
import { MyApplication } from "./application.js";import { MyOpenAxisIntegration, showDiagnostics } from "./integration.js";
const options = new URLSearchParams(location.search);const app = new MyApplication();app.mount();const integration = new MyOpenAxisIntegration( app, options.has("debug"), options.get("url") ?? undefined,);integration.start();const stopDiagnostics = showDiagnostics( integration, document.getElementById("diagnostics-output")!, app.renderer!.domElement, () => app.camera, (context) => app.alive && context === app,);let frame: number;function render() { const diagnostics = integration.diagnostics.presentation(); app.setDiagnosticPoints( integration.diagnostics.enabled && diagnostics.context === app ? diagnostics.segments.flatMap((segment) => [segment.start, segment.end]) : [], ); app.render(); frame = requestAnimationFrame(render);}render();
let stopping: Promise<void> | undefined;export function shutdown(): Promise<void> { if (stopping) return stopping; app.finishEdit(false); app.alive = false; cancelAnimationFrame(frame); stopDiagnostics(); return (stopping = integration.stop().finally(() => app.dispose()));}// A cached page keeps its scene; the integration reconnects on pageshow.window.addEventListener("pagehide", (event) => { if (!event.persisted) void shutdown().catch((error) => console.error("Demo shutdown failed", error), );});