|
@@ -355,77 +355,85 @@
|
|
}
|
|
}
|
|
|
|
|
|
var canvas = document.getElementById("renderCanvas");
|
|
var canvas = document.getElementById("renderCanvas");
|
|
- engine = new BABYLON.Engine(canvas, true, { preserveDrawingBuffer: true, stencil: true });
|
|
|
|
document.getElementById("errorZone").style.display = 'none';
|
|
document.getElementById("errorZone").style.display = 'none';
|
|
document.getElementById("errorZone").innerHTML = "";
|
|
document.getElementById("errorZone").innerHTML = "";
|
|
document.getElementById("statusBar").innerHTML = "Loading assets...Please wait";
|
|
document.getElementById("statusBar").innerHTML = "Loading assets...Please wait";
|
|
var checkCamera = true;
|
|
var checkCamera = true;
|
|
|
|
+ var wrappedEval = false;
|
|
|
|
+ var createEngineFunction = "createDefaultEngine";
|
|
|
|
+ var createSceneFunction;
|
|
|
|
|
|
- engine.runRenderLoop(function () {
|
|
|
|
- if (engine.scenes.length === 0) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (canvas.width !== canvas.clientWidth) {
|
|
|
|
- engine.resize();
|
|
|
|
- }
|
|
|
|
|
|
+ var code = jsEditor.getValue();
|
|
|
|
|
|
- var scene = engine.scenes[0];
|
|
|
|
|
|
+ var createDefaultEngine = function () {
|
|
|
|
+ return new BABYLON.Engine(canvas, true, { preserveDrawingBuffer: true, stencil: true });
|
|
|
|
+ }
|
|
|
|
|
|
- if (scene.activeCamera || scene.activeCameras.length > 0) {
|
|
|
|
- scene.render();
|
|
|
|
- }
|
|
|
|
|
|
+ var scene;
|
|
|
|
|
|
- fpsLabel.style.right = document.body.clientWidth - (jsEditor.domElement.clientWidth + canvas.clientWidth) + "px";
|
|
|
|
- fpsLabel.innerHTML = engine.getFps().toFixed() + " fps";
|
|
|
|
- });
|
|
|
|
|
|
+ if (code.indexOf("createEngine") !== -1) {
|
|
|
|
+ createEngineFunction = "createEngine";
|
|
|
|
+ }
|
|
|
|
|
|
- var code = jsEditor.getValue();
|
|
|
|
- var scene;
|
|
|
|
if (code.indexOf("delayCreateScene") !== -1) { // createScene
|
|
if (code.indexOf("delayCreateScene") !== -1) { // createScene
|
|
- eval(code);
|
|
|
|
- scene = delayCreateScene();
|
|
|
|
|
|
+ createSceneFunction = "delayCreateScene";
|
|
checkCamera = false;
|
|
checkCamera = false;
|
|
- if (!scene) {
|
|
|
|
- showError("delayCreateScene function must return a scene.", null);
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- zipCode = code + "\r\n\r\nvar scene = createScene();";
|
|
|
|
} else if (code.indexOf("createScene") !== -1) { // createScene
|
|
} 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);
|
|
eval(code);
|
|
- scene = createScene();
|
|
|
|
- if (!scene) {
|
|
|
|
- showError("createScene function must return a scene.", null);
|
|
|
|
|
|
+ //create engine
|
|
|
|
+ eval("engine = " + createEngineFunction + "()");
|
|
|
|
+ if (!engine) {
|
|
|
|
+ showError("createEngine function must return an engine.", null);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- zipCode = code + "\r\n\r\nvar scene = createScene();";
|
|
|
|
- } else if (code.indexOf("CreateScene") !== -1) { // CreateScene
|
|
|
|
- eval(code);
|
|
|
|
- scene = CreateScene();
|
|
|
|
|
|
+ //create scene
|
|
|
|
+ eval("scene = " + createSceneFunction + "()");
|
|
|
|
+
|
|
if (!scene) {
|
|
if (!scene) {
|
|
- showError("CreateScene function must return a scene.", null);
|
|
|
|
|
|
+ showError(createSceneFunction + " function must return a scene.", null);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- zipCode = code + "\r\n\r\nvar scene = CreateScene();";
|
|
|
|
- } else if (code.indexOf("createscene") !== -1) { // createscene
|
|
|
|
- eval(code);
|
|
|
|
- scene = createscene();
|
|
|
|
- if (!scene) {
|
|
|
|
- showError("createscene function must return a scene.", null);
|
|
|
|
|
|
+ // update the scene code for the zip file
|
|
|
|
+ zipCode = code + "\r\n\r\nvar scene = " + createSceneFunction + "()";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ engine.runRenderLoop(function () {
|
|
|
|
+ if (engine.scenes.length === 0) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- zipCode = code + "\r\n\r\nvar scene = createscene();";
|
|
|
|
- } else { // Direct code
|
|
|
|
- scene = new BABYLON.Scene(engine);
|
|
|
|
- eval("runScript = function(scene, canvas) {" + code + "}");
|
|
|
|
- runScript(scene, canvas);
|
|
|
|
|
|
+ if (canvas.width !== canvas.clientWidth) {
|
|
|
|
+ engine.resize();
|
|
|
|
+ }
|
|
|
|
|
|
- zipCode = "var scene = new BABYLON.Scene(engine);\r\n\r\n" + code;
|
|
|
|
- }
|
|
|
|
|
|
+ var scene = engine.scenes[0];
|
|
|
|
+
|
|
|
|
+ if (scene.activeCamera || scene.activeCameras.length > 0) {
|
|
|
|
+ scene.render();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ fpsLabel.style.right = document.body.clientWidth - (jsEditor.domElement.clientWidth + canvas.clientWidth) + "px";
|
|
|
|
+ fpsLabel.innerHTML = engine.getFps().toFixed() + " fps";
|
|
|
|
+ });
|
|
|
|
|
|
if (engine.scenes.length === 0) {
|
|
if (engine.scenes.length === 0) {
|
|
showError("You must at least create a scene.", null);
|
|
showError("You must at least create a scene.", null);
|