Skip to content

Commit 8981ed2

Browse files
committed
Listen to vrdisplayconnect/vrdisplaydisconnect to enter/exit VR when a headset is plugged/unplugged
t push -f dmarcos# Date: Tue Jul 25 17:49:24 2017 -0700
1 parent b64104f commit 8981ed2

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

src/core/scene/a-scene.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,12 @@ module.exports.AScene = registerElement('a-scene', {
121121

122122
// Exit VR on `vrdisplaydeactivate` (e.g. taking off Rift headset).
123123
window.addEventListener('vrdisplaydeactivate', function () { self.exitVR(); });
124+
125+
// Enter VR on `vrdisplayconnect` (e.g. plugging on Rift headset).
126+
window.addEventListener('vrdisplayconnect', function () { self.enterVR(); });
127+
128+
// Exit VR on `vrdisplaydisconnect` (e.g. unplugging Rift headset).
129+
window.addEventListener('vrdisplaydisconnect', function () { self.exitVR(true); });
124130
},
125131
writable: window.debug
126132
},
@@ -247,7 +253,8 @@ module.exports.AScene = registerElement('a-scene', {
247253
throw new Error('Failed to enter VR mode (`requestPresent`).');
248254
}
249255
}
250-
}
256+
},
257+
writable: window.debug
251258
},
252259
/**
253260
* Call `exitPresent` if WebVR or WebVR polyfill.
@@ -296,7 +303,8 @@ module.exports.AScene = registerElement('a-scene', {
296303
throw new Error('Failed to exit VR mode (`exitPresent`).');
297304
}
298305
}
299-
}
306+
},
307+
writable: window.debug
300308
},
301309

302310
/**

tests/core/scene/a-scene.test.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,34 @@ suite('a-scene (without renderer)', function () {
6060
});
6161
});
6262

63+
suite.only('vrdisplayconnect', function () {
64+
test('tells A-Frame about entering VR when the headset is connected', function (done) {
65+
var event;
66+
var sceneEl = this.el;
67+
var enterVRStub = this.sinon.stub(sceneEl, 'enterVR');
68+
event = new CustomEvent('vrdisplayconnect');
69+
window.dispatchEvent(event);
70+
process.nextTick(function () {
71+
assert.ok(enterVRStub.called);
72+
done();
73+
});
74+
});
75+
});
76+
77+
suite.only('vrdisplaydisconnect', function () {
78+
test('tells A-Frame about entering VR when the headset is connected', function (done) {
79+
var event;
80+
var sceneEl = this.el;
81+
var exitVRStub = this.sinon.stub(sceneEl, 'exitVR');
82+
event = new CustomEvent('vrdisplaydisconnect');
83+
window.dispatchEvent(event);
84+
process.nextTick(function () {
85+
assert.ok(exitVRStub.calledWith(true));
86+
done();
87+
});
88+
});
89+
});
90+
6391
suite('vrdisplaypresentchange', function () {
6492
test('tells A-Frame about entering VR if now presenting', function (done) {
6593
var event;

0 commit comments

Comments
 (0)