Premier commit du cinquième front. Trois parties : - `unity/MyInfoMateVR/` : le projet Unity (6000.0.83f1, URP, Meta XR SDK 205), un APK unique pour tous les clients. Menu flottant à sélection au regard, appairage, chargement de scène GLB, POI, cache de contenu, télémétrie. - `unity-overlay/` : les mêmes scripts à recopier sur un projet Unity neuf, avec les pièges rencontrés consignés dans son README. - `viewer/` : viewer et éditeur de scène web autonome (Vite, TypeScript, three.js), partagé avec les autres fronts. - `docs/` : état des lieux, setup Unity, décisions d'architecture et plan d'exécution en 9 étapes. La scène est décrite par un `scene.json` poussé par `adb push` : l'app le préfère à celui embarqué dans l'APK. Les binaires (GLB, textures de l'échantillon Sponza, DLL Meta XR) passent par Git LFS dès ce premier commit — les y faire entrer après coup demanderait de réécrire l'historique. Les artefacts régénérés par l'éditeur et par CMake (`Library/`, `.utmp/`, Burst debug) sont ignorés. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
36 lines
1.2 KiB
JavaScript
36 lines
1.2 KiB
JavaScript
/**
|
|
* Copie les décodeurs Draco et KTX2 de three.js dans `public/libs/`.
|
|
*
|
|
* Pourquoi une copie et pas un CDN : règle 1 de la décision D3 — le viewer doit
|
|
* être un jeu de fichiers statiques servable depuis une origine locale, donc
|
|
* embarquable dans les assets d'une app Flutter et utilisable hors ligne. Un
|
|
* décodeur chargé depuis un CDN casse exactement ça, et il le casse sur site,
|
|
* dans un musée sans wifi.
|
|
*/
|
|
|
|
import { cp, mkdir } from 'node:fs/promises';
|
|
import { existsSync } from 'node:fs';
|
|
import { dirname, resolve } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
const root = resolve(here, '..');
|
|
|
|
const sources = [
|
|
['node_modules/three/examples/jsm/libs/draco/gltf', 'public/libs/draco'],
|
|
['node_modules/three/examples/jsm/libs/basis', 'public/libs/basis'],
|
|
];
|
|
|
|
for (const [from, to] of sources) {
|
|
const source = resolve(root, from);
|
|
if (!existsSync(source)) {
|
|
console.warn(`[libs] ${from} introuvable - lance d'abord npm install`);
|
|
continue;
|
|
}
|
|
|
|
const target = resolve(root, to);
|
|
await mkdir(dirname(target), { recursive: true });
|
|
await cp(source, target, { recursive: true });
|
|
console.log(`[libs] ${from} -> ${to}`);
|
|
}
|