.
This commit is contained in:
188
iris_puzzles.js
Normal file
188
iris_puzzles.js
Normal file
@@ -0,0 +1,188 @@
|
||||
'use strict';
|
||||
window.addEventListener('load', function() {
|
||||
|
||||
(function() {
|
||||
|
||||
var params = v3d.AppUtils.getPageParams();
|
||||
|
||||
var PUZZLES_DIR = '../../puzzles/';
|
||||
var logicURL = params.logic ? params.logic : '__LOGIC__visual_logic.js'.replace('__LOGIC__', '');
|
||||
var sceneURL = params.load ? params.load : '__URL__iris_puzzles.gltf'.replace('__URL__', '');
|
||||
if (!sceneURL) {
|
||||
console.log('No scene URL specified');
|
||||
return;
|
||||
}
|
||||
|
||||
// some puzzles can benefit from cache
|
||||
v3d.Cache.enabled = true;
|
||||
|
||||
if (v3d.AppUtils.isXML(logicURL)) {
|
||||
var logicURLJS = logicURL.match(/(.*)\.xml$/)[1] + '.js';
|
||||
new v3d.PuzzlesLoader().loadEditorWithLogic(PUZZLES_DIR, logicURLJS,
|
||||
function() {
|
||||
var initOptions = v3d.PL ? v3d.PL.execInitPuzzles().initOptions
|
||||
: { useFullscreen: true };
|
||||
loadScene(sceneURL, initOptions);
|
||||
}
|
||||
);
|
||||
} else if (v3d.AppUtils.isJS(logicURL)) {
|
||||
new v3d.PuzzlesLoader().loadLogic(logicURL, function() {
|
||||
var initOptions = v3d.PL ? v3d.PL.execInitPuzzles().initOptions
|
||||
: { useFullscreen: true };
|
||||
loadScene(sceneURL, initOptions);
|
||||
});
|
||||
} else {
|
||||
loadScene(sceneURL, { useFullscreen: true });
|
||||
}
|
||||
})();
|
||||
|
||||
function loadScene(sceneURL, initOptions) {
|
||||
|
||||
initOptions = initOptions || {};
|
||||
|
||||
var ctxSettings = {};
|
||||
if (initOptions.useBkgTransp) ctxSettings.alpha = true;
|
||||
if (initOptions.preserveDrawBuf) ctxSettings.preserveDrawingBuffer = true;
|
||||
/*
|
||||
var preloader = initOptions.useCustomPreloader
|
||||
? createCustomPreloader(initOptions.preloaderProgressCb,
|
||||
initOptions.preloaderEndCb)
|
||||
: new v3d.SimplePreloader({ container: 'container' });
|
||||
*/
|
||||
var preloader = new v3d.SimplePreloader({ container: 'container' });
|
||||
//preloader.background.style.opacity = 0;
|
||||
preloader.background.style.backgroundColor = 'black';
|
||||
preloader.background.style.textColor = 'white';
|
||||
|
||||
|
||||
var app = new v3d.App('container', ctxSettings, preloader);
|
||||
if (initOptions.useBkgTransp) {
|
||||
app.clearBkgOnLoad = true;
|
||||
app.renderer.setClearColor(0x000000, 0);
|
||||
}
|
||||
|
||||
// namespace for communicating with code generated by Puzzles
|
||||
app.ExternalInterface = {};
|
||||
prepareExternalInterface(app);
|
||||
|
||||
if (initOptions.preloaderStartCb) initOptions.preloaderStartCb();
|
||||
if (initOptions.useFullscreen) {
|
||||
initFullScreen();
|
||||
} else {
|
||||
var fsButton = document.getElementById('fullscreen_button');
|
||||
if (fsButton) fsButton.style.display = 'none';
|
||||
}
|
||||
|
||||
sceneURL = initOptions.useCompAssets ? sceneURL + '.xz' : sceneURL;
|
||||
app.loadScene(sceneURL, function() {
|
||||
app.enableControls();
|
||||
app.run();
|
||||
|
||||
if (v3d.PE) v3d.PE.updateAppInstance(app);
|
||||
if (v3d.PL) v3d.PL.init(app, initOptions);
|
||||
|
||||
runCode(app);
|
||||
}, null, function() {
|
||||
console.log('Can\'t load the scene ' + sceneURL);
|
||||
});
|
||||
|
||||
return app;
|
||||
}
|
||||
|
||||
function createCustomPreloader(updateCb, finishCb) {
|
||||
function CustomPreloader() {
|
||||
v3d.Preloader.call(this);
|
||||
}
|
||||
|
||||
CustomPreloader.prototype = Object.assign(Object.create(v3d.Preloader.prototype), {
|
||||
onUpdate: function(percentage) {
|
||||
v3d.Preloader.prototype.onUpdate.call(this, percentage);
|
||||
if (updateCb) updateCb(percentage);
|
||||
},
|
||||
onFinish: function() {
|
||||
v3d.Preloader.prototype.onFinish.call(this);
|
||||
if (finishCb) finishCb();
|
||||
}
|
||||
});
|
||||
|
||||
return new CustomPreloader();
|
||||
}
|
||||
|
||||
function initFullScreen() {
|
||||
|
||||
var fsButton = document.getElementById('fullscreen_button');
|
||||
if (!fsButton) return;
|
||||
|
||||
if (document.fullscreenEnabled ||
|
||||
document.webkitFullscreenEnabled ||
|
||||
document.mozFullScreenEnabled ||
|
||||
document.msFullscreenEnabled)
|
||||
fullscreen_button.style.display = 'inline';
|
||||
|
||||
fullscreen_button.addEventListener('click', function(event) {
|
||||
event.stopPropagation();
|
||||
if (document.fullscreenElement ||
|
||||
document.webkitFullscreenElement ||
|
||||
document.mozFullScreenElement ||
|
||||
document.msFullscreenElement) {
|
||||
exitFullscreen();
|
||||
} else
|
||||
requestFullscreen(document.body);
|
||||
});
|
||||
|
||||
function changeFullscreen() {
|
||||
if (document.fullscreenElement ||
|
||||
document.webkitFullscreenElement ||
|
||||
document.mozFullScreenElement ||
|
||||
document.msFullscreenElement)
|
||||
fullscreen_button.className = 'fullscreen-close';
|
||||
else
|
||||
fullscreen_button.className = 'fullscreen-open';
|
||||
}
|
||||
|
||||
document.addEventListener('webkitfullscreenchange', changeFullscreen);
|
||||
document.addEventListener('mozfullscreenchange', changeFullscreen);
|
||||
document.addEventListener('msfullscreenchange', changeFullscreen);
|
||||
document.addEventListener('fullscreenchange', changeFullscreen);
|
||||
|
||||
function requestFullscreen(elem) {
|
||||
if (elem.requestFullscreen)
|
||||
elem.requestFullscreen();
|
||||
else if (elem.mozRequestFullScreen)
|
||||
elem.mozRequestFullScreen();
|
||||
else if (elem.webkitRequestFullscreen)
|
||||
elem.webkitRequestFullscreen();
|
||||
else if (elem.msRequestFullscreen)
|
||||
elem.msRequestFullscreen();
|
||||
}
|
||||
|
||||
function exitFullscreen() {
|
||||
if (document.exitFullscreen)
|
||||
document.exitFullscreen();
|
||||
else if (document.mozCancelFullScreen)
|
||||
document.mozCancelFullScreen();
|
||||
else if (document.webkitExitFullscreen)
|
||||
document.webkitExitFullscreen();
|
||||
else if (document.msExitFullscreen)
|
||||
document.msExitFullscreen();
|
||||
}
|
||||
}
|
||||
|
||||
function prepareExternalInterface(app) {
|
||||
// register functions in the app.ExternalInterface to call them from Puzzles, e.g:
|
||||
// app.ExternalInterface.myJSFunction = function() {
|
||||
// console.log('Hello, World!');
|
||||
// }
|
||||
app.ExternalInterface.startVideo = function(){
|
||||
console.log("Yo");
|
||||
//$( "#background" ).append('<iframe id="youtubeframe" width="100%" height="100%" src="https://www.youtube.com/embed/31EP42tR1ao?autoplay=1&mute=1&controls=0&showinfo=0&autohide=1" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function runCode(app) {
|
||||
// add your code here, e.g. console.log('Hello, World!');
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user