/* * Copyright 2015 Boris Smus. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Helper for getting in and out of VR mode. * Here we assume VR mode == full screen mode. * * 1. Detects whether or not VR mode is possible by feature detecting for * WebVR (or polyfill). * * 2. If WebVR is available, provides means of entering VR mode: * - Double click * - Double tap * - Click "Enter VR" button * * 3. Provides best practices while in VR mode. * - Full screen * - Wake lock * - Orientation lock (mobile only) */ (function() { function WebVRManager(effect, opts) { this.opts = opts || {}; // Set option to hide the button. this.hideButton = this.opts.hideButton || false; // Save the THREE.js effect for later. this.effect = effect; // Create the button regardless. this.vrButton = this.createVRButton(); // Check if the browser is compatible with WebVR. this.isHMDAvailable().then(function(isCompatible) { if (isCompatible) { this.setMode(Modes.COMPATIBLE); // If it is, activate VR mode. this.activateVR(); } else { this.setMode(Modes.INCOMPATIBLE); } }.bind(this)); this.os = this.getOS(); } var Modes = { // Incompatible with WebVR. INCOMPATIBLE: 1, // Compatible with WebVR. COMPATIBLE: 2, // In virtual reality via WebVR. IMMERSED: 3, }; /** * True if this browser supports WebVR. */ WebVRManager.prototype.isWebVRCompatible = function() { return 'getVRDevices' in navigator || 'mozGetVRDevices' in navigator || 'webkitGetVRDevices' in navigator; }; /** * Promise returns true if there is at least one HMD device available. */ WebVRManager.prototype.isHMDAvailable = function() { return new Promise(function(resolve, reject) { navigator.getVRDevices().then(function(devices) { for (var i = 0; i < devices.length; i++) { if (devices[i] instanceof HMDVRDevice) { resolve(true); break; } } resolve(false); }); }); }; WebVRManager.prototype.isVRMode = function() { return this.mode == Modes.IMMERSED; }; WebVRManager.prototype.createVRButton = function() { var button = document.createElement('img'); var s = button.style; s.position = 'absolute'; s.bottom = '5px'; s.left = 0; s.right = 0; s.marginLeft = 'auto'; s.marginRight = 'auto'; s.width = '64px' s.height = 'auto'; s.backgroundSize = 'cover'; s.backgroundColor = 'transparent'; s.border = 0; document.body.appendChild(button); return button; }; WebVRManager.prototype.setVisibility = function(isVisible) { if (isVisible && this.hideButton == false) { this.vrButton.style.display = 'block' } else { this.vrButton.style.display = 'none' } }; WebVRManager.prototype.setMode = function(mode) { this.mode = mode; switch (mode) { case Modes.INCOMPATIBLE: this.setVisibility(true); this.vrButton.src = this.base64('image/png', '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'); this.vrButton.style.opacity = 0.2; break; case Modes.COMPATIBLE: this.setVisibility(true); this.vrButton.src = this.base64('image/png', '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'); break; case Modes.IMMERSED: this.setVisibility(true); this.vrButton.src = this.base64('image/png', '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'); break; } }; WebVRManager.prototype.base64 = function(format, base64) { var out = 'data:' + format + ';base64,' + base64; return out; }; /** * Makes it possible to go into VR mode. */ WebVRManager.prototype.activateVR = function() { // Make it possible to enter VR via double click. window.addEventListener('dblclick', this.enterVR.bind(this)); // Or via double tap. window.addEventListener('touchend', this.onTouchEnd.bind(this)); // Or via clicking on the VR button. this.vrButton.addEventListener('click', this.onButtonClick.bind(this)); // Or by hitting the 'f' key. window.addEventListener('keydown', this.onKeyDown.bind(this)); // Whenever we enter fullscreen, this is tantamount to entering VR mode. document.addEventListener('webkitfullscreenchange', this.onFullscreenChange.bind(this)); document.addEventListener('mozfullscreenchange', this.onFullscreenChange.bind(this)); // Create the necessary elements for wake lock to work. this.setupWakeLock(); }; WebVRManager.prototype.setupWakeLock = function() { // Create a small video element. this.wakeLockVideo = document.createElement('video'); // Loop the video. this.wakeLockVideo.addEventListener('ended', function(ev) { this.wakeLockVideo.play(); }.bind(this)); // Turn on wake lock as soon as the screen is tapped. triggerWakeLock = function() { this.requestWakeLock(); }.bind(this); window.addEventListener('touchstart', triggerWakeLock, false); }; WebVRManager.prototype.onTouchEnd = function(e) { // TODO: Implement better double tap that takes distance into account. // https://github.com/mckamey/doubleTap.js/blob/master/doubleTap.js var now = new Date(); if (now - this.lastTouchTime < 300) { this.enterVR(); } this.lastTouchTime = now; }; WebVRManager.prototype.onButtonClick = function() { this.toggleVRMode(); }; WebVRManager.prototype.onKeyDown = function(e) { if (e.keyCode == 70) { // 'f' this.toggleVRMode(); } }; WebVRManager.prototype.toggleVRMode = function() { if (!this.isVRMode()) { // Enter VR mode. this.enterVR(); } else { this.exitVR(); } }; WebVRManager.prototype.onFullscreenChange = function(e) { // If we leave full-screen, also exit VR mode. if (document.webkitFullscreenElement === null) { this.exitVR(); } }; /** * Add cross-browser functionality to keep a mobile device from * auto-locking. */ WebVRManager.prototype.requestWakeLock = function() { this.releaseWakeLock(); if (this.os == 'iOS') { // If the wake lock timer is already running, stop. if (this.wakeLockTimer) { return; } this.wakeLockTimer = setInterval(function() { window.location = window.location; setTimeout(window.stop, 0); }, 30000); } else if (this.os == 'Android') { // If the video is already playing, do nothing. if (this.wakeLockVideo.paused === false) { return; } // See videos_src/no-sleep.webm. this.wakeLockVideo.src = this.base64('video/webm', 'GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlYm1Ch4ECQoWBAhhTgGcBAAAAAAACWxFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua1OsggEuTbuMU6uEHFO7a1OsggI+7AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAAEMq17GDD0JATYCMTGF2ZjU2LjQuMTAxV0GMTGF2ZjU2LjQuMTAxc6SQ20Yv/Elws73A/+KfEjM11ESJiEBkwAAAAAAAFlSuawEAAAAAAABHrgEAAAAAAAA+14EBc8WBAZyBACK1nIN1bmSGhVZfVlA4g4EBI+ODhAT3kNXgAQAAAAAAABKwgRC6gRBTwIEBVLCBEFS6gRAfQ7Z1AQAAAAAAALHngQCgAQAAAAAAAFyho4EAAIAQAgCdASoQABAAAEcIhYWIhYSIAgIADA1gAP7/q1CAdaEBAAAAAAAALaYBAAAAAAAAJO6BAaWfEAIAnQEqEAAQAABHCIWFiIWEiAICAAwNYAD+/7r/QKABAAAAAAAAQKGVgQBTALEBAAEQEAAYABhYL/QACAAAdaEBAAAAAAAAH6YBAAAAAAAAFu6BAaWRsQEAARAQABgAGFgv9AAIAAAcU7trAQAAAAAAABG7j7OBALeK94EB8YIBgfCBAw=='); this.wakeLockVideo.play(); } } /** * Turn off cross-browser functionality to keep a mobile device from * auto-locking. */ WebVRManager.prototype.releaseWakeLock = function() { if (this.os == 'iOS') { if (this.wakeLockTimer) { clearInterval(this.wakeLockTimer); this.wakeLockTimer = null; } } else if (this.os == 'Android') { this.wakeLockVideo.pause(); this.wakeLockVideo.src = ''; } } WebVRManager.prototype.getOS = function(osName) { var userAgent = navigator.userAgent || navigator.vendor || window.opera; // TODO Support desktop WebVR, like Oculus !!! if (userAgent.match(/iPhone/i) || userAgent.match(/iPod/i)) { return 'iOS'; } else if (userAgent.match(/Android/i)) { return 'Android'; } return 'unknown'; }; WebVRManager.prototype.enterVR = function() { console.log('Entering VR.'); if (this.os != 'iOS') { // Enter fullscreen unless we're on iOS (fullscreen not available). this.effect.setFullScreen(true); // Orientation lock. screen.orientation.lock('landscape'); } // Set style on button. this.setMode(Modes.IMMERSED); }; WebVRManager.prototype.exitVR = function() { console.log('Exiting VR.'); if (this.os != 'iOS') { // Leave fullscreen unless we're on iOS (fullscreen not available). this.effect.setFullScreen(false); // Unlock orientation. screen.orientation.unlock(); } // Relinquish wake lock. this.releaseWakeLock(); // Go back to compatible mode. this.setMode(Modes.COMPATIBLE); }; // Expose the WebVRManager class globally. window.WebVRManager = WebVRManager; })();