import Layer from './Layer';
export default class VRLayer extends Layer {
noVR = false;
vrStatus = 'not suppert VR';
constructor(config) {
super(config);
//先监听时间,再获取VR
this.listenEvents();
this.getVRDisplays();
}
/**
* 获取vrDevice
*/
getVRDisplays() {
let _this = this;
if (navigator.getVRDisplays) {
navigator.getVRDisplays().then(function (displays) {
if (displays.length > 0) {
_this.device = displays[0];
_this.renderer.vr.enabled = true;
_this.pigeonMap.renderer.vr.setDevice(_this.device);
//初始化frameData
_this.frameData = new VRFrameData();
} else {
_this.vrStatus = 'noDisplay'
console.warn('no vr displays');
}
}).catch(function (e) {
console.warn('Unable to get VR Displays');
});
}
}
/**
* 监听全局VR事件
*/
listenEvents() {
let _this = this;
window.addEventListener('vrdisplayconnect', function (event) {
_this.device = event.display || event.detail.display;
_this.status == 'connect';
_this.renderer.vr.enabled = true;
_this.fire('connected', _this.device);
}, false);
window.addEventListener('vrdisplaydisconnect', function (event) {
_this.status == 'disconnect'
_this.renderer.vr.enabled = false;
_this.fire('disconnet', _this.device);
}, false);
window.addEventListener('vrdisplaypresentchange', function (event) {
_this.device = event.display || event.detail.display;
_this.fire('statuschange', _this.device);
}, false);
}
/**
* 进入VR模式
*/
enterVR() {
this.device.requestPresent([{ source: this.renderer.domElement }]);
}
/**
* 退出VR
*/
exitVR() {
this.device.exitPresent()
}
/**
* 添加Button
*/
createButton(button) {
let _this = this;
if (!button) {
button = document.createElement("button");
button.style.position = 'absolute';
button.style.bottom = '20px';
button.style.padding = '12px 6px';
button.style.border = '1px solid #fff';
button.style.borderRadius = '4px';
button.style.background = 'transparent';
button.style.color = '#fff';
button.style.textAlign = 'center';
button.style.opacity = '0.5';
button.style.outline = 'none';
button.style.zIndex = '9999';
button.style.cursor = 'auto';
button.style.left = 'calc(50% - 75px)';
button.style.width = '150px';
button.textContent = 'Enter VR';
document.body.appendChild(button);
}
button.addEventListener("click", function () {
if (_this.device)
_this.enterVR();
})
}
onAdd(map) {
this.pigeonMap = map;
this.renderer = map.renderer;
this.initVRRenderer();
}
initVRRenderer() {
let _this = this;
}
}