(function () { 'use strict'; // init device resolutions var devices = [ { name: 'Apple iPhone 5', width: 320, height: 568, ratio: 2 }, { name: 'Apple iPhone 6', width: 375, height: 667, ratio: 2 }, { name: 'Apple iPhone 6 Plus', width: 414, height: 736, ratio: 3 }, { name: 'Apple iPhone 7', width: 375, height: 667, ratio: 2 }, { name: 'Apple iPhone 7 Plus', width: 414, height: 736, ratio: 3 }, { name: 'Apple iPhone X', width: 375, height: 812, ratio: 3 }, { name: 'Apple iPad', width: 1024, height: 768, ratio: 2 }, { name: 'Apple iPad Air 2', width: 768, height: 1024, ratio: 2 }, { name: 'Apple iPad Pro 10.5-inch', width: 834, height: 1112, ratio: 2 }, { name: 'Apple iPad Pro 12.9-inch', width: 1024, height: 1366, ratio: 2 }, { name: 'Huawei P9', width: 540, height: 960, ratio: 2 }, { name: 'Huawei Mate9 Pro', width: 720, height: 1280, ratio: 2 }, { name: 'Google Nexus 5', width: 360, height: 640, ratio: 3 }, { name: 'Google Nexus 5X', width: 411, height: 731, ratio: 2.625 }, { name: 'Google Nexus 6', width: 412, height: 732, ratio: 3.5 }, { name: 'Google Nexus 7', width: 960, height: 600, ratio: 2 }, ]; function setCSSChecked (element, checked) { if (checked) { element.classList.add('checked'); } else { element.classList.remove('checked'); } return checked; } function refreshPauseBtnState () { if (cc.game.isPaused()) { btnPause.style.borderTopRightRadius = '0'; btnPause.style.borderBottomRightRadius = '0'; btnStep.style.borderTopLeftRadius = '0'; btnStep.style.borderBottomLeftRadius = '0'; btnStep.style.display = ''; setCSSChecked(btnPause, true); } else { btnPause.style.borderTopRightRadius = ''; btnPause.style.borderBottomRightRadius = ''; btnStep.style.borderTopLeftRadius = ''; btnStep.style.borderBottomLeftRadius = ''; btnStep.style.display = 'none'; setCSSChecked(btnPause, false); } } var isMobile = function () { var check = false; (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))check = true;})(navigator.userAgent||navigator.vendor||window.opera); return check; }; // init toolbar // ======================= var designWidth = _CCSettings.designWidth; var designHeight = _CCSettings.designHeight; var rotated = false; // var paused = false; var canvas = document.getElementById('GameCanvas'); var btnRotate = document.getElementById('btn-rotate'); var optsDevice = document.getElementById('opts-device'); var btnPause = document.getElementById('btn-pause'); var btnStep = document.getElementById('btn-step'); var optsDebugMode = document.getElementById('opts-debug-mode'); var btnShowFPS = document.getElementById('btn-show-fps'); var inputSetFPS = document.getElementById('input-set-fps'); var btnRecompile = document.getElementById('btn-recompile'); devices.forEach( function ( info, idx ) { var opt = document.createElement('option'); opt.value = idx+1; opt.text = info.name; optsDevice.add( opt, null ); }); // coockie // ======================= function setCookie (name, value, days) { days = days || 30; //cookie will be saved for 30 days var expires = new Date(); expires.setTime(expires.getTime() + days*24*60*60*1000); document.cookie = name + '='+ encodeURIComponent(value) + ';expires=' + expires.toGMTString(); } function getCookie (name) { var arr = document.cookie.match(new RegExp('(^| )' + name + '=([^;]*)(;|$)')); if(arr !== null) return (arr[2]); return null; } function isFullScreen () { var toolbar = document.getElementsByClassName('toolbar')[0]; return getComputedStyle(toolbar).display === 'none'; } function getEmulatedScreenSize () { var w, h; var idx = optsDevice.value; if ( idx === '0' ) { w = designWidth; h = designHeight; } else { var info = devices[parseInt(idx) - 1]; w = info.width; h = info.height; } return { width: rotated ? h : w, height: rotated ? w : h }; } function showSplash () { var size = isFullScreen() ? document.documentElement.getBoundingClientRect() : getEmulatedScreenSize(); var splash = document.getElementById('splash'); var progressBar = splash.querySelector('.progress-bar span'); splash.style.display = 'block'; progressBar.style.width = '0%'; var div = document.getElementById('GameDiv'); if (div) { div.style.visibility = 'visible'; } if ( !isMobile() ) { // make the splash screen in center canvas.width = size.width; canvas.height = size.height; } } function expoOut(t, b, c, d) { return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b; } // init options function initPreviewOptions () { var defaultDevice = getCookie('device'); var defaultRotate = getCookie('rotate'); var hasDefaultDevice = defaultDevice !== null; var hasDefaultRotate = defaultRotate !== null; if (hasDefaultDevice) { optsDevice.value = parseInt(defaultDevice); } if (hasDefaultRotate && defaultRotate === 'true') { rotated = !rotated; setCSSChecked(btnRotate, rotated); } optsDebugMode.value = getCookie('debugMode') || '1'; setCSSChecked(btnShowFPS, getCookie('showFPS') === 'true'); inputSetFPS.value = '60'; showSplash(); } initPreviewOptions(); window.onload = function () { if (window.__quick_compile_engine__) { window.__quick_compile_engine__.load(onload); } else { onload(); } }; function onload () { // socket // ======================= // jshint camelcase:false var socket = window.__socket_io__(); socket.on('browser:reload', function () { window.location.reload(); }); socket.on('browser:confirm-reload', function () { var r = confirm( 'Reload?' ); if ( r ) { window.location.reload(); } }); function updateResolution () { var size = isFullScreen() ? document.documentElement.getBoundingClientRect() : getEmulatedScreenSize(); var gameDiv = document.getElementById('GameDiv'); gameDiv.style.width = size.width + 'px'; gameDiv.style.height = size.height + 'px'; cc.view.setCanvasSize(size.width, size.height); } // init rotate button btnRotate.addEventListener('click', function () { rotated = !rotated; setCSSChecked(btnRotate, rotated); setCookie('rotate', rotated.toString()); updateResolution(); }); optsDevice.addEventListener( 'change', function () { var idx = optsDevice.value; setCookie('device', idx.toString()); updateResolution(); }); // init debug modes optsDebugMode.addEventListener('change', function (event) { var value = event.target.value; setCookie('debugMode', value); cc.debug._resetDebugSetting(parseInt(value)); }); // init pause button btnPause.addEventListener('click', function () { var shouldPause = !cc.game.isPaused(); if (shouldPause) { cc.game.pause(); } else { cc.game.resume(); } refreshPauseBtnState(); }); // init recompile button btnRecompile.addEventListener('click', function () { var url = window.location.href + 'update-db'; var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState === 4 && xmlHttp.status === 200) { document.getElementById('recompiling').style.display = 'block'; } }; xmlHttp.open("GET", url, true); // true for asynchronous xmlHttp.send(null); }); // init step button btnStep.addEventListener('click', function () { cc.game.step(); }); // init show fps, true by default btnShowFPS.addEventListener('click', function () { var show = !cc.debug.isDisplayStats(); cc.debug.setDisplayStats(show); setCSSChecked(btnShowFPS, show); setCookie('showFPS', show.toString()); }); // init set fps inputSetFPS.addEventListener('change', function (event) { var fps = parseInt(inputSetFPS.value); if (isNaN(fps)) { fps = 60; inputSetFPS.value = fps.toString(); } cc.game.setFrameRate(fps); }); // init engine // ======================= var engineInited = false; if (isFullScreen()) { window.addEventListener('resize', updateResolution); } var showFPS = getCookie('showFPS'); // FPS is on by default showFPS = showFPS === null ? true : showFPS === 'true'; var onStart = function () { // resize canvas if (!isFullScreen()) { updateResolution(); } cc.view.enableRetina(true); cc.view.resizeWithBrowserSize(true); // Loading splash scene var splash = document.getElementById('splash'); var progressBar = splash.querySelector('.progress-bar span'); showSplash(); cc.director.once("EVENT_AFTER_SCENE_READY", function () { splash.style.display = 'none'; checkEmptyScene(); }); cc.game.pause(); // init assets engineInited = true; cc.assetManager.loadAny({url: 'preview-scene.json', __isNative__: false }, null, function (finish, totalCount) { var percent = expoOut(finish, 0, 100, totalCount) / 2; if (progressBar) { progressBar.style.width = percent.toFixed(2) + '%'; } }, function (err, sceneAsset) { if (err) { console.error(err.message, err.stack); return; } var scene = sceneAsset.scene; scene._name = sceneAsset._name; // HACK: Change key to uuid from url cc.assetManager.dependUtil._depends.add(scene._id, cc.assetManager.dependUtil._depends.get('preview-scene.json')); cc.director.runSceneImmediate(scene, function () { // play game cc.game.resume(); if(scene._name!="Demo" && scene._name.substring(0,4)!="Slot"){ cc.director.once(cc.Director.EVENT_AFTER_SCENE_LAUNCH, function () { cc.director.emit('EVENT_AFTER_SCENE_READY'); }); } }); }); // purge //noinspection JSUnresolvedVariable _CCSettings = undefined; }; var option = { id: canvas, debugMode: parseInt(optsDebugMode.value), showFPS: showFPS, frameRate: parseInt(inputSetFPS.value), groupList: _CCSettings.groupList, collisionMatrix: _CCSettings.collisionMatrix, }; cc.assetManager.init({ importBase: 'assets/others/import', nativeBase: 'assets/others/native' }); var RESOURCES = cc.AssetManager.BuiltinBundleName.RESOURCES; var INTERNAL = cc.AssetManager.BuiltinBundleName.INTERNAL; var MAIN = cc.AssetManager.BuiltinBundleName.MAIN; var bundleRoot = [INTERNAL]; _CCSettings.hasResourcesBundle && bundleRoot.push(RESOURCES); var count = 0; function cb (err) { if (err) return console.error(err); count++; if (count === bundleRoot.length + 1) { cc.assetManager.loadBundle(MAIN, function (err) { if (!err) cc.game.run(option, onStart); }); } } // load plugins cc.assetManager.loadScript(_CCSettings.jsList.map(function (x) { return '/plugins/' + x; }), cb); // load bundles for (var i = 0; i < bundleRoot.length; i++) { cc.assetManager.loadBundle(bundleRoot[i], cb); } }; function checkEmptyScene () { var scene = cc.director.getScene(); if (scene) { if (scene.children.length > 1) { return; } if (scene.children.length === 1) { var node = scene.children[0]; if (node.children.length > 0) { return; } if (node._components.length > 1) { return; } if (node._components.length > 0 && !(node._components[0] instanceof cc.Canvas)) { return; } } } document.getElementById('bulletin').style.display = 'block'; document.getElementById('sceneIsEmpty').style.display = 'block'; } })();