From eb1a9a1fa7648ba076fe735283c2cb7852f1b583 Mon Sep 17 00:00:00 2001 From: konsti219 <37149441+konsti219@users.noreply.github.com> Date: Tue, 5 Mar 2024 00:19:09 +0100 Subject: [PATCH] Show Headset Battery in VR Overlay (#742) Fixes #741 --- Dotnet/Overlay/VRCXVR.cs | 30 ++++++++++++++++++ html/images/headset_quest_status_off.png | Bin 0 -> 10848 bytes html/images/headset_quest_status_ready.png | Bin 0 -> 10622 bytes .../headset_quest_status_ready_charging.png | Bin 0 -> 10623 bytes .../images/headset_quest_status_ready_low.png | Bin 0 -> 10623 bytes html/src/vr.js | 23 ++++++-------- html/src/vr.pug | 6 ++++ html/src/vr.scss | 1 - 8 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 html/images/headset_quest_status_off.png create mode 100644 html/images/headset_quest_status_ready.png create mode 100644 html/images/headset_quest_status_ready_charging.png create mode 100644 html/images/headset_quest_status_ready_low.png diff --git a/Dotnet/Overlay/VRCXVR.cs b/Dotnet/Overlay/VRCXVR.cs index 96bbcf52..5711a6a0 100644 --- a/Dotnet/Overlay/VRCXVR.cs +++ b/Dotnet/Overlay/VRCXVR.cs @@ -331,6 +331,36 @@ namespace VRCX IsHmdAfk = isHmdAfk; AppApi.Instance.CheckGameRunning(); } + + var headsetErr = ETrackedPropertyError.TrackedProp_Success; + var headsetBatteryPercentage = system.GetFloatTrackedDeviceProperty(i, ETrackedDeviceProperty.Prop_DeviceBatteryPercentage_Float, ref headsetErr); + if (headsetErr != ETrackedPropertyError.TrackedProp_Success) + { + // Headset has no battery, skip displaying it + break; + } + + var headset = new[] + { + "headset", + system.IsTrackedDeviceConnected(i) + ? "connected" + : "disconnected", + // Currently neither VD or SteamLink report charging state + "discharging", + (headsetBatteryPercentage * 100).ToString(), + poses[i].eTrackingResult.ToString() + }; + _deviceListLock.EnterWriteLock(); + try + { + _deviceList.Add(headset); + } + finally + { + _deviceListLock.ExitWriteLock(); + } + break; case ETrackedDeviceClass.Controller: case ETrackedDeviceClass.GenericTracker: diff --git a/html/images/headset_quest_status_off.png b/html/images/headset_quest_status_off.png new file mode 100644 index 0000000000000000000000000000000000000000..bc24bd979227aad27a1b0fb03c90be73b468b3db GIT binary patch literal 10848 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 literal 0 HcmV?d00001 diff --git a/html/images/headset_quest_status_ready_charging.png b/html/images/headset_quest_status_ready_charging.png new file mode 100644 index 0000000000000000000000000000000000000000..7aa497a0277d266efca87a4cdfce6c99f1dff22e GIT binary patch literal 10623 zcmeHM3wRS%zMo0jvJ%aLW@V@L4u`;%I30E-Rnsonx(+ z*ScMmj%rHoZLFo_RD+|EAR3O>ls%Fn9-SEQrR9qfcQlOfef4_o#p?t1IFB~3)hM1D zm^HHFYkhuFx@pP$*P9=ny8GEjuB}fr_AHFMC$GS?%=q=8`A=>d`)=v3`=0f`_q%n! z9JSy*_uw_kjLRpgM)cemo2Fh{WB1=vShMrNdy{*{<2rEyjC(|rgG@+LdV3d?F(f1ZR%6+{c7!Nzj>kI(K%HE&py77Hg;^>yWB?> z?rbUd$Wz{0Pub^6x0L;ChU^ z+rE1Kk+P?49}g@!GXBx=+cwpnI8-<9on<7^pVe&ym~Zl&b-2m^rxQtsyKP+ zyr){5p07~MydX_www?X*xtZf0O8)JLQo|n$-GOgcbS`hMY^?j#A{+P1-NU{Ky&Nan zS@0(HP20ZalO{6oHdl?xYIjvos)m|cSa$@GH>IK0YFkWsLB(?FauCK3G z)$3I*_ae2{WHPBWI<-!x1Pi67(do4|D4m{66avR6raU&cqt@$iIprv(wZgU3o3BuS zUe4pIskK?14(K$Wc?vdO@+HEWM7(NU@@@ zAq`7M2n5{2aigqx?yNCbSuEyamu)G6S6ZB}K>5vfm(5`}WpO*!@)rO{|LDh)bqrP8Fc zRw``AK!gM-ntcxght#c8pKm|8XEi27e=u|i>D=DkCdMm*Jo&kr` z?yC1hjLRK0)LgF>)l-|RG3iXXxh4aA=9n;X*8f4u?SZw3qG~lNJqCd$#td|zv{tlI zApp|vu|H2Fqx5*Bw>h zj*RE5|H&N&;!vV@e|f(rxSK=LHR@(4*BBbH3xv5BaH z1aJB}eXqP~3mo{O>2_q|`ckB8#!j2GSX9aA8Yq@@1y{XMJ25{Ybr<-X-a0Dfr? z#1kYCLZsLm#z=;AtUNr%ax#d0unow9_$GyRtPE<2S|ksTv5XAG6A2}=myl9f3jMe3 zFA*UzAsVkN=#3eTV~7kJn>G3R=_^O$;w93&>Z(o2X?Kq!Xh?zxAkbkTJSh$YOEwyO z3>jp@5ekFm;*ntzJR#J^5u&?>kCZwZH<5|bq|k{I`$c1wllvlqXH}q?y107t2(7M+ z-CbbP(Hus0n#jW%mV*tpg}j13?;isHupE{O8Y3N+MdC%vBX-yp>}c8-ijySJ2lu^8 zuUq+30c5rt^NggXjm%=J56RGlS1`{PwYQh^8r}xCvA#H}P>wVGpr0sSN`y#4G*q62 ztb1QEL}ap|8A2jBDRM)J1<6UlL&`?QdTb%E<4O_Z&xXW4to#3|KoBKqcm}qQ{){0a ziMuN`L`MTbIe6GnWVqx6kcxoeErl}hVr_cKcz-rQv<~Nq$k-l=k&v1iO#zQ$i14!! zc4X~v!0Q#3IxYsU!NK?uYH^=!*{)#B8b^QJmIzy?xfFu({g=tJGPAaj3E;EzUR7FlnO++WJ2KK{JoQ-n7w7#7-Qre zp~e4Ldz=F6c+w$X$Cc|%EA7GWjkqf&zPI?`1!Ja~Ap?j4A$$AtW_noCU|*p;*Jl|sRZ{Fctk%9V{i{n|dl8wKH~ZBK zCl9g@Jbx77-{@=`dBd|umZ-Nmeyig*f3G(@fBX=%_)U)A-uw|IaPib(|Iuyllr&EJ zvoA~nUY!@OwYOF`%}H3g_1Eb2$}joYyUTTD-n??&mwyf6tMl>G9if4R~VynL-EcttdBZFZ>bY8y`i&59WQqp8ms zLBdlfo8CCo^5WxoHsXnn3x^Nv`C#6(1Ani2=-B6LR=cf4wDE2N4AI< z0xclHE-9o#GDaHD(6DU$G|kQgkU%rjJz>zOiGyT@K!~A_b@&bv0UD+XFD*obp=tWI zM3Ca(!6$yc=R@mHzwbPMG9^hlQKeh;%&?5&89|!96}7}zkN|{zUJwCpCU`jylp_#+ zR>Fi}i9w$vk`hAQ9p@684sJ&T(2ao7(-j5&ZS&s>z{8;%HE@O~Gi3~tqnl*F=D>v( zgg0jUMMC~Mdv5Dr&z*06cj%DG1w)1v6pk6^T9P15&+vD3wv%wA4#9RBgxwR4+N4O5 zlEUuDXgB3=)Mfkd!OOTV8i(i`H$o)Cz@Zjmz>lYC2K^_WH?JJc1R!Kk#2}ymcu?c6 z=TCr1*W)HPR19RWlOY{L69b+;vH=8ac+~!AE=jU{bdEthtNon^*5Jwqi7P|bqz#rz zGRU?CtwIvPUFSY-duVq7Pzs8FGz>T(!Jf{}?=HokmY=^w`=^h}M`Q+!yGs?S`H7tz zA{oNZMDWA&doDe^ch)V2xrJQOg#T!-tW>E+ydrm*|Gtq0;xx$+=2nl7+kwH2$jR%%6UwW6X@_W}w;$Ts)B`(E-wurr=BJ=1fBr^&tdU%&6a z%e&#V+=nKH@#FXyhK1#1XG{gH415G3T=1P6KRO;XH4E}**rw{r1*H~qp|O|{*yfiK z0;0lLh+!3HN^-~dsS$+ixwB*}&WZlJzR#Gt!L1#fgq1&+4f-j1MRcY6xzq;T;>yar zs+ra-&h$-N)<>=>dNJts1$;?$uQ>y2le5CArqymRY#w*1LAGLI-ZE3x)`bO+_gz;1 z)ZRCo#MZw~9&F0DZ)mIvF&+DLhh+LlySRAJ^uuRo9oV|vWfg0_9CB?;lzwg6y2%GV z!?zwy({jR2%`K|B_R)s*F{-*s=juA%UF__NN5i%67xu<5{3T<0dTvg7I!yv>e`mEc>#}yra`=g!7{7szT=VLa6 zC)R$U*~wpYA!6}oFE0Jy^}kg-HMOYsrI!ymlAEe)7TWO%yKD2Ug79^#2tyukOYY3* zpv}!SuL=r6a=t%Nx9gjflp8my7p(v7gOnq?n||PrOjwGKtxB%7)d!;FoZ{X;E9dcV=e~D}J$1%}xY)&S|CkXrZ^q)|o2m+gldkY0JUcJ_@b;u( z)5G2vn4@@qg2j2^`R0Y&3+I;|)bfYD@O8gm+$-3u-DzuyU(O%eUa!WTKYX?9)E(8C zubjiLeOeu(W@T-!eEmlCuqJ%@n6G|bni%`ekPaiSQP%ui*7PO5N*Hdl~twh#hEq9Rcu z%B(P!$%JG1f)tCPP%||niwXfoslp z`6ipLLS(WIfgwI%&BY^g#a&~>$uYc)0OEF2upcfOx zLLRgy@pQYuAyLQW(plJ#S!|fwT zL6e?sw1WKeNfFvpdBj{aLc?MsxtRn4a$9J0dPKphDmaR4e+Ca1#Gd~ZSoAzS73itJ|3d}v-y_Kl6QCPq8Nc>x{r;|Pw)Kh z`%U*E!|qNID@n*2GxxEz->=zbZoY8!c-kvZ9{_&>1*YHwz@i7oaI(*o`*g_8rvuhr zKc>zX1E?ACNP94DU$t6~vDw^^Ip%ft_9c^CC+c=nf&7{PA~=f`q%urfar~pb&z;?Q zc)4Jl@=46W1uz&uyo6{e&;@{ic_<>3J&NEjgEn3{BL;~QjB#FQM90q0-}10HZ0;=M zN_$yx0_JwR{8)eitE-^@sG(_GZg|AcpYMMwh|A@V)c$25<^+FfcXBWs5Q3!04;Vuk z)RA)U7|C%L@l;Wa|VNnByVGfW45`dt+Kxk4F2$HNn_y97{h9cwzO~u2# zBxpjgWn-+!{)2eN`5W;NUa0%**~6>^(b(>Ypjl;T#?L92MBxCyj5j zdgZ_d*@C=`KJD)Y{$4p)DsT*SNal;@FZbCYTVUsK*xhVyu;bXFt&ZiD4>KT>-GDt3 z5jAKyS$&WUK4=Bgd|`WUIjx~>P#frrqB7+u)9?DRI6TaaW2_j#aA@822_VAf$HXy- zprp_ZCT1kZ8Jm=hiuA~WVMmoBz@H3>d`S2Is6Ze}X#Y55@BbY@gv*YMa69~gz#KGe zKQdHu43P4Hp)Hv*;6>VWkf1rVWU!|O=ep@80HhLn^B z>HNt+6;sair*u>dT7!boBiN!o*^*txm^AkPx+f8`NZkZO;i#b0Owe<{B!hByN$xju z5D3sCLkgAu*x68bsPoL>FI;zSUG;R@+dN!eFRbr?cz+6L6hOq$=4uTJ=7-Y8BuHj5 z0EQgWB)w#SM;D-IIl)LifG8A-fO3F%NJtIAiPhfnTkD<`FW3*RUCNFcn7|6_6Enqi z;el3%yRo+R?&j;r((gNfh_kh`C5ROPh)~Ixz`gmqCWkS*%8)U_NIQZS{U_~F3Z$b+ zyX{RkTQ*f1I)2)_W!{5*pRtYZ^-Qq4GuY#b1@AH72G0GO8}0i{byp1+?2dCVGkgMw zblhpb6~f~VU}OYlbauLhu8cl&CJ-*5raE*>y3jJpzpKoHdG37i?z51@ft>hb4@L%y zA$SkCI`3|5+uoZU)K?K2qDl?tk3XmsoXGp}^29?e_8J%_;LU#PO8qf%!_!w0`i)Mu zzBfF1W$}BPqqjPG^LKf})7KA1i{9ku?M+`%oLA4C=s30W)0LXI54|Lu9_&V&>-rN% z8mGQ-=GIGaMm#_k;=y?z4~yFp%?XO>mdNFE-)x6ONI(<`@`?hlCtb;atBcPLfFiFO z%xerK1J@7I4qihTWM~5LDgyhCYv)c1*=6qR>{0T?` z%Ah_H59)31*QcUeA{Wnpxuw0O=~t2r1n&Jn5KJ;?9B}{g1L{9B{v_Bwa*&_{ce-xh zx|$OgrlqS6+m24p-Rg$s<%2>vgSCA^^Jo&Z&7`nio zHQru-v(t6smcw;3{b+--q0MogCIQNkB{SG(+GG#ebO>B@=k_V1XH z_1%|6(@!6HXAwyNR-RsZBydCk=@1DoaA*sOLC_2mCG{hlh$rC(0Hr=@*xg z?Q%Ho`YkaMBmhG07f67b30h7Ar3iTUikA>rVxW&>p~3F)|lwAY0>@CCJY^Bo*T@I zjqAA6d>sc@YBxAqUEo9oS8bfd4G$+zWO%~TAJ`@P;ER?~T{w0-Zr^s}9uK(GlGl4~ zltTWG^V=)mbYgCn3uD1!7m`_dxv2_V^W9I!L|VKgsSW>OOUoLF7l!{+J=`!s{H(~9 z$%}_Xze9r_dZa$8KZhMxlkmWCayBRuhuZ81rd+w428OPnKNSlA#?{%}{G%hhf$eN} zsC)5JA(>Gj!HG}w4mb40gQ9722iw~BKX&cP;sAIjJ?Vb-F50RfL} Aod5s; literal 0 HcmV?d00001 diff --git a/html/src/vr.js b/html/src/vr.js index 7cd615e3..fbf10596 100644 --- a/html/src/vr.js +++ b/html/src/vr.js @@ -446,22 +446,19 @@ Vue.component('marquee-text', MarqueeText); if (device[0] === 'base' && device[1] === 'connected') { baseStations++; } else { - deviceList.unshift(device); + deviceList.push(device); } }); this.deviceCount = deviceList.length; - deviceList.sort((a, b) => { - if (a[0] === b[0]) { - return 0; - } - if (a[0] === 'tracker' || a[0] === 'base') { - return 1; - } - if (a[0].toLowerCase().includes('controller')) { - return -1; - } - return 0; - }); + const deviceValue = (dev) => { + if (dev[0] === 'headset') return 0; + if (dev[0] === 'leftController') return 1; + if (dev[0] === 'rightController') return 2; + if (dev[0].toLowerCase().includes('controller')) return 3; + if (dev[0] === 'tracker' || dev[0] === 'base') return 4; + return 5; + } + deviceList.sort((a, b) => deviceValue(a) - deviceValue(b)); deviceList.sort((a, b) => { if (a[1] === b[1]) { return 0; diff --git a/html/src/vr.pug b/html/src/vr.pug index d03a0199..ca1ef0b6 100644 --- a/html/src/vr.pug +++ b/html/src/vr.pug @@ -434,6 +434,12 @@ html .x-containerbottom div(style="display:flex;flex-direction:row;flex-wrap:wrap") div(v-for="device in devices" class="tracker-container") + div(v-if="device[0] === 'headset'" class="tracker-device" :class="trackingResultToClass(device[4])") + img(v-if="device[1] !== 'connected'" src="images/headset_quest_status_off.png" class="tracker-device" :class="trackingResultToClass(device[4])") + img(v-else-if="device[2] === 'charging'" src="images/headset_quest_status_ready_charging.png") + img(v-else-if="device[3] < 20" src="images/headset_quest_status_ready_low.png") + img(v-else src="images/headset_quest_status_ready.png") + span {{ device[3] }}% div(v-if="device[0] === 'leftController'" class="tracker-device" :class="trackingResultToClass(device[4])") img(v-if="device[1] !== 'connected'" src="images/left_controller_status_off.png" class="tracker-device" :class="trackingResultToClass(device[4])") img(v-else-if="device[2] === 'charging'" src="images/left_controller_status_ready_charging.png") diff --git a/html/src/vr.scss b/html/src/vr.scss index dcdb25ea..5216ebc6 100644 --- a/html/src/vr.scss +++ b/html/src/vr.scss @@ -414,7 +414,6 @@ i.x-user-status.busy { } .tracker-device img { - width: 32px; height: 32px; transition: all 0.25s linear; }