Spaces:
Running
Running
Update deplacement_dans_env/viewer_pr_env.js
Browse files
deplacement_dans_env/viewer_pr_env.js
CHANGED
|
@@ -75,26 +75,54 @@ function isMobileUA() {
|
|
| 75 |
}
|
| 76 |
|
| 77 |
async function loadAmmoOrFallback(baseUrl, timeoutMs = 4000) {
|
| 78 |
-
// Configure
|
| 79 |
pc.WasmModule.setConfig("Ammo", {
|
| 80 |
glueUrl: `${baseUrl}ammo.wasm.js`,
|
| 81 |
wasmUrl: `${baseUrl}ammo.wasm.wasm`,
|
| 82 |
fallbackUrl: `${baseUrl}ammo.js`
|
| 83 |
});
|
| 84 |
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
pc.WasmModule.getInstance("Ammo",
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
return false;
|
| 99 |
}
|
| 100 |
return true;
|
|
@@ -293,8 +321,11 @@ export async function initializeViewer(config, instanceId) {
|
|
| 293 |
});
|
| 294 |
|
| 295 |
// Démarrer la boucle update
|
|
|
|
| 296 |
app.start();
|
|
|
|
| 297 |
progressDialog.style.display = "none";
|
|
|
|
| 298 |
|
| 299 |
// ---- Crée le modèle GSplat (optionnel) ----
|
| 300 |
if (sogAsset) {
|
|
|
|
| 75 |
}
|
| 76 |
|
| 77 |
async function loadAmmoOrFallback(baseUrl, timeoutMs = 4000) {
|
| 78 |
+
// Configure URLs
|
| 79 |
pc.WasmModule.setConfig("Ammo", {
|
| 80 |
glueUrl: `${baseUrl}ammo.wasm.js`,
|
| 81 |
wasmUrl: `${baseUrl}ammo.wasm.wasm`,
|
| 82 |
fallbackUrl: `${baseUrl}ammo.js`
|
| 83 |
});
|
| 84 |
|
| 85 |
+
// Essaye l’API Promise d’abord
|
| 86 |
+
const tryPromise = async () => {
|
| 87 |
+
try {
|
| 88 |
+
const p = pc.WasmModule.getInstance("Ammo", `${baseUrl}ammo.wasm.js`);
|
| 89 |
+
if (p && typeof p.then === "function") {
|
| 90 |
+
await Promise.race([
|
| 91 |
+
p,
|
| 92 |
+
new Promise((_, rej) => setTimeout(() => rej(new Error("Ammo load timeout (promise)")), timeoutMs))
|
| 93 |
+
]);
|
| 94 |
+
return true;
|
| 95 |
+
}
|
| 96 |
+
return false;
|
| 97 |
+
} catch (e) {
|
| 98 |
+
console.warn("[Ammo] promise form failed:", e);
|
| 99 |
+
return false;
|
| 100 |
+
}
|
| 101 |
+
};
|
| 102 |
+
|
| 103 |
+
// Sinon, essaye l’API callback
|
| 104 |
+
const tryCallback = async () => {
|
| 105 |
+
let resolved = false;
|
| 106 |
+
try {
|
| 107 |
+
await Promise.race([
|
| 108 |
+
new Promise((resolve, reject) => {
|
| 109 |
+
pc.WasmModule.getInstance("Ammo", () => {
|
| 110 |
+
resolved = true;
|
| 111 |
+
resolve();
|
| 112 |
+
});
|
| 113 |
+
}),
|
| 114 |
+
new Promise((_, rej) => setTimeout(() => rej(new Error("Ammo load timeout (callback)")), timeoutMs))
|
| 115 |
+
]);
|
| 116 |
+
return resolved;
|
| 117 |
+
} catch (e) {
|
| 118 |
+
console.warn("[Ammo] callback form failed:", e);
|
| 119 |
+
return false;
|
| 120 |
+
}
|
| 121 |
+
};
|
| 122 |
+
|
| 123 |
+
const ok = (await tryPromise()) || (await tryCallback());
|
| 124 |
+
if (!ok) {
|
| 125 |
+
console.warn("[viewer] Ammo not available — physics disabled.");
|
| 126 |
return false;
|
| 127 |
}
|
| 128 |
return true;
|
|
|
|
| 321 |
});
|
| 322 |
|
| 323 |
// Démarrer la boucle update
|
| 324 |
+
console.log("[viewer] before app.start()");
|
| 325 |
app.start();
|
| 326 |
+
console.log("[viewer] START OK");
|
| 327 |
progressDialog.style.display = "none";
|
| 328 |
+
console.log("[viewer] progress hidden");
|
| 329 |
|
| 330 |
// ---- Crée le modèle GSplat (optionnel) ----
|
| 331 |
if (sogAsset) {
|