diff --git a/src/art/artJS.js b/src/art/artJS.js index f58087b3665de17ee06004d268425ba945a67eb4..8536de1254de7a353625b932b61f5c049fef066c 100644 --- a/src/art/artJS.js +++ b/src/art/artJS.js @@ -173,31 +173,41 @@ App.Art.webglInitialize = function() { let loadLockID = LoadScreen.lock(); let script = document.createElement("script"); script.onload = function() { - // load model/morphs/textures assets - let sceneData = App.Art.sceneGetData(); - // load default dictionary containing camera/light/morph/material values - let scene = App.Art.sceneGetParams(); - scene.lockView = false; - scene.resetView = false; - scene.faceView = true; - scene.camera.xr = -6; - scene.camera.z = -275; - scene.camera.y = 127; - scene.camera.fov = 40; + try { + // load model/morphs/textures assets + let sceneData = App.Art.sceneGetData(); + // load default dictionary containing camera/light/morph/material values + let scene = App.Art.sceneGetParams(); + scene.lockView = false; + scene.resetView = false; + scene.faceView = true; + scene.camera.xr = -6; + scene.camera.z = -275; + scene.camera.y = 127; + scene.camera.fov = 40; - App.Art.scenes = {}; - App.Art.defaultScene = JSON.parse(JSON.stringify(scene)); + App.Art.scenes = {}; + App.Art.defaultScene = JSON.parse(JSON.stringify(scene)); - // start Webgl engine, textures are streamed asynchronously - App.Art.engine = new App.Art.Engine(); - App.Art.engine.bind(sceneData, scene); - App.Art.engineReady = true; - LoadScreen.unlock(loadLockID); + // start Webgl engine, textures are streamed asynchronously + App.Art.engine = new App.Art.Engine(); + App.Art.engine.bind(sceneData, scene); + App.Art.engineReady = true; + LoadScreen.unlock(loadLockID); - // when ready fires event to art elements to start rendering - let containers = document.getElementsByClassName("artContainer"); - for (let i = 0; i < containers.length; i++) { - containers[i].dispatchEvent(new Event("engineLoaded")); + // when ready fires event to art elements to start rendering + let containers = document.getElementsByClassName("artContainer"); + for (let i = 0; i < containers.length; i++) { + containers[i].dispatchEvent(new Event("engineLoaded")); + } + } catch(e) { + App.Art.engineReady = false; + LoadScreen.unlock(loadLockID); + + let containers = document.getElementsByClassName("artContainer"); + for (let i = 0; i < containers.length; i++) { + containers[i].dispatchEvent(new Event("engineFailed2")); + } } }; script.onerror = function() { @@ -246,6 +256,11 @@ App.Art.webglArtElement = function(slave, artSize) { container.innerText = "Failed to start WebGL engine."; }, true); + container.addEventListener("engineFailed2", function(e) { + container.style.color = "#BB2027"; + container.innerText = "Art asset out of date."; + }, true); + // incase engine is loaded, trigger listeners manually if (App.Art.engineReady === true) { container.dispatchEvent(new Event("engineLoaded"));