- Restructure flat static prototype into pnpm workspace monorepo - apps/game: playable shell with R3F 3D scene, HUD, SpacetimeDB connection - apps/docs: design docs and prototypes - apps/site: landing page - packages/ui: shared Button and Panel primitives - services/spacetimedb: backend module (9 tables, 11 reducers) - Archive legacy static files to archive/legacy-static/ - Game loop: connect, undock, target, approach, dock, mine, sell - Add pnpm-workspace.yaml, tsconfig.base.json, spacetime.json
26 lines
616 B
JavaScript
26 lines
616 B
JavaScript
window.GDD = window.GDD || {};
|
|
|
|
const { useState, useEffect, useCallback } = React;
|
|
|
|
/* Hash-based router */
|
|
window.GDD.useRouter = function() {
|
|
const [page, setPage] = useState(getPage());
|
|
|
|
function getPage() {
|
|
const hash = window.location.hash.slice(1) || 'overview';
|
|
return hash;
|
|
}
|
|
|
|
useEffect(() => {
|
|
const handler = () => setPage(getPage());
|
|
window.addEventListener('hashchange', handler);
|
|
return () => window.removeEventListener('hashchange', handler);
|
|
}, []);
|
|
|
|
const navigate = useCallback((path) => {
|
|
window.location.hash = path;
|
|
}, []);
|
|
|
|
return { page, navigate };
|
|
};
|