From 226d35a1c39105751e81265403acdd799aca2719 Mon Sep 17 00:00:00 2001
From: Dominick D'Aniello <netpro2k@gmail.com>
Date: Fri, 8 Dec 2017 15:59:45 -0800
Subject: [PATCH] Add quick and dirty 2d mute state indicator

---
 src/assets/hud/muted.png                   | Bin 0 -> 713 bytes
 src/components/2d-mute-state-indicator.css |  12 +++++++
 src/components/2d-mute-state-indicator.js  |  38 +++++++++++++++++++++
 src/room.js                                |   1 +
 templates/room.hbs                         |   1 +
 5 files changed, 52 insertions(+)
 create mode 100644 src/assets/hud/muted.png
 create mode 100644 src/components/2d-mute-state-indicator.css
 create mode 100644 src/components/2d-mute-state-indicator.js

diff --git a/src/assets/hud/muted.png b/src/assets/hud/muted.png
new file mode 100644
index 0000000000000000000000000000000000000000..7a15a9ea9e9125e04739214c0fad7c0226d5eca2
GIT binary patch
literal 713
zcmV;)0yh1LP)<h;3K|Lk000e1NJLTq002k;002k`1ONa4|Kxkj0007zNkl<ZcmeI#
zJxEny9LMqJLKY1bEky(trKv<gL(o`67!JLty;!s~hBgF2YX%jyHZ>HNE`<p}TSPR9
zN(40&k-6jxXhl@Yz4u7p7XQ%0t@FQ!|I=f``Ti!K=YSu4JLvxJ^78U1&_RiDs#N&E
zJr3e*b6B>WQNVAQwxt5?=Ldi4JNv?e8W`ZH^40M<KB+A%sDVd7HHB1Ql(dGzfrLXU
zsROO{aG(JIg;YYT7!K4)RV9t1HD(88Ayv^ThXm=Q3G{-3G*S~2F+oB~bW%)^Mrvjv
z0?0&)0Mbd55kLy5Qzh9!%DQw?T#!cE#$*JLi4*~(lcpkoOr!`PM|Uczg(*8IJjo6U
zPl^W;5~-x=*dWJ(PKpmoBegR9Z$MR~M(=zM6w+4jqfJO<8|X9A4)6ROwIx2u+b*OT
z8|XFC5%2siWFmDTy|jTIB3<^*4?rf;Riu&)bOC7?|7Iu?=><}s4YU)Gn(=?Nztv4@
z0;Coj$nh5G7XHoNx=EY)2mrjoSwR<(Dr~{OYpwem*R)7FZwIaBE7EfcHTUfl8KX>v
zHzW$_3#;rP$0b1OPk+ZLq_emXpcUSq!CnI?*t=}E_i3(Bu#;>c$2orQ8I5+54dl4t
zk><I^`oBKg2Og;_EJ$_}zcPdLu)%v~BWHL_0y@bKa`ci=+bknI<q0Fq;HQ&}AjclY
z&@+%6S+|mY<^jDqiY(|P9i(p^*O?`)Pm4eFr*)DQBx~Rhw|UP`{KmP%VU{D$oytaX
zShvRGti{!=M<E3UIsN~6ofI3SlcIwhCv{R>kmH0-iVD(6@j;H`BuH>SCP*g@vMdHj
v-!T&5!~yB+=7Dewpg7AxIVcC^przg~#hg<!eyoJF00000NkvXXu0mjf^b9-u

literal 0
HcmV?d00001

diff --git a/src/components/2d-mute-state-indicator.css b/src/components/2d-mute-state-indicator.css
new file mode 100644
index 000000000..9713edb2e
--- /dev/null
+++ b/src/components/2d-mute-state-indicator.css
@@ -0,0 +1,12 @@
+:local(.indicator) {
+    position: absolute;
+    top: 10px;
+    left: calc(50vw - 16px);
+    width: 32px;
+    height: 32px;
+    background-size: 100%;
+}
+
+:local(.indicator.muted) {
+    background-image: url(../assets/hud/muted.png);
+}
diff --git a/src/components/2d-mute-state-indicator.js b/src/components/2d-mute-state-indicator.js
new file mode 100644
index 000000000..95df937d8
--- /dev/null
+++ b/src/components/2d-mute-state-indicator.js
@@ -0,0 +1,38 @@
+import styles from "./2d-mute-state-indicator.css";
+/**
+ * Shows a 2d incicator on screen reflecting mute state
+ * @TODO this probably shouldnt be an aframe component but baring any other 2d UI handling it feels cleaner here than jsut free-flaoting
+ */
+AFRAME.registerComponent("2d-mute-state-indicator", {
+  schema: {},
+
+  init() {
+    this.onStateToggled = this.onStateToggled.bind(this);
+
+    this.muteIcon = document.createElement("div");
+    this.muteIcon.classList.add(styles.indicator);
+    document.body.appendChild(this.muteIcon);
+
+    this.updateMuteState();
+  },
+
+  play() {
+    this.el.sceneEl.addEventListener("stateadded", this.onStateToggled);
+    this.el.sceneEl.addEventListener("stateremoved", this.onStateToggled);
+  },
+
+  pause() {
+    this.el.sceneEl.removeEventListener("stateadded", this.onStateToggled);
+    this.el.sceneEl.removeEventListener("stateremoved", this.onStateToggled);
+  },
+
+  onStateToggled(e) {
+    if (!e.detail.state === "muted") return;
+    this.updateMuteState();
+  },
+
+  updateMuteState() {
+    const muted = this.el.sceneEl.is("muted");
+    this.muteIcon.classList.toggle(styles.muted, muted);
+  }
+});
diff --git a/src/room.js b/src/room.js
index 4124d5fd7..f5b3a8ec9 100644
--- a/src/room.js
+++ b/src/room.js
@@ -21,6 +21,7 @@ import "./components/mute-mic";
 import "./components/audio-feedback";
 import "./components/nametag-transform";
 import "./components/bone-mute-state-indicator";
+import "./components/2d-mute-state-indicator";
 import "./components/virtual-gamepad-controls";
 import "./components/body-controller";
 import "./components/hand-controls2";
diff --git a/templates/room.hbs b/templates/room.hbs
index 5a8696621..74629e56a 100644
--- a/templates/room.hbs
+++ b/templates/room.hbs
@@ -40,6 +40,7 @@
                          onConnect: App.onConnect;
                          connectOnLoad: false;"
         mute-mic="eventSrc: a-scene; toggleEvents: action_mute"
+        2d-mute-state-indicator
         light="defaultLightsEnabled: false">
 
         <a-assets>
-- 
GitLab