43 lines
1.0 KiB
JavaScript
43 lines
1.0 KiB
JavaScript
var ONCE = {once: true};
|
|
|
|
/**
|
|
* Delay logo light so it only applies to the logo.
|
|
*/
|
|
AFRAME.registerComponent('logo-light', {
|
|
init: function () {
|
|
this.logoBack = document.getElementById('logoBack');
|
|
this.logoFront = document.getElementById('logoFront');
|
|
this.logoFrontU = document.getElementById('logoFrontU');
|
|
},
|
|
|
|
play: function () {
|
|
setTimeout(() => {
|
|
this.el.setAttribute('light', {
|
|
type: 'spot',
|
|
penumbra: 1,
|
|
intensity: 5,
|
|
angle: 20
|
|
});
|
|
this.waitAndUpdate(this.logoBack);
|
|
this.waitAndUpdate(this.logoFront);
|
|
this.waitAndUpdate(this.logoFrontU);
|
|
}, 1000);
|
|
},
|
|
|
|
waitAndUpdate: function (el) {
|
|
if (el.getObject3D('mesh')) {
|
|
el.object3D.traverse(this.updateMaterials);
|
|
} else {
|
|
el.addEventListener('model-loaded', () => {
|
|
el.object3D.traverse(this.updateMaterials);
|
|
}, ONCE);
|
|
}
|
|
},
|
|
|
|
updateMaterials: function (node) {
|
|
if (node.material) {
|
|
node.material.needsUpdate = true;
|
|
}
|
|
}
|
|
});
|