var Reco = (typeof Recommendation !== 'undefined' ? Recommendation : L3D.BaseRecommendation); var Recommendation = Reco; L3D.LogFunction = function(a,b) { var val = 100*a/b; $('.progress-bar').css('width', val+'%').attr('aria-valuenow', val); $('#percentage').html(Math.floor(10*val)/10 + '%'); if (a === b) { setTimeout(function() {$('.progress').hide(1000);}, 1000); } }; L3D.addLight = function(scene) { var directionalLight = new THREE.DirectionalLight(0x777777); directionalLight.position.set(1, 1, 0).normalize(); directionalLight.castShadow = false; scene.add(directionalLight); var ambientLight = new THREE.AmbientLight(0xbbbbbb); scene.add(ambientLight); }; L3D.initPeachCastle = function(scene, collidableObjects, recommendation, clickable) { var loader = new L3D.ProgressiveLoader( '/static/data/castle/princess peaches castle (outside).obj', scene, recommendation, function(object) { if (clickable !== undefined) clickable.push(object); object.raycastable = true; if (object.material.name === 'Material.103_princess_peaches_cast') { THREEx.Transparency.push(object); } else if (object.material.name === 'Material.136_princess_peaches_cast' || object.material.name === 'Material.135_princess_peaches_cast') { THREEx.Transparency.push(object); object.material.opacity = 0.5; object.raycastable = false; object.material.side = THREE.FrontSide; } }, L3D.LogFunction ); loader.load(); collidableObjects.push(loader.obj); loader.obj.raycastable = true; }; L3D.resetPeachElements = function() { return { position: new THREE.Vector3(0.24120226734236713,0.2009624547018851,-0.5998422840047036), target: new THREE.Vector3(0.24120226734232672,0.20096245470190008,-40.5998422840047) }; }; L3D.initPeach = function(camera, scene, coins, clickable, coinIds) { L3D.addLight(scene); var collidableObjects = []; L3D.initPeachCastle(scene, collidableObjects, camera, clickable); camera.resetElements = L3D.resetPeachElements(); camera.collidableObjects = collidableObjects; camera.speed = 0.001; camera.reset(); camera.save(); scene.add(camera); var tmp = L3D.generateCoins(L3D.createPeachCoins(), coinIds); for (var i in tmp) { coins.push(tmp[i]); } setTimeout(function() { coins.forEach(function(coin) { coin.addToScene(scene); });}, 1000); Coin.init(0.001); var recommendations = []; return recommendations; }; L3D.initZeldaScene = function(scene, collidableObjects, loader) { // Create loader if not already done if (loader === undefined) { loader = new THREE.OBJMTLLoader(); } loader.load( '/static/data/zelda/Island.obj', '/static/data/zelda/Island.mtl', function ( object ) { collidableObjects.push(object); object.scale.set(0.01,0.01,0.01); object.traverse(function (object) { if (object instanceof THREE.Mesh) { object.geometry.mergeVertices(); object.geometry.computeVertexNormals(); object.material.side = THREE.DoubleSide; object.raycastable = true; if (object.material.name === 'm0') { THREEx.Transparency.push(object); } } }); } ); }; L3D.createPeachRecommendations = function(width, height, rec) { var recos = []; var Reco = rec !== undefined ? rec : (typeof Recommendation !== 'undefined' ? Recommendation : L3D.BaseRecommendation); var createRecommendation = function(position, target) { return new Reco( 50, width / height, 1, 100000, position, target ); }; recos.push( createRecommendation( new THREE.Vector3(-4.318087280217455,2.8007613084859253,1.5193437897009336), new THREE.Vector3(19.04561491034525,-11.893857635144567,-27.432436709124897) ), createRecommendation( new THREE.Vector3(-6.257935852456958,2.093463399444844,-7.017904350052701), new THREE.Vector3(25.88235261144178,-14.928107421416371,-23.669270187358173) ), createRecommendation( new THREE.Vector3(9.807915641060413,1.599662719763407,1.3278972044453563), new THREE.Vector3(-16.404678696813406,-19.467671402046243,-20.330065097629618) ), createRecommendation( new THREE.Vector3(8.593027849546461,2.341563400341173,-10.381814971692629), new THREE.Vector3(-23.363783342561,-18.42997444113019,1.755130036517576) ), createRecommendation( new THREE.Vector3(6.422879729593868,3.06821771913114,-4.664407524854438), new THREE.Vector3(-15.171947266786782,-24.05662912371069,-24.6119921091785) ), createRecommendation( new THREE.Vector3(10.155340138717236,6.631665534350463,-5.574670324070963), new THREE.Vector3(-20.721131232754608,-9.966488352174423,-24.839789145555535) ), createRecommendation( new THREE.Vector3(-6.548087435820877,6.193523907010158,-3.627483164733988), new THREE.Vector3(16.752484674681824,-11.466024392567634,-30.926268727065203) ) ); recos.forEach(function(reco) {reco.setSize(0.2);}); return recos; }; L3D.initBobombScene = function(scene, collidableObjects, recommendation, clickable) { var loader = new L3D.ProgressiveLoader( '/static/data/bobomb/bobomb battlefeild_sub.obj', scene, recommendation, function(object) { if (clickable !== undefined) clickable.push(object); object.raycastable = true; if (object.material.name === 'Material.071_574B138E_c.bmp' || object.material.name === 'Material.070_41A41EE3_c.bmp') { THREEx.Transparency.push(object); } }, L3D.LogFunction, false, prefetch ); loader.load(); // var theta = 0.27; // loader.obj.rotation.y = Math.PI - theta; loader.obj.up = new THREE.Vector3(0,0,1); collidableObjects.push(loader.obj); }; L3D.resetBobombElements = function() { return { position: new THREE.Vector3(38.115627509754646,10.829803024792419,-19.862035691341315), target: new THREE.Vector3(-1.4518898576752122,5.048214777643772,-18.869661407832535) }; }; L3D.generateCoins = function(totalCoins, coinConfig) { // return []; if (coinConfig === undefined) { return []; } switch (coinConfig.type) { case Coin.Config.SOME: return coinConfig.ids; case Coin.Config.ALL: return []; case Coin.Config.NONE: return []; } var i = 0; var tmp = []; if (coinIds === undefined) { tmp = []; // Use global variable coinsId set by server for (i = 0; i < totalCoins.length; i++) { tmp.push(totalCoins[i]); } totalCoins.length = 0; for (i = 0; i < 8; i++) { totalCoins.push(tmp[coinsId[i]]); } } else if (coinIds === null) { return []; } else { for (i = 0; i < coinIds.length; i++) { for (var j = 0; j < totalCoins.length; j++) { if (coinIds[i] === totalCoins[j].id) { // Swap i and j tmp = totalCoins[i]; totalCoins[i] = totalCoins[j]; totalCoins[j] = tmp; } } } } var indices = []; var coins = []; var bound = (coinIds instanceof Array && coinIds.length === 0) ? 0 : 8; for (i = 0; i < bound; i++) { coins.push(totalCoins[i].coin); totalCoins[i].coin.id = totalCoins[i].id; indices.push(totalCoins[i].id); } return coins; }; L3D.createBobombRecommendations = function(width, height) { var recos = []; var createRecommendation = function(position, target) { return new Recommendation( 50, width / height, 1, 100000, position, target ); }; recos.push( createRecommendation( new THREE.Vector3(22.81974561274774,23.728166674516967,-23.50757340835654), new THREE.Vector3(27.45807332015761,4.665400463440239,11.350666083340474) ), createRecommendation( new THREE.Vector3(4.512241856806823,19.542184465749266,-21.6277607809511), new THREE.Vector3(-16.322542559288507,6.552211144388629,9.95027512132075) ), createRecommendation( new THREE.Vector3(3.7236872166568786,11.547542009941035,7.743737673292326), new THREE.Vector3(11.778234958188895,3.590700880634021,46.107951987185814) ), createRecommendation( new THREE.Vector3(17.51280189401515,22.651733665113007,32.1344270612909), new THREE.Vector3(-17.09689080040822,6.202382514300329,20.663244981189692) ), createRecommendation( new THREE.Vector3(-12.00887621348721,25.979463024729398,37.05007506157123), new THREE.Vector3(-6.018501236275041,9.054329353511584,1.3057712098552159) ), createRecommendation( new THREE.Vector3(-9.467050533255307,30.088761873923442,28.727671886170505), new THREE.Vector3(-39.96888839418932,10.735797300746938,11.549178083317258) ), createRecommendation( new THREE.Vector3(-30.2051081707108,44.36298906887656,35.77746943907231), new THREE.Vector3(-16.54652438711394,19.924260316887796,7.208401795672) ), createRecommendation( new THREE.Vector3(-52.44058113318328,27.688845222097196,28.78379753054363), new THREE.Vector3(-21.760754138048632,11.37128676599093,8.972550684871294) ), createRecommendation( new THREE.Vector3(-32.51800140864256,30.21720398723899,-2.2695677339908484), new THREE.Vector3(-4.161205509090522,12.002869652965245,-23.813247806588592) ), createRecommendation( new THREE.Vector3(-24.869080810307878,24.29489455015078,-48.36061039882109), new THREE.Vector3(-16.792809571743753,4.99108388972596,-14.270483721620096) ), createRecommendation( new THREE.Vector3(24.213548666073923,19.67561630411922,-34.50857509027397), new THREE.Vector3(35.82557966946029,-3.7247748037464845,-4.21695195820471) ) ); return recos; }; L3D.initBobomb = function(camera, scene, coins, clickable, coinIds) { L3D.addLight(scene); var collidableObjects = []; L3D.initBobombScene(scene, collidableObjects, camera, clickable); camera.resetElements = L3D.resetBobombElements(); camera.collidableObjects = collidableObjects; camera.speed = 0.005; camera.reset(); camera.save(); scene.add(camera); Coin.init(); var tmp = L3D.generateCoins(L3D.createBobombCoins(), coinIds); for (var i in tmp) { coins.push(tmp[i]); } var recommendations = L3D.createBobombRecommendations(containerSize.width(), containerSize.height()); recommendations.forEach(function(reco) {reco.addToScene(scene);}); setTimeout(function() { coins.forEach(function(coin) { coin.addToScene(scene); });}, 1000); return recommendations; }; L3D.initWhompScene = function(scene, collidableObjects, recommendation, clickable) { var loader = new L3D.ProgressiveLoader( '/static/data/whomp/Whomps Fortress_sub.obj', scene, recommendation, function(object) { if (clickable !== undefined) clickable.push(object); object.raycastable = true; if (object.material.name === 'Shape_088' || object.material.name === 'Shape_089') { object.raycastable = false; THREEx.Transparency.push(object); } else if (object.material.name === 'Shape_113') { THREEx.Transparency.push(object); object.material.opacity = 0.5; } else if (object.material.name === 'Shape_076' || object.material.name === 'Shape_098' || object.material.name === 'Shape_092') { object.visible = false; } }, L3D.LogFunction, false, prefetch ); loader.load(); // loader.obj.rotation.x = -Math.PI/2; // loader.obj.rotation.z = Math.PI/2; // loader.obj.scale.set(0.1,0.1,0.1); // loader.getRecommendation = function() { // var ret = loader.recommendation.toList(); // ret[0][0] *= 10; // ret[0][1] *= 10; // ret[0][2] *= 10; // ret[1][0] *= 10; // ret[1][1] *= 10; // ret[1][2] *= 10; // // Planes // for (var i = 2; i < ret.length; i++) { // ret[i][3] *= 10; // } // return ret; // }; collidableObjects.push(loader.obj); loader.obj.raycastable = true; }; L3D.createWhompRecommendations = function(width, height) { var recos = []; var createRecommendation = function(position, target) { return new Recommendation( 50, width / height, 1, 100000, position, target ); }; recos.push( createRecommendation( new THREE.Vector3(-9.183036772081453,3.0766349039394916,-10.631680881366988), new THREE.Vector3(23.306020365359252,-17.647069934844886,0.09162197153512075) ), createRecommendation( new THREE.Vector3(-11.38099373489364,4.5301496570861906,-8.680448599715064), new THREE.Vector3(14.218919789700848,-9.33335658285769,18.75033014002037) ), createRecommendation( new THREE.Vector3(-2.989815984700766,4.808626217924975,-10.034026966216151), new THREE.Vector3(10.476586340125928,-16.676909597940817,20.90183828968142) ), createRecommendation( new THREE.Vector3(8.739544533019469,4.57426117700506,-10.246457362075027), new THREE.Vector3(-7.420839007222124,-3.599225856368915,25.419157921381895) ), createRecommendation( new THREE.Vector3(11.215995865644405,5.100092599462174,5.157320142222007), new THREE.Vector3(-17.739835597264776,-0.18398638725505378,-21.92843872759245) ), createRecommendation( new THREE.Vector3(-7.511384733151988,6.569117611729606,13.141669794236272), new THREE.Vector3(11.160164249947218,-9.709441800002363,-18.26504544391685) ), createRecommendation( new THREE.Vector3(0.6846182375474082,13.717750177060871,-3.878598405225172), new THREE.Vector3(14.749877291524962,-2.4709024675402205,29.886709431324352) ), createRecommendation( new THREE.Vector3(-5.628153398727744,10.292624364958618,-0.15423059405658932), new THREE.Vector3(21.830921092510273,-1.2953399806023977,26.523818630177338) ), createRecommendation( new THREE.Vector3(-3.2817952119549387,8.014848779391615,-6.822708271111021), new THREE.Vector3(13.01307852868053,-12.339101451861252,23.511988031315184) ), createRecommendation( new THREE.Vector3(7.805400745480024,9.185305503970957,11.919240783005307), new THREE.Vector3(-9.777424733344784,-5.603738432878275,-20.8241314870455) ) ); recos.forEach(function(reco) {reco.setSize(0.2);}); return recos; }; L3D.resetWhompElements = function() { return { position : new THREE.Vector3(-6.725817925071645,1.4993570618328055,-10.356480813212423), target : new THREE.Vector3(-4.8541705829784604,1.3192268872752742,-6.825972443720941) }; }; L3D.initWhomp = function(recommendation, scene, coins, clickable, coinIds) { L3D.addLight(scene); var collidableObjects = []; L3D.initWhompScene(scene, collidableObjects, recommendation, clickable); recommendation.resetElements = L3D.resetWhompElements(); recommendation.collidableObjects = collidableObjects; recommendation.speed = 0.002; recommendation.reset(); recommendation.save(); scene.add(recommendation); Coin.init(0.002); var tmp = L3D.generateCoins(L3D.createWhompCoins(), coinIds); for (var i in tmp) { coins.push(tmp[i]); } var recommendations = L3D.createWhompRecommendations(containerSize.width(), containerSize.height()); recommendations.forEach(function(reco) {reco.addToScene(scene);}); setTimeout(function() { coins.forEach(function(coin) { coin.addToScene(scene); });}, 1000); return recommendations; }; L3D.initMountainScene = function(scene, collidableObjects, recommendation, clickable) { var loader = new L3D.ProgressiveLoader( '/static/data/mountain/coocoolmountain_sub.obj', scene, recommendation, function(object) { // object.rotation.x = -Math.PI/2; // object.rotation.z = Math.PI/2; if (clickable !== undefined) clickable.push(object); object.raycastable = true; if (object.material.name === 'Material.070_13F025D5_c2.png' || object.material.name === 'Material.068_5972FC88_c.bmp' || object.material.name === 'Material.073_76F611AD_c.bmp' || object.material.name === 'Material.071_76F611AD_c.bmp' || object.material.name === 'Material.072_1723CCC7_c.bmp' || object.material.name === 'Material.069_78B64DC7_c.bmp' || object.material.name === 'Material.070_13F025D5_c.bmp' || object.material.name === 'Material.078_3165B23A_c.bmp' || object.material.name === 'Material.067_1723CCC7_c.bmp' || object.material.name === 'Material.066_36DB292F_c.bmp') { THREEx.Transparency.push(object); } else if (object.material.name === 'Material.082_6DAF90F6_c.bmp') { THREEx.Transparency.push(object); object.material.opacity = 0.5; } }, L3D.LogFunction, false, prefetch ); loader.load(); collidableObjects.push(loader.obj); }; L3D.createMountainRecommendations = function(width, height) { var recos = []; var createRecommendation = function(position, target) { return new Recommendation( 50, width / height, 1, 100000, position, target ); }; recos.push( createRecommendation( new THREE.Vector3(-32.55470573684094,29.55322138048939,-17.59574199842915), new THREE.Vector3(-2.6530082773148784,13.825746134447998,3.8176886333992925) ), createRecommendation( new THREE.Vector3(12.100158831224025,26.077021046580555,-23.46706423961512), new THREE.Vector3(-13.67308964482135,11.574392013301521,3.4664356093669397) ), createRecommendation( new THREE.Vector3(16.801072439731502,20.09189357317027,14.011145351254608), new THREE.Vector3(-13.195470192683612,-4.443428210365667,4.1002717732066145) ), createRecommendation( new THREE.Vector3(-16.879597154353956,28.027328987174787,23.2120994633039), new THREE.Vector3(-6.922498345966725,7.02598138495819,-9.342463691665415) ), createRecommendation( new THREE.Vector3(24.007103291390404,-10.579535956547192,-30.14734612569218), new THREE.Vector3(5.7117612503958135,-23.76440846717267,2.8895967789043198) ), createRecommendation( new THREE.Vector3(-12.257327932010769,-12.526038797341444,-36.05191812094985), new THREE.Vector3(0.19983861525745894,-20.375474197075437,1.1395508675026633) ), createRecommendation( new THREE.Vector3(16.426221516558684,4.064315972012067,-19.84262328062327), new THREE.Vector3(-16.71831968665397,-6.887503610208118,-0.3106741646994493) ), createRecommendation( new THREE.Vector3(44.96685545730114,-6.205815468014633,-0.5730193999373548), new THREE.Vector3(7.154826082461277,-13.661034435943513,10.135395267812534) ), createRecommendation( new THREE.Vector3(-33.00196818869413,20.41721604790279,38.566026084656386), new THREE.Vector3(-11.64931778228043,-1.846673249080439,13.102649364489118) ), createRecommendation( new THREE.Vector3(-53.183958472088925,-8.39869666868559,28.102017801758063), new THREE.Vector3(-15.679778341058253,-11.462793205152831,14.53559656716515) ), createRecommendation( new THREE.Vector3(27.528666741865862,-9.63536430265764,46.43021804402408), new THREE.Vector3(1.1519844626168592,-18.896564555304533,17.820765028981576) ) ); return recos; }; L3D.resetMountainElements = function() { return { position : new THREE.Vector3(-20.558328115300082,23.601312087942762,-10.220633604814038), target : new THREE.Vector3(11.025356711105232,11.969889531789319,11.393733425161644) }; }; L3D.initMountain = function(recommendation, scene, coins, clickable, coinIds) { L3D.addLight(scene); var collidableObjects = []; L3D.initMountainScene(scene, collidableObjects, recommendation, clickable); recommendation.resetElements = L3D.resetMountainElements(); recommendation.collidableObjects = collidableObjects; recommendation.speed = 0.005; recommendation.reset(); recommendation.save(); scene.add(recommendation); Coin.init(); var tmp = L3D.generateCoins(L3D.createMountainCoins(), coinIds); for (var i in tmp) { coins.push(tmp[i]); } var recommendations = L3D.createMountainRecommendations(containerSize.width(), containerSize.height()); recommendations.forEach(function(reco) {reco.addToScene(scene);}); setTimeout(function() { coins.forEach(function(coin) { coin.addToScene(scene); });}, 1000); return recommendations; }; L3D.initSponzaScene = function(scene, collidableObjects, recommendation, clickable) { var loader = new L3D.ProgressiveLoader( '/static/data/sponza/sponza.obj', scene, recommendation, function(obj) { if (clickable !== undefined) clickable.push(obj); if (obj.material.name === 'chain' || obj.material.name === 'leaf' || obj.material.name === 'Material__57') { THREEx.Transparency.push(obj); } obj.raycastable = true; }, L3D.LogFunction ); l = loader; loader.load(); // loader.getCamera = function() { // var ret = loader.camera.toList(); // ret[0][0] *= 10; // ret[0][1] *= 10; // ret[0][2] *= 10; // ret[1][0] *= 10; // ret[1][1] *= 10; // ret[1][2] *= 10; // // Planes // for (var i = 3; i < ret.length; i++) { // ret[i][3] *= 10; // } // return ret; // }; // loader.obj.scale.set(0.1,0.1,0.1); collidableObjects.push(loader.obj); loader.obj.raycastable = true; // ProgressiveLoader('/static/data/sponza/sponza.obj', scene, // function(obj) { // obj.scale.set(0.1,0.1,0.1); // collidableObjects.push(obj); // obj.raycastable = true; // if (obj.material.name === 'chain' || // obj.material.name === 'leaf' || // obj.material.name === 'Material__57') { // THREEx.Transparency.push(obj); // } // } // ); }; L3D.createSponzaRecommendations = function(width, height) { var createRecommendation = function(position, target) { return new Recommendation( 50, width / height, 1, 100000, position, target ); }; return [ // createRecommendation( // new THREE.Vector3(-2.591997650227227,4.652225309342689,-2.815524195264902), // new THREE.Vector3(-40.87987891143996,10.202406707437795,7.344871219063935) // ) // ,createRecommendation( // new THREE.Vector3(-20.507451191489245,1.7638914167988349,1.9557104822169127), // new THREE.Vector3(-58.90750279083062,7.314072814893941,-7.772163058087716) // ) // , // createRecommendation( // new THREE.Vector3(-23.383482289183434,14.264152490508069,-1.2119079930928534), // new THREE.Vector3(-1.7847952083517313,1.9364343472313017,30.117376738037517) // ), // createRecommendation( // new THREE.Vector3(2.327317420088316,0.3629147522258326,-0.3325792884643282), // new THREE.Vector3(1.3934131694970663,-0.8288981685786133,3.369771966148228) // ), // createRecommendation( // new THREE.Vector3(22.983553977938616,3.829033470023654,0.7135547783419287), // new THREE.Vector3(1.9041126108599506,-8.375131998286331,32.4423350397072) // ) // createRecommendation( // new THREE.Vector3(-12.939581055355553,3.796374966524073,-2.463006239142574), // new THREE.Vector3(-51.61901925503118,-1.1193807374029414,6.466518183623911) // ) createRecommendation( new THREE.Vector3(1.3571661176961554,4.934280286310308,-4.294700794239404), new THREE.Vector3(-31.49512083496389,15.286798072464663,16.04129235749628) ) ]; return [ createRecommendation( new THREE.Vector3(97.36225946503932,10.925697484337014,12.852363038244272), new THREE.Vector3(133.315101552449,18.576354168001703,-2.9229530646577633) ), createRecommendation( new THREE.Vector3(-110.4869853758238,17.692671522169423,14.022902297589127), new THREE.Vector3(-147.9067343700736,16.890814116754584,-0.08806541935797796) ) ]; }; L3D.createSponzaCoins = function() { return []; }; L3D.resetSponzaElements = function() { return { position: new THREE.Vector3(9.298373669520107,6.08877777990862,1.1130138641670737), target: new THREE.Vector3(5.376696417668598,5.609739213575453,0.4877382575136091) }; }; L3D.initSponza = function(recommendation, scene, coins, clickable) { L3D.addLight(scene); var collidableObjects = []; L3D.initSponzaScene(scene, collidableObjects, recommendation, clickable); recommendation.resetElements = L3D.resetSponzaElements(); recommendation.collidableObjects = collidableObjects; recommendation.speed = 0.005; recommendation.reset(); recommendation.save(); scene.add(recommendation); Coin.init(); var tmp = L3D.createSponzaCoins(); for (var i in tmp) { coins.push(tmp[i]); } var recommendations = L3D.createSponzaRecommendations(containerSize.width(), containerSize.height()); recommendations.forEach(function(reco) {reco.addToScene(scene);}); setTimeout(function() { coins.forEach(function(coin) { coin.addToScene(scene); });}, 1000); return recommendations; };