3d-interface/js/l3d/src/scenes/initScene.js

825 lines
27 KiB
JavaScript

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, coinIds) {
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) ? totalCoins.length : 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;
};