123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- import { utils } from "mocha";
- (function() {
- var snippetUrl = "https://snippet.babylonjs.com";
- var currentSnippetToken;
- var engine;
- var fpsLabel = document.getElementById("fpsLabel");
- var refreshAnchor = document.getElementById("refresh");
- var editAnchor = document.getElementById("edit");
- var scripts;
- var zipCode;
- if (location.href.toLowerCase().indexOf("noui") > -1) {
- fpsLabel.style.visibility = "hidden";
- fpsLabel.style.display = "none";
- refreshAnchor.style.visibility = "hidden";
- refreshAnchor.style.display = "none";
- editAnchor.style.visibility = "hidden";
- editAnchor.style.display = "none";
- }
- BABYLON.Engine.ShadersRepository = "/src/Shaders/";
- var loadScript = function(scriptURL, title) {
- var xhr = new XMLHttpRequest();
- xhr.open('GET', scriptURL, true);
- xhr.onreadystatechange = function() {
- if (xhr.readyState === 4) {
- if (xhr.status === 200) {
- monacoCreator.BlockEditorChange.lockEditorChange = true;
- console.log(xhr.responseText);
- jsEditor.setValue(xhr.responseText);
- jsEditor.setPosition({ lineNumber: 0, column: 0 });
- monacoCreator.BlockEditorChange = false;
- compileAndRun();
- document.getElementById("currentScript").innerHTML = title;
- currentSnippetToken = null;
- }
- }
- };
- xhr.send(null);
- };
- var showError = function(error) {
- utils.showError(error, null);
- };
- compileAndRun = function(code) {
- try {
- if (!BABYLON.Engine.isSupported()) {
- showError("Your browser does not support WebGL");
- return;
- }
- if (engine) {
- engine.dispose();
- engine = null;
- }
- var canvas = document.getElementById("renderCanvas");
- var checkCamera = true;
- var wrappedEval = false;
- var createEngineFunction = "createDefaultEngine";
- var createSceneFunction;
- var createDefaultEngine = function() {
- return new BABYLON.Engine(canvas, true, { stencil: true });
- }
- var scene;
- if (code.indexOf("createEngine") !== -1) {
- createEngineFunction = "createEngine";
- }
- if (code.indexOf("delayCreateScene") !== -1) { // createScene
- createSceneFunction = "delayCreateScene";
- checkCamera = false;
- } else if (code.indexOf("createScene") !== -1) { // createScene
- createSceneFunction = "createScene";
- } else if (code.indexOf("CreateScene") !== -1) { // CreateScene
- createSceneFunction = "CreateScene";
- } else if (code.indexOf("createscene") !== -1) { // createscene
- createSceneFunction = "createscene";
- }
- if (!createSceneFunction) {
- // just pasted code.
- engine = createDefaultEngine();
- scene = new BABYLON.Scene(engine);
- eval("runScript = function(scene, canvas) {" + code + "}");
- runScript(scene, canvas);
- zipCode = "var scene = new BABYLON.Scene(engine);\r\n\r\n" + code;
- } else {
- //execute the code
- eval(code);
- //create engine
- eval("engine = " + createEngineFunction + "()");
- if (!engine) {
- showError("createEngine function must return an engine.", null);
- return;
- }
- //create scene
- eval("scene = " + createSceneFunction + "()");
- if (!scene) {
- showError(createSceneFunction + " function must return a scene.", null);
- return;
- }
- // update the scene code for the zip file
- zipCode = code + "\r\n\r\nvar scene = " + createSceneFunction + "()";
- }
- BABYLON.Camera.ForceAttachControlToAlwaysPreventDefault = true;
- engine.runRenderLoop(function() {
- if (engine.scenes.length === 0) {
- return;
- }
- if (canvas.width !== canvas.clientWidth) {
- engine.resize();
- }
- var scene = engine.scenes[0];
- if (scene.activeCamera || scene.activeCameras.length > 0) {
- scene.render();
- }
- if (fpsLabel) {
- fpsLabel.innerHTML = engine.getFps().toFixed() + " fps";
- }
- });
- } catch (e) {
- // showError(e.message);
- }
- };
- window.addEventListener("resize", function() {
- if (engine) {
- engine.resize();
- }
- });
- // UI
- var cleanHash = function() {
- var splits = decodeURIComponent(location.hash.substr(1)).split("#");
- if (splits.length > 2) {
- splits.splice(2, splits.length - 2);
- }
- location.hash = splits.join("#");
- };
- var checkHash = function() {
- if (location.hash) {
- cleanHash();
- try {
- var xmlHttp = new XMLHttpRequest();
- xmlHttp.onreadystatechange = function() {
- if (xmlHttp.readyState === 4) {
- if (xmlHttp.status === 200) {
- var snippetCode = JSON.parse(JSON.parse(xmlHttp.responseText).jsonPayload).code;
- compileAndRun(snippetCode);
- var refresh = document.getElementById("refresh");
- if (refresh) {
- refresh.addEventListener("click", function() {
- compileAndRun(snippetCode);
- });
- }
- }
- }
- };
- var hash = location.hash.substr(1);
- currentSnippetToken = hash.split("#")[0];
- if (!hash.split("#")[1]) hash += "#0";
- xmlHttp.open("GET", snippetUrl + "/" + hash.replace("#", "/"));
- xmlHttp.send();
- var edit = document.getElementById("edit");
- if (edit) {
- edit.href = "//www.babylonjs-playground.com/#" + hash;
- }
- } catch (e) {
- }
- }
- };
- checkHash();
- })();
|