Skip to content

Commit cb348ec

Browse files
ngokevindmarcos
authored andcommitted
batch the raycaster intersection cleared events on the raycaster el (#3126)
1 parent 6cdf694 commit cb348ec

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

‎src/components/raycaster.js‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ module.exports.Component = registerComponent('raycaster', {
5151
init: function () {
5252
// Calculate unit vector for line direction. Can be multiplied via scalar to performantly
5353
// adjust line length.
54+
this.clearedIntersectedEls = [];
5455
this.lineData = {};
5556
this.lineEndVec3 = new THREE.Vector3();
5657
this.unitLineEndVec3 = new THREE.Vector3();
@@ -155,6 +156,7 @@ module.exports.Component = registerComponent('raycaster', {
155156
var intersections = [];
156157

157158
return function (time) {
159+
var clearedIntersectedEls = this.clearedIntersectedEls;
158160
var el = this.el;
159161
var data = this.data;
160162
var i;
@@ -216,11 +218,13 @@ module.exports.Component = registerComponent('raycaster', {
216218
}
217219

218220
// Emit intersection cleared on both entities per formerly intersected entity.
221+
clearedIntersectedEls.length = 0;
219222
for (i = 0; i < prevIntersectedEls.length; i++) {
220223
if (intersectedEls.indexOf(prevIntersectedEls[i]) !== -1) { return; }
221-
el.emit('raycaster-intersection-cleared', {el: prevIntersectedEls[i]});
222224
prevIntersectedEls[i].emit('raycaster-intersected-cleared', {el: el});
225+
clearedIntersectedEls.push(prevIntersectedEls[i]);
223226
}
227+
if (clearedIntersectedEls.length) { el.emit('raycaster-intersection-cleared'); }
224228

225229
// Update line length.
226230
if (data.showLine) {

‎tests/components/raycaster.test.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ suite('raycaster', function () {
232232
// Point raycaster somewhere else.
233233
raycasterEl.setAttribute('rotation', '90 0 0');
234234
raycasterEl.addEventListener('raycaster-intersection-cleared', function (evt) {
235-
assert.equal(evt.detail.el, targetEl);
235+
assert.notEqual(component.clearedIntersectedEls.indexOf(targetEl), -1);
236236
done();
237237
});
238238
component.tick();

0 commit comments

Comments
 (0)