ecsyjs/ecsy 727
Entity Component System for javascript
ECSY and three.js components, systems and helpers
:a: web framework for building virtual reality experiences.
Graphical User Interface Component Framework for A-Frame VR
johnshaughnessy/aframe-teleport-controls 0
A-Frame teleport controls component
johnshaughnessy/aframe-tooltip-component 0
A-Frame tooltip component
johnshaughnessy/claremontcravings 0
Claremont Cravings
push eventmozilla/reticulum
commit sha 617a3bf5148d918110faceaeaa20dfc0a916cbf3
Change title of guide
push time in a day
push eventmozilla/reticulum
commit sha 275cfde5a160e02874bb0212b5e58a433039beef
Move dataloader config
push time in a day
push eventmozilla/reticulum
commit sha 41499f568954b11e692f86e6bd9d29e8040e7f91
Move dataloader config
push time in a day
Pull request review commentmozilla/reticulum
Add GraphQL API for managing rooms
+defmodule RetWeb.Middleware.TimingUtil do+ @moduledoc false+ def add_timing_info(%Absinthe.Resolution{private: private} = resolution, identifier, key, value) do+ timing = Map.get(private, :timing) || %{}+ info = Map.put(Map.get(timing, identifier) || %{}, key, value)++ %{+ resolution+ | private: Map.put(private, :timing, Map.put(timing, identifier, info))+ }+ end+end++defmodule RetWeb.Middleware.StartTiming do+ @moduledoc false++ import RetWeb.Middleware.TimingUtil, only: [add_timing_info: 4]++ @behaviour Absinthe.Middleware+ def call(resolution, _) do+ add_timing_info(resolution, resolution.definition.schema_node.identifier, :started_at, NaiveDateTime.utc_now())+ end+end++defmodule RetWeb.Middleware.EndTiming do+ @moduledoc false++ import RetWeb.Middleware.TimingUtil, only: [add_timing_info: 4]++ @behaviour Absinthe.Middleware+ def call(resolution, _) do+ add_timing_info(resolution, resolution.definition.schema_node.identifier, :ended_at, NaiveDateTime.utc_now())+ end+end++defmodule RetWeb.Middleware.InspectTiming do+ @moduledoc false++ @behaviour Absinthe.Middleware+ def call(resolution, _) do+ case resolution do+ %{private: %{timing: timing}} ->+ inspect_timing_info(timing)++ _ ->+ nil+ end++ resolution+ end++ defp inspect_timing_info(timing) do+ Enum.each(timing, fn item ->+ case item do+ {identifier, %{started_at: started_at, ended_at: ended_at}} ->+ diff = NaiveDateTime.diff(ended_at, started_at, :microsecond)+ IO.puts("#{Atom.to_string(identifier)} took #{diff} microseconds to run.")
TODO: Remove this and add Cachex or :telemetry metrics
comment created time in a day
push eventmozilla/reticulum
commit sha 560da978a594be56dee0ada9ab30a82717cddd1f
Remove unused error message
push time in a day
push eventmozilla/reticulum
commit sha 8d0d6df108a8cf2990f8586ddd52a0bf0a479eab
Update justification in guide table
push time in a day
push eventmozilla/reticulum
commit sha 04ee343fa9f4d326d5929e84b83c274599226d44
Update formatting in guide
push time in a day
push eventmozilla/reticulum
commit sha 737b7160a94b6cf0cabdd147435c36243ec81583
Update scopes table in guide
push time in a day
push eventmozilla/reticulum
commit sha 8a2e6f4400c03c765f436d0faea865fc7bc09c5e
Remove graphiql notes
push time in a day
push eventmozilla/reticulum
commit sha 6f810a4e2ddfaa770c42dd0d6be5eff83fda71ac
Update API Guide
push time in a day
push eventmozilla/reticulum
commit sha a32f8402373b91384423da305ea25cc2de0b8a59
Format
push time in a day
push eventmozilla/reticulum
commit sha 6c229905a3bcf2d21d62e7c073363d7170d0931e
Remove TODO
commit sha d3bf7879c8388682097d27768821fb5dd20c4d5d
Fix tests
commit sha 300bf33f75b8183f7b8f393fc991d794b9ae7194
Add sample graphiql workspace
push time in a day
push eventmozilla/reticulum
commit sha 75a2087d1b2b970382fda31361991eeab9fe2dcd
Fix warnings
push time in a day
push eventmozilla/reticulum
commit sha c5096c7c13bbc76fb6596ba9dbf9eeed4f595f64
Check for introspection types how Absinthe does
push time in a day
PR closed mozilla/reticulum
Adds revocable API tokens
TODO: Configure prod.exs
pr closed time in a day
pull request commentmozilla/reticulum
Add revocable API tokens using guardian_db
Closing this. I removed the guardian_db dependency and created a new API Token module in the big graphql api: https://github.com/mozilla/reticulum/pull/399/commits/9f23b27b5c3e9d3f215d4098eb8436c7e13dc60e
comment created time in a day
push eventmozilla/reticulum
commit sha 272003df8dd69d724a67fef84b7808035ca28008
Fix introspection queries and invalid token errors
push time in a day
push eventmozilla/reticulum
commit sha c88e0a0b89ccc3d1e04e8b5386bebaf5ff844c70
(Re)Implement revoke for tokens
push time in 2 days
push eventmozilla/reticulum
commit sha 3040fb4795dbdeda7df4989ac98c229d3d2cf5de
Remove unused function
commit sha 8dc209c6a38a67410a5f8370baaa56051367bc62
Removed unused alias/import
push time in 2 days
push eventmozilla/reticulum
commit sha 884893bf0c64ac9c4b3af9d3d61ff5c9227a8e42
Remove unused secrets
push time in 2 days
push eventmozilla/reticulum
commit sha dfaf3f81160f4ea2153c4b9f36debf40d8869781
Remove guardian db
push time in 2 days
push eventmozilla/reticulum
commit sha 550863cf68e96ce8697bf3450af4ca73030ed31f
Add comments
commit sha 7f1c1cb6524723e8afa3f7bd67d9e2ae7a9d2f3e
Lengthen ttl
commit sha 9f23b27b5c3e9d3f215d4098eb8436c7e13dc60e
Create API token module. Replace jwt's in API
push time in 2 days
Pull request review commentmozilla/hubs
Room UI Redesign: Toolbar Buttons / Menus
AFRAME.registerComponent("mute-mic", { if (!NAF.connection.adapter) return; if (!this.el.sceneEl.is("entered")) return; - this.el.sceneEl.systems["hubs-systems"].soundEffectsSystem.playSoundOneShot(SOUND_TOGGLE_MIC);
Discord makes a sound when you mute/unmute your mic (by clicking the button or using a hotkey). I think it's helpful
comment created time in 2 days
Pull request review commentmozilla/hubs
Updates CONTRIBUTING.md with a pointer to spritesheet-generation.md &…
The testing process for Hubs is mostly a manual one. You need to test your chang The Hubs team has a more in-depth testing and release process internally, but we don't have any additional testing process for external contributors at this time. -### 5. High Level Project Organization++### 5. Modifying The 2-D Sprite Graphics++To update the 2-D sprite graphics, you must (manually) install [ImageMagick](https://imagemagick.org/script/download.php) to your command line. See `doc/spritesheet-generation.md` for further details
We may want to remove the last paragraph of the spritesheet-generation.md file referring to Figma because it's not really relevant to external contributors.
comment created time in 3 days
Pull request review commentmozilla/hubs
Updates CONTRIBUTING.md with a pointer to spritesheet-generation.md &…
These steps are what's necessary to enable development on your device `adb devices -l` Lists all connected devices. The -l flag will list device specific details, one of which should be: `model:Quest` - `adb -s model:Quest reverse tcp:8080 tcp:8080`- `adb reverse tcp:8080 tcp:8080`+ `adb -s model:Quest reverse tcp:8080 tcp:8080` + `adb reverse tcp:8080 tcp:8080` This command routes all port 8080 requests from the Quest device to port 8080 on your local web server. The first one is if you want to do things wirelessly, while the second is a quicker (albeit tethered) solution that is less prone to the error below. If you encounter the following error: adb: error: more than one device/emulator Try killing and restarting adb with the following commands:- `adb kill-server`+ `adb kill-server` or
Do you not have to run both commands?
comment created time in 3 days
Pull request review commentmozilla/hubs
Updates CONTRIBUTING.md with a pointer to spritesheet-generation.md &…
These steps are what's necessary to enable development on your device `adb devices -l` Lists all connected devices. The -l flag will list device specific details, one of which should be: `model:Quest` - `adb -s model:Quest reverse tcp:8080 tcp:8080`- `adb reverse tcp:8080 tcp:8080`+ `adb -s model:Quest reverse tcp:8080 tcp:8080` + `adb reverse tcp:8080 tcp:8080` This command routes all port 8080 requests from the Quest device to port 8080 on your local web server. The first one is if you want to do things wirelessly, while the second is a quicker (albeit tethered) solution that is less prone to the error below. If you encounter the following error: adb: error: more than one device/emulator Try killing and restarting adb with the following commands:- `adb kill-server`+ `adb kill-server` or `adb start-server` Then retry the reverse command above again -3. Open a browser on the Quest device and test.- Go to the following url: `https://localhost:8080` in the Oculus broswer or Firefox Reality browser+3. Open a browser on the Quest device and test. Either + `adb shell am start -a android.intent.action.VIEW -d 'https://localhost:8080'` + or launch the Oculus browser or Firefox Reality browser and go to the following url: `https://localhost:8080` > Note the client runs over https with a self-signed SSL certificate. You'll be presented with a warning the first time you open the page. You can accept the SSL certificate warning and continue onto the site. 4. You should see the Hubs index page, the same one you see in a browser on your development machine. -### Other Devices+You may find the tool [scrcpy](https://github.com/Genymobile/scrcpy) useful to display the screen of your headset on your development computer. It doesn't require the headset user to accept, so it's less hassle than casting to a phone or tablet, in some circumstances.++#### Other Devices -Please feel free to contribute setup instructions for additional devices.+Please feel free to contribute setup instructions for additional devices. Pico headsets use command very similar to the Quest ones.
command -> commands
Are they similar enough to have "Pico" in its own section and have it say, "Follow the same instructions for Oculus Quest except do this and that differently"
comment created time in 3 days
Pull request review commentmozilla/hubs
Room UI Redesign: Toolbar Buttons / Menus
+import React, { useEffect, useState, useCallback } from "react";+import PropTypes from "prop-types";+import { ReactComponent as ReactionIcon } from "../icons/Reaction.svg";+import { ToolbarButton } from "../input/ToolbarButton";++export function ReactionButtonContainer({ scene }) {+ const [isFrozen, setIsFrozen] = useState(scene.is("frozen"));++ useEffect(+ () => {+ function onSceneStateChange(event) {+ if (event.detail === "frozen") {+ setIsFrozen(scene.is("frozen"));+ }+ }++ scene.addEventListener("stateadded", onSceneStateChange);+ scene.addEventListener("stateremoved", onSceneStateChange);++ return () => {+ scene.removeEventListener("stateadded", onSceneStateChange);+ scene.removeEventListener("stateremoved", onSceneStateChange);+ };+ },+ [scene]+ );++ // TODO: We probably shouldn't use freeze mode for users spawning emojis on a 2d device.
I especially like that when Discord's emoji button is hovered, it will change the emoji each time. I would like to do the same for our emoji button. Maybe it would fit for our "Place" menu too.
comment created time in 3 days
Pull request review commentmozilla/hubs
Room UI Redesign: Toolbar Buttons / Menus
+import React, { useEffect, useState, useCallback } from "react";+import PropTypes from "prop-types";+import { ReactComponent as ReactionIcon } from "../icons/Reaction.svg";+import { ToolbarButton } from "../input/ToolbarButton";++export function ReactionButtonContainer({ scene }) {+ const [isFrozen, setIsFrozen] = useState(scene.is("frozen"));++ useEffect(+ () => {+ function onSceneStateChange(event) {+ if (event.detail === "frozen") {+ setIsFrozen(scene.is("frozen"));+ }+ }++ scene.addEventListener("stateadded", onSceneStateChange);+ scene.addEventListener("stateremoved", onSceneStateChange);++ return () => {+ scene.removeEventListener("stateadded", onSceneStateChange);+ scene.removeEventListener("stateremoved", onSceneStateChange);+ };+ },+ [scene]+ );++ // TODO: We probably shouldn't use freeze mode for users spawning emojis on a 2d device.
I like the suggested design of the emoji popover menu as a first (or second) pass. I think eventually we'll want something integrated into the chat sidebar and easily extended / searchable like slack or discord's emoji menu:

comment created time in 3 days
Pull request review commentmozilla/hubs
Room UI Redesign: Toolbar Buttons / Menus
+import { waitForDOMContentLoaded } from "../utils/async-utils";++// Used for tracking and managing pen tools in the scene+AFRAME.registerSystem("pen-tools", {
You may also need to listen to alternative event for knowing when to update the place UI: https://github.com/mozilla/hubs/blob/redesign/toolbar-buttons/src/react-components/room/PlacePopoverContainer.js#L100
comment created time in 3 days
Pull request review commentmozilla/hubs
Room UI Redesign: Toolbar Buttons / Menus
-import { useState, useEffect, useRef } from "react";+import { useState, useEffect, useRef, useCallback } from "react"; import MovingAverage from "moving-average"; -const MOVING_AVG_TIMESPAN = 100; const UPDATE_RATE = 50; -export function useMicrophoneVolume(scene) {+export function useMicrophone(scene, updateRate = UPDATE_RATE) {
Should this line below use updateRate (instead of UPDATE_RATE)?
https://github.com/mozilla/hubs/blob/7159d67ccc84d6dfccf7bf3b1590275f04092367/src/react-components/room/useMicrophone.js#L29
Seems like you can remove UPDATE_RATE and write updateRate = 50.
comment created time in 3 days
Pull request review commentmozilla/hubs
Room UI Redesign: Toolbar Buttons / Menus
+import React, { useEffect, useState, useCallback } from "react";+import PropTypes from "prop-types";+import { ReactComponent as ReactionIcon } from "../icons/Reaction.svg";+import { ToolbarButton } from "../input/ToolbarButton";++export function ReactionButtonContainer({ scene }) {+ const [isFrozen, setIsFrozen] = useState(scene.is("frozen"));++ useEffect(+ () => {+ function onSceneStateChange(event) {+ if (event.detail === "frozen") {+ setIsFrozen(scene.is("frozen"));+ }+ }++ scene.addEventListener("stateadded", onSceneStateChange);+ scene.addEventListener("stateremoved", onSceneStateChange);++ return () => {+ scene.removeEventListener("stateadded", onSceneStateChange);+ scene.removeEventListener("stateremoved", onSceneStateChange);+ };+ },+ [scene]+ );++ // TODO: We probably shouldn't use freeze mode for users spawning emojis on a 2d device.
+1 - Good idea to either implement a 2D emoji menu or separate the logic that ties their visibility to the frozen state. https://github.com/mozilla/hubs/blob/7159d67ccc84d6dfccf7bf3b1590275f04092367/src/components/emoji-hud.js#L88-L91
comment created time in 3 days
Pull request review commentmozilla/hubs
Room UI Redesign: Toolbar Buttons / Menus
+import React, { useEffect, useState, useCallback } from "react";+import PropTypes from "prop-types";+import { ReactComponent as ReactionIcon } from "../icons/Reaction.svg";+import { ToolbarButton } from "../input/ToolbarButton";++export function ReactionButtonContainer({ scene }) {
We'll need to do some thinking around the UX for "send to 3D world" vs "send to chat" vs "send to both" . It is surprising to me that there's a "react" (emoji) menu in the toolbar rather than in the chat sidebar or the "Place" popover menu
comment created time in 3 days
Pull request review commentmozilla/hubs
Room UI Redesign: Toolbar Buttons / Menus
import { Popover } from "../popover/Popover"; import { ToolbarButton } from "../input/ToolbarButton"; import { ReactComponent as ObjectIcon } from "../icons/Object.svg"; -export function PlacePopoverButton({ items, onSelect }) {+export function PlacePopoverButton({ items }) {
I've mentioned this before but at some point I hope we find a clearer word for this menu than "Place". I suspect "Place" will give people the wrong impression of it being about "this place we're in" (aka the scene), not "place a pen in your hand or an object in the scene". Some alternatives to consider:
- Add
- Create
- Load
- New
- Spawn
- Generate
Similarly, I think "Share" is overloaded in the mobile world and we might want to consider something like, "Broadcast" or "Stream"
comment created time in 3 days
Pull request review commentmozilla/hubs
Room UI Redesign: Toolbar Buttons / Menus
+import { waitForDOMContentLoaded } from "../utils/async-utils";++// Used for tracking and managing pen tools in the scene+AFRAME.registerSystem("pen-tools", {
This system tracks the pens you own, but since pens are not really "active" unless you are currently holding them, you could instead write:
function isMyPen(el) {
isTagged(el, "isPen") && NAF.utils.isMine(el)
}
scene.systems.interaction.isHoldingAnything(isMyPen)
At the two call sites where this state is needed: https://github.com/mozilla/hubs/blob/7159d67ccc84d6dfccf7bf3b1590275f04092367/src/react-components/room/PlacePopoverContainer.js#L21 https://github.com/mozilla/hubs/blob/7159d67ccc84d6dfccf7bf3b1590275f04092367/src/components/in-world-hud.js#L18
This would allow you to remove the pen-tools system.
The only issue I can see with this approach is that you'd need to patch (or replace) isMine with a version that does not throw an error if you try it on something that is not itself or a child of a networked entity. (See https://github.com/MozillaReality/networked-aframe/blob/21c21536af77b3d726807699a3dcc0b7cd0e866e/src/utils.js#L92-L104 )
comment created time in 3 days
Pull request review commentmozilla/hubs
Room UI Redesign: Toolbar Buttons / Menus
+import { waitForDOMContentLoaded } from "../utils/async-utils";++// Used for tracking and managing pen tools in the scene+AFRAME.registerSystem("pen-tools", {+ init() {+ this.penEls = [];+ this.updateMyPen = this.updateMyPen.bind(this);++ waitForDOMContentLoaded().then(() => {+ this.updateMyPen();+ });+ },++ register(el) {+ this.penEls.push(el);+ el.addEventListener("ownership-changed", this.updateMyPen);+ this.updateMyPen();+ },++ deregister(el) {+ this.penEls.splice(this.penEls.indexOf(el), 1);+ el.removeEventListener("ownership-changed", this.updateMyPen);+ this.updateMyPen();+ },++ getMyPen() {
Maybe would expose hasActivePen() since the only use is:
const hasActivePen = !!scene.systems["pen-tools"].getMyPen();
comment created time in 3 days
Pull request review commentmozilla/hubs
Room UI Redesign: Toolbar Buttons / Menus
+import { waitForDOMContentLoaded } from "../utils/async-utils";++// Used for tracking and managing pen tools in the scene+AFRAME.registerSystem("pen-tools", {+ init() {+ this.penEls = [];+ this.updateMyPen = this.updateMyPen.bind(this);++ waitForDOMContentLoaded().then(() => {+ this.updateMyPen();+ });+ },++ register(el) {+ this.penEls.push(el);+ el.addEventListener("ownership-changed", this.updateMyPen);+ this.updateMyPen();+ },++ deregister(el) {+ this.penEls.splice(this.penEls.indexOf(el), 1);+ el.removeEventListener("ownership-changed", this.updateMyPen);+ this.updateMyPen();+ },++ getMyPen() {+ return this.myPen;+ },++ updateMyPen() {+ if (!this.penEls.length) {+ this.myPen = null;+ } else {+ this.myPen = this.penEls.find(NAF.utils.isMine);+ }
Can drop this if and just keep
this.myPen = this.penEls.find(NAF.utils.isMine);
It will be undefined if penEls.length === 0 or if none of the penEls isMine. If it's important to be null instead of undefined,
this.myPen = this.penEls.find(NAF.utils.isMine) || null;
comment created time in 3 days
Pull request review commentmozilla/hubs
Room UI Redesign: Toolbar Buttons / Menus
AFRAME.registerComponent("mute-mic", { if (!NAF.connection.adapter) return; if (!this.el.sceneEl.is("entered")) return; - this.el.sceneEl.systems["hubs-systems"].soundEffectsSystem.playSoundOneShot(SOUND_TOGGLE_MIC);
I don't think this sound effect should be removed. If we are getting rid of it though, this is the only use of SOUND_TOGGLE_MIC so we can remove it from sound-effects-system.js too:
./src/systems/sound-effects-system.js:26:export const SOUND_TOGGLE_MIC = soundEnum++;
./src/systems/sound-effects-system.js:70: [SOUND_TOGGLE_MIC, URL_TICK],
comment created time in 3 days
issue commentmozilla/hubs
Encourage avatars to stand closer together
@camelgod I agree - A third-person mode (that actually works) would be really nice.
I would want a third person mode to communicate a person's interest. It is convenient that when most people are in first person most of the time, it is obvious where everyone is directing their attention because it is whatever their heads are directed at. This does not apply when the browser is not in focus (the user alt-tabbed) or for our current "inspect"/"focus" mechanic for media and avatars, and I'd love for us to do something for these cases too. This is also important for setting correct expectations in the room about who is within earshot or in view at a given time.
I would like a third person mode to allow for "sims-like" navigation. We already have a nav-mesh so implementation shouldn't be too difficult, and I think many users would feel more comfortable with a point-and-click (or touch) interface for directing the avatar rather than having to operate WASD, on-screen joysticks, or pinch gestures.
Camera rules for third person are often made to be aware of the scene in important ways (so that it either cuts-out certain geometry to show your character or restricts motion in a way that is flattering to the level design). I doubt we'd want to go deep on this aspect because in-room content is so dynamic and customizable.
I would like to experiment with a "streamer-focused" viewing mode that allowed for full-screen, ui-less capture in one window and a control panel in a second window. This may allow setting up multiple camera angles/shots, tracking, etc. I could see this being a value-add for a twitch streamer who wants to interact with a few audience members in hubs while a moderator operates the "hubs streamer mode" ui to decide what to shown on the twitch stream.
comment created time in 3 days
Pull request review commentmozilla/hubs
Room UI Redesign: Object List and Object Menu
+import React, { useState, useEffect, useContext, createContext, useCallback, Children, cloneElement } from "react";+import PropTypes from "prop-types";+import { mediaSort, getMediaType } from "../../utils/media-sorting.js";++function getDisplayString(el) {+ // Having a listed-media component does not guarantee the existence of a media-loader component,+ // so don't crash if there isn't one.+ const url = (el.components["media-loader"] && el.components["media-loader"].data.src) || "";+ const split = url.split("/");+ const resourceName = split[split.length - 1].split("?")[0];+ let httpIndex = -1;+ for (let i = 0; i < split.length; i++) {+ if (split[i].indexOf("http") !== -1) {+ httpIndex = i;+ }+ }++ let host = "";+ let lessHost = "";+ if (httpIndex !== -1 && split.length > httpIndex + 3) {+ host = split[httpIndex + 2];+ const hostSplit = host.split(".");+ if (hostSplit.length > 1) {+ lessHost = `${hostSplit[hostSplit.length - 2]}.${hostSplit[hostSplit.length - 1]}`;+ }+ }++ const firstPart =+ url.indexOf("poly.google") !== -1+ ? "Google Poly"+ : url.indexOf("sketchfab.com") !== -1+ ? "Sketchfab"+ : url.indexOf("youtube.com") !== -1+ ? "YouTube"+ : lessHost;++ return `${firstPart} ... ${resourceName.substr(0, 4)}`;+}++const ObjectListContext = createContext({+ objects: [],+ focusedObject: null,+ selectedObject: null,+ focusObject: () => {},+ unfocusObject: () => {},+ inspectObject: () => {},+ uninspectObject: () => {}+});++export function ObjectListProvider({ scene, children }) {+ const [objects, setObjects] = useState([]);+ const [focusedObject, setFocusedObject] = useState(null); // The object currently shown in the viewport+ const [selectedObject, setSelectedObject] = useState(null); // The object currently selected in the object list++ useEffect(+ () => {+ function updateMediaEntities() {+ const objects = scene.systems["listed-media"].els.sort(mediaSort).map(el => ({+ id: el.object3D.id,+ name: getDisplayString(el),+ type: getMediaType(el),+ el+ }));++ setObjects(objects);+ }++ let timeout;++ function onListedMediaChanged() {+ // HACK: The listed-media component exists before the media-loader component does, in cases where an entity is created from a network template because of an incoming message, so don't updateMediaEntities right away.+ // Sorry in advance for the day this comment is out of date.+ timeout = setTimeout(() => updateMediaEntities(), 0);+ }++ scene.addEventListener("listed_media_changed", onListedMediaChanged);++ updateMediaEntities();++ return () => {+ scene.removeEventListener("listed_media_changed", updateMediaEntities);+ clearTimeout(timeout);+ };+ },+ [scene, setObjects]+ );++ useEffect(+ () => {+ function onInspectTargetChanged() {+ const cameraSystem = scene.systems["hubs-systems"].cameraSystem;++ const focusedEl = focusedObject && focusedObject.el;+ const selectedEl = selectedObject && selectedObject.el;+ const inspectedEl = cameraSystem.inspectable && cameraSystem.inspectable.el;++ if (inspectedEl && inspectedEl !== selectedEl && inspectedEl !== focusedEl) {+ setSelectedObject({+ id: inspectedEl.object3D.id,+ name: getDisplayString(inspectedEl),+ type: getMediaType(inspectedEl),+ el: inspectedEl+ });+ } else if (!inspectedEl && !focusedEl && selectedEl) {+ setSelectedObject(null);+ }+ }++ scene.addEventListener("inspect-target-changed", onInspectTargetChanged);++ return () => {+ scene.removeEventListener("inspect-target-changed", onInspectTargetChanged);+ };+ },+ [scene, setSelectedObject, objects, focusedObject, selectedObject]+ );++ const selectObject = useCallback(+ object => {+ const cameraSystem = scene.systems["hubs-systems"].cameraSystem;++ setSelectedObject(object);++ if (object.el.object3D !== cameraSystem.inspectable) {+ cameraSystem.enableLights = false;+ cameraSystem.inspect(object.el.object3D, object.el.object3D, 1.5, true);+ }+ },+ [scene, setSelectedObject]+ );++ const deselectObject = useCallback(+ () => {+ const cameraSystem = scene.systems["hubs-systems"].cameraSystem;++ setSelectedObject(null);++ if (!focusedObject) {+ cameraSystem.enableLights = true;+ cameraSystem.uninspect();+ }+ },+ [scene, setSelectedObject, focusedObject]+ );++ const focusObject = useCallback(+ object => {+ const cameraSystem = scene.systems["hubs-systems"].cameraSystem;++ setFocusedObject(object);++ if (object.el.object3D !== cameraSystem.inspectable) {+ cameraSystem.enableLights = false;
Whether to show or hide other objects while focusing one is optional, so this setting should come from a user preference (in local storage). This allows us to view something individually or view something in its larger context.
Currently this setting affects object focus (via the objects menu or in the world) and avatar focus (yourself or others). See https://github.com/mozilla/hubs/pull/3193/files#diff-5be16d87c7d3814f9e1d500130ad516e731de0aae3ad2682a6d89c42e3660871L162 for details
I'm open to suggestions for how to improve the UX here (e.g. including this option from the other focus modes), but I don't think we should drop it entirely.
comment created time in 10 days
Pull request review commentmozilla/hubs
Room UI Redesign: Object List and Object Menu
export class MouseDevice { const left = event.button === 0; const middle = event.button === 1; const right = event.button === 2;- this.coords[0] = (event.clientX / window.innerWidth) * 2 - 1;- this.coords[1] = -(event.clientY / window.innerHeight) * 2 + 1;+ // Note: This assumes the canvas always starts in the top left.+ // This works with the current sidebar and toolbar layout.+ this.coords[0] = (event.clientX / this.canvas.clientWidth) * 2 - 1;+ this.coords[1] = -(event.clientY / this.canvas.clientHeight) * 2 + 1;
May need to update similar lines for touchscreens:
./src/systems/userinput/devices/app-aware-touchscreen.js:46: x: (touch.clientX / window.innerWidth) * 2 - 1,
./src/systems/userinput/devices/app-aware-touchscreen.js:174: (touch.clientX / window.innerWidth) * 2 - 1,
./src/systems/userinput/devices/app-aware-touchscreen.js:234: (touch.clientX / window.innerWidth) * 2 - 1,
./src/systems/userinput/devices/app-aware-touchscreen.js:355: frame.setVector2(path.touchCameraDelta, delta[0] / window.innerWidth, delta[1] / window.innerHeight);
It probably won't affect phones because the panels are full-screen takeovers but for bigger touchscreens like ipads, not updating it may cause issues.
comment created time in 3 days
Pull request review commentmozilla/hubs
Room UI Redesign: Object List and Object Menu
-import { getInspectableAndPivot } from "../systems/camera-system";- AFRAME.registerComponent("inspect-button", { tick() { if (!this.initializedInTick) { // initialize in tick so that parent's `tags` component has been initialized this.initializedInTick = true;-- const { inspectable, pivot } = getInspectableAndPivot(this.el);- if (!pivot) {- console.error("You put an inspect button but I could not find what you want to inspect.", this.el);- return;- } this.el.object3D.addEventListener("holdable-button-down", () => {- this.el.sceneEl.systems["hubs-systems"].cameraSystem.inspect(inspectable, pivot, 1, false);+ this.el.sceneEl.systems["hubs-systems"].cameraSystem.inspect(this.el, 1, false);
This may be a regression. Looks like maybe a merge issue. (This file was changed recently. See https://github.com/mozilla/hubs/pull/3067/files#diff-8f22548036a0d3e2a5ede88cf78c72672eb39cd724f8919c05e8352fd27a8cd4R15)
Edit: nevermind - I see the related change to camera-system.js
comment created time in 7 days
Pull request review commentmozilla/hubs
"home.terms_of_use": "Terms of Use", "home.made_with_love": "made with 🦆 by ", "home.environment_author_by": " by ",+ "home.rooms-title": "Instantly create rooms",+ "home.rooms-blurb": "Share virtual spaces with your friends, co-workers, and communities. When you create a room with Hubs, you’ll have a private virtual meeting space that you can instantly share - no downloads or VR headset necessary.",+ "home.communicate-title": "Communicate naturally",+ "home.communicate-blurb": "Choose an avatar to represent you, put on your headphones, and jump right in. Hubs makes it easy to stay connected with voice and text chat to other people in your private room.",
lol, yep. :facepalm:
comment created time in 6 days
Pull request review commentmozilla/hubs
"home.terms_of_use": "Terms of Use", "home.made_with_love": "made with 🦆 by ", "home.environment_author_by": " by ",+ "home.rooms-title": "Instantly create rooms",+ "home.rooms-blurb": "Share virtual spaces with your friends, co-workers, and communities. When you create a room with Hubs, you’ll have a private virtual meeting space that you can instantly share - no downloads or VR headset necessary.",+ "home.communicate-title": "Communicate naturally",+ "home.communicate-blurb": "Choose an avatar to represent you, put on your headphones, and jump right in. Hubs makes it easy to stay connected with voice and text chat to other people in your private room.",
I'm a bit concerned that the "put on your headset" part will turn non-VR users away, but it may be OK because rooms-blurb says "no downloads or VR headset necessary"
comment created time in 6 days
pull request commentmozilla/reticulum
Add steps to setup Reticulum against a local Dialog instance to the README
Thanks for writing this up! I have never set up dialog (and not dialog + reticulum)
comment created time in 7 days
push eventmozilla/reticulum
commit sha 497d97c0f0abb5adbcc7e63169302bc1ee95bfc3
Remove outdated tests
push time in 8 days
issue commentmozilla/hubs
Preload avatar, camera, and pen to prevent hitching
I think we do preload the camera (here https://github.com/mozilla/hubs/blob/master/src/components/camera-tool.js#L13 ), but do not preload the avatar or the pen.
comment created time in 8 days
push eventmozilla/reticulum
commit sha 2eb49341fb72f4b3fccbf6809edaff62501dbe68
Remove unused function
push time in 8 days
push eventmozilla/reticulum
commit sha f121458162d0d47206d2faa707b29a5b701a2a95
Remove unused function
push time in 8 days
push eventmozilla/reticulum
commit sha 1de05d78efd6e17623a3cf81ac2d30c4e48c4fc2
Implement can? for :reticulum_app_token
commit sha e2eec9b33765c6352fb0873560f5002abe9a4e67
Put generated token onto clipboard
commit sha 6f5a4e69f17c7aa55553317cbc0b906735a2d211
Check permissions for getting public rooms
push time in 8 days
push eventmozilla/reticulum
commit sha a386b8fc2ae85b2db50e4d550ed0eaa5ba98783b
Remove IO.inspect
commit sha b876e8632c95dd483dc98d7755ba46303cd64432
Fix warnings
push time in 8 days
issue commentmozilla/hubs
Increase (or remove) NOISY_OCCUPANT_COUNT
@misslivirose I suggested a number (30) higher than the default room size because:
- I think most join/leave events have been helpful to the conversation I've been in and confusing when they're absent (e.g. people asking, "Where's so-and-so?" not realizing that that person just left, or refreshed and is in the lobby)
- I don't want to completely remove this limit in case there are many, many people in the lobby
- It will be more obvious if someone joins the lobby and then is blocked from joining the room (because it is full)
I like the idea of making it configurable at the room setting level. I think the default number should be higher, but maybe not. I suspect we'll eventually want a more nuanced design around this besides "above this number, there's no notification". This could mean a chat filter or auto-combining join/leaves. ("John, Liv, and 4 others entered the lobby"). For now though I figured I'd make this issue because I've noticed this come up frequently in our internal (hubs) meetings.
comment created time in 8 days
push eventmozilla/reticulum
commit sha b9a717531705a8f5c8ae2341d4c00c727d480894
Remove commented code
commit sha 82108fd6e43974d509e8ea261db76bcd7f698b30
Remove unused permissions
push time in 10 days
push eventmozilla/reticulum
commit sha a279ce511ff67b82d398e06a8854569d368f44df
Remove unused middleware
push time in 10 days
push eventmozilla/reticulum
commit sha 05d800811302f22ba9fd80c57ad3fa102e9f0d0a
Add some notes for graphiql testing
push time in 10 days
push eventmozilla/reticulum
commit sha dc45130f04be1fd1cda531ca6652594337e464bb
Generate random room names
commit sha 5084f616a77b74009978efc448f394b2f2d869ff
Reimplement create and update room with auth
push time in 10 days
push eventmozilla/reticulum
commit sha f365bca7ad31be004610a319279026be397262c4
Remove insert auth header helper
commit sha e699e8bcf941753edc879e77c31370ce7536f529
Minor changes
commit sha f96f2262ea64e9ce5e8504d98e280d2eea082833
Remove unnecessary middleware
commit sha 69902c7dda92dc22cfc3a78ec4c875eef89eaa33
Rename Ret.ApiToken -> Ret.Api.Token
commit sha f652f0cee02287c9ff7dfffdace39024b4970d4c
Update room access pattern for user and app tokens
commit sha 9a5c0899b2e02d19f86431692676cd1b0c3f9ce0
Fix tests and warnings
push time in 10 days
issue openedmozilla/hubs
Increase (or remove) NOISY_OCCUPANT_COUNT
Is your feature request related to a problem? Please describe. When we are in meetings of ~15 people, we often still want to know when someone joins or leaves. We have to scan the user list to figure out who is still in the room.
Describe the solution you'd like
Increase the NOISY_OCCUPANT_COUNT to 30
Describe alternatives you've considered
- Remove
NOISY_OCCUPANT_COUNTor choose a different number. - Add an option to filter the chat so that you only see join/leave events or only see chat messages.
Additional context
NOISY_OCCUPANT_COUNT is set here: https://github.com/mozilla/hubs/blob/3694931de7434a1032040581a60c0b2da349027c/src/hub.js#L178
created time in 10 days
issue openedmozilla/hubs
Improve the in-client description / documetnation of what `/audiomode` does
The /audiomode command is frequently misunderstood. When you toggle it (or see it in the command tip box), it says "positional audio disabled/enabled". This leads people to think it should make all audio sound the same, but it does something different:
It does not disable distance-based attenuation. It disables panner-nodes, so that left/right forward/back directionality will be removed. It replaces the distance-based attenuation from THREE.PositionalAudios with a different falloff curve ( https://github.com/mozilla/hubs/blob/master/src/components/avatar-volume-controls.js#L60 )
I don't know the best way to explain this in a few words ( maybe "toggle left/right panning" ), but it would be good if this feature was explained more clearly in the client and in the docs https://github.com/MozillaReality/hubs-docs/blob/c50f02cece06f70b23d91bcd87f36c16637005e9/docs/hubs-features.md
created time in 10 days
push eventmozilla/Spoke
commit sha 37a6f42567653924bbbbd50a95bc370084f29557
Fix typo that makes it impossible to disable teleporting
commit sha d787463ce4c778b4081a4f5c909e4e80463add29
Merge pull request #997 from mozilla/bug/cant-disable-teleporting Fix bug that makes it impossible to disable teleporting
push time in 10 days
PR merged mozilla/Spoke
Fix https://github.com/mozilla/Spoke/issues/996
There was a typo in the node editor for waypoints that prevented users from disabling teleport.
In Spoke we had a mix of willDisableTeleporting and willDisableTeleport :
./test/integration/snapshots/Editor.test.js.md:2114: willDisableTeleporting: false,
./test/fixtures/V4TestScene.spoke:1:[Omitted long matching line]
./src/editor/nodes/WayPointNode.js:31: this.willDisableTeleporting = false;
./src/editor/nodes/WayPointNode.js:53: this.willDisableTeleporting = source.willDisableTeleporting;
./src/editor/nodes/WayPointNode.js:76: willDisableTeleporting: this.willDisableTeleporting,
./src/editor/nodes/WayPointNode.js:92: node.willDisableTeleporting = waypoint.props.willDisableTeleporting;
./src/editor/nodes/WayPointNode.js:106: willDisableTeleporting: this.willDisableTeleporting,
./src/ui/properties/WayPointNodeEditor.js:13: "waypoint.label-willDisableTeleport": "Disable Teleporting",
./src/ui/properties/WayPointNodeEditor.js:22: "waypoint.description-willDisableTeleport": "Avatars will not be able to teleport after using this waypoint",
./src/ui/properties/WayPointNodeEditor.js:34: "willDisableTeleport",
In Hubs we have willDisableTeleporting:
./src/gltf-component-mappings.js:116: willDisableTeleporting: false,
./src/systems/waypoint-system.js:390: willDisableTeleporting: { default: false },
./src/systems/character-controller-system.js:177: (!isMobile || this.activeWaypoint.waypointComponentData.willDisableTeleporting);
./src/systems/character-controller-system.js:178: this.isTeleportingDisabled = this.activeWaypoint.waypointComponentData.willDisableTeleporting;
./src/react-components/object-info-dialog.js:181: willDisableTeleporting: false,
pr closed time in 10 days
issue closedmozilla/Spoke
Way Point option Disable Teleporting is broken
Just testing out the Way Point element and tried to apply the option Disable Teleporting but after clicking on the way point I'm still able to teleport. Using Chrome on desktop.
Wasn't sure if this belongs in Spoke or Hubs.
closed time in 10 days
SeanBannisterpush eventmozilla/Spoke
commit sha a007e434e4800529e1c32f8369222ea35c7ffd52
Update REMIXING.md ... you account -> your account
commit sha de87289da846af20da81a0aba7766d7d26ff1c5f
Merge pull request #962 from MarcusMorba/patch-1 Update REMIXING.md
push time in 10 days
push eventmozilla/Spoke
commit sha bac3ec0314eaf7367b204f5a54f46723f55fe952
Better describe what the Link element does.
commit sha 4f83b60f2bf0a261cec35e38fbfa89863681d8fd
Reuse existing project when importing
commit sha 8d2742fedb1064cc803b969e444ae3214b089cbf
Fix tests for alpha properties
commit sha 05b9db37a4dcde8943fad985ed59826203a1f8a8
Replace remote assets with local ones when possible
commit sha ddf441cf6738c293c392d6309e280bbbcfd10469
Merge pull request #1001 from mozilla/fix/update-test-snapshots Fix Test Snapshots
commit sha 069087b41c9efbe092a439e804943432c219c87b
Merge branch 'master' into fix/import-project-scene
commit sha f7fe635beb4d3828ef4c378906718199b5402194
Run tests serially and update ava
commit sha d2326b68cdb6d8b5edbcea30a89e4a47491a6654
Update node version for ci
commit sha 2598831ba7b5a766a56bfeb05b3b6a46130e5339
Try chromium in ci instead of chrome
commit sha fc5dcb821f9cdb8ca84a51bde12ad110caa88911
Update test snapshots for webm video
commit sha a1d5d66fb76b58b489fe7ee316e8f6a3381051a4
Try running headless
commit sha cf8d7c220b858cc71071aeb6128ba82e0d126aa0
Add test reporting
commit sha 6e3062a19871bb894e8fd8f9add8f47b79544577
Test failure
commit sha 5cb0722971da5656e6de04b39eda5b28b8f204e0
Fix test
commit sha 544aca50606cf9171ae9c52d33552d3692c70545
Merge pull request #1004 from mozilla/fix/update-test-snapshots Move to headless chromium and add test reporting for CI
commit sha db9eb59a81b65fd7d5390e69b54525a855003af6
Merge branch 'master' into fix/import-project-scene
commit sha 1619d20999b9534d14c4742c3ea6de5bb29a654b
Merge pull request #1000 from mozilla/fix/import-project-scene Reuse existing project when importing
commit sha 360f8129f493a06c57362c16c9289dcf329e389d
Mark scene modified after importing project
commit sha 4f488795c1a4342f6a4d74e5b9595819481d776b
Merge pull request #1005 from mozilla/fix/import-scene-modified Mark scene modified after importing project
commit sha bd2b001b2339131ce34262490729466514cb80ad
Add ScenePreviewCameraNode
push time in 10 days
push eventMozillaReality/hubs-docs
commit sha e9e7c36000fce76bca6dfe969c8325342870dbd3
Update query string parameters
commit sha 6dc0fba212f8e7301cc7a21d8c50e5f28fcbc18e
Merge pull request #75 from MozillaReality/update-query-string-parameters Update query string parameters
push time in 10 days
PR merged MozillaReality/hubs-docs
Corresponds with this Hubs PR : https://github.com/mozilla/hubs/pull/3179
pr closed time in 10 days
push eventmozilla/hubs
commit sha 9655b732617531fe4a6b4a4099058116bbd950f8
Reintroduce query string quality settings
commit sha 6c996cc5136505c283a6cf1ac1cb69a3e47476cc
Rename qs parameter enabling touchscreen
commit sha 7009922de0416d78648a1d24dd855a201e030f77
Don't need try/catch
commit sha 3694931de7434a1032040581a60c0b2da349027c
Merge pull request #3179 from mozilla/feature/query_string_quality_settings Set quality setting with query string parameters (again)
push time in 10 days
delete branch mozilla/hubs
delete branch : feature/query_string_quality_settings
delete time in 10 days
PR merged mozilla/hubs
Fix https://github.com/mozilla/hubs/issues/2937 after a failed attempt that needed to be reverted (https://github.com/mozilla/hubs/pull/2959)
pr closed time in 10 days
issue closedmozilla/hubs
Set quality setting with query string parameters (again)
Is your feature request related to a problem? Please describe. We used to set the quality setting with a query string parameter. I removed this feature when adding the preference screen, thinking that it was best left as an end-user feature, and didn't want there to be confusion on the part of the end user in cases where the query string parameter did not match the user pref.
Describe the solution you'd like Re-enable the ability to set quality via query string parameter. If end user has a specific preference saved, I think the user pref should take priority, but if the user does not have any preferences, the query string parameter should take precedence.
Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.
Additional context Crimson's team ran into this problem because they wanted people's default quality setting to be "low" instead of "high" but couldn't do this with the query string parameter.
Also update the docs when doing this : https://hubs.mozilla.com/docs/hubs-query-string-parameters.html
closed time in 10 days
johnshaughnessypush eventmozilla/hubs
commit sha 7009922de0416d78648a1d24dd855a201e030f77
Don't need try/catch
push time in 10 days
delete branch mozilla/hubs
delete branch : bug/environment-transition-to-same-scene
delete time in 10 days
push eventmozilla/hubs
commit sha da0d47e52cf2c20354713b8bdd936d2cd559ab9f
Fix scene transitions when src url does not change
commit sha a1c1fec82f1b57c52e52202da654b25c97608a40
Merge pull request #3088 from mozilla/bug/environment-transition-to-same-scene Fix scene transitions when src url does not change
push time in 10 days
PR merged mozilla/hubs
If the src of the environment's gltf-model-plus doesn't change (which might happen if you are going to/from the loading scene url on purpose, or if two scene transitions occur in rapid succession), then update is never called and you can get stuck with a black screen because the transition never finishes and the fader never fades back in.
pr closed time in 10 days
push eventmozilla/hubs
commit sha 769e364eefbcb6483cd4b92e1d45226361e2bd81
Fix bug where audio is not initialized in the correct place
commit sha 4639c97528e26ade810f4574ff003e90be601f96
Merge pull request #3121 from mozilla/bug/invisible-audio-nodes Fix bug where invisible audio nodes initialize at the origin
push time in 10 days
PR merged mozilla/hubs
Fix https://github.com/mozilla/hubs/issues/2855
pr closed time in 10 days
issue closedmozilla/hubs
Spatial sound appears to be coming from the wrong location
This remixed scene contains a spatial audio source co-located with a model of a radio. However, the sound is loudest on the boardwalk several metres away from the source.
Tested on:
- Chrome Version 85.0.4183.59 (Official Build) beta (64-bit) on MacOS
- Firefox 79.0 (64-bit) on MacOs
closed time in 10 days
rawnsleypush eventmozilla/hubs
commit sha cb9f4d5eee6b0e74a3669e35a06a150f868118e5
Use audio listener for distance based attenuation
commit sha 1cbe651cc533d4eb72ee42eb53aad4f1d882c4aa
Merge pull request #3118 from mozilla/bug/audio-listener-for-media Use audio listener for distance based attenuation
push time in 10 days
PR merged mozilla/hubs
Same fix as https://github.com/mozilla/hubs/pull/3090 but for other media objects in the room.
pr closed time in 10 days
push eventmozilla/hubs
commit sha 66d42147c56050e8d773a83e8e53b610cf78e5f1
Align buttons to center Adjusted top margin for object-list-button, presence-list-button and corner-button to 20 to give the desired centered effect. Fixes mozilla/hubs#1132
commit sha e02d1497904ff87c8be981f9e35d61f659636a59
Fixing exception and black screen on Quest, when Quest is in Hands tracking mode. In the hands mode, the controllers are emulated by the hands. They are represented with the gamepad object with a single button and no axis. Current code expects to have two buttons and two sets of axis, which causes an exception and malfunction.
commit sha 13e912f8205a4fb28e624988c953669713ba3483
remove create button for avatars
commit sha ed15a0bc2347c7963fce828fe00fcfe8c29601c6
Remove space from event name
commit sha 87acd54b355652d58f74f0036e79d89eef1ea31a
Update loop-animation struct
commit sha c19208155e3f05e44d7191b7fa769f2960c2014f
Update loop-animation schema wip
commit sha 274f076a8f60abb23e6d20db3201ec0bdd5a2cbd
Add ability to inspect avatars
commit sha ecaf2680282a6afbbea6bb239869bd49743af44f
Add ability to inspect yourself
commit sha bf2345a53e535708e2bec826ad788f571cf92c10
Fix avatar inspection when lights are hidden
commit sha f817cef2d1555e02b31def173e3cb6f7a0d760a8
pt-br translation add brazilian portuguese support to hubs Co-Authored-By: peusodre <[email protected]>
commit sha e39145942f59855d92461158b211148c3b831373
Use audio listener for falloff, not camera
commit sha f6e481fed049393162d5ae510c65982d9fb3e30a
Fixes the room description scroll
commit sha f6f27244b1447b9e9cfd55fdbd50eddb2e13e5ce
lint
commit sha 6bdfb566965f396fd11bd3345ebdb585f4b59f85
Add user-submitted Japanese translations
commit sha 04bd46828fdc19ba06bdf3fbf67eb2e1771f3032
Ran node sync_locales.js
commit sha 20d5d115138205a2306a7868c18cfbd722f65bfb
Get the device Id from the audio track instead of the outbound stream
commit sha 695c28963e239cad8c88aa66e9cbdcc1dccf3e4c
Smaller box, Don't write to depth
commit sha dc92e8da2a7d39a9623cf9a549aecf7f30577614
Merge remote-tracking branch 'origin/feature/inspect-yourself' into feature/inspect-avatars
commit sha b80abf7eea3f7dd30afe031795f3e8cd11f97a0a
PR feedback
commit sha 139f2656d19678a05ff8c1eecbe90bc4b6125517
Rename avatar-inspect-collider
push time in 14 days