some memory savings in beat-loader.js

This commit is contained in:
Kevin Ngo
2018-10-02 05:15:56 -07:00
parent df87763e6f
commit 738a90d688

View File

@@ -5,10 +5,10 @@ var utils = require('../utils');
*/
AFRAME.registerComponent('beat-loader', {
schema: {
challengeId: {type: 'string'},
difficulty: {type: 'string'},
beatAnticipationTime: {default: 2.0},
beatSpeed: {default: 4.0},
beatAnticipationTime: {default: 2.0}
challengeId: {type: 'string'},
difficulty: {type: 'string'}
},
orientations: [180, 0, 270, 90, 225, 135, 315, 45, 0],
@@ -55,6 +55,7 @@ AFRAME.registerComponent('beat-loader', {
tick: function (time, delta) {
var audioEl = this.el.components.song.audio;
var i;
var notes;
var obstacles;
var lastTime = this.lastTime || 0;
@@ -67,60 +68,68 @@ AFRAME.registerComponent('beat-loader', {
obstacles = this.beatData._obstacles;
this.bpm = this.beatData._beatsPerMinute;
msPerBeat = 1000 * 60 / this.beatData._beatsPerMinute;
for (i=0; i < notes.length; ++i) {
for (i = 0; i < notes.length; ++i) {
noteTime = notes[i]._time * msPerBeat;
if (noteTime > lastTime && noteTime <= lastTime + delta) {
notes[i].time = noteTime;
this.generateBeat(notes[i]);
}
}
}
for (i=0; i < obstacles.length; ++i) {
noteTime = obstacles[i]._time * msPerBeat;
if (noteTime > lastTime && noteTime <= lastTime + delta) {
// this.generateWall(obstacles[i]);
}
}
}
this.lastTime = lastTime + delta;
// Sync audio with first element.
if (this.audioSync || !this.first) { return; }
if (this.first.el.object3D.position.z < this.el.sceneEl.camera.el.object3D.position.z) { return; }
if (this.first.el.object3D.position.z < this.el.sceneEl.camera.el.object3D.position.z) {
return;
}
this.audioSync = true;
this.el.components.song.audio.currentTime = this.first.time;
},
generateBeat: function (noteInfo) {
var color;
var orientation;
var el;
var type = noteInfo._cutDirection === 8 ? 'dot' : 'arrow';
color = noteInfo._type === 0 ? 'red' : 'blue';
if (noteInfo._type === 3) {
type = 'mine';
color = undefined;
}
el = this.requestBeat(type, color);
if (!el) { return; }
el.setAttribute('beat', {
color: color,
type: type,
speed: this.data.beatSpeed});
el.object3D.position.set(
this.horizontalPositions[noteInfo._lineIndex],
this.verticalPositions[noteInfo._lineLayer],
-this.data.beatAnticipationTime * this.data.beatSpeed
);
el.setAttribute('rotation', {x: 0, y: 0, z: this.orientations[noteInfo._cutDirection]});
el.play();
if (this.first) { return; }
this.first = {
el: el,
time: noteInfo._time
generateBeat: (function () {
const beatObj = {};
return function (noteInfo) {
var color;
var orientation;
var el;
var type = noteInfo._cutDirection === 8 ? 'dot' : 'arrow';
color = noteInfo._type === 0 ? 'red' : 'blue';
if (noteInfo._type === 3) {
type = 'mine';
color = undefined;
}
el = this.requestBeat(type, color);
if (!el) { return; }
beatObj.color = color;
beatObj.type = type;
beatObj.speed = this.data.beatSpeed;
el.setAttribute('beat', beatObj);
el.object3D.position.set(
this.horizontalPositions[noteInfo._lineIndex],
this.verticalPositions[noteInfo._lineLayer],
-this.data.beatAnticipationTime * this.data.beatSpeed
);
el.object3D.rotation.z = THREE.Math.degToRad(this.orientations[noteInfo._cutDirection]);
el.play();
if (this.first) { return; }
this.first = {
el: el,
time: noteInfo._time
};
};
},
})(),
// generateWall: function (wallInfo) {
// var el = this.el.sceneEl.components.pool__wall.requestEntity();
@@ -144,11 +153,11 @@ AFRAME.registerComponent('beat-loader', {
// time: wallInfo._time
// };
// },
requestBeat: function (type, color) {
var beatPoolName = 'pool__beat-' + type;
var pool;
if (color) {beatPoolName += '-' + color; }
if (color) {beatPoolName += '-' + color; }
pool = this.el.sceneEl.components[beatPoolName];
if (!pool) {
console.warn('Poo ' + beatPoolName + ' unavailable');
@@ -167,5 +176,3 @@ function updateQueryParam(uri, key, value) {
return uri + separator + key + '=' + value;
}
}