MikaFil commited on
Commit
3aaea9b
·
verified ·
1 Parent(s): c1fd297

Update deplacement_dans_env/viewer_pr_env.js

Browse files
Files changed (1) hide show
  1. deplacement_dans_env/viewer_pr_env.js +45 -14
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 les URLs Ammo (WASM + fallback JS)
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
- let resolved = false;
86
- await Promise.race([
87
- new Promise((resolve) => {
88
- pc.WasmModule.getInstance("Ammo", () => {
89
- resolved = true;
90
- resolve();
91
- });
92
- }),
93
- new Promise((resolve) => setTimeout(resolve, timeoutMs))
94
- ]);
95
-
96
- if (!resolved) {
97
- console.warn("[viewer_pr_env] Ammo not ready within timeout — physics disabled (fallback rendering only).");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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) {