From 9bdeea60b879ea7c799afbbd33434de910b006db Mon Sep 17 00:00:00 2001 From: netpro2k <netpro2k@gmail.com> Date: Mon, 2 Oct 2017 18:25:27 -0700 Subject: [PATCH] Add back mute-mic component. Edited to work without rig-selector --- public/index.html | 2 +- src/components/mute-mic.js | 72 ++++++++++++++++++++++++-------------- 2 files changed, 46 insertions(+), 28 deletions(-) diff --git a/public/index.html b/public/index.html index 1bed1fd36..87e8d902c 100644 --- a/public/index.html +++ b/public/index.html @@ -9,7 +9,7 @@ </head> <body> - <a-scene networked-scene="adapter: easyrtc; audio: true; debug: true;"> + <a-scene networked-scene="adapter: easyrtc; audio: true; debug: true;" mute-mic="eventSrc: #right-hand; toggleEvents: menudown, xbuttondown"> <a-assets> <img id="grid" src="assets/grid.png" crossorigin="anonymous"> <img id="sky" src="https://cdn.aframe.io/360-image-gallery-boilerplate/img/sechelt.jpg" crossorigin="anonymous" /> diff --git a/src/components/mute-mic.js b/src/components/mute-mic.js index 6469c50cc..12c1ad397 100644 --- a/src/components/mute-mic.js +++ b/src/components/mute-mic.js @@ -1,53 +1,71 @@ +const bindAllEvents = function(elements, events, f) { + if (!elements || !elements.length) return; + for (var el of elements) { + events.length && + events.forEach(e => { + el.addEventListener(e, f); + }); + } +}; +const unbindAllEvents = function(elements, events, f) { + if (!elements || !elements.length) return; + for (var el of elements) { + events.length && + events.forEach(e => { + el.removeEventListener(e, f); + }); + } +}; + AFRAME.registerComponent("mute-mic", { schema: { eventSrc: { type: "selectorAll" }, - toggleEvent: { type: "string" }, - muteEvent: { type: "string" }, - unmuteEvent: { type: "string" } + toggleEvents: { type: "array" }, + muteEvents: { type: "array" }, + unmuteEvents: { type: "array" } }, init: function() { - var eventSrcElements = this.data.eventSrc || [this.el]; - this.onToggle = this.onToggle.bind(this); this.onMute = this.onMute.bind(this); this.onUnmute = this.onUnmute.bind(this); + }, - for (var el of eventSrcElements) { - if (this.data.toggleEvent !== "") { - el.addEventListener(this.data.toggleEvent, this.onToggle, false); - } - - if (this.data.muteEvent !== "") { - el.addEventListener(this.data.muteEvent, this.onMute, false); - } + play: function() { + const { eventSrc, toggleEvents, muteEvents, unmuteEvents } = this.data; + console.log(eventSrc); + bindAllEvents(eventSrc, toggleEvents, this.onToggle); + bindAllEvents(eventSrc, muteEvents, this.onMute); + bindAllEvents(eventSrc, unmuteEvents, this.onUnmute); + }, - if (this.data.unmuteEvent !== "") { - el.addEventListener(this.data.unmuteEvent, this.onUnmute, false); - } - } + pause: function() { + const { eventSrc, toggleEvents, muteEvents, unmuteEvents } = this.data; + unbindAllEvents(eventSrc, toggleEvents, this.onToggle); + unbindAllEvents(eventSrc, muteEvents, this.onMute); + unbindAllEvents(eventSrc, unmuteEvents, this.onUnmute); }, - onToggle: function () { - if (this.el.is('muted')) { + onToggle: function() { + if (this.el.is("muted")) { NAF.connection.adapter.enableMicrophone(true); - this.el.removeState('muted'); + this.el.removeState("muted"); } else { NAF.connection.adapter.enableMicrophone(false); - this.el.addState('muted'); + this.el.addState("muted"); } }, - onMute: function () { - if (!this.el.is('muted')) { + onMute: function() { + if (!this.el.is("muted")) { NAF.connection.adapter.enableMicrophone(false); - this.el.addState('muted'); + this.el.addState("muted"); } }, - onUnmute: function () { - if (this.el.is('muted')) { + onUnmute: function() { + if (this.el.is("muted")) { NAF.connection.adapter.enableMicrophone(true); - this.el.removeState('muted'); + this.el.removeState("muted"); } } }); -- GitLab