Skip to content

Commit bb10959

Browse files
authored
Merge pull request #3196 from delapuente/issue-3090-allow-camera-in-mixin
Make camera system aware of mixins.
2 parents 91e3e00 + 5cecc19 commit bb10959

File tree

2 files changed

+55
-2
lines changed

2 files changed

+55
-2
lines changed

src/systems/camera.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ module.exports.System = registerSystem('camera', {
100100
cameraEls = sceneEl.querySelectorAll('[camera]');
101101
for (i = 0; i < cameraEls.length; i++) {
102102
cameraEl = cameraEls[i];
103-
if (newCameraEl === cameraEl) { continue; }
103+
if (!cameraEl.isEntity || newCameraEl === cameraEl) { continue; }
104104
cameraEl.setAttribute('camera', 'active', false);
105105
cameraEl.pause();
106106
}

tests/systems/camera.test.js

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* global assert, process, setup, suite, test */
1+
/* global assert, process, setup, suite, test, sinon */
22
var entityFactory = require('../helpers').entityFactory;
33

44
suite('camera system', function () {
@@ -52,6 +52,59 @@ suite('camera system', function () {
5252
assert.equal(el.sceneEl.camera, el.components.camera.camera);
5353
});
5454

55+
test('does not get affected by mixins', function (done) {
56+
var sceneEl = this.el.sceneEl;
57+
var assetsEl = document.querySelector('a-assets');
58+
var cameraEl = document.createElement('a-entity');
59+
var mixin = document.createElement('a-mixin');
60+
var cameraSystem = sceneEl.systems.camera;
61+
sinon.spy(cameraSystem, 'setActiveCamera');
62+
63+
cameraEl.setAttribute('camera', '');
64+
mixin.setAttribute('camera', '');
65+
66+
assetsEl.appendChild(mixin);
67+
mixin.addEventListener('loaded', function () {
68+
assert.ok(cameraSystem.setActiveCamera.notCalled);
69+
sceneEl.appendChild(cameraEl);
70+
cameraEl.addEventListener('loaded', function () {
71+
assert.ok(cameraEl.getAttribute('camera').active);
72+
assert.ok(cameraSystem.setActiveCamera.calledOnce);
73+
assert.equal(cameraSystem.activeCameraEl, cameraEl);
74+
cameraSystem.setActiveCamera.reset();
75+
done();
76+
});
77+
});
78+
});
79+
80+
test('does not switch active camera to a mixin', function (done) {
81+
var sceneEl = this.el.sceneEl;
82+
var assetsEl = document.querySelector('a-assets');
83+
var cameraEl = document.createElement('a-entity');
84+
var mixin = document.createElement('a-mixin');
85+
var cameraSystem = sceneEl.systems.camera;
86+
sinon.spy(cameraSystem, 'setActiveCamera');
87+
88+
cameraEl.setAttribute('camera', '');
89+
mixin.setAttribute('camera', '');
90+
91+
sceneEl.appendChild(cameraEl);
92+
cameraEl.addEventListener('loaded', function () {
93+
assert.ok(cameraEl.getAttribute('camera').active);
94+
assert.ok(cameraSystem.setActiveCamera.calledOnce);
95+
assert.equal(cameraSystem.activeCameraEl, cameraEl);
96+
97+
assetsEl.appendChild(mixin);
98+
mixin.addEventListener('loaded', function () {
99+
assert.ok(cameraEl.getAttribute('camera').active);
100+
assert.ok(cameraSystem.setActiveCamera.calledOnce);
101+
assert.equal(cameraSystem.activeCameraEl, cameraEl);
102+
cameraSystem.setActiveCamera.reset();
103+
done();
104+
});
105+
});
106+
});
107+
55108
test('switches active camera', function (done) {
56109
var sceneEl = this.el.sceneEl;
57110
var camera1El = document.createElement('a-entity');

0 commit comments

Comments
 (0)