Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/systems/camera.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,15 @@ module.exports.System = registerSystem('camera', {
cameraEls = sceneEl.querySelectorAll('[camera]');
for (i = 0; i < cameraEls.length; i++) {
cameraEl = cameraEls[i];
if (newCameraEl === cameraEl) { continue; }
if (isMixin(cameraEl) || newCameraEl === cameraEl) { continue; }
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can do !cameraEl.isEntity

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will it return true for primitives also?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah.

cameraEl.setAttribute('camera', 'active', false);
cameraEl.pause();
}
sceneEl.emit('camera-set-active', {cameraEl: newCameraEl});

function isMixin (el) {
return el.tagName === 'A-MIXIN';
}
}
});

Expand Down
55 changes: 54 additions & 1 deletion tests/systems/camera.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* global assert, process, setup, suite, test */
/* global assert, process, setup, suite, test, sinon */
var entityFactory = require('../helpers').entityFactory;

suite('camera system', function () {
Expand Down Expand Up @@ -52,6 +52,59 @@ suite('camera system', function () {
assert.equal(el.sceneEl.camera, el.components.camera.camera);
});

test('does not get affected by mixins', function (done) {
var sceneEl = this.el.sceneEl;
var assetsEl = document.querySelector('a-assets');
var cameraEl = document.createElement('a-entity');
var mixin = document.createElement('a-mixin');
var cameraSystem = sceneEl.systems.camera;
sinon.spy(cameraSystem, 'setActiveCamera');

cameraEl.setAttribute('camera', '');
mixin.setAttribute('camera', '');

assetsEl.appendChild(mixin);
mixin.addEventListener('loaded', function () {
assert.ok(cameraSystem.setActiveCamera.notCalled);
sceneEl.appendChild(cameraEl);
cameraEl.addEventListener('loaded', function () {
assert.ok(cameraEl.getAttribute('camera').active);
assert.ok(cameraSystem.setActiveCamera.calledOnce);
assert.equal(cameraSystem.activeCameraEl, cameraEl);
cameraSystem.setActiveCamera.reset();
done();
});
});
});

test('does not switch active camera to a mixin', function (done) {
var sceneEl = this.el.sceneEl;
var assetsEl = document.querySelector('a-assets');
var cameraEl = document.createElement('a-entity');
var mixin = document.createElement('a-mixin');
var cameraSystem = sceneEl.systems.camera;
sinon.spy(cameraSystem, 'setActiveCamera');

cameraEl.setAttribute('camera', '');
mixin.setAttribute('camera', '');

sceneEl.appendChild(cameraEl);
cameraEl.addEventListener('loaded', function () {
assert.ok(cameraEl.getAttribute('camera').active);
assert.ok(cameraSystem.setActiveCamera.calledOnce);
assert.equal(cameraSystem.activeCameraEl, cameraEl);

assetsEl.appendChild(mixin);
mixin.addEventListener('loaded', function () {
assert.ok(cameraEl.getAttribute('camera').active);
assert.ok(cameraSystem.setActiveCamera.calledOnce);
assert.equal(cameraSystem.activeCameraEl, cameraEl);
cameraSystem.setActiveCamera.reset();
done();
});
});
});

test('switches active camera', function (done) {
var sceneEl = this.el.sceneEl;
var camera1El = document.createElement('a-entity');
Expand Down