From 3dc75222f13ca8c1a90f342e14cd7e8c60003900 Mon Sep 17 00:00:00 2001 From: Greg Fodor <gfodor@gmail.com> Date: Mon, 1 Oct 2018 04:20:49 +0000 Subject: [PATCH] Disable cursor and use grab cursor when in lobby --- src/assets/stylesheets/entry.scss | 12 ++++++++---- src/assets/stylesheets/hub.scss | 5 ++++- src/hub.html | 1 + src/hub.js | 2 ++ src/scene-entry-manager.js | 24 +++++++++++++++++++----- 5 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/assets/stylesheets/entry.scss b/src/assets/stylesheets/entry.scss index fd787680d..ce8595137 100644 --- a/src/assets/stylesheets/entry.scss +++ b/src/assets/stylesheets/entry.scss @@ -10,15 +10,19 @@ :local(.collapse) { @extend %fa-icon-button; position: absolute; - top: 4px; - right: 24px; + top: 0px; + right: 12px; + width: 32px; + height: 32px; } :local(.expand) { @extend %fa-icon-button; position: absolute; - top: -32px; - right: 24px; + top: -48px; + right: 12px; + width: 32px; + height: 32px; } } diff --git a/src/assets/stylesheets/hub.scss b/src/assets/stylesheets/hub.scss index e24bf7f06..8ce382b26 100644 --- a/src/assets/stylesheets/hub.scss +++ b/src/assets/stylesheets/hub.scss @@ -13,11 +13,14 @@ display: none; } +.grab-cursor { + cursor: grab; +} + .no-cursor { cursor: none; } - .webxr-realities, .webxr-sessions { @extend %unselectable } diff --git a/src/hub.html b/src/hub.html index 19a8282ea..16dd5bdad 100644 --- a/src/hub.html +++ b/src/hub.html @@ -21,6 +21,7 @@ </audio> <a-scene + class="grab-cursor" renderer="antialias: true; gammaOutput: true; sortObjects: true; physicallyCorrectLights: true;" gamma-factor networked-scene="adapter: janus; audio: true; debug: true; connectOnLoad: false;" diff --git a/src/hub.js b/src/hub.js index 2a7df3cb6..08e391ac9 100644 --- a/src/hub.js +++ b/src/hub.js @@ -294,6 +294,8 @@ document.addEventListener("DOMContentLoaded", () => { const scene = document.querySelector("a-scene"); const hubChannel = new HubChannel(store); const entryManager = new SceneEntryManager(hubChannel); + entryManager.init(); + const linkChannel = new LinkChannel(store); window.APP.scene = scene; diff --git a/src/scene-entry-manager.js b/src/scene-entry-manager.js index 999075799..adbc63e14 100644 --- a/src/scene-entry-manager.js +++ b/src/scene-entry-manager.js @@ -21,9 +21,16 @@ export default class SceneEntryManager { this.hubChannel = hubChannel; this.store = window.APP.store; this.scene = document.querySelector("a-scene"); + this.cursorController = document.querySelector("#cursor-controller"); this.playerRig = document.querySelector("#player-rig"); } + init = () => { + this.whenSceneLoaded(() => { + this.cursorController.components["cursor-controller"].disable(); + }); + }; + enterScene = async (mediaStream, enterInVR) => { const playerCamera = document.querySelector("#player-camera"); playerCamera.removeAttribute("scene-preview-camera"); @@ -68,23 +75,30 @@ export default class SceneEntryManager { return; } + this.scene.classList.remove("hand-cursor"); this.scene.classList.add("no-cursor"); + const cursor = this.cursorController.components["cursor-controller"]; + cursor.enable(); + cursor.setCursorVisibility(true); + this.hubChannel.sendEntryEvent().then(() => { this.store.update({ activity: { lastEnteredAt: new Date().toISOString() } }); }); }; - enterSceneWhenLoaded = (mediaStream, enterInVR) => { - const enterSceneImmediately = () => this.enterScene(mediaStream, enterInVR); - + whenSceneLoaded = callback => { if (this.scene.hasLoaded) { - enterSceneImmediately(); + callback(); } else { - this.scene.addEventListener("loaded", enterSceneImmediately); + this.scene.addEventListener("loaded", callback); } }; + enterSceneWhenLoaded = (mediaStream, enterInVR) => { + this.whenSceneLoaded(() => this.enterScene(mediaStream, enterInVR)); + }; + exitScene = () => { if (NAF.connection.adapter && NAF.connection.adapter.localMediaStream) { NAF.connection.adapter.localMediaStream.getTracks().forEach(t => t.stop()); -- GitLab