From d210ed46365a55e3a69103a12e366a0498cbf7e6 Mon Sep 17 00:00:00 2001 From: SDraw Date: Wed, 28 Jun 2023 08:16:36 +0300 Subject: [PATCH] Update to build 2023r171ex7p2 --- LICENSE.txt | 21 - ml_aci/.github/img_01.png | Bin 173857 -> 0 bytes ml_aci/Main.cs | 58 -- ml_aci/README.md | 9 - ml_aci/ml_aci.csproj | 77 --- ml_aci/ml_aci.csproj.user | 6 - ml_amt/AvatarParameter.cs | 67 ++- ml_amt/Fixes/AnimatorAnalyzer.cs | 71 +++ ml_amt/Fixes/AnimatorOverrideControllerFix.cs | 60 ++ ml_amt/Fixes/FBTDetectionFix.cs | 57 ++ ml_amt/Fixes/MovementJumpFix.cs | 114 ++++ ml_amt/Fixes/PlayerColliderFix.cs | 123 ++++ ml_amt/Main.cs | 176 +----- ml_amt/ModSupporter.cs | 49 ++ ml_amt/MotionTweaker.cs | 68 +-- ml_amt/Properties/AssemblyInfo.cs | 5 +- ml_amt/Settings.cs | 48 +- ml_amt/Utils.cs | 49 +- ml_amt/ml_amt.csproj | 15 +- ml_amt/resources/menu.js | 13 +- ml_drs/Properties/AssemblyInfo.cs | 4 +- ml_drs/ml_drs.csproj | 3 +- ml_egn/Main.cs | 32 +- ml_egn/Properties/AssemblyInfo.cs | 4 +- ml_egn/Utils.cs | 4 + ml_egn/ml_egn.csproj | 8 +- ml_fpt/Main.cs | 313 ---------- ml_fpt/README.md | 18 - ml_fpt/Scripts.cs | 26 - ml_fpt/ml_fpt.csproj | 88 --- ml_fpt/ml_fpt.csproj.user | 6 - ml_fpt/resources/menu.js | 12 - ml_lme/LeapInput.cs | 215 ++++--- ml_lme/LeapManager.cs | 58 +- ml_lme/LeapTracked.cs | 22 +- ml_lme/LeapTracking.cs | 14 +- ml_lme/Main.cs | 1 + ml_lme/ModSupporter.cs | 37 ++ ml_lme/Properties/AssemblyInfo.cs | 5 +- ml_lme/Settings.cs | 3 +- ml_lme/Utils.cs | 46 +- ml_lme/ml_lme.csproj | 11 +- ml_mods_cvr.sln | 10 + ml_pam/ArmMover.cs | 8 + ml_pam/Properties/AssemblyInfo.cs | 4 +- ml_pam/Settings.cs | 3 +- ml_pam/Utils.cs | 4 +- ml_pam/ml_pam.csproj | 8 +- ml_pmc/Main.cs | 130 ++++ ml_pmc/ModUi.cs | 136 +++++ ml_pmc/PoseCopycat.cs | 301 ++++++++++ {ml_fpt => ml_pmc}/Properties/AssemblyInfo.cs | 8 +- ml_pmc/PuppetParser.cs | 156 +++++ ml_pmc/Settings.cs | 120 ++++ ml_pmc/Utils.cs | 79 +++ ml_pmc/ml_pmc.csproj | 46 ++ ml_pmc/resources/dancing.png | Bin 0 -> 4168 bytes ml_pmc/resources/dancing_on.png | Bin 0 -> 4604 bytes ml_prm/AvatarBoolParameter.cs | 43 ++ ml_prm/Main.cs | 216 +++++++ ml_prm/ModUi.cs | 198 ++++++ {ml_aci => ml_prm}/Properties/AssemblyInfo.cs | 8 +- ml_prm/RagdollController.cs | 562 ++++++++++++++++++ ml_prm/RagdollToggle.cs | 12 + ml_prm/RagdollTrigger.cs | 61 ++ ml_prm/Settings.cs | 207 +++++++ ml_prm/Utils.cs | 39 ++ ml_prm/ml_prm.csproj | 58 ++ ml_prm/resources/person.png | Bin 0 -> 5017 bytes ml_prm/vendor/RootMotion/info.txt | 1 + ml_sci/.github/img_01.png | Bin 188117 -> 0 bytes ml_sci/Main.cs | 31 - ml_sci/Properties/AssemblyInfo.cs | 10 - ml_sci/README.md | 9 - ml_sci/ml_sci.csproj | 79 --- ml_sci/ml_sci.csproj.user | 6 - 76 files changed, 3349 insertions(+), 1220 deletions(-) delete mode 100644 LICENSE.txt delete mode 100644 ml_aci/.github/img_01.png delete mode 100644 ml_aci/Main.cs delete mode 100644 ml_aci/README.md delete mode 100644 ml_aci/ml_aci.csproj delete mode 100644 ml_aci/ml_aci.csproj.user create mode 100644 ml_amt/Fixes/AnimatorAnalyzer.cs create mode 100644 ml_amt/Fixes/AnimatorOverrideControllerFix.cs create mode 100644 ml_amt/Fixes/FBTDetectionFix.cs create mode 100644 ml_amt/Fixes/MovementJumpFix.cs create mode 100644 ml_amt/Fixes/PlayerColliderFix.cs create mode 100644 ml_amt/ModSupporter.cs delete mode 100644 ml_fpt/Main.cs delete mode 100644 ml_fpt/README.md delete mode 100644 ml_fpt/Scripts.cs delete mode 100644 ml_fpt/ml_fpt.csproj delete mode 100644 ml_fpt/ml_fpt.csproj.user delete mode 100644 ml_fpt/resources/menu.js create mode 100644 ml_lme/ModSupporter.cs create mode 100644 ml_pmc/Main.cs create mode 100644 ml_pmc/ModUi.cs create mode 100644 ml_pmc/PoseCopycat.cs rename {ml_fpt => ml_pmc}/Properties/AssemblyInfo.cs (52%) create mode 100644 ml_pmc/PuppetParser.cs create mode 100644 ml_pmc/Settings.cs create mode 100644 ml_pmc/Utils.cs create mode 100644 ml_pmc/ml_pmc.csproj create mode 100644 ml_pmc/resources/dancing.png create mode 100644 ml_pmc/resources/dancing_on.png create mode 100644 ml_prm/AvatarBoolParameter.cs create mode 100644 ml_prm/Main.cs create mode 100644 ml_prm/ModUi.cs rename {ml_aci => ml_prm}/Properties/AssemblyInfo.cs (55%) create mode 100644 ml_prm/RagdollController.cs create mode 100644 ml_prm/RagdollToggle.cs create mode 100644 ml_prm/RagdollTrigger.cs create mode 100644 ml_prm/Settings.cs create mode 100644 ml_prm/Utils.cs create mode 100644 ml_prm/ml_prm.csproj create mode 100644 ml_prm/resources/person.png create mode 100644 ml_prm/vendor/RootMotion/info.txt delete mode 100644 ml_sci/.github/img_01.png delete mode 100644 ml_sci/Main.cs delete mode 100644 ml_sci/Properties/AssemblyInfo.cs delete mode 100644 ml_sci/README.md delete mode 100644 ml_sci/ml_sci.csproj delete mode 100644 ml_sci/ml_sci.csproj.user diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index 3b915e7..0000000 --- a/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 SDraw - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/ml_aci/.github/img_01.png b/ml_aci/.github/img_01.png deleted file mode 100644 index decfe4187f39615f6ddc6834b262056173219718..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173857 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

o2_d4CxiqUHPES+ltc1U4s<(Sz)69 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

LfG#~dv)sm= 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%0Dnqj$? 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

  • n`juGWRudX+k)HxE90o{@^^Xxe0gYBV zVf7p&vxv$Ydh2CxE6t=>w3Hl++_hMGIdHtKkNs@>zM;zBqYR6vm@6YuCbqPM8`9)8 z_s*l<1)mKMKmg`(YXS){shQ#&ld~xU1{o?TWgu%xNZB3Hd&B4z5RFPiMW$NZ&sORu z$BRCkVl!H9uwFfnL)F<^7jTa=$tS1##bLAI&VO{oX=sw<;q2R<)w@R=n>7OQE4AN{ zoNAdh0IdwYcMq7COr<~-Xc8Y13uG)P&6P?*nwBxk{p%V#qvq~d`!q@MVWR~Ec*)Pf zxzecg`l_~b55r?AyYHgteXh=2t+l@;{02QeAm^VSKHjgK<;mRiKwT7rZ=O&k5=KxZ zh@b<~UC-$ZJX>VMAGhKtJyBGytA$@XK9#k8xM}4JZY|q_#)0NCb80VZ&HEW8+FV3g z^fYUAZOyjv%sI~DZm-W;h65;gk}1nmqqus`Ypn<+>NM43WPDL=XT z8V%RvN-nkr17|pUf07lBaeIcf@V~(T589))R&`)seLGi%J@|Sso7*m6y=Y>Qv}|7f z9(31<(M+scSoVaPeik$;%RVuMFvrJVrC7$#uB+tdXj+~DB-!SGH@HzVZBl|Mh(_nV>90eoa z*8usTUf{;uh`yMOPS!W41yjx>{x1vu`p;RTFKGDT=lyM^ZPVPx!sGPsbv!`SN-kt? zB%*Rp)ZUUDCMc7)%BU(@+?nq9Zj@Q;f?bYQ3cmg22bc|;?|9o8#uM=pYEQnO(=%*+ zVEMY-{S00E45WD`j3@ANSW4 z6)D0`|DleM)+vqg2nyA~)?mByGnT83*6`PO2w)Y`->*++GMl!0`)8i%%}wvNyS>6$ zMQFY6aWs zL;qI;)r`sZ!>f2YdrW>FxpS+5YZLNeNxchNQs4GJ9kAt#hh=A30?e<=?KFzEbD;tb z?kKgMj5OGUs)}CM>R65T78n0~pbPn2h!zb`Z zIZ*08MwxtkUd1UlE^tj+0_QGGhks6}q`%u!o`*>snYdwSA#*9Bt7H8dRfULe<%|`6 zM?z5x%~MAgY*#|7=a(ZCOc+H5xzSKE`$(#ME;Y^)BRSuol5nm0y{WTNL%dlPXa{^- z70(PTf*X_)j_8J2V(7mrAPTo8 zg@swasmn7HA1vhvqW>Iqe}L0%NkYxb_#XuwZ!f`90Ox$x%FOIi;lcM7ZM z+53lcb`|kT4#DgfHAVEXgrg1V;wxj>)MUE)`G$14RKwI7S3H7B=fWHf+Z0w*|^*Durrfrm<*@!2SuVek1X4sZjei?^`!l8iP{h zLW0B>hv*kR8oxPwW45?$1A`Oe&vD<9o)M}B-olPC=r@h%Z~VXs~-zy&~Ok#1gZacV(>&*9@t z0#;?c_vITGK>4kJjRs;^&=Oy`NK)95(m+yJtW&N~018Py2E!#(tVU2z(kI+*!r)%d z0jcvX^z85L)}_WK`VW7=(}=H7D<`{i?pVd6izODCo2=(n?@LZS-?vn(9B9){K4i~*lMTzZk)uHbE4_>%*KJ?1 zZ`W<(mzOwrJg!Xi=!%!mmTkAT^K)aXDbU`jzGyYBo~hY@{l>;dea>yPfwU0mEY_$J zxtw|eXE2*5n~&QAxeGN;#)r$@e^_jR9H^#DW|7E5q)~>Yr{XLC3zZ%qBo9Zi1)_O! z&Yg>y_5NJw_>I@O)dK~&sb_i+76)EsM`9#{)}b`7ZfHAnQKtmsa?@v>hKkWZlghIg zW}aXcyVISMwHwurR1rj29bZ&Jn{FeI{U#RVSZOe%ICbVx{wM71iQ@8nGF6dQ^NB8hPeu6v}FP}s* zTVYCGK1UyTN`A*sPvYzIQr33{q1AHV0MfD_+j;%ZRyR&{#}SkG%|q?tGho|{NXGCM ziQ6f{wRFP&wWX_vQW{S^2CXj`ad4nAC9nq=!HR49s)G3{+)5fANE)J9kjUo==1G9q z5=+dM$|6uX@5o(rFZv4x+mx#-BOJm|qAV{VVW{}q$|KL-_H!G$$IJU-(MhaFn9i-W z3sp@@3Esivqrl#%0*}$xq4TZOO2~_oO<*X|#ukOgD4PJOxpjPURKR#AZuoziF z*cCu{>y;55ENx%5Mq8}Cu0UNLn(v@qenm=49aJC&u2L%vgP;bXax)B+P-|FizKBZ$ zF!ABmll6j!kxyG&UCOtWBzST(vl1x1=a{RUHr9E{+8UwVea!`A@zHG0L3VK^ltytS z_QN0n&qKXF&f)^{+9_Ap%UYgWE58st9|4XvKPkBa#$28U8$%a1XD@f{uD2^s2X^qv z_EwO!MPX_>$l9YeV)4gr+{Me+RpN0n#9i2>%I_iOw83wr=Km_Em@?vMhW()I+fs-= z-^gm!JlHFTH+cl?tx~2$V4uN=#BQ_FnKFq zDg7c@+NEPZrQ_36;fmq&4wiGx53Sb;wTLsZ4mDl*A_K~lLuJ*U%<;#2K<>e*B|hlzvx~5Q9p_37)#B- z;3gcK$$YJ#mBRT^z&?P5Ct~OY+@qK&{Y0Wj<*4ZDA@TneMZ!Jo=V41I?6 zbaT`aM(2Lzcpk(CqL0cOhIoL!SPmC%Yl=(2yILLJ8|SQSn!0paQ0O77p>`*X#-U_l z0ojhQx$M2mvklsJYfb%sO_}Lnmg;IaZ1r~oi%B6NV`qYz3;;rfc_6|uD9c6ND<XN zftmvLe!C#aHmiaranLxCj6QU9+oqy1CP!ws> zY7e~Xjx2@Qd6Wf^Dkp4(9Z~pG=01#Cp-e`o;uCtv-qvsw#mO6%C99WW@57h?qLb>I zbWsvyE~r}1`clt44d5F*WWjWTQd$bUf7uTPrA|&P>+mCy%uU5xdVx%~_$4u30o>dU z9VNsQ8a!y5V=u76xG=K$24wW~J?8A(v8|!qKH>+3#4nKvLfw|2{7MV;C^M|%tr4M% zqIS7#KG7l49RAZQ+bNs1*7dg;=3ohRccZGr?w*bYZOex+v*R`e9Pm8S4}yGU7`#%l z#fMa(gE}qcU%TmUE}l)4y^RU>{;>2cv24_2vCk)Dl7Vq&xW*jYDkj&ofmsC?tJtKd zC$LZ{)|Xw%I>`gIzst{k5$z#qbK`34wrx~(ZW5346DYY8PreeK(oPmi{kAI*qO$id zS^-+-%`mD#!@RTsRrf_Nrs(2d_6=JyvDPGU(T_oEDyW^35~W!YNL)!*stAF)$&?OC zQ}XiZBjiGkA(2_n8#^SRJCQwQAUGVWnaHSo?maGzcd-G z0$~2LR_HeWy-y7RX#Dg9Tv)#P`VZWG!vS#0!TfM3yg6ZWjlI@IyA*8J;%q=?tZ&K< z1I^G^{R2Q#PfLtH(vL^}>o-T}N&4<@fvi%pu6xabn?m!(^B`1B4$>Ee%+ z#5N1!^`eL-6Q#4lGMT-KMnuE1IAYh`-q@_JXkZ~-lfJsX*n!L6QP1_t(Sv$Qo?jFs z(<)!qWOmiSA3#idXlf%NX3IUa4lHzbafc-{x$>yvx`%{@HBFB9HSqwNBV54Vt;WHm z?a|O?vrDRw8*+eS-u>YOSqJKYkj4l%qvcRvU!On6_3d^jB_@s0H3Sk+k}p=P0pn^agc1$*$CkVY;`y}t#4T|6s1SZU7g+|PhupbjH5L9f z8E>r(oR9B&zjRWW+%fQuTwXLe_DrtA<{h*)GF2P;NPd<;P+`5@+7(CTj1|@;q%pW- z{PLDs`RO5vISS@PR@Ml{*EPL4bwg^1<67_5jO{;h5#D(F+cb$xp*cH<#*xUh2+9G9 zZ>c>v_6%9NTn#$oBVRl!;y3BkUmAm5{2!Jv;9`Qs)b(V~Ddr8Ct3+3Dr`T8=r-P9gCaP~8Rs z4-K$w4H4{O=nROI2eeUc>c9hgg^((5NP7yhSdwLAbiE=4@B$OcgWD)KsvuhZ;L33J zwg{{=MI!>#oLoXqU5Z|ve8qw%^SLUIWCqX+3g@|jdT?}P2K2%4q@P7}y3;>J^Rf?r z;i{E|a1lUU6wJ7Qj7S2ME&o++#w3)6D=?DydPeTA&q=m)p= z3CC4dIW83YCvj5j09PLXYFc!~UPH&w6F7Bs>SD*>s+Io;ntXdFh49*{(z&L1ikbxo zfwIj=x5~C^#Zq+cWU^j;6NJo8Xf-^ci5yUP-FE?m!2F_r&w^{MkKr~R>YR+S%t_tv z!dzdM*^TdNo2#B;jJHDN7fpXSz1Nw`x2+|hZgC|vUzSjT3e*P$d00CDs{*1MtjJc=4j+>2b<^*Vxx7i1OJuiMd{P` z`0^yrf?!X?5jg%2_obtD@gEirFMbHa)=xQ^}Wv>L5 zn?al@&1B!a5wJX0@ItGKY@jE#Vu8K|HvzN=BK+5#KC?(^Ev`S~niuh}b^ZVo-)zH4 z3NnV_D+A^?#&-eQ%}Uvl7yEcvONg}DiW{n^G_z4+9zBHd0kI?eF}3N1G8G6smj!!T z;U+%AY^42sWtv4}WL(0(#p~PEdC{*jIJewK;y2C60sXt*?O4A5GT;!nz?*%N_ZQ1{ zW;+?*g&@V3iU2Ee9@E=?d5D0w%sB};>j$McTy>drPY&}dbYqBxSYy3$$Z1N}H{cXZ zW19jyUpVlQXoXm2AoZu|Eu|#>qSwNq-?FjxxCZxhNfzXxf{5bb_t$hDzy`6}w95~v)O80SYg&0XCtc)iyFUR)bUg*Kz(JKe9pyzregRc;tI(8!?hgS3tqZdYey|1 zK}5r+J34y&l`4}tQuV8ad?g|DSHCRx4&+_|oZ|-u17q=4@;=S6Axp_=V6WGUwh5kwx(Eta~* zBTD2SBtH77Wg@w1Qe1O!L?ep@)&t6K`b{Ny0O|#m#IqtnOO3FNnnb!Qi#ZUAQ^z7G zA?(u#-_Q{0Oo+hp1j^lzf~rdfoD8^9aM*EojA-U&VPRE-k_djc_EByWj5iYhhy{EQ zdvX~C2`9pp$iw3(oTCa3+nfCJQOL6}@~!t~x@bA7LWG;r9K8aX^N4u`ETOYv6=fVO zqJ9nnwe4Ki0NI6Nzo9ju&o@2;(%KbsZ5e$xh-{D%m>60Df;Q2FsVF(+xYTk&4jI7a z&52|dt?}%g2y=O|2P$k$5wUtg7{w+^ zxJYE_Mfj=y?J9}MTB3tQnw?%*;ca1~wmfcC3;R_QyI%$RS6Mdej#&o}%qs%`*4Ah{JuzZ9gH2zV)SMQmk&; z2Q*Xu5_4sf7(L1u3kZHArt@UJcv2bA)%BQE+$#LW`k; zP*GBFx@9%a%(rSK?s3;ZyWT4j;*{TNDTZg5Q_$Z3wNF)%?JSA^i1#YSrpudNM?GcL zX9nX-?N>M7%-a3N0YLe%Lui!%%FEBkCg{kBIn$Qk;Y%F1=UU!Y1 zG1w|$nfwvxd4@mb5I=dr1(vS7{iFM9*=wc|D|E5D39N@%=JrQ?nd_EeCgTh4Vc8}d zsA%9i7Z|LSZCY?@$q+3xP8jK>W=L=T`#b%O)s{AGxT1k?uPE*Me*5&=fIbhOZptkO zNcS*|+wjs&e)ugP!4K;T`ofbU=H?u_?Ye2}J$mEo)93L4x570-rHRFUEiaiCC0`^Q ziTT_P!2y|YgEiy_AK|Kq#aRZx-pP4rc??mRP)i}Gzd02?hmx_gLR?ctGU$+j@`rY@ zfO}Su$`DX7Cm!gCkTSc9M^z9CkYNaS8LHG%DpMONQr-PH7e`zy_G9}*0IzhWB;kAK zW=qGj|J)Fgbk+I2nitd*ZBodd9D7+qxL6cP+(Ee1rUvb799=|QLrbvQ9W*JhSb1Oi zd$u~v`3e~F#Eisdk6{_wEpwL2V1>noF?15Q@^miq@$q^gr!JNMFXz!d?;;|cjH^Gx z*=N-X(duKp48I+zRGG>TK{&`34M5)-*H%EIZfHKXI&W6Sqaf8(pS}pE#^kaCy+rL? zShveuaxNR!^G$Aw8YM0#S#)#&qsTZ16A7I+;ip?^S3fW`k%g)29iGzOJ$&xnUVq%H zE4z?GOidcVwuLY5vP2q*5cP6$88fP$6TS({wRQQ;x*rl_GB+CTbhVk_L$qxec?hn1 zz8Y-v*_2D>^!cQ``~h>vJTwtV% zHS3*{Sy)Bk(&#-HuX{du??&BZkD6kQ)%yJxlorspfLq&4w0FgLRm_Ava;KP*w#0lsWBjiAE~J&vaPUH*yJA3NyV65zv$a`o?W2c1;?iS8AzbS*9Vc11ISa>0y@; z2uo@!JBFsdRVNY~jONO^TBAt|s3o^`)K&)$hvUhM@Q%T#`SXW?!zU6pyXUiG zt0+#12qWO4k5CauY7DWIbf_*8eBCgQVXy!tSO(cLYkc&fg4EoZ!XbljZj)*h_^7qg z6YVcY`A_vc`Onjfq8?qu>P9vGKMy|<1{jwjXsWlAz9aeFfT;sTe(8C@ZTY#m|O*!sLMW}BIZWNa?TwPfb zxR>t7NQu4B6*{0v@v6~Sq;3e2ptRY`pAxJdsP$#p8G`sI$$Lz~g8PF~bBO(ZTYGuH}(`Oydj?qd%>J+mmX(<=GWew_B zi?kI;dd;>BM)^n!V=U?VgT(^wT=&&lAOF%jT;;E6-Hf*guDvYbYi{#Tdg+hhY;(yq zip~K2&;cSzH&05fWy?HX?`73wxmawAXE`gs^XI`G=yl=jfWxJHCkF8Rxy09t|N2Ef z)9xCi%hO3;-UFw?Qx`UqlfPVdzSl_GQ=BI^rTPlmxaj@;kwE?$``vK8A{ojs2O%zW zk3f!~f5+Ae@gsnGSuPBLx_^oQQmsIHqsqaqWgJKYz?n_ZyioIr1_{ylPgF?!;2FC7 zm9y7Wo2bGRV}Jg3To{^3FfK9_9>I07>4faspojt{>+oj;Lh`;k0dJ8%usrD=GXsm; zgH;s61!x3>!?ny0>CIdf=v3i8Qn14*4&r*s7BQ*y>~Q8pWZTIUj-2qX&i>8}Xlex> zGGTA`!{i?tm1$a~@wC4YyBqNMGxoIAEwsV;*oW0-weNkvjL9khJ59?4*pChPcN+5I zu%tAdx70c>gP3Nl-t~=g_}YSR_EGBx!hEJ3x4`<{$c(`=7F`*By%{^ssi&NRGQ$7$l!Qk_%@wC+<~s;KT?9;~2~pEzp6AABs5qh5 zHCO25JRfi|H$(=og`9)trnbjdk>@M8hdM6O0FTe+hp!W_+D2vFdD!UqfT&+$`bR}( zd289zypm%5G4~J`t-O|3R>Y*84Oaa{4m1i3RMT%Jj2^bsVsc7c6-Eyu~=c5hC77Hp|CC~~`B3idja{SCA! zJcIF8&}yW+8F2zI1N*g;BK3@)zWd95=!WghV#N^-G5ig?p zD!zwzNWj`VS3_xSpZanqr2bfQ1#miV=RjuUg+O@utIMs(76_ECN0k*68*;f)RAacb zYOL%TTm0R;Fj=A2><5BosWSA#4(ZrZ$Lb6gFYLT0&%A9M=WX*JEDEY4ZYWCfFht{!a1Y9~vZOB;LG1c`=8k1CuPSk33#-bx8Q)jV&e2c{4 zNVmd%_@AAae3;=CR;$-mtl>~HhcQ!L%f~uq3wIbso3hQx`viiWmW;ww#-^SLWPi${+Hsp*I#4E5xc@<6V|Sv6|T3 z3gfO6ML;hWcEoQMK=}wGDMzv+eO26uo|ja*D@2;WA~43VPH3w)t-Qk+BFnfVKRWao zzk#PHc|zv7&HfNMqd>Nvt|>f`MH11_<)L*qLWvCL~5XLX!WnUKnA=BJTTy%*7C>Si{bPwzrVc!0rC6Uc5d>f=0r>stJ{QzAgvn7yIw0}7v5j2e6 zrP&UnuG9QOui$ztX^CV4)4n+he9{1+u*OEOzAvJv%3D6sr6Z3gTuwPVH<*rRmOAHU zY}Ui2ue(*F=1Wc)H>V;|5VZMzhpeCc2F#g+5+VVDT(H%W;PkVg#lnD=ev~TE zR6TO@E%K#emm$Z1J+j^cQ;#rX!?3A?SVikM^_Ev*HXiCLDW$0)5j$=l-wSd`&;E|b+DEjy-f8z)33gg7gKcwDrdm!Z5wjwR(&r3?yj-ypQ zjmdPb3oL$wADbS8ZqR4U{x~Rka$V>k@*8})uGBo+1iy#j=-uRlI^8xM-|Svpb6-1; zzhG30M&7yPfBrb5%6+3RE1^E?wWy>u#*6DihQNslMu?zd??odwFpO@}uk~GRKH|OxqKr&KechL)>Y2z&-$q(kd=sLQ-`fsQqW(CVL{my9F zoYOm}JRoDk()-`m1)SI0SW4@Au)~WR0|(cWV@VN2#i30nkJHipBq*NA5-q~I(G0uc z!TFzV2lO5!?D=Dw!;7}R%vn8yR!mwhS3D6}mPimJ=vJHVeih5M^`yTe?k6V;O%4=2 zFO>WGU?mE;x2@(M((R=aZ+BDH}Q-dY&dPDXqGg5hzwdb~MbY!!RKs>lrKo7uFY zuZ`yGx+>Rm2E6#VsyDmFs6uQN6-$Wi%}5KZjvYRPIUvZWYSq9Uu8z=6-DpiBvtR^% z9eTY^E~|rc)wdAl+_TXdAsbJV<@ibt?_Nr~>PbJp5}nv`bPu524BwzQc*!+c-if@_Z17ZR)&CYjNQ9sCeoLsv)<Vn&cXe1GvNQ>c03dx#_auR3n!sqbbd-Di_exyRb0+!H~kw<0(-vF9T6Vr z&wO!o*G7AK-2I9ad_euv#eo0&@BJafFhjN(Jnv-mj*RtP(=L<`&nZnN6XdBH%x1?U zkmGokQR^;jSaU5#>tQVMKMzcmHmDu*x8P3E4_tpbBb!s*CpJ9N82Ep(igHgpJU(dL zrffRBA5`Qq^p2K~By{=Q<5kQ!I)C5uk2%Y`>`mLD*iKs7cST3H)15G|BA=hg$SP8n z%d;!$Rqk(AHp{+Q!lkLiH0D`PZ$>U;3Yc>*n;)-oaqY3rA^(Ij-_J9+Jgke%QaS*B z-6%k9peyha(K`Xpy1ZHRXP=vnL!kKhRgIv{Pii6$w&sEUpwjZE61w3W$vvE%2Dqpd~{ds^Srilx$T(t z7(l+9LBo`n5by-T)i^<&q+HiP?uXwNXr-FMS8^sy6LP}wq7&LLcz^!qW zE2{4t?k2+eybQUQIMf`;F6dpi`H8QGX)jwWJH4%wAROnOoX0ARkJlByO;T)Hy#+10 zQgCXmOt$65=2+Ph^;KjZ(;%+?xu6v*)#&s)P;tBB8~YYHsi^H6ndr(!Lo*nmc!c7I z#>N3P7fZqb8krz64zCjjmsLc;(w;1x$_JQ5LTo%QCUvMw4V_`&%(WJAJ0;_L&pH-8 zvqL`2-rXjTnVRO4a@Q%V{7@(?vXx`_!j7~!8ViF4N^u<${E;%tRQF8|(uvHg(x8_5 zNYgl9en(HWgfEJgUJtRTSc%89te;?5bOVicq!2EB)i!=<@Q}Y`#*kP@O^K{B#FdC| zQPPH{$O2IKss$=kh6SKpA{czBhFb|+4o(P8V-rwqAa10T`;-9*L2%Ytf{P91QjpQs zyDE0R1qeU{7z6U;fxOswX?TRoJQ#sWA$-0OycLis+$WDliiCotCp?Oz8+;`CA2lL# zKma36NK)&gfmMqkWA9blg?@dWhD8-Tv0J*B@Rn+zMgi`<$s|X`LK6t>PgK6eQxsALron?r{eYrrGu6m z_FDYwagVBwLvVC?hI^QfG4EIg4bWy$t5P($K3n{iSjf{ttN;zTQtm%~#A1!RT~*b- z-Xih7kWZ_BKC~2~TAtcs^myWPcEcm3@@3Je-|6RIO&gr2E;_Qh-1N^#_kts0q>ZfY zModUIn9iU|>*4T0*l;5>@49n#Bjgkp^}!(_&vf5Kw7hHQ56F!Tzk4pC+WZ07xx+p` zoJP-OoVP{1Ug3^&cZF{rd}JKjhPrFB7OqL5aa3p`U5j5nKVkJeIN0v{ILg74?irKh zo&Bp3Xo(d=w#VxEVhCbJzoZkGjbW2H<#j)0QR&aL23oAwTR*Kf4%Q$mr*`=3e4-L( z%BtLQf#>evJGlpM(YgK_K}W<^vYNW!^G@Juwo*aY8I``rpAueIz`HD~a%G25l1J>P zM1*;M)4)?0w;qIBabK5!USV1s-vkP@_zraZy28%`j#nXUq%%IzlkIc2>n)$UV``%c zAHI^m=e0oLA-6V_8Ws+KH-`Pj*>S2JT+UQ!$|oIAcwdl0xiCBaI)>{(x9ajgQSqqE zB60dK-y?pI5Z*Ceh{qEft|HlPdnZ>65bnNwZ)p1R#(~q+YMGnGUD2YdXJ;K4+X-c@ z=(mNkw+8>Y?5hNye$w~=szUEC6?c=xhrDe$F&b2_RV1GS3vYXc(Id7Q=pWyHP?OM>S=~WPtN1cIxfo9^LE=@+H-1Lf* zd8#epPAla0Nj)E0(LB)}7|HrTyS4@t%rHu@aV|%T6eSYZ;%Xic8*71w__SrpYC^iU zcpJ~xhpGH}o~;TR+)pH@tEh`$YVTeZh4r`lamy!AWd(@aq3gHBF$H zma1(D>1*R>_dGe2J(CC{(6jlLd%{C{Q7>#tE|)kwW=}Z+{{|CdV@tXH!(Pc`I{M7W&0m969SPmH(ttYPZs0smmP`s$<0$c>b%E@@vO8iHg*71vLgj|E(< z8`mV3DvalnyuHuJ@D6!?VUs65>1Q?-&sT0So;pA|PCaqWmV)0S{c-RxbeYTXs;%yjok&w=ytqDV7s&{0dhsc7HU(}wttaS6Qr|^RoZn(=!wwC zo!ppMw?>mlFf91I5m?~dB(}7Lk`ulE+s@y47lZkeDtbRionK9;OwEl07^{x<3#J*t1s} zANnvz>|{%KK7#fMGNaYqo6V?9gUdF2_W@cJg6VMCQL^3f&7fX_hJ*83IJtt>{o@6X z*k{@Gj4NjpnH10fhBM2Gf}TIBE5jp;!L8{2&KeA%K*nRifZKjaYB9!-vTRNyGkdsy zWCI8ASwSsh*j?H2Bd4+8$lb>Jr(Xzoe64-}D%9M3%GioI%V;PpFpp?&rf{Y-%B2ku zXre`l2qPKzJ+NI2FLa;Y1?$s<*x5nWJ(T~J=fJt6s^O(v%!BAs3v`ZZ@ z&x$EuKw_8ND|mepN4v5^rg?<*?%?Io49d|ba`SVDCOcIXrvAr=KhDhf7NU6*3h4|qP ziSoTIsE$Z5-P73IsBIl|q)S3OHf^}aN@5#Zo_yIDd9|1R&HnX43-0KvN|d>+Hl59z z&vj64#6JS|ABH2JHS{?#njxDPeRkNHp}=G`AS;tLtKaWjJVKk@91+Sw*O*~6S>lxJ z(d!TJGv0{(dG>_=kIepa?LEHrjM~E;-M&pY7|myJRLarC=y#}E7RRg#x{C%l2N-is zCQuc_W%BvaZ+*b;_TBs$_a4150jOp+2;on*21pn^mI78j+{>faUv5S?xECt@8AcHa zTiC z@V#(EhNlsloU1$V-2YJHQeR~Fz$K5@C#`?1wM)gNw4}@HlwV|r+2OVaJSn2FN>)!s zQxWx)hpubaH5Z&VHm;80NLwAboNeHEvRj;Day{qoN0c+{C(%(gr@eU+1j24nvnP0*xt){o#^}XGy|IOQBu{0w3ziFy&m)c$ z4gI6f5y){=HC6+^;ldu+9DeWot&iD*BLmTg)VT>Bzsv{Bo8-1{Qj4r>B~`D?+!NymQ2E?WnbiBV0-&ny05%MU$S%EcC+PKKxW*w)#+sDnWd<&F$GHAm zVbe%y`NggM<=i<+`rgTBJqt@-_k6kyoQ{omE`Xb$X!T5$*pGnKLpZTi=>k(uMO)yS zlPtg@u; zY>4BiryApuNrO`5jz5~UpK7X=z>Qb{_n8Xi!p2&vY9!gR2L#x9jU^zt+MxTDchP`> zsT~+3N?APQ8gu&}^54(`34#Tytn)=2+}C---nV(fpKo!dKDy!Jf5XkrTS~z$ML7=*VI5$X~_c3DWi*Q|^A6V7!}>$~gfxz7pPgXOinJABfNJp~Ct4!9-5 zFQ~G>of2vx`YE#^i1AfLBaG@v2lZDG8*7F4T$4$eOpOt|Dw)IJJRL*f%;(6r)_#Fsi;YU&u(Kek6PMUAGGuZ z;(_Sr5Xg$lRv=}Ha_!;r;0_+cB2ie2SYqbb#^cS6=wKaHFbIe(78p5_W@fjuXv>5r z`X}YX>P26-ow(WwX3S{;EoP>M$3Sl)CrBG@%e(4w3zgk=Z65bVy-mne4hsJFJ`-lQ zx|#o%{e~B`cIr#IJcZwe*R~#W>`;|)nFnoA-x3%CO*E&nn&|7XsaIy4v4#{u zr8oOQAAMXfK)1`lJ**l(vO4jVdEJ>}{~*y&d;3eGD#}q7s;K!Nl9a@)#{{h*2_4Y+ z?|YaJo7^eRG%`wbrzsfDJlD9cL0n2(m^BR7q*2s%&K<{WJ0*&>Tt$h!XL1zVXs)ca z@qcm_Rt0UBFz`n!Yw3&qUhz>DB>}BK9hD?NsyBevrE<>` zaVZad(y=mtgCqT1&lh^Xi*5uGp#ff1oZjj2jxff~mISC6_qN7zs{2MNqi}6u)Rp~i zdCL`e_XW>^gCKf^E_V?V5OJlaZ{r(%Z{&Kmy-{}nAs5c4j4`9rgI<-;59abFkB~!| z+-}6l67b~Xq4B(Pr9(KK*8y zrpPihvW|OlwmFW^j6Pyz!I)_n9d;yeA)hh42Baum3rv+RyjXENWy|(aKa(!1cot*= zAbIK+eIo~Fz9Vn?Mk-0Mfi#yx2kx=7zc|z{dgKfBQ48qpmb{+HEa>eM_bSQ&y=1yP zzwtLME{Mt3nzx|X{k$3+C?A(;q&-mIZWi^ruEgM@s!KIQ#2zBST~0K{oCL zw1ANBo!qjwx*|Y@pBX!lVc-lp*3PP|;}`l#CwD1t zxf^p&UY^1+zVkb7u=a#g!zF#bb|yz@+uTJHo&r$VE4t?TQk8RdRVF5zX;iH4$d>gn zI_L<1)4D;IcWNZztBQym!DpS@D|MZq+|fi)ZTclPQ#h!!e1J&J9xbMA{_?j#Gawkx`wGKYT5xinpJbKR9k zYAOlUSfU^JV8nMWO&gp}MFk-FfT~`u?o5}`yi`_p%b$m7&vPvQb9`oRg>PT$JmJmM z!C7ssM`q|VMmW+ds5*uTE!BXEt}~qb76&9B6;?dL5G9u4(R56YUP1&7O>w39gKH_X z>9pk?+b-x)t7=3>RQ_`Hr8}W-Q&e{i-MlKF*mBBhy^vQd?UJ(Gbm}o3q%~}O6X6CI z&7%Y|)D22_M_=myJMMfR{h!bY;b@ZPa@{@6Bs3j5o~pFr5T^Tuqv>WByy&3XlG7#I z1ROI0a07YcH)0jaRym5uuH4y3m;nfLoozYlNm7{H5+RX=2BnhL;0cC#cF&X)tBWtu z(gsb3tcZ$Bt38DpNB{y;rplD!24+(p+hS!6MNm;coWyO`I3PRd?7^@5hWDFcWsbc;nc>XaDPxB z!uQcI0A2(Z=*0LO{u)9#QaI@VrA*E)2~H1K z?AxMSV8-8wK&y?2yB$`r9uBLtfR1r2fS-uXGLjTXC~tO~;Te-{UfURs{W_q^k7GC7 za7PYDU^kr|Tn^YU&~M=LM<7XJJ^qtEU~z@J^XEwc*g{J;Q#k-8~{o5x@<8(BlX|#i+0QeKm+2F6`!};cI2M>%D8@zFl6-n)hjD; z_nt%a*q+r7kX6xWj?3Z*u6Pc4`pzPC%@GP2L_0mQn0Okk^T6pcCVnr^Ndikm z09Bv?Qq92ZVXDYydV@&AQJjSp60Y^-lYF6dgl#lW^o6p#vCnKK0ZAf4VH)UX_UJ*r zqggP^^_6JLn^T%MT0&7GRJgs><8VmJ%bft7RYzHFRr-ZN{TaxtuR4q-e1MLywWK@4 zitH;u|1JlRxL4Mh*+N&61N^oDE`hi{)RGN!`-b@=Tnw^Ze-Yz{sBI;3|?i(6TrtA^9ln8 z0PRhdW$5ZEGZ_L)850NaXPfmbQ*yqQvTs3KiE^e8s)_goq#Pw_piDDpq%BR$50uH` z@_R$>JI1FUH!Pn+13r)2JUv_um@E|2Bn1rdV}{|fcky|r~2$TLm@MKg42XncDhm5Jn{~U z1W@0bFpa1JZBnslTDByZjuAJ3DkPi}uh!c>)&g?kV*W$vI@6N&RK&V;u-Aa4mpxS* z{N%v3fTia*0n{9&q;qX)fXAg2AOPYXb2)x^d)QT|$qnJ&hT&FtPX4pq!b1OIBRKB{ zq3EXHPji-ocy=pq%jLMqPmC5fD5NY|)&TI?Xh2pVbo~LqFsL+#HJ+K-hX$O7w2yk8 zZ%WFQ-lDiZ37#Llq*D!0lF4UDa9PwnqFfkV5Q0ld148fZvH zdI7hkp5IKRyp++pDJK3`2oh?7ZNpckxSF24uPydj#k}mPfy&qy&_j39@w+axB6Vc5 z=bp;!qYl|pOYpMFxhO3?`BXi4TIvdbZi^Z%#2EZVIA*vTa6Z=7^+iO^)l~4%1>b8_ z0}Dw-MNtbgu*3!~Gz$^aKta(8q-_j~$N-4UQUMoHkX6J0&K-$P=wM-K0ACRl94&cM zU9vmqrT=U_sw)82w>h_`&Ow8dV7O@&Fv7$#kunv;%xy^#ScMCmv`tYN!^A!4*yD>- zhF@=e#_skt>owYS`U;YjqYNczm~$jxVHm#@YRCa!bNWh6Y&;nmRZmLXm4lU;^tVD8 z4UngIl@FCsv=!sWS3s*IRaBH0FpSqmfDEK)JDX5uDu%9*43j39TQL}UrYUEqpUEy) zU5QzP1Q3l2%87(maHgGlfy2yUpo#Cjv%|=&vl>z_Bcw_HhvA3_6~6m~y5UGkW&UMM zatDh;7xbjd>4n$$V^@3>X-MhO`k`>kyGtMi!;kh^z5w@U2=eJ%%soGp0Gzl4uY z;f1uF3{s%_HI;l}|0JYnp(kKEhwKGZ37R$sG|>mzOM;&>mF!-_PY|{8A#l3oE@_aO z(r>H}x$7mGMZKcJf;a}t7Lc7}zkiS|Qey|IWc?cLj8>o!GC&E9B~2m?AC6od`Zovl zrd0#EK~wB35w>P4W3nK=%!>Deo1oWxn+Yh6)%#eJ-Ph#QZH~FcaMeR4OyP7D&8wvl ze24G(k&#t}XDad?km7AbJCM8THJLUp#pb-;ghngLZU& z%m)sz{^f0}+-@wXF-q`4?`r(b!C_^eklVoPyj%2m1NYvm$=l{JIF z&-3W)+W7_Bn4dObf1J;@^Jgf%;TPI1`Ii(y5_b2y3SWu%VD{n-(SpK6TLmhbEvg{h zl!EMxdNbEPaiIz=G{I_Q1rcEqr!6Ht;h&-V_79X#H$n{mN8p7~1(Q!mLY9HwC=18f zOg59ez(8Yh6rOSfJS4N zhB41Hwv>8SN`)jb8%-+DT7FvytWd+h%0Gwr_gDWFD!?cgmKWSJ~E@zY1j5RXxHJA7Dvq3)lZO;7dWyQqJfQMkFJ9 z(l|H>7q8aVv9Wf*ZHBS|55H!}9eQXMrW%7SIht}u>Y18^>ZR^JT`=0LT>0jO*$04q z9Trs_S-%7R46b{{OSg^XmH_&f*3tFNEPvu!>5m4V_)+`?2`4hd4A8TG12xF6Q2f=% z!0g$U;SuoYZ3h4ugIR`{#Rv=ojN066qO8&KPAW-<$|HBRm=#oAvx#yi3AOYT6JlaX z&AZqcyG87=Zpz3f6{G`Y(E0tbudg?TsYbxf@I#Id>+<{W&BK)PNZ941#OhL}IZ2kC zULiSNxcK#|@o~u+tTJ`Tv6&-{F2;7brxaK;8rBP)FnqzMA*iC0u(xTj?2P+fIi^t& z;_#{)&BHV)=kkUC>mh28p(yBBYSBd9;y^Bd#+89m9z8PICbmNCM)=GW`78yc5rdIT zsv&UA>yTX9)h-vxgjg}MDj&+d6eYC2MYr9mSkoAtn zCA;c{0H|3hscaVdOBYodN>p=U>H-eLw2u^I1u$i7t)yAEhV9VMhZ02;J@BZj0Y*f+ zucB8}ug#3{uj}qXsna8K;FLXg#XylSc`$%5&c$S5(drDy76-h=&_w*6lemKW z%!W$D(mO9jn#y$Aq=92oU?7u4AWGp}G>~Fe#tK`=Fr_$rkwU1T?`X9Yye`q>Wm*V7 z&MPk2f|-r-fP8PX&1UhAOo5k*c7MM(uHs>Gq>UdAiGfI<3J2#6dXSc6{-%=t72s(z zDe)#gcQ9*}{w|=^ZJLIy-|-f)2Fd*gWd+vEUtq3OJc1)-zxJ|b2H0$21SD3`WP%`E z$&GJ6h7s|nt6m_CUepbIw$Fn{#t2!g9!(+OJ))(KRWglOvnNc-SY zmK@8JZ5(ulhB{rAVZt>NV;!q0R;r)$dFC4Z%OPJYQ|#U>=hjwgfnD&Ni6t z(bCiam=lI!WNCn+iNmuF>EOiB+Bj%U+2uGcm#(HVRrW&bI0pZVY414`V8LRazrPav zfl$~0%DIW6t5DV#1;wL)qPHcfhuRNO55x{Bk${gqr+oqb>if#xJr--0JR*z6{xF`; z9g2UjP3okDr(Dzt+fGJkt4lXk zC!rytPgoC~in@|^R3va!OX@C#DD*@0e6dLB`=Vkt3!BGAk1pHe-&M8_moFj{sE`2_ z$d(57S9lCaa;fvda;g(ScPg`h(2Ex?YNg{yj*W->U3{QY6&-{9fR>_wN=M%<9{(k; zRI9Xayz~;C#z1T;JySYTNd#;Z3MO%EV-6j?Oiv62V`Wx4JI-Mhp;%G*qf#D`jM_?N zSPG?pF8r>cIzPPVpe2@FaxH%WP6<9@{12^5*8MyjD9Fwl%638NTbgu1JZkY)OEpH` zu22(EQ<=QPdqf=BX*1_kO|x>bHJysip}3+&4m2st-bBfW7EN^^NVuXZe4QpJez$h# zKSQ3Ks%-H;VaE&`9q;g)@5tKUNP@S>>wpEww_x=baaC}wG7xVSk|BcvKDTs%YQ}!5)vev-z&(kh~j?(@mGG%=AxI>zEiFQi|_?2NGMA3-~-vf zVlsutv$vpsPWc8Q{QINa-w)o^4Rp7Cg1LsonVnZHyabe1II+KMG-q9rX^!Cxjur$P|OTCS8P1HRtl+!D z&S^ppNLW-<+O$j-i)mUw--2Y5V=Ks0B{qZC4=b?E88CrwJf?McF7gp(&wTZ4VR;l5 ztH5%O=SDUrA>5nIIJ0R7Mr^70QQ;%KEq>V(_Q-8E#IG4M!M;s);$?8=1t)J?1Xsde z2+uW3-AhO;KMb=7Dq0vvaMJ&~xjBKbc(+3DAKnGEy{~f+V3r37P=?yvt+nQ0uOoqy zO{WYT{4^v|UMxOH+G<70APwwKS(1B&FyFoEL++f>GMz1l($=5qfwp1dh$UieiwJSG zh>X&xk{G9oOoA?6E;3Ua9uJKqDnh}cLq!+7B2DBBRYyi6Q7_{$62)Vp&`(eJ9R%e` zq<;^$f4GFRimKN23br*0SLsY4Q$sGUFD9r7T&N@#6kjk*q392nt82mEs9X$1PI~bt z45|=d`x%7dvXMW6uhErwzycYa0zV&oY*%q^aafPv2a zZ&a*`AT8yhEWcH8t*n?-+Rj8YgGPlWz6eHBn_hD^;wQZc2Eb=IUOUH;sJz*0EOtC} z#04iS;029+0i+HXCDOBGZ{?hI092Bpy!7 z-aXteBKo->MD>;J^Bz|YaRwjR7kNA}EgujnA9vT2&;UlSaruf^o5xD?NOc~b15w+l zolDQf#9boZM@78v?>PYt$-0@RS_+M(wxJI^8_@V&RQxG~8**n~oRA0O*Q%T3kmFSi zP6j}B_8(J&u0JfV%okhInhW&;g}q%!OML?0z8{S(5*$5U?xSTo8l!z*OgC^I>HdAU zFeI^~Odf}h5KlhgMmLDX4nKLCvU+m*uX@hDxFIL!;R<{@Ps?texfDchhOf&?8P2 z^O&5$ltdCo_9t_PzvzI6V9h7Fd!X{E!)+PE4|%jP%-+Fndt=+(W&1aheQ~z{{i}ZM=<=Vp&F*k8wn&D;^g(h(h-NF*xIAq2(CZ(sXg~W ztcZ6l4y4n6TEAVk=kTr^(((3d?zpDnx}g#W)#1y!jf^3i_<_>ln{Bj`V$ zvN@l)ub|ivSv9XRDegwfJYPL6i-l|VV%EJ_+f|HtV)OZ8xxJe(y_&BcuB{O<_fE?=O4sD|<8YxEJvj1&(h??V1YoUkl_b<% zaT%-J#wHgL(e)JUb$J=5Ui-!uk@3|O{QBJt(GG$b4A(0p>CiS#PEX@UPo(6FB=MND zREJNblp%`avq-20VeUQkrJCw>4m)j`_m+3PC-2B_UpDQ4q%a=TI>8 z6udo2U?Wuf2j@!T=SmefYU5<}RG4{W8u^&|1`(p6w*;u9^@+6I5gMOfZFpT#Rmwbp zBC4k_Q7vhV%JKY4cQn*X_#fo8z_ip$ZgA0+I#m5qwfe*KMqk(i$`Poz%EP`)tTW_f zUFHj8_uyno+H(Mbc=pnb9+-HeP-#O)?7`T^I1iY_eZf8$>ozi6Y5fna=A+gJu z=rtKpOY&LRvV9{a2nQRHoEq}xRUck^jDyC;jDUZGYqDC5xrL*}nFsv&XKgMSmi(bs z(dNunfkfgoa*`1nvAkY$EI&U^=Pzg!Z~kH9D|^UjaTCO-HR_tijhjK>?68^*^Dx!u z7@84{x||k&Hu0Lxx|sX{&8DmKrp*!= zl`=I(lOye;2Gf3LJljZr`56<3+(2&K#OfLky0Go=FwMK{afybX@SEu28+8tcNG%VB zw08Wx>KF+}!b=s`J#{M@a*lwRQgU#KR3?-NJwidx5>d58NG#+M4Lt@7WK1RF7ye;thqw zy3nXVltr^7DS8wCO5NlNg22w}Zbbc}3)N3{0fDAVIDAY4LmCMa><=9!Ac`6AeKncH;9&*VaV{P4fufqc2h0aQ)q@{;2`D<>{`gvkvt9&SfWDWCRyQTbZ| zakl|3cLE+mNfBwpJj)W}f#AtReg|zC#0!9%O(y^L4)`OFB;GKk?%w{+=>8D} zC?NeG4(O~u&!9?RJMScpPddA~KSb7h6hCRw15E^i)gYJu%t{R@Xl;Nr(TJR2o6+Lf zZ1fzObL#I9m<)cwmiN>b^gmE2onjMvW&N)*1T=)2Q+v z_FO>Zba)45$o3n4J0}bg%j;AABGE@~pLo!y_WuKNhhEbJX$HoAY!D`lX7}?q$tOS zc5-H{D2JDJa#qCNoZgwaIUzSMuw@YqEL1^wGpCc&_t2!rYhQ=6nm@_kH^%Ok(Ev97 ztZV1XBcncc<&`Qc)?jdiz`}Ou?I3@DxNe1!&K9Ox^jouQcSTXQ}8 zj=lF*)S)-Q)#v`ElFiN?mx~Y)vSyB&UuYmD!Ix>8Z|rD5qESh1U@@nrwg}%nJEdCX z5kRqEIUdO4L!7PgbR?4(-MY8f<$doQed&ID*sHNd^>@orTM4}as#f;8u29u~p1iod z{=u0A%^&c)<-Ua6Fr9L1fNukxCei!YFf>au^T(zA7-zn*3HD^rTlv?~4j=2i@wcHJ z{>gh?v9B8*zI($lN{hn1t*Z#a$}Z|99kUfn0MD~iGC_s1Bg^1raGs0&Wj zWeAls*F|-oP*B`HLBDmXL;7|2Ju@@+P?b``DCC!DtSLqsyT&jj9xA920WB8YX&BEL&)B^)^?`d>YOLY8?K8`H?@rkEAi{~#p|E^wsro6nHMW0WGeYk zu4rYHyp3f@FcAc^VzL12 zI=dYunP5sx^i|m?HDRowbox)}cRl20dBfmuf^v`T{uO*4Drm6@?|*Jk9(^z#F9kk& zJW#sTXc!Nle12-s(VpM@dg5>If|@rj@q`%}63L&MT{obpw?r?xHok@+{58kVG z-UXtV^dO6y3sJdo;7$!s1H9p03Rdj4n09CXoEkD39%p#?c!In>Rt$bo)x;x!?ks|4 z&%YS$tvc33(TMvgQm2VA3^tt#)5cCpIEm83h%hT*Wkn7)*wVsG2ni{&H(8VryI3=$ zP|%AmjyuBjIsB?h&mD_rkDa5fK~&4T=sh8<>3=`OdF-pEIgX1Jc~2odoR*Z(SA@6^ zVooH?3H;oZMGG@EQnF;n2(>6?B*q=t)6&Gz3P@#3qLr9DzRT05o%cr#?Mdu^R2GCIfwT1@bYKADoMb<9;RdT zQ?^;)W98Kq$)jEQ-TxpLbPy%4uh&4^;Rz1k%xn=k}d_w-si$)p>WxdDkbiK|0VyClHeZlnxj82BN=}z>yDeu@*cp z;|Dm6w9~QZx}NhT3y595pNvwI9y62U;wecYJ(;#0^42RLjl5tD)?-sJIo;NK>+p4f zPB1yV=9v6!)qJmYVP?>psGhAekY%Pn6QfBxYr^j?17mlXitt>1yMJwA@SA*(ZwBy2 zFj|BAdt|{hmk&P2F7P$4*&<|Yp}&*mP}@Rbio&L$+3QLkrH3|*pQY5OTLtTc98W@~ z$`(6=+D5++@-I<{V0Z7lCTG?0zinRJP_er%{sEtTRCq#TMz(VPrnlfEXi;TystN#{ z;vfj{#zOO<0%M0>P!LsHgkG%`CE|4l?(o3(IPoUrf91Iy*dY_Uy}AjBBoSyJGeo$q z(cxN(_xFW0+@KB@r87J%i~|?HzyNPBxiM+h6>6#Kr|_;%qx&|qBABN2(eg?L!D2p9 zzEEgs2*aGEErw{UD$AOgY?w%^G=n)O-#xquIOgl``*sDL(r_5=7@J2z*CDRi2Z|@# zY#gE97y;hC@UJ`NwBq5e%ixk|9DOPogC3C5%;|)^$qJZ)41|RY;5b`XAYdRceTLph zM@W)z)2m9UkKTMXd-hCyq^y(PRYq@D(5#)_Z~xL~k&fQ6uLY^Y%6x(PsAsHB^`1lb z%RHRZ>HMlC|1lZ1Lv4>auW!u->*@ZEkqQNNaLBNVQ((B$^tJ6!EFGd8= zK*F8AAd050AU5q73$8m?6h98dezRizEmpDkeeFnb&4{(T{Z7Yk^S6V)dAkyLo9l9D z@|7YHo1ZZH;64F2HEbzzN|Cu8N#=xB`0f$}ZPdK*7dvS5K~p0oIWAWs_IQ+}n3pBW zu|j^h(pUKIT1@Y2GN?zj_TIX6^iLM{QoNnnH~h8$h>toV>FoFj$rquhvm^-fph^OI zX58mEE!wClkpMX?IFlA-PG;<2rj{m3dT?p;{atpa7-htSu(~R9-jseU+nG#apCOUF zy$8A-MTozK{lAMUyY~4TaFW|Qr`^YA0U~2BR`akCA}4$9B8pHVS7p*DlH>#ol=zeI zI8nJD;0i28sO<2#{%D~>52w-JJ-j9m^fMlC+XcUJHoh%-d>4PbznNch3@+#JyK61( z1Wqu~zZD8D2K~+w^&BoCw^t>WFT4X+LdRB~f$Fal2@KZYdzzwa9=Zb`x&zYPff=sA z^w))!qc=iZ;W@kEIdy<@DuLwFLFvo{U8w%5!g$C4zhLxtLO1jRWpDs3V~%U*-(f2c z#T!kf$yoZqH*^F-WFyA16Hc=e;?(f7uKF-;1d2x^!ejJb0!_PtP^v@Wd=N|Yf~hXGAYR;Nx{Y=*+{f21 zzm?r>6E#JUTD)Pc)PNL7ky>YVwMTZQm8}{_M3~$1Dp_l)Xq;OLdz(k?EKjVX_%*N` z9|T7`3YgundweV|ZYl5BSqCI{4i+(Z+z>pF{1I6~pp8W`n6{_e=#hM0CXP2kSPM5s)A<=8 zSroJT{+s;<*#T5TMW_C}l5pA~3JM^E`9SozprEVXt^L`MKanF&(TaHKp`RJQ(PkzG z)`yQMGgTr=T`-N#F2yLbQp1Z@ZBvGi3oOmqok>^{vGbx16GW%IXmLy+V?yi>Tz%}0 z{>Xdv$Ajca32^FHfqWZ6%-Vk7phCop48J0kgpw1{Fr&XIX=$P*2M=a)0p?cd=cz2( zh-smzI(?J{rs2$B>3F21kdZC<@=?vm`n1`&K?9QaGTw;9Sc$&_#y#3kZ|a};ssI7) zz~E|aM%%xFq$8!jyp4d5#VCGRKBAS##tB-hGONdA1FP)(Sru?Z%DWOkdO{`NyF5JO zklh^cRe}b?+wx5<}XA z>>(HY1>UdW4vRzym{w@N9J>X;qJSuCj+uc$+ClQ@0&G|ecc3%@fnC4tA>8P`p|Obo zr{QU6ovFS(UichqK-2$14#bZg#Lzq&FmDKP>`=hiwV^pRF9Sy8L859AfMIe$NV%aT zwXP1iuAGW*O<=S5>KB}~==vV0aVt^Trg`10 z-Z>B$vE`?Y{!to#YJ=LFQ>}e`okJ!!)6M^_Pu{YAmiPiZ|MmFL+&^IsbsxAS&jBn~ zMZjYlFa+Gv1ETvn9&Y3Rym#RLdi$*a2egg`G&jm`QJA0sl6eH_q0{M70aRc|W4LpU zm{Ii4wD}W<`N=6d=zTo+P~G37#jXA5>OMP$eJJSUW1Hj zbN`z=FiOnjNF&X#4W#shGW++6oGh?wiD%;xl48Ptg{QHYkXgoNMzd3Yh9M=;1!q?g z#Qv5jfR`A&+~f$p?Q;X%mN=7w_7kxagL1~<(8Mi@DcNzs8#4i$Q2&01Zp!qm#Kfgf zO_V`cPKD~BSgEnzwZon0vNIYvsqs|Pl}9~<$5aWh2k^2P32?t!q!|{UG3We=1&NV4 zGYauOG8-9;ia2l7a6u=f2Q6Cn$MZm;5NJc2gMca@GX`C}T;M~a6eo)rjxFLA;*B)q zHp|7w+pWrqR%q^5F>S)TM&-T#0I(UlVu%nQ^)JxCdgcpsarhMAf*=%+v_L@&u+(3F z8zU(Lj-LWdSQNW4DC2yg!7E)ko$q;A`#_MtacucP0tVaG#S92ok2Lpu&XIee7;)cI6!_oH7*V|E?i>&Q8pY2j#P} zNO)etD!huiIU{=bkEjwsD`#{$Nm1uDm&8ms>iwwpQ{V? z{W0{bXRrelGlCS6ueFdbhzy{}f=b7v-A8_DO{$ehymb=aSy>}a=K%{zAWvBmE9k-+ z*)LBt6fCN!o}g$8NhkX=9z8zm-;LK}AQ?uJE@k2Dm zCP(CS%(ySC(ExT)6?DP(feDAwNbd;M&Qa9>i~QfTb}+x1Cc;@*LXB=76Jn-|vIN;s z4mObhq~k<$Ba56w{kE1rYh@7!DZ&>A)7ONpGhmy+H^ ztDuWd(V{$Z{7z1#*r=lz*( z+xuBVs{wvf-7fM~Shc19r2t2_A$s4G9sIyfxMCqPvHq^hANwHsr}-M^l0{YdG$Wsa-AdK4L~yIqiED|>I$gi zJNWjPL7X{?c|VHN#bQ<$2);%oX)T%5zFUz=ZHvk4q_X#Yj=90*xVibMDuW03lV6c9qX(*X22-dO5N!M;l1`)g_jRt_FwLid4)=p8#wH@{c3svPZl^7< z4g}F8PfkLI6gA~v-iGt~O(`dk^O4;6bfBVy1KkPv&!o9Gs;BII=aC+N0$)XQh4xrL z&lu^+qz~yO(%Lc21@A$!a}^b^!E2*bYLevQ?Cjx0)xOWS>xDMore1_A@YL)`3;hg% zadtaJ7Is1xCCw?c8Ifa+`eOxrl-4L%;f}|mf!16849n=AtsvMb6^fJuhK(YT<^3?a zGOm`Qp$!FwRg*SVPV~T+55^MW=Ir*9T=GAUWFLiWk@*-18v}#s^GDx=?^Lz9U2j+<9InMQlcsAx8%c);sY`FXjr<6yK+0do?&wIXMQm#?rStP?4lP?HQtW)=e z9@CHWt9B)WWW26E=J;u|=qu%>xDlG{-A%`jpkl|iUjzS8#7fT`ct1w+hD`Cbj&f*V zTUuK!LhN~srWnVc%jhRub7D)Mi*nSEHcIckJlnu)~DlIPs`PFlm}@eGZ^e;3K}go0j%K4_+ZIY3cK7-KES_mlUBM8 z#S?F(y;%*%Hyq5^Pt(0_OMYHr6imDR8}_?`d&?&rSaP2T?RJ%f>}=9? z=w0%d)y#MO+rx%$uIDTG4?80ybRmS9GI^3`ut_vtTcRB=-hR*eXKf&7(x}q(n8fyw z4ZScQSQP(28C#=&41F_8$_itp%zPtFuNyk8cjw>Y)Khxq{XB>v@u`zGSxN+pyy)j} zlDgbmb!L*G9n16DK%z-DC_?>n=DmqQq=zCKP5OLQli1qfSDbO<{ZR^9RtAdn`NJlm z!Z?rM1su=93T=Oqo1EdB=^ggMI-Kuj*F5SJQpAiXI0NZl^munt*~rBGsG_bvpvn15 z#?ahc!4oXEctf1146hH857%zC4rnC5xWdC5lY@x7ag%#~>R7wguCG>_e@A(rck$kF zit~j%J&ebQEvNY^GmM8VOIBa4_aOs#=1l?u1L+n>mFczhfd;C*R^}Gj9k0~sr@HVP zI{*S0Oq+5wLBrVZ6jfXq4>_gbPYl}cnVv$f5o!S$t#s#YHI|U+&!)v!k#W7Wf>9z7 zGgW#p5mOwJ8~(-}k_1dc7VUsX7OLu}r0o^-v;Kbsx=bmubX=Zd5dn0E6hD8K%nF(X z62&RG!7;2ij=1mAaVkXe6LnA|SI~r$sjQZkI*IPLd3isYM9LB)8}gD2GG0rFA-7DQ zyxLmd-xoDyW@cP3?UJg-@c$era#@U9F^N_%z{VCb*Lk#kvT%?(#;-5q>_pFPWvH=j z&{saIzTX0fU;z9Uz10KpGM(w^qo`$=S1dHXpEo!B#VN`GpnLe-so%9uqrAFpG52GB zufo){bwq73IOWGcNC5>W2gSSeq~+p5Wp?PHT04w1vvUksXvk(*b5(;J6lyjw0F=>L zBIXRya?_`=`lCA4aU2k+UGk&`Ga}_a4^nU{G^)b+@JV!0kL#v7lo~b62!we3peHMi zz)!*U?)o3H+l8)$STqo1T|q0?)szv zs5J{B3Gr~#T&54;`XU$-RrtM2dvhJS=?R>`gXhoVcO6%`HfXKgL>h7hCvvjTl|S zeB~^Y%N!)0EVO|WI-a)2>$vYwiZsN?!$){GZNi!`E<0Uo#+hvZV?ul~UpwCDE{WyA zifrxM?^sKlY{Lo4@bUpIYYjzwLtC!CJIRni)Rqy*`UsG|o!bB;?H|hW(We*D1GhQd zB)f(yV;x8$1)cnj?|O4zX#S~d-^1Qsokjx1J$b;wc0CkweVF7e8DO~z22Y9jb0#GR zBC#k+B`^kwZ*Cu1nMu-{y;hKXKMx6EeG04&EuCgv7T>@8Q+(jW!;$K*XX9Jz5A=kg77uffRynZ^5 zkw7q_3erX)Nnl8@>_0r~alYn7!AA$>eKnub$Q)-94QEr&MvftR_;&Q3L{x=-?va55o#|b_)Yco(Ox)fl9u$&B-~$IQX$0Y9PS0{ z;Pkp5F|kGGxxWX0yaR`SlERy-!5~2e$a+WeaoXXBm0V1HZ^K?lMu-Vw;?s|+cS73I z1v5O{1`GA3=nJI{Y%g)L0@1W9Rc*c*{x@^?&maYOWqSAr$o&Xbt;SkZqa#0r;}uRP zLiPeBQHqr+PRM@Qi~R6DWCvM{emgxsV7qJMHUbtbfHii^EuRx4j!aH^16r^itDyS^ zMMxbbw`6wGBoQB%?)VPlk&XE{X#XpolksO=*shED#?267-8KAXd>#SQA2b_4zX$`?W`6z~be3wk5ozS)&@V|BRUjz&ounh}Iz5pq*+ zyxxqOe=G<7PPF=R{*lo1tX>25Tum)5al7SJ_gZfFU;>am8lcYJKl3X+agStF7KPHtxAj_5X&Xz8muW-s9aj>}*r`XF)CAkH*!TArvP z`XiO?n2?c_-J~VYC93j2bbwKaB|Vf$S5*y5^+_bJN%?) z3VAO)KtV>O0IH6

    ;t1jHK0S05A98Kdu%jX_{Np7XMpyil87xTTi(f9s5&C&#`%@ zjd(>mQ5*dGoBhaWf82o}>QkB10RQ5@c{i4B$ui&D!J#qJ;pH3m=ml0LH&#r*BI)0- zhB|nQX(Aa}{mWV8N?uHm7X{6MI90s8on_FkS!1zQG-Tdv*0@pG)Tx_KqPp^bc_PZ(HkZOmhsfLLN&;U2L zLwzw%ums-i+>held)KKs`Jovjx|#YWW-3A3%?FKV>}Vi4<(osx}Q*AF;FePs~$a1Q$T zGQD~%jmX?{e@VtuGhTS$e2-RWPxhhNHed4Ke)u3a4=Ox>;<})ZQPM)z^u3B*L&Xo#qqvuF5TnKJU*WU;kZJ zukAn~761G*o;$jrc>5Jnj;!K*71gRVg&!{#s#*Gt%dYMW1$6*va&d?daNBe7E%aT; z-=A+|5%cY!Ts`T)MF>>6`y^QFqgWT;yS;}_gF4+{gRn_C_-QhD(#}~S*h^wpGfv?~ za}`g@4#kj%v&ZwGTj9JzVK{LF>Z;F-9)hE#VCRRSD@%xYae$dwN`NMja&2hu8ra*Q z(VG9TPz|Q(c18;R^o3H7mI9$!ZETcE8F|>jk^Id%5PnPrM7e_)j{OlaC72lc9kHXF ztla;nP4xE7n$z|~LGobYr!$p2f06GqH>+jrR`PehL7chyEY&TD?|o9|0!M{!oxfIg z{H_&(gq;IB$4!z^y?OXj^o~?wzK$dF<}mVbQ%;Bfh@Of@2cZpGIV+og_n@wXa6ohiUire3W-nNLy8$3Z3M! z2+5AuWT|?E=y@6~J8{1y!ei}WAG3^7h5q7ICkNu(j6%cnDnqdiov_-_o5xX`@$NaR zgTutLGDE9Wm5UU-o_;KKNzqb;_1b%{^lz3(_ZmO27#|5MK#Dt~=K7%-5{C07UpV<# zz0@S5a8O)XAD1HeSOv>O$cd9Q58QaG^ZJ-@)5;5NyzyYAg`-JnCFPi{N;JAIo~p~L zOqOEa5o;CEyeZnke6O9#-4uzHD*(Y7ptCk4GA}_DbMbFT>T`0U^39vSoey#{!w#~< z|9obye~%Af+t!&+MCBPW6n$JGf=|^O;@E9y>64DWy4FHRvfZ;u$~e{&e{1_?!)cv8 z`i+9EXHEBr<5oA$>kN8*pQO6qPzN4tK!~Zf@d$9^$9sH1Pjp%9i)G;Z-(?#P8f59= zc^$1Kh9Z(bAy^ZK`qeSH3UBz*wt1Aa}8cFia+1}|IH7$v$5}thJ)re#*$X)Q* zbpypRZTaI{F1Jm%v<{y=8-}&+7pcFFHuA5mjo0b-*XwY@X!E1~AUcgM7hA0PdC9pk zUjN0TFgrMVnmmSrHtvJomV4VF%9=C-5Ad)1zi&>WVb_6gvO|^;mwQjfTXla2qM5#r zDa833?(6lgz@5Q22@Bcgg4*eQ0iqsgi(mr zx@%`+IU<_Z$~X+Kj}rU(qBqYPqqX^+$(&C3;Y6PkYpzGQEtuq#Yc!drCaG&}@kA^0 z2&)B{wu=?z$0&1ox4qY>Yb`M>fhpq{60LG&ERC`>BpSdJ_RxziC@sYTm;{KnP!<$c zIz^H0+8L2)q@q9ebC9yK^sd7P$P$M{2)b6 z(ZlnW+zF$TpOEy9eId)PF#vf_5Td{ZS1fVLwBw1(6=?|7g@?}dcrxND)!Rjn{Prc=g0r~t%iQSGi9^npcXeztqu*_mh< zgQu={MxEq|mkh10LZrRu%OxbRX9vfj|5nVrx^u1oQHj~%?_Ek?-M-u2f71Z&ur;S+ z;X@v1Mu@?ja6$C$9{#F#DHI=J_)j#l>klVG*0_lZ!Rlg}<81PV^6a`{q*l8TtXO~f z0Rx`-{VWywgWcpIGD{0&i&!3rd)L_f7LQ+1qc7~hGZjBS;pj|%ThWe=M=Xss^h>re zQ4V4d6@PAapXSH>foTw%EVA;vXR&d=bvR#~R&eqwqUJ%qHfDR#g4hSX0}7GQ3{)yb zF-W=6NBuiZ?rqcB5Jz>Zi-JzIQ1G?vBnGY11?p4zuP#t~w%-i?pjmCKerHsBJdcWv zn+)^3g=EoEMI^4iAKDCK4_vH#RGP1|aj7P6{aPMjrptj$tABzyM@cfi2W~>>LJ#s# z1|$#0t+#gn`R_4c&YBj;Q)Zfmdf6Z(S7y~h4YWkp6{u?Oa(u9?shgxBmpA;^#e0zn zZKf2F2=ps-0Bb@z|La%^hi@w6!6f2S7R;mUtS$nEgUm=W%Xu~ndUi!uMQq|z7OcY6$9O(2m6nzwMqLgrtkB_x0`Vds5osn(aOh<`R828%FhGIYGtx;kD03+Al#E?_@%5mr|R zmPr9R^mn8=Zkv))_Tz!7y@6UA$U-EFB`jyxLGX7@gDIT^Ncr}2@K4!(WIE{ED?Rp= zY!L_O&VNRFisiBdqiazq@>%eVJ5h{@f=HImm9#w{U;CLebcQ7Q6!s{V`(_<`2u@kC zSZ`Bsj_Ko5^0W1`g%WzBrG5N@t91CBG;%22yLpehLIbzDjHQ#8neIVSX+E>}hD;t` zWD%nhUO6{oGFg}Vrc_5br(<$u=$@616b*5(Mb8BtZSLaf&1(zfK!%!Tg>q>~{slHA z$VBG|_S|mRCQuqO>$g`$es^2dkWXxGXWDq@np!V6&ZJo`pm_<-b1e`ttgjkCJ#|Fk z&c^q_>2aR*`i$f_`z&ip^XVEOHUhA3>prw!uf`6V&;^oY&^4;R6vMZ-H)iWmvN5z( zK4Hy#^Vr)^o%yE=H!QDp_zh+Y5B+6`-M9sxEh-Ln%52Vl@W=p;FT+;m^0J6BOBw%_ z8Sk;SBA(%`us@7mv);bp=VqmuBw5&;-SW_$MLZlA*1?{*nE4M-XxbmI+aLG&x4r)9 z)2z$AHio;<0a~~aGFp^fz&{*(7FR|2*hS%AmnW|K{(GJKYgHWgUR?!OC~LvO&Xm&q zpAx%iVuC#|7MqV=>4w=^shDwN*xMDk*^wYx7HPHJXZrt*>|4+|QV6~RJXwb5xCDUY zmOquTRpE0*TRIPOl(*p~;!eAy9MxiW9Oi=f{2GYG7bw>qwC;q(Da5H!8JKZjgdE8| zN@nr?4GSb3iDQKa;J_=N`*?kwIP*tuxqkJ(pm3zcrAqqJeB)k?Pflj58K}c(hDl2S zb61~PB!s*$25~4N-NA!!3&_U7m1^K=O4m(y3s5QFU+-SHt5y8R+AMaf?@1)^#!F5= z`GNPUo_qgy02)o84M=Qt9=$!&MhDV&fb2I#}em0>4@VuMuaav=z}#HEn&0CXDSB80SPUdzYD+`(vJAAS#pbA zTU-JKsI{&e=>w?EeM)vH{3jM-n)N!6=&40ACp`MjgfZ$&giAe1$Eh;|5gih1k&EX1zqvsmwrF_*o zlZ0}n8ivw+>wE^iHmw4%g7{i_DFe3f5;)iF=us5)pN6HX=h|`r(L+i^&<1@9pJq*) zPRk@=5-ThBb@n6Js>1w zZ3tAj?%no|y(c$Kj~Falp(`3t(|tcwphtW^^7UqEuD+@eTFsUfd}zyd_uHQXmYaT@ zMU^>5E_#(b`x zC^qt3L$qVU=RVgwNYW+SQqN~(XRew}s;HtC1iSb;tw^~Uz*y)(SL!wKtPi8KvSna0Wu zS|2vX`fZ0=BI;@$#ebAhF}yN}4;q+dtN9}2j*K3kG~O3?YqdR*oqS=7`a}e+BZ-*& z3mn?ja;w-BS_yeiifEN%->iPXoj8347UX@jI6}q!=`TQr^?lp|+7RGxb;y`(37rhy zpE`HNq7cJ)q9F^j42q(+v4Xhrlci90Vwk@MkyTzzpzf-5Nl-9rkga;>zlxV@QDGQ+jrUkXPFd?G+|{$piD)w_)szkyfIy~))UBCk7z zUu&`%u_dq}fjRg3eJ>~UZHd7la%s`D;U_?}KCg{guMla;N*kc&k{O5g1wTVDM7AU{ z9p;FeyUI2&HYFuqBL`4s;s4ObRRED4{Ytc7X&H(g;qyI^K|Zcgsl;IAg4ccKyNKwk z8NLQ0c@01^dn#hIs6+ckJ()(DCW%7Bp`dt_i$_H~;-jZtycQLZB{L?c4EpZ;$J;i! zrJo|D166e6AJGSQQvFd~a6nB&07s%EGKXWPr-&;-1ptvuof-L}v72XR>K4@wRo1z- z5yEsK*_zk&b|N$nL?%WAoi{mbz&g~WB5(Ap1~z~;szpnw&CE*(&YE~dRq@!wlL3)J zl2dH8p6##!6N4gP(TNZ*$iAQABP}P?kZI zwoME(sca%4{Jm+ZG@m1G9WQyyU$ku$NVfc`b$A=rRLA0V><^4K*INxX%?k2CW;xOd zW8Wd$@@4droajZ#>O*sugsF(D_P-kX^DO~qc1Cho7AK-#Y@y>!lG(p&wY0*pJvct} z&DMYcFyjBDKC)i$o))ww?Lqh&vxc|$)XmaVjp=!cH3;{uAaLC@v=oo8zM-TC27E&c zRoCV`IsJv{OD0C=Y(>VLoRc84dT-s^h>kd^!*Rw*(pf(r5ct>eXPjb)aFzl1nzO~@ zjA@XpxD@4W3b0V?1ZQ^+zCe@?twy;x+4$s#w(Sp^^kA}N@@=fp#|izX@yxVYogth; zekg1C8=Xq@TH3)s8@9@Ji7j9nRN1N=N1GVUyR0I*I5vh;UNj?wYE9+7(vLv@2#}}F zX{X2NtF=Jd+1ctcsI!F10ne;>GrF7wgu_t+?E_0cq<#Ybrt>}a;v6&{TfC<4K7f-(f#^dr|fFP!iu#+`ieLZ8$t|$EOr5e~b2lg3#a3e^9y{05ip;MWfWM*4wbu ztj9B(m8El>mHBh-j_+HO4&qf3498C5<1GKDnB-k;FgzIaQb;pmJBHQ&Tw$vz`1r9m zAy{zy%!Jw)eH+D6I!OWYs-D;^VOyc7>yzj`PxkY=x}b?I^LeV?#CHJ=Bo2aW@USYC z7%Kk%#(S*UY01QwpAh43)a=cwVGK2ew>BskR?2Pd5N6DH>t-FQPtix&myO558BKKi z(Dn9D?4hkSKSjDP1A=A8)7}@>CBZg#*geb<97vZlfH@J3P_{_iO20cbi`NI`WZz9( zY~2U9mlks-QxtC3V@+4!bCQK?rts39-VyL> z6ipu>{R`_4D(sX_&d_=t0e}RNJ9r^(-p1P)4Aw09F`wcq!KTe=5*74PlTaLCHcZ;82g+)v zXSDb&l-PK8cTZRzMi30^?8`JS(Klth7OmZCTWh058kw02CDo#7Pp$0N;=<#R8f?;0S!i%x0jP@#a7Rl7^DNpyXhCtLf;ni0K7=NymZQZ)b$P6R(K=c@L!Ej^d^~_Lx(VGsc zY9@Qf<%()5F=Hs#-pBxzL{q^4u`)5I5yGmpU;R&%4?u<{)S@;k)%{kf-LRkx0OL6Y z=5sh&4)z=ztaI${p0oGmcu*yXX)Ct2(@woS(_pH|$oPw{iOUDOuj;A@YirSB1{-)N zR2Try1U5C9U`AgiwQB4WxEMc!(xbh@a$K8ZM!Zeip!>c!X&;)Fbh>3w!-0~g2cf*+ zp&rD1_EApe_9%VO3)h+sFFoX0>u>1&9uJ+PKj%d+e+p@K=n*3AE0r?vOOPWXZ5T_7 z9*-Y4j_4Q4t_NZBA_T1J1y-J@+4u_?J$z`H~0}7`%o#8rJSyLJceb3pCAJnD_>c>q6hIjyGl?D)V<&FB~lU{_6qNh~EDKPk>&iwq!t)k>%fz}efSrs3f{3xD>_8RH1Qt$o&>Rc{K zZ#C>8%iaCTz15%XmI))&%=jvPIp|Q;qD>!Tw<1d06Kx!`)?A55<}W53)5M%XbQ_W% zaF0c04^YB%YdV*%Y+ZwfYn%`W@yA(|Y>>Hr1shgq!MeAei96v%9r*T%dWg_t77YC;Xv2ZZWi6KoIMg%fi!FBBj<%JXVC27Gbc9gm{dI; zrCkrD(nyu>O<`tl$|dA%jx-S6@4J5;`-?Xx7Oiw>TUw5b5nU_0M{<%z4cxmJ;Rmj+ z42$`gs_4Z_#7_=%-c4Mgv_7w(pab=Nx zth8=YQh_bRc}FOb{>`N|t8F&d?s}Qtc*XhicP#F^VIKCfd5Wk%im*l8oVZzUB$g2<^HsPBMke;XX#HhwJ_TKvqdKoAdZlgGZ+UoF^`vCYel z0YZl`wlu1A&AI^U^V#B5YR!u$K1N;T10z`X*qOdfWCepHCwUcptTLvGtd+JzIZg-` zZ}LRX{~>1s*>VlBd+x;6TW|jRn!>AxO-jnf&Qh8!RBSmXHwGODqh2a;Hap10M;@c8 zZ#IQ6J5-|R>J466Z0*^SUr`~}=`VJBuD6auNEG+CZ@JD~u~Vo!i8|Z=MfF&~J6qSo zH-n-}jP~9lQue;Tkr4toMG5-xuZKDcXFmXUsk>_9)$~e5e%beOVq{RB{k6qtO8)R3F_7g17j6 zEgGeW$8EhSgh8+psCG%A{r-j0j3+E1xfzW8EeGk!S$$~%-8ff@S7`9?)dMAGDeBp6 zRe_GdB}=Z;Be`a43d?>9UCL+aN}#-cW5)!neS63o0(d5ys2)@ATOrVV^iQSexRT%ov@{ycpyq5mOBHaGaiiEn`^=FTU%rAzqwl~XMR`xb{>+~Hf=TB93p}egt6z7 z8@fB)XKR+k0D;5P%XTY$fb4yIv+5J6HN4R-4dK&m;=)30(TW7lMCi7wlNn-aY-+@LL0|_x`|iHNAegV$V7Mf0KX{b}Iu${uo+E%PdHNUoVQ_t` zSuc0XsElfb!a~BjPy*Vm0u`HwevzoPMEYf2<*%aTu1?q@Hw~tEloN4sl14(m@JvMyVnd%UVcv{x+iZob_qL@&+1idy;g?iX z8+1L>*a!m`wX9cyMqEnKG_QdCZ-&ZHrN7Tf;Cb^cn?7lIK-Cl1TLDvMrcOVp?>T|RKZYk>%9!lq6C>r?fCJ-KGosm3wpwXg z`ovXM2X=f&CW5JXVt;HHY%8sl0`MKPGqFFHpW3rz#qbAo>Mrt+tCubi?6C^}+(TYo zC14dtR+!qcJ&nwAv;pjI7iyvp5&^Z3{kRHeK@!+#UaV9@>(OduMB`y>>+2Q2cq;V? zc8Rsh@)ZSVK0$WgNYYg*VRKH4Vj52li z4)0stw(P=rr)I!K*B8)wRw#bZ(0_TjOI+OAqT$)E@&$s`9>R)peH4uowd|JD0}IYO z9eVQhRtmHsDA&r4`SW4&Pe?9O?N=-l)%u{$qNyhQ6bj(LqMZ? zu&ZI&wt=$$B+l;IZGdj1G_rzzmGl&@kf7?iW|vLz84CwROj7C> zuFNG#scbdWQc;BRjKixV60;ts7`Hu=4X-84Z{*GU1q9j6elwsykmg|4Xgbx2)AmqKk#ZteD9&yvmbxgIrx&orW;7;Saen5cfB12(mdty}*cv`)+A5YQtnXd{mVU~2HIgH? ze*C>ixw*It)3ghuJl<*+&z^pl(AQeE#FA}lHe-YDZ?0)M!IO8OMl9hZaSmyYWs4A9 zf!zqOA?vXq)Jj#dHs@Y`rs}|&9jK)CLj-%UKARVYWK{9HAK4MI;@QgN_cZrXAF!~% zimHIh(&zJr^OT`~|Egrl^meEu_P-RC`mOSLZ=_$7W!B^v<`Q2l*cN=^dhpnBwa@0; zxa(|CCqE$q>J({BRiUi+y6^dbTPB0ThyRO4y{RMwVImpGB*yHE#22-HK%RbznKYuL zzM`AEbSEh#M)18trRHd~hVe5qwl(aQM7l5ya9(ZbXr!Q{%Q5PNEdF<-lz+|ieZg98 zhhY&>V4Wd*!`mlfB5D5>14Ur1>CRxsPs?EhhsP+9jo5u?{R0r}*i-tLLzD|+!%gh# zJvi`djk@}Vtbgk|AnD?as?JgQ#oPoI$Hc<3z{`njVp%17AWoi* zU!|Ny6W^kuwN)o4d^Ta3=Oon1O@s72gx>M>FYdm-uP-9$t^~hUTCsx^zTeBw;+LdB zZvGXgz4*|zX8h4KtnJI?bk7tJftnDaL~pG237_@gPi$N2bEA%itt5(#bQ_ES{8Uu# zX0tIXMVU%xXpsaB;NTGe>n_;CsZdv9jDy{Bx+x}$`dMbWmSAx#QekwA9t+773Au6e z11PlI0Q%OCkZ&&=!CxarJ1B?8aFt7qx#d8IMna}3^`RkjLit)vTBpNc_}i^d|6O#8 zxw1<}kRW67K2&e~SuC0Mcyei$bo;uoQoQ&#pM!fc->cB%4LH(q|6<~l zhl`Z0$yU>;rm_+2>nt?Qa-oV<1AZful``WBk!quS;(mETI1e&E)@c@3#w`%kAG=ze z%yQsnlWe&~{0(^RU``h*m7{h~(Jr!Ytv1I;3c(EKPW;&L`>*T$Ge$_{co{JH&n3og zXCP0JYIlL|Pg8W1CC~2y>TG%W;^llTRb{BlIND?40|Jwl?NDf^&^A)=l)&&2h#vko>57={0`(=YFC z^E(VPR-~Bd^uZm5X-!+Lt8r;4&a4@!ua_NfH%@nkxxB<6>$Z%;+|+=lyxS zgEgf$jDS6phrm(HZl$R{y%b20ROsTAyw1Eju7<2)%!U_^8VOLu_FjT$V0SAK95NK3 zMKBXq{6##OuIdl?w+=A^YscE!V-iX1o4br zplf@G`k3Pc)y!B@(w0AHsfzwvBFr1?j=CUy8h(wuvF!;zL_VdX|4LByn!D(Z7=8pg zq+J2bm+~Uq4Osz*4slnLJZnaIA3Lc@G&n z>(hY37*=n~KTRH_$}t8|i)khy>wi<4KBOCpOXb%H`?LRX4~-pJJs_vdffOTwI~i&2 zsO8pKfgC~Bxo4mn6OZgzkjt}E^~sgbyqmy?yfi?93gr&H8jFi=L_z8 zBZc+%zsiGI-&9;19m#ZLC;+BnMG55;e4Xu(fIVL~8(!2LlaoAWYyT-Z9Ju)gu8HTz=7L;#2z?L%&R{|iV@=L#9mL0@~bp` zOQ;8nukis)#_z{@?@I{_I6Z_>kJjB*sl2(H#c(pp!(Ykog0sJLK?TpY#%bdwEb{bZ zul^y$rO6@)c4n5d49Vx_aN83LZsw>0vfj+F*M4X=GH#gmIQa7jJSd;E*h&aQ+0?C| ztId_~w}PH?!+cZ`nwCi^Vtc+>IuNb5n^Qbu?+#Ep4DQXZo^&tXwEzCu!O<8az5FTI zr>J78_qdrKqiFH(5SeJ@L1-SGY=#Ve{*i8S;rt1q8r-L18(=rujg!2sY-erZQ1zLb zkp)yJ7Y4!jc*H8IBe*>{F%59~CY>T2^L@!WN9DufGQ;>)*$x7$ut}#%j43M6!-^vT zG*%%yh%(wff3aLF&RJBcAI*XWx@A0URM8b~msiuYt~kejmo=I8G(tS`6WOh++`3A9 zcv$!vHQ@*7ic)N3M=~}PU^JTYM;9hSV_~apR8$uxHoBwAxNg6%%bUR}n)_x4I_m@1 za|c(UQ}PN*XxOjk=j%2a@|e?Ya5zSj%Rft4?OLg0Pr_ppPd6{c5-%F!z)c3gwMY8# zJtGX)d9+Ix7o|dv!j4Wu$%!{x4X4H~TG`*ONy4hVwM3??DuYaMsmylzYlp&A;QR)I zy&qF4a$#RLUKNo-@T+>zm9bT1$4XKW7AK0&99=T6--ve)QgAym5o-M9IjVTPB5JhS z6jP@ZHH>Mbe@ZwgQjz7h!1#crrl?2;TrVv|jQ0?M1x5sxX=F$%dj=JB*Yj}$sJdIn zQl2b+0e9vL3qJG`}qPM+L*KIuwRT`K}jJ~KG z?4jcN{-A6RH@)l?Du&E(^5{lSLLHEcy2|&rSu{-{1K6d}i>W#K;f&tvC3h0q?=Lq? z?@$gY-WR@&3FlpYU%b1Wy!h@BYe@4sF+C7DEyiRRy%egvhn?dR_Ic| zZwThSNNK7EP(pOT5DjS`MU7u&`HN~ZTJaTil8us>CA4^6lLXU^yS3xhk;iBv`_ZlF z(pMbj{K#rguU`$zjFab=7g}%30*M8F?Q)w=(s(Mp9jNT zRQ=9`3Y8^LQXb&-2@z*!vCu&te1ItAs%a>Lqg(6JjDl{L`zBiMEjH2Q5Xf3#<5_{} zR-eC-H8Y>%mG^WVa4=ML-AU62(}-~q8+EdH}f zO!=otVFb`%F!>g4bp5+zQDF3q!J!_3DOm7<61;s(PHgpdE?v|b_OVc>Na<`Lfz=T; z!ExZ**TW-vXKb$oP1_58AYh9biBT|}H5f642(x5Bgp`UhwkFg=TS7OCFoh~N#<7o9 z!S0r!!#83K^4u~vY}gXQ)48=}bILMt@xB)Rjp;h;6_RWPdJqf|T!?6d`YRJ0ykKhK z10ck){JR!9oM70>O_von(+$7p6OwlKiOVY_QmcSia#|YXE?*EWH8|J_^e3F;zZNw# z`T2Wu-|_d;e*y08+Bn?#4-#Fzki!C$i;VFRv?lryh= zRp@(AD5cc+nP9j&loN?v1FJ}NqlTi)qC1v;c?X~OD@$W`V$6RYA)9pQvZ9@T3`BO~ z0_65+V&Q)DS2<23=1u#W!etFKoKVEEE!LkSn`XwMGnDaK+R}H2rBd=792nRup77pG#h6S1}j zb69JgOC3Dzvxh=+T5iAgK0vL5DVN{m>2vCrfh@e-gwNha=h11;Oa}975^0L%1@-1* z?4hGh(=-&bw5A%Zl~Sv5f3Fs}M?Gex7pWx661rZ%n`zrdtEG=smA4 zm?EGAIu9|2p9pec{ToQHqF*t%56UJ`Lx?yC%~S4Qep}Cc&uD1pZT!4goleTenwz9S z%jn@u_NQV}&IzI;G8@_C;h;E(l!uo<5JfD3KqX#~Uv)jMMrzhp( z-BjKARsM#MD=H?CR=uTPoo->pQZVld<^ix$B`{hC2&#^YV76Ae+fW_g%(fXgT z$Mh+V)csXd`N;GTI$1=@1EeKjvyJozQs|?j;HW`_9#7Riwq#6A8xE%ADwcuWq(rI& za1J5z#bRUT@_OVYS+9@*C{76x-b2dABo4;qmB!mi{eJ!cXcdeio+ff03Tu2c4OJW2 zzCdpvg#NH=g#+P;Kb58x# zG!@uuH7fV*wHh@>sTnnT!Hhb}zNTAro|^Onl3p0R%7WOh1dCU-#;FCmx9Y&<=&RKv z2BvJ05pmEhXcFS5&q7{wF5cMxcf5Z@J^WcI zlTgtl#r%AHWd@Ev`xbEpceour?&^%Gqh{dRksJ6!BT-a8I!>U7pQU}psNMV5p0aSe z`vfcfA@Nd`+!%6MZ90g8JNQj*T%1}k^aTwS@B*U(szt;oI)iCBSWpCC+NBT{y+hs; z=;scmJ%MHZQ$u(NHS*nj8?96R+l zGCjl&p*$=BAT0~iUO%e3-`uI=2T0A^~BUX^XX z*96s&2T2y_y!>+>I4k5TB@3W30Nkeh8Via%G_oKigTrm=3Z>FH)ym%Pa%H$=6-x2- zGL>G*3jY!}UmAaHAMn%?J01&3@CUHCKs|c;1E5JiV2O_2!dn>+C#~^8iP*8Gg#e&} z($cCoH%}v$rPZj?ysu^82&DA2H*DC5_GkR5jWN^Hqh|aCu_ngAP^DNBt=3t3=C(gM z2|SlshNy8B~&<~FR zukQUD;wH>O?1V6+gd`#{I9>!@7JAcyiQ#48v^W6(iv%|qX14hDHc zh#wRl(C7x#>x5t_sIJJUsX^9`LS`b*}-&bh?)|}M8r@PkSc;SB8Dvq z({ga*^CURh`T|hw+A7F8i5pnev;utnNBtr;^ zjgg{Z{1ic}5$e zy*`-{#K9_;Ou3mIDMzm>0$|g2pqX1u-1DYw!t-tN<=rko-gag&uQhFl95A&Yahvk7 zO$_jgm88I_s34Ye@X3KF52x;O3>@vYo7uilDU8DM>K5?G(J1JPrrihX~{!SP5IASo$09tlD5 zNSLt@DIp1%H+eRO_a1=d@$2wKgT~k17}(w0`b%dj>xhaW0QeK4$HyRQd2gp;(eWW-O6LqSX)-aPnEKLEU<)*q`8G|mFuTh+kl^}zIzB<`gk z?zi~XCd}iml8;hsWlOqM3fH{_BS@gI=vEE@Rh_{c1d7`SwcWzHj3Ecq%fjsJ;5Sr) zqF>ig0u|Lj1_0Ul!Q#Y_?fzrqTKJqmc4`Ql6S!H)Axr|JPYKgQPOSr;Nd6EDgDSE9 zx$|(g0FCbdVDI5iQGN8!Fx!E8s}HBlKGa*tb1QWN3-D*QNxgtp2T*S&Dj|gy+1y|n z94)-pVwVR@Qvh@@GlHGWTw&H&;$~pY;bzOm@_s&c`Uu;%M@zOeFj|~tEZnEd;}d)S zDA@6k>2&#zqVqOGG@sa+GB;7_e1Z}vnN295(o(a-Be|lRS~ydUQx3muJWW$G2Y@X* zfaV?k5U2!${Qjox1oV{lYb_Qg{oY6SDS#jkntl+uU0#l+sw2HmuMPn9asWurE0(c^ z{XAsKO5lvz=~gI zVd{;r}W4ubXVKkzxFGGo0|G} zwVfsAPfh{rvvweQ%w(hn#Up9PLc|9xK+=qOB+p1dLeN4a1ji#Oh(O`&$6_(G*8^C# z@Hqm2)$QxaY`xX8ut}vqG=M|=!(+fJdw)X2m?%V!2}Vjt0#P$(kTP((kZ(v-K+^Y^ zIBhmE!&7i>*LV2vn0Dk#E8`00`w)3BY&8-H`t&5=+VTn3r0l?J`+mm9C%8U8rIK%; z3_#WxVpKUkK*{$~!1Aw8)hVo)4|tGs2y4s=R+}BHR3cV0gwSo?7@{>d_*G5?e3>f; zvt#4vI>VKNWm7|FIk=R8K%peemV+%D2>jIxC1J}3prYsp#7{YbSCdg&D*&7@DeT z6xwV~DFe^$WL>_Jxk8L=aY}{~)*VbsxOSH`!Gm@EvhZbfQ23L2{2VTyEarus5ljP| z*-SohM4N-$lNemxBv&ovJ%>bbbh;z}b<;dR8c^NL!f5)j+akyE=5T0H~@;DyWMxB~j_P?f$QOw4bSkQwO3I^x;pXB&VB4CDLJ7D;CvfTS$-A}p@o_SGCyfvQTvcck z0ZzJV z&{5Nn5+XpY0JN+Um?jut5~j^Ta_~Ylmw$m!F@Mtn)*lZ&(N6j7AlhO(DyjGEI+%$CmZob;gFV-#aYA6q+CqP<@EE(0PyrqGDYGv zT|1=JvIA(@DM26$i>G%o&lQ&JJ=^`y!NQ~L8r$X1)nJnaQ$6Zsi-JPQZ?mAtm%tT! zBeyG*zqc!ZW&lHtlA771rc`d{ppt>kHx2*?o_ZhCBQg;&b1~ERrwm=uaV6~pMc&b? z40`hO7VGRg&+C+biK)78jT$i>S}LHP{w)F6+FjN){(tA%)q9Qq zGf33)d3ApN&+36~#m5jnW(pE!EEK>`cnp%ZlY-)r7?gmR3DFqbqYswOU#H&$V$$gU zY|rRDWBZ)JSB$`iM@b1dY;+`oAD)8bpma&6` zDyV~clt48Ays+ON2;blx!h9)M$rz&06G)9AGE>M7sT8ag5yOv;a|saW=FK55FflPq zN%+Jwz_aO}AwA|eRxY!`()2Ibn}Jj28>qMWV0I87JY^>HgzGIn;t&?#&nBpW^%lTv zCu8R7Ekb`FWAw1trFp_^pCFwo;uL_7pBB<+m1gqV9P)B6ji7P3<)h@N2}H~=WP+h- zdDZ2W&mgAdRtj?L%K~Z^R<_gou8mdyVxri(j(qm{z znHpJ~Y!2Xm*MHZ4*MHZ4*MHZ4*MHZ4*Z+Uk{~G{MoqR|{9ck(S0000 - - - - Debug - AnyCPU - {1B5ACA07-6266-4C9A-BA30-D4BBE6634846} - Library - Properties - ml_aci - ml_aci - v4.7.2 - 512 - true - - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - prompt - MinimumRecommendedRules.ruleset - - - bin\x64\Release\ - TRACE - true - pdbonly - x64 - prompt - MinimumRecommendedRules.ruleset - - - - False - F:\games\Steam\common\ChilloutVR\MelonLoader\0Harmony.dll - False - - - False - F:\games\Steam\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll - False - - - False - - - False - F:\games\Steam\common\ChilloutVR\MelonLoader\MelonLoader.dll - False - - - - - - - - - - False - False - - - - - - - - - - - - - copy /y "$(TargetPath)" "C:\Games\Steam\common\ChilloutVR\Mods\" - - \ No newline at end of file diff --git a/ml_aci/ml_aci.csproj.user b/ml_aci/ml_aci.csproj.user deleted file mode 100644 index 2539084..0000000 --- a/ml_aci/ml_aci.csproj.user +++ /dev/null @@ -1,6 +0,0 @@ - - - - C:\Games\Steam\common\ChilloutVR\MelonLoader\;C:\Games\Steam\common\ChilloutVR\ChilloutVR_Data\Managed\ - - \ No newline at end of file diff --git a/ml_amt/AvatarParameter.cs b/ml_amt/AvatarParameter.cs index 3349104..7bec1d3 100644 --- a/ml_amt/AvatarParameter.cs +++ b/ml_amt/AvatarParameter.cs @@ -1,4 +1,6 @@ -using ABI_RC.Core.Player; +using ABI_RC.Core; +using System.Text.RegularExpressions; +using UnityEngine; namespace ml_amt { @@ -11,24 +13,30 @@ namespace ml_amt Moving } - public enum ParameterSyncType - { - Synced, - Local - } + readonly ParameterType m_type; + readonly string m_name; + readonly int m_hash = 0; + readonly bool m_sync; + readonly AnimatorControllerParameterType m_innerType; + readonly CVRAnimatorManager m_manager = null; - public readonly ParameterType m_type; - public readonly ParameterSyncType m_sync; - public readonly string m_name; - public readonly int m_hash; // For local only - - - public AvatarParameter(ParameterType p_type, string p_name, ParameterSyncType p_sync = ParameterSyncType.Synced, int p_hash = 0) + public AvatarParameter(ParameterType p_type, CVRAnimatorManager p_manager) { m_type = p_type; - m_sync = p_sync; - m_name = p_name; - m_hash = p_hash; + m_name = p_type.ToString(); + m_manager = p_manager; + + Regex l_regex = new Regex("^#?" + m_name + '$'); + foreach(var l_param in m_manager.animator.parameters) + { + if(l_regex.IsMatch(l_param.name)) + { + m_hash = l_param.nameHash; + m_sync = (l_param.name[0] != '#'); + m_innerType = l_param.type; + break; + } + } } public void Update(MotionTweaker p_tweaker) @@ -49,29 +57,28 @@ namespace ml_amt } } + public bool IsValid() => (m_hash != 0); + public ParameterType GetParameterType() => m_type; + void SetFloat(float p_value) { - switch(m_sync) + if(m_innerType == AnimatorControllerParameterType.Float) { - case ParameterSyncType.Local: - PlayerSetup.Instance._animator.SetFloat(m_hash, p_value); - break; - case ParameterSyncType.Synced: - PlayerSetup.Instance.animatorManager.SetAnimatorParameterFloat(m_name, p_value); - break; + if(m_sync) + m_manager.SetAnimatorParameterFloat(m_name, p_value); + else + m_manager.animator.SetFloat(m_hash, p_value); } } void SetBoolean(bool p_value) { - switch(m_sync) + if(m_innerType == AnimatorControllerParameterType.Bool) { - case ParameterSyncType.Local: - PlayerSetup.Instance._animator.SetBool(m_hash, p_value); - break; - case ParameterSyncType.Synced: - PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool(m_name, p_value); - break; + if(m_sync) + m_manager.SetAnimatorParameterBool(m_name, p_value); + else + m_manager.animator.SetBool(m_hash, p_value); } } } diff --git a/ml_amt/Fixes/AnimatorAnalyzer.cs b/ml_amt/Fixes/AnimatorAnalyzer.cs new file mode 100644 index 0000000..36900f8 --- /dev/null +++ b/ml_amt/Fixes/AnimatorAnalyzer.cs @@ -0,0 +1,71 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace ml_amt.Fixes +{ + class AnimatorAnalyzer + { + bool m_enabled = true; + List m_parameters = null; + + public void AnalyzeFrom(Animator p_animator) + { + m_enabled = p_animator.enabled; + m_parameters = p_animator.parameters?.ToList(); + + if(m_parameters != null) + { + foreach(var l_param in m_parameters) + { + switch(l_param.type) + { + case AnimatorControllerParameterType.Bool: + case AnimatorControllerParameterType.Trigger: + l_param.defaultBool = p_animator.GetBool(l_param.nameHash); + break; + case AnimatorControllerParameterType.Float: + l_param.defaultFloat = p_animator.GetFloat(l_param.nameHash); + break; + case AnimatorControllerParameterType.Int: + l_param.defaultInt = p_animator.GetInteger(l_param.nameHash); + break; + + } + } + } + } + + public void ApplyTo(Animator p_animator) + { + p_animator.enabled = m_enabled; + + if(m_parameters != null) + { + foreach(var l_param in m_parameters) + { + switch(l_param.type) + { + case AnimatorControllerParameterType.Bool: + p_animator.SetBool(l_param.nameHash, l_param.defaultBool); + break; + case AnimatorControllerParameterType.Float: + p_animator.SetFloat(l_param.nameHash, l_param.defaultFloat); + break; + case AnimatorControllerParameterType.Int: + p_animator.SetInteger(l_param.nameHash, l_param.defaultInt); + break; + case AnimatorControllerParameterType.Trigger: + { + if(l_param.defaultBool) + p_animator.SetTrigger(l_param.nameHash); + } + break; + } + } + } + } + + public bool IsEnabled() => m_enabled; + } +} diff --git a/ml_amt/Fixes/AnimatorOverrideControllerFix.cs b/ml_amt/Fixes/AnimatorOverrideControllerFix.cs new file mode 100644 index 0000000..d375d51 --- /dev/null +++ b/ml_amt/Fixes/AnimatorOverrideControllerFix.cs @@ -0,0 +1,60 @@ +using ABI_RC.Core; +using System; +using System.Reflection; + +namespace ml_amt.Fixes +{ + static class AnimatorOverrideControllerFix + { + internal static void Init(HarmonyLib.Harmony p_instance) + { + // AAS overriding fix + p_instance.Patch( + typeof(CVRAnimatorManager).GetMethod(nameof(CVRAnimatorManager.SetOverrideAnimation)), + new HarmonyLib.HarmonyMethod(typeof(AnimatorOverrideControllerFix).GetMethod(nameof(OnOverride_Prefix), BindingFlags.Static | BindingFlags.NonPublic)), + new HarmonyLib.HarmonyMethod(typeof(AnimatorOverrideControllerFix).GetMethod(nameof(OnOverride_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) + ); + p_instance.Patch( + typeof(CVRAnimatorManager).GetMethod(nameof(CVRAnimatorManager.RestoreOverrideAnimation)), + new HarmonyLib.HarmonyMethod(typeof(AnimatorOverrideControllerFix).GetMethod(nameof(OnOverride_Prefix), BindingFlags.Static | BindingFlags.NonPublic)), + new HarmonyLib.HarmonyMethod(typeof(AnimatorOverrideControllerFix).GetMethod(nameof(OnOverride_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) + ); + } + + // AnimatorOverrideController runtime animation replacement fix + static void OnOverride_Prefix(ref CVRAnimatorManager __instance, out AnimatorAnalyzer __state) + { + __state = new AnimatorAnalyzer(); + try + { + if(Settings.OverrideFix && (__instance.animator != null)) + { + __state.AnalyzeFrom(__instance.animator); + if(__state.IsEnabled()) + __instance.animator.enabled = false; + __instance.animator.WriteDefaultValues(); + } + } + catch(Exception l_exception) + { + MelonLoader.MelonLogger.Error(l_exception); + } + } + static void OnOverride_Postfix(ref CVRAnimatorManager __instance, AnimatorAnalyzer __state) + { + try + { + if(Settings.OverrideFix && (__instance.animator != null)) + { + __state.ApplyTo(__instance.animator); + if(__state.IsEnabled()) + __instance.animator.Update(0f); + } + } + catch(Exception l_exception) + { + MelonLoader.MelonLogger.Error(l_exception); + } + } + } +} diff --git a/ml_amt/Fixes/FBTDetectionFix.cs b/ml_amt/Fixes/FBTDetectionFix.cs new file mode 100644 index 0000000..0dbb6e4 --- /dev/null +++ b/ml_amt/Fixes/FBTDetectionFix.cs @@ -0,0 +1,57 @@ +using ABI.CCK.Components; +using ABI_RC.Core.Player; +using ABI_RC.Systems.IK.SubSystems; +using System.Reflection; + +namespace ml_amt.Fixes +{ + static class FBTDetectionFix + { + static readonly MethodInfo[] ms_fbtDetouredMethods = + { + typeof(PlayerSetup).GetMethod("Update", BindingFlags.NonPublic | BindingFlags.Instance), + typeof(PlayerSetup).GetMethod("FixedUpdate", BindingFlags.NonPublic | BindingFlags.Instance), + typeof(PlayerSetup).GetMethod("UpdatePlayerAvatarMovementData", BindingFlags.NonPublic | BindingFlags.Instance), + typeof(CVRParameterStreamEntry).GetMethod(nameof(CVRParameterStreamEntry.CheckUpdate)) + }; + + static bool ms_fbtDetour = false; + + internal static void Init(HarmonyLib.Harmony p_instance) + { + // FBT detour + p_instance.Patch( + typeof(BodySystem).GetMethod(nameof(BodySystem.FBTAvailable)), + new HarmonyLib.HarmonyMethod(typeof(FBTDetectionFix).GetMethod(nameof(OnFBTAvailable_Prefix), BindingFlags.Static | BindingFlags.NonPublic)), + null + ); + foreach(MethodInfo l_detoured in ms_fbtDetouredMethods) + { + p_instance.Patch( + l_detoured, + new HarmonyLib.HarmonyMethod(typeof(FBTDetectionFix).GetMethod(nameof(FBTDetour_Prefix), BindingFlags.Static | BindingFlags.NonPublic)), + new HarmonyLib.HarmonyMethod(typeof(FBTDetectionFix).GetMethod(nameof(FBTDetour_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) + ); + } + } + + // FBT detection override + static void FBTDetour_Prefix() + { + ms_fbtDetour = true; + } + static void FBTDetour_Postfix() + { + ms_fbtDetour = false; + } + static bool OnFBTAvailable_Prefix(ref bool __result) + { + if(ms_fbtDetour && !BodySystem.isCalibratedAsFullBody) + { + __result = false; + return false; + } + return true; + } + } +} diff --git a/ml_amt/Fixes/MovementJumpFix.cs b/ml_amt/Fixes/MovementJumpFix.cs new file mode 100644 index 0000000..df18bc5 --- /dev/null +++ b/ml_amt/Fixes/MovementJumpFix.cs @@ -0,0 +1,114 @@ +using ABI.CCK.Components; +using ABI_RC.Core.Player; +using ABI_RC.Core.Savior; +using ABI_RC.Systems.MovementSystem; +using System; +using System.Collections; +using System.Reflection; +using UnityEngine; + +namespace ml_amt.Fixes +{ + static class MovementJumpFix + { + static FieldInfo ms_avatarHeight = typeof(PlayerSetup).GetField("_avatarHeight", BindingFlags.NonPublic | BindingFlags.Instance); + + static float ms_playerHeight = 1f; + + internal static void Init(HarmonyLib.Harmony p_instance) + { + p_instance.Patch( + typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar)), + null, + new HarmonyLib.HarmonyMethod(typeof(MovementJumpFix).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) + ); + p_instance.Patch( + typeof(CVRWorld).GetMethod("SetupWorldRules", BindingFlags.NonPublic | BindingFlags.Instance), + null, + new HarmonyLib.HarmonyMethod(typeof(MovementJumpFix).GetMethod(nameof(OnWorldRulesSetup_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) + ); + p_instance.Patch( + typeof(PlayerSetup).GetMethod("SetupIKScaling", BindingFlags.NonPublic | BindingFlags.Instance), + null, + new HarmonyLib.HarmonyMethod(typeof(MovementJumpFix).GetMethod(nameof(OnSetupIKScaling_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) + ); + + Settings.ScaledJumpChange += OnScaledJumpChange; + MelonLoader.MelonCoroutines.Start(WaitForGameSettings()); + } + + static IEnumerator WaitForGameSettings() + { + while(MetaPort.Instance == null) + yield return null; + while(MetaPort.Instance.settings == null) + yield return null; + + ms_playerHeight = MetaPort.Instance.settings.GetSettingInt("GeneralPlayerHeight") * 0.01f; + MetaPort.Instance.settings.settingIntChanged.AddListener(OnGameSettingIntChange); + } + + // Patches + static void OnSetupAvatar_Postfix() + { + try + { + SetScaledJump(Settings.ScaledJump); + } + catch(Exception e) + { + MelonLoader.MelonLogger.Error(e); + } + } + static void OnWorldRulesSetup_Postfix() + { + try + { + SetScaledJump(Settings.ScaledJump); + } + catch(Exception e) + { + MelonLoader.MelonLogger.Error(e); + } + } + + static void OnSetupIKScaling_Postfix() + { + try + { + SetScaledJump(Settings.ScaledJump); + } + catch(Exception l_exception) + { + MelonLoader.MelonLogger.Error(l_exception); + } + } + + // Mod settings + static void OnScaledJumpChange(bool p_state) + { + SetScaledJump(p_state); + } + + // Game settings + static void OnGameSettingIntChange(string p_name, int p_value) + { + if(p_name == "GeneralPlayerHeight") + { + ms_playerHeight = p_value * 0.01f; + } + } + + // Arbitrary + static void SetScaledJump(bool p_state) + { + if(Utils.IsWorldSafe()) + { + if(p_state) + MovementSystem.Instance.jumpHeight = Mathf.Clamp(Utils.GetWorldJumpHeight() * ((float)ms_avatarHeight.GetValue(PlayerSetup.Instance) / ms_playerHeight), float.MinValue, Utils.GetWorldMovementLimit()); + else + MovementSystem.Instance.jumpHeight = Utils.GetWorldJumpHeight(); + } + } + } +} diff --git a/ml_amt/Fixes/PlayerColliderFix.cs b/ml_amt/Fixes/PlayerColliderFix.cs new file mode 100644 index 0000000..64eb722 --- /dev/null +++ b/ml_amt/Fixes/PlayerColliderFix.cs @@ -0,0 +1,123 @@ +using ABI_RC.Core.Player; +using ABI_RC.Systems.MovementSystem; +using System; +using System.Reflection; +using UnityEngine; + +namespace ml_amt.Fixes +{ + static class PlayerColliderFix + { + static FieldInfo ms_initialAvatarHeight = typeof(PlayerSetup).GetField("_initialAvatarHeight", BindingFlags.NonPublic | BindingFlags.Instance); + static FieldInfo ms_avatarHeight = typeof(PlayerSetup).GetField("_avatarHeight", BindingFlags.NonPublic | BindingFlags.Instance); + + internal static void Init(HarmonyLib.Harmony p_instance) + { + // Alternative collider height and radius + p_instance.Patch( + typeof(MovementSystem).GetMethod("UpdateCollider", BindingFlags.NonPublic | BindingFlags.Instance), + new HarmonyLib.HarmonyMethod(typeof(PlayerColliderFix).GetMethod(nameof(OnUpdateCollider_Prefix), BindingFlags.Static | BindingFlags.NonPublic)), + null + ); + p_instance.Patch( + typeof(PlayerSetup).GetMethod("SetupIKScaling", BindingFlags.NonPublic | BindingFlags.Instance), + null, + new HarmonyLib.HarmonyMethod(typeof(PlayerColliderFix).GetMethod(nameof(OnSetupIKScaling_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) + ); + + Settings.CollisionScaleChange += OnCollisionScaleChange; + } + + // Alternative collider size + static bool OnUpdateCollider_Prefix( + ref MovementSystem __instance, + bool __0, // updateRadius + CharacterController ___controller, + float ____avatarHeight, + float ____avatarHeightFactor, + float ____minimumColliderRadius, + Vector3 ____colliderCenter + ) + { + if(!Settings.CollisionScale) + return true; + + try + { + if(___controller != null) + { + float l_scaledHeight = ____avatarHeight * ____avatarHeightFactor; + float l_newRadius = (__0 ? Mathf.Max(____minimumColliderRadius, l_scaledHeight / 6f) : ___controller.radius); + + float l_newHeight = Mathf.Max(l_scaledHeight, l_newRadius * 2f); + float l_currentHeight = ___controller.height; + + Vector3 l_newCenter = ____colliderCenter; + l_newCenter.y = (l_newHeight + 0.075f) * 0.5f; // Idk where 0.075f has come from + Vector3 l_currentCenter = ___controller.center; + + if(__0 || (Mathf.Abs(l_currentHeight - l_newHeight) > (l_currentHeight * 0.05f)) || (Vector3.Distance(l_currentCenter, l_newCenter) > (l_currentHeight * 0.05f))) + { + if(__0) + ___controller.radius = l_newRadius; + ___controller.height = l_newHeight; + ___controller.center = l_newCenter; + + __instance.groundDistance = l_newRadius; + + if(__instance.proxyCollider != null) + { + if(__0) + __instance.proxyCollider.radius = l_newRadius; + __instance.proxyCollider.height = l_newHeight; + __instance.proxyCollider.center = new Vector3(0f, l_newCenter.y, 0f); + } + + if(__instance.forceObject != null) + __instance.forceObject.transform.localScale = new Vector3(l_newRadius + 0.1f, l_newHeight, l_newRadius + 0.1f); + if(__instance.groundCheck != null) + __instance.groundCheck.localPosition = ____colliderCenter; + } + } + } + catch(Exception l_exception) + { + MelonLoader.MelonLogger.Error(l_exception); + } + + return false; + } + static void OnSetupIKScaling_Postfix( + ref PlayerSetup __instance, + float ____avatarHeight + ) + { + if(!Settings.CollisionScale) + return; + + try + { + __instance._movementSystem.UpdateAvatarHeight(Mathf.Clamp(____avatarHeight, 0.05f, float.MaxValue), true); + } + catch(Exception l_exception) + { + MelonLoader.MelonLogger.Error(l_exception); + } + } + + static void OnCollisionScaleChange(bool p_state) + { + try + { + if(p_state) + MovementSystem.Instance.UpdateAvatarHeight((float)ms_avatarHeight.GetValue(PlayerSetup.Instance), true); + else + MovementSystem.Instance.UpdateAvatarHeight((float)ms_initialAvatarHeight.GetValue(PlayerSetup.Instance), true); + } + catch(Exception l_exception) + { + MelonLoader.MelonLogger.Error(l_exception); + } + } + } +} diff --git a/ml_amt/Main.cs b/ml_amt/Main.cs index 881352a..cafb02a 100644 --- a/ml_amt/Main.cs +++ b/ml_amt/Main.cs @@ -1,30 +1,18 @@ using ABI.CCK.Components; -using ABI_RC.Core; using ABI_RC.Core.Player; using ABI_RC.Systems.IK.SubSystems; -using ABI_RC.Systems.MovementSystem; +using System; using System.Collections; using System.Reflection; -using UnityEngine; namespace ml_amt { public class AvatarMotionTweaker : MelonLoader.MelonMod { - static readonly MethodInfo[] ms_fbtDetouredMethods = - { - typeof(PlayerSetup).GetMethod("Update", BindingFlags.NonPublic | BindingFlags.Instance), - typeof(PlayerSetup).GetMethod("FixedUpdate", BindingFlags.NonPublic | BindingFlags.Instance), - typeof(PlayerSetup).GetMethod("UpdatePlayerAvatarMovementData", BindingFlags.NonPublic | BindingFlags.Instance), - typeof(CVRParameterStreamEntry).GetMethod(nameof(CVRParameterStreamEntry.CheckUpdate)) - }; - static AvatarMotionTweaker ms_instance = null; MotionTweaker m_localTweaker = null; - static bool ms_fbtDetour = false; - public override void OnInitializeMelon() { if(ms_instance == null) @@ -52,41 +40,15 @@ namespace ml_amt null, new HarmonyLib.HarmonyMethod(typeof(AvatarMotionTweaker).GetMethod(nameof(OnPlayspaceScale_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) ); + - // FBT detour - HarmonyInstance.Patch( - typeof(BodySystem).GetMethod(nameof(BodySystem.FBTAvailable)), - new HarmonyLib.HarmonyMethod(typeof(AvatarMotionTweaker).GetMethod(nameof(OnFBTAvailable_Prefix), BindingFlags.Static | BindingFlags.NonPublic)), - null - ); - foreach(MethodInfo l_detoured in ms_fbtDetouredMethods) - { - HarmonyInstance.Patch( - l_detoured, - new HarmonyLib.HarmonyMethod(typeof(AvatarMotionTweaker).GetMethod(nameof(FBTDetour_Prefix), BindingFlags.Static | BindingFlags.NonPublic)), - new HarmonyLib.HarmonyMethod(typeof(AvatarMotionTweaker).GetMethod(nameof(FBTDetour_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) - ); - } - - // Alternative collider height - HarmonyInstance.Patch( - typeof(MovementSystem).GetMethod("UpdateCollider", BindingFlags.NonPublic | BindingFlags.Instance), - new HarmonyLib.HarmonyMethod(typeof(AvatarMotionTweaker).GetMethod(nameof(OnUpdateCollider_Prefix), BindingFlags.Static | BindingFlags.NonPublic)), - null - ); - - // AAS overriding fix - HarmonyInstance.Patch( - typeof(CVRAnimatorManager).GetMethod(nameof(CVRAnimatorManager.SetOverrideAnimation)), - new HarmonyLib.HarmonyMethod(typeof(AvatarMotionTweaker).GetMethod(nameof(OnOverride_Prefix), BindingFlags.Static | BindingFlags.NonPublic)), - new HarmonyLib.HarmonyMethod(typeof(AvatarMotionTweaker).GetMethod(nameof(OnOverride_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) - ); - HarmonyInstance.Patch( - typeof(CVRAnimatorManager).GetMethod(nameof(CVRAnimatorManager.RestoreOverrideAnimation)), - new HarmonyLib.HarmonyMethod(typeof(AvatarMotionTweaker).GetMethod(nameof(OnOverride_Prefix), BindingFlags.Static | BindingFlags.NonPublic)), - new HarmonyLib.HarmonyMethod(typeof(AvatarMotionTweaker).GetMethod(nameof(OnOverride_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) - ); + // Fixes + Fixes.AnimatorOverrideControllerFix.Init(HarmonyInstance); + Fixes.FBTDetectionFix.Init(HarmonyInstance); + Fixes.PlayerColliderFix.Init(HarmonyInstance); + Fixes.MovementJumpFix.Init(HarmonyInstance); + ModSupporter.Init(); MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer()); } @@ -124,7 +86,7 @@ namespace ml_amt if(m_localTweaker != null) m_localTweaker.OnAvatarClear(); } - catch(System.Exception l_exception) + catch(Exception l_exception) { MelonLoader.MelonLogger.Error(l_exception); } @@ -138,7 +100,7 @@ namespace ml_amt if(m_localTweaker != null) m_localTweaker.OnSetupAvatar(); } - catch(System.Exception l_exception) + catch(Exception l_exception) { MelonLoader.MelonLogger.Error(l_exception); } @@ -152,7 +114,7 @@ namespace ml_amt if(m_localTweaker != null) m_localTweaker.OnCalibrate(); } - catch(System.Exception l_exception) + catch(Exception l_exception) { MelonLoader.MelonLogger.Error(l_exception); } @@ -166,121 +128,7 @@ namespace ml_amt if(m_localTweaker != null) m_localTweaker.OnPlayspaceScale(); } - catch(System.Exception l_exception) - { - MelonLoader.MelonLogger.Error(l_exception); - } - } - - // FBT detection override - static void FBTDetour_Prefix() - { - ms_fbtDetour = true; - } - static void FBTDetour_Postfix() - { - ms_fbtDetour = false; - } - static bool OnFBTAvailable_Prefix(ref bool __result) - { - if(ms_fbtDetour && !BodySystem.isCalibratedAsFullBody) - { - __result = false; - return false; - } - - return true; - } - - // Alternative collider size - static bool OnUpdateCollider_Prefix( - ref MovementSystem __instance, - bool __0, // updateRadius - CharacterController ___controller, - float ____avatarHeight, - float ____avatarHeightFactor, - float ____minimumColliderRadius, - Vector3 ____colliderCenter - ) - { - if(!Settings.CollisionScale) - return true; - - try - { - if(___controller != null) - { - float l_scaledHeight = ____avatarHeight * ____avatarHeightFactor; - float l_newRadius = (__0 ? Mathf.Max(____minimumColliderRadius, l_scaledHeight / 6f) : ___controller.radius); - - float l_newHeight = Mathf.Max(l_scaledHeight, l_newRadius * 2f); - float l_currentHeight = ___controller.height; - - Vector3 l_newCenter = ____colliderCenter; - l_newCenter.y = (l_newHeight + 0.075f) * 0.5f; // Idk where 0.075f has come from - Vector3 l_currentCenter = ___controller.center; - - if(__0 || (Mathf.Abs(l_currentHeight - l_newHeight) > (l_currentHeight * 0.05f)) || (Vector3.Distance(l_currentCenter, l_newCenter) > (l_currentHeight * 0.05f))) - { - if(__0) - ___controller.radius = l_newRadius; - ___controller.height = l_newHeight; - ___controller.center = l_newCenter; - - __instance.groundDistance = l_newRadius; - - if(__instance.proxyCollider != null) - { - if(__0) - __instance.proxyCollider.radius = l_newRadius; - __instance.proxyCollider.height = l_newHeight; - __instance.proxyCollider.center = new Vector3(0f, l_newCenter.y, 0f); - } - - if(__instance.forceObject != null) - __instance.forceObject.transform.localScale = new Vector3(l_newRadius + 0.1f, l_newHeight, l_newRadius + 0.1f); - if(__instance.groundCheck != null) - __instance.groundCheck.localPosition = ____colliderCenter; - } - } - } - catch(System.Exception l_exception) - { - MelonLoader.MelonLogger.Error(l_exception); - } - - return false; - } - - static void OnOverride_Prefix(ref CVRAnimatorManager __instance, ref bool __state) - { - try - { - if(Settings.OverrideFix && (__instance.animator != null)) - { - __state = __instance.animator.enabled; - if(__state) - __instance.animator.enabled = false; - __instance.animator.WriteDefaultValues(); - } - } - catch(System.Exception l_exception) - { - MelonLoader.MelonLogger.Error(l_exception); - } - } - static void OnOverride_Postfix(ref CVRAnimatorManager __instance, bool __state) - { - try - { - if(Settings.OverrideFix && (__instance.animator != null)) - { - __instance.animator.enabled = __state; - if(__state) - __instance.animator.Update(0f); - } - } - catch(System.Exception l_exception) + catch(Exception l_exception) { MelonLoader.MelonLogger.Error(l_exception); } diff --git a/ml_amt/ModSupporter.cs b/ml_amt/ModSupporter.cs new file mode 100644 index 0000000..a453e86 --- /dev/null +++ b/ml_amt/ModSupporter.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Linq; + +namespace ml_amt +{ + static class ModSupporter + { + static bool ms_ragdollMod = false; + static bool ms_copycatMod = false; + + public static void Init() + { + if(MelonLoader.MelonMod.RegisteredMelons.FirstOrDefault(m => m.Info.Name == "PlayerRagdollMod") != null) + MelonLoader.MelonCoroutines.Start(WaitForRagdollInstance()); + if(MelonLoader.MelonMod.RegisteredMelons.FirstOrDefault(m => m.Info.Name == "PlayerMovementCopycat") != null) + MelonLoader.MelonCoroutines.Start(WaitForCopycatInstance()); + } + + // PlayerRagdollMod support + static IEnumerator WaitForRagdollInstance() + { + while(ml_prm.RagdollController.Instance == null) + yield return null; + + ms_ragdollMod = true; + } + static bool IsRagdolled() => ml_prm.RagdollController.Instance.IsRagdolled(); + + // PlayerMovementCopycat support + static IEnumerator WaitForCopycatInstance() + { + while(ml_pmc.PoseCopycat.Instance == null) + yield return null; + + ms_copycatMod = true; + } + static bool IsCopycating() => ml_pmc.PoseCopycat.Instance.IsActive(); + + public static bool SkipHipsOverride() + { + bool l_result = false; + l_result |= (ms_ragdollMod && IsRagdolled()); + l_result |= (ms_copycatMod && IsCopycating()); + return l_result; + } + + + } +} diff --git a/ml_amt/MotionTweaker.cs b/ml_amt/MotionTweaker.cs index a0e7922..7fabdcb 100644 --- a/ml_amt/MotionTweaker.cs +++ b/ml_amt/MotionTweaker.cs @@ -1,10 +1,10 @@ using ABI_RC.Core.Player; +using ABI_RC.Core.Savior; using ABI_RC.Systems.IK; using ABI_RC.Systems.IK.SubSystems; using ABI_RC.Systems.MovementSystem; using RootMotion.FinalIK; using System.Collections.Generic; -using System.Reflection; using UnityEngine; namespace ml_amt @@ -13,9 +13,6 @@ namespace ml_amt class MotionTweaker : MonoBehaviour { static readonly Vector4 ms_pointVector = new Vector4(0f, 0f, 0f, 1f); - static readonly FieldInfo ms_grounded = typeof(MovementSystem).GetField("_isGrounded", BindingFlags.NonPublic | BindingFlags.Instance); - static readonly FieldInfo ms_groundedRaw = typeof(MovementSystem).GetField("_isGroundedRaw", BindingFlags.NonPublic | BindingFlags.Instance); - static readonly FieldInfo ms_hasToes = typeof(IKSolverVR).GetField("hasToes", BindingFlags.NonPublic | BindingFlags.Instance); static readonly int ms_emoteHash = Animator.StringToHash("Emote"); enum PoseState @@ -35,8 +32,9 @@ namespace ml_amt bool m_bendNormalLeft = false; bool m_bendNormalRight = false; Transform m_avatarHips = null; - float m_viewPointHeight = 1f; + float m_avatarHeight = 1f; // Initial avatar view height bool m_inVR = false; + bool m_fbtAnimations = true; bool m_avatarReady = false; bool m_compatibleAvatar = false; @@ -93,6 +91,9 @@ namespace ml_amt Settings.FollowHipsChange += this.SetFollowHips; Settings.MassCenterChange += this.OnMassCenterChange; Settings.ScaledStepsChange += this.OnScaledStepsChange; + + m_fbtAnimations = MetaPort.Instance.settings.GetSettingsBool("GeneralEnableRunningAnimationFullBody"); + MetaPort.Instance.settings.settingBoolChanged.AddListener(this.OnGameSettingBoolChange); } void OnDestroy() @@ -108,20 +109,22 @@ namespace ml_amt Settings.DetectEmotesChange -= this.SetDetectEmotes; Settings.FollowHipsChange -= this.SetFollowHips; Settings.MassCenterChange -= this.OnMassCenterChange; + + MetaPort.Instance.settings.settingBoolChanged.RemoveListener(this.OnGameSettingBoolChange); } void Update() { if(m_avatarReady) { - m_grounded = (bool)ms_grounded.GetValue(MovementSystem.Instance); - m_groundedRaw = (bool)ms_groundedRaw.GetValue(MovementSystem.Instance); + m_grounded = MovementSystem.Instance.IsGrounded(); + m_groundedRaw = MovementSystem.Instance.IsGroundedRaw(); m_moving = !Mathf.Approximately(MovementSystem.Instance.movementVector.magnitude, 0f); // Update upright - Matrix4x4 l_hmdMatrix = PlayerSetup.Instance.transform.GetMatrix().inverse * (m_inVR ? PlayerSetup.Instance.vrHeadTracker.transform.GetMatrix() : PlayerSetup.Instance.desktopCameraRig.transform.GetMatrix()); + Matrix4x4 l_hmdMatrix = PlayerSetup.Instance.transform.GetMatrix().inverse * PlayerSetup.Instance.GetActiveCamera().transform.GetMatrix(); float l_currentHeight = Mathf.Clamp((l_hmdMatrix * ms_pointVector).y, 0f, float.MaxValue); - float l_avatarViewHeight = Mathf.Clamp(m_viewPointHeight * GetRelativeScale(), 0f, float.MaxValue); + float l_avatarViewHeight = Mathf.Clamp(m_avatarHeight * GetRelativeScale(), 0f, float.MaxValue); m_upright = Mathf.Clamp01((l_avatarViewHeight > 0f) ? (l_currentHeight / l_avatarViewHeight) : 0f); m_poseState = (m_upright <= Mathf.Min(m_proneLimit, m_crouchLimit)) ? PoseState.Proning : ((m_upright <= Mathf.Max(m_proneLimit, m_crouchLimit)) ? PoseState.Crouching : PoseState.Standing); @@ -147,8 +150,8 @@ namespace ml_amt if(m_poseTransitions) { - PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Crouching", (m_poseState == PoseState.Crouching) && !m_compatibleAvatar && !BodySystem.isCalibratedAsFullBody); - PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Prone", (m_poseState == PoseState.Proning) && !m_compatibleAvatar && !BodySystem.isCalibratedAsFullBody); + PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Crouching", (m_poseState == PoseState.Crouching) && !m_compatibleAvatar && (!BodySystem.isCalibratedAsFullBody || m_fbtAnimations)); + PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Prone", (m_poseState == PoseState.Proning) && !m_compatibleAvatar && (!BodySystem.isCalibratedAsFullBody || m_fbtAnimations)); } } @@ -186,7 +189,7 @@ namespace ml_amt m_locomotionOverride = false; m_hipsToPlayer = Vector3.zero; m_avatarHips = null; - m_viewPointHeight = 1f; + m_avatarHeight = 1f; m_massCenter = Vector3.zero; m_stepDistance = Vector2.zero; m_parameters.Clear(); @@ -198,31 +201,15 @@ namespace ml_amt m_vrIk = PlayerSetup.Instance._avatar.GetComponent(); m_locomotionLayer = PlayerSetup.Instance._animator.GetLayerIndex("Locomotion/Emotes"); m_avatarHips = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.Hips); - m_viewPointHeight = PlayerSetup.Instance._avatar.GetComponent().viewPosition.y; + m_avatarHeight = PlayerSetup.Instance._avatar.GetComponent().viewPosition.y; // Parse animator parameters - AnimatorControllerParameter[] l_params = PlayerSetup.Instance._animator.parameters; - foreach(var l_param in l_params) - { - foreach(AvatarParameter.ParameterType l_enumParam in System.Enum.GetValues(typeof(AvatarParameter.ParameterType))) - { - if(l_param.name.Contains(l_enumParam.ToString()) && (m_parameters.FindIndex(p => p.m_type == l_enumParam) == -1)) - { - bool l_local = (l_param.name[0] == '#'); + m_parameters.Add(new AvatarParameter(AvatarParameter.ParameterType.Upright, PlayerSetup.Instance.animatorManager)); + m_parameters.Add(new AvatarParameter(AvatarParameter.ParameterType.GroundedRaw, PlayerSetup.Instance.animatorManager)); + m_parameters.Add(new AvatarParameter(AvatarParameter.ParameterType.Moving, PlayerSetup.Instance.animatorManager)); + m_parameters.RemoveAll(p => !p.IsValid()); - m_parameters.Add(new AvatarParameter( - l_enumParam, - l_param.name, - (l_local ? AvatarParameter.ParameterSyncType.Local : AvatarParameter.ParameterSyncType.Synced), - (l_local ? l_param.nameHash : 0) - )); - - break; - } - } - } - - m_compatibleAvatar = m_parameters.Exists(p => p.m_type == AvatarParameter.ParameterType.Upright); + m_compatibleAvatar = m_parameters.Exists(p => (p.GetParameterType() == AvatarParameter.ParameterType.Upright)); m_avatarScale = Mathf.Abs(PlayerSetup.Instance._avatar.transform.localScale.y); Transform l_customTransform = PlayerSetup.Instance._avatar.transform.Find("CrouchLimit"); @@ -239,7 +226,7 @@ namespace ml_amt m_locomotionOffset = m_vrIk.solver.locomotion.offset; m_massCenter = m_locomotionOffset; - if((bool)ms_hasToes.GetValue(m_vrIk.solver)) + if(m_vrIk.solver.HasToes()) { Transform l_foot = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.LeftFoot); if(l_foot == null) @@ -340,10 +327,10 @@ namespace ml_amt } bool l_solverActive = !Mathf.Approximately(m_vrIk.solver.IKPositionWeight, 0f); - if(l_locomotionOverride && l_solverActive && m_followHips && (!m_moving || (m_poseState == PoseState.Proning)) && m_inVR && !BodySystem.isCalibratedAsFullBody) + if(l_locomotionOverride && l_solverActive && m_followHips && (!m_moving || (m_poseState == PoseState.Proning)) && m_inVR && !BodySystem.isCalibratedAsFullBody && !ModSupporter.SkipHipsOverride()) { m_vrIk.solver.plantFeet = false; - ABI_RC.Systems.IK.IKSystem.VrikRootController.enabled = false; + IKSystem.VrikRootController.enabled = false; PlayerSetup.Instance._avatar.transform.localPosition = m_hipsToPlayer; } @@ -441,6 +428,13 @@ namespace ml_amt } } + // Game settings + void OnGameSettingBoolChange(string p_name, bool p_state) + { + if(p_name == "GeneralEnableRunningAnimationFullBody") + m_fbtAnimations = p_state; + } + // Arbitrary float GetRelativeScale() { diff --git a/ml_amt/Properties/AssemblyInfo.cs b/ml_amt/Properties/AssemblyInfo.cs index dc4df48..aa484a0 100644 --- a/ml_amt/Properties/AssemblyInfo.cs +++ b/ml_amt/Properties/AssemblyInfo.cs @@ -1,4 +1,7 @@ -[assembly: MelonLoader.MelonInfo(typeof(ml_amt.AvatarMotionTweaker), "AvatarMotionTweaker", "1.2.4-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] +using System.Reflection; + +[assembly: MelonLoader.MelonInfo(typeof(ml_amt.AvatarMotionTweaker), "AvatarMotionTweaker", "1.2.8", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] [assembly: MelonLoader.MelonGame(null, "ChilloutVR")] +[assembly: MelonLoader.MelonOptionalDependencies("ml_prm", "ml_pmc")] [assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] [assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)] \ No newline at end of file diff --git a/ml_amt/Settings.cs b/ml_amt/Settings.cs index a317964..0f54401 100644 --- a/ml_amt/Settings.cs +++ b/ml_amt/Settings.cs @@ -1,4 +1,5 @@ using ABI_RC.Core.InteractionSystem; +using cohtml; using System; using System.Collections.Generic; @@ -20,6 +21,7 @@ namespace ml_amt FollowHips, CollisionScale, ScaledSteps, + ScaledJump, MassCenter, OverrideFix }; @@ -36,6 +38,7 @@ namespace ml_amt public static bool FollowHips { get; private set; } = true; public static bool MassCenter { get; private set; } = true; public static bool ScaledSteps { get; private set; } = true; + public static bool ScaledJump { get; private set; } = false; public static bool CollisionScale { get; private set; } = true; public static bool OverrideFix { get; private set; } = true; @@ -54,12 +57,13 @@ namespace ml_amt static public event Action FollowHipsChange; static public event Action MassCenterChange; static public event Action ScaledStepsChange; + static public event Action ScaledJumpChange; static public event Action CollisionScaleChange; static public event Action OverrideFixChange; internal static void Init() { - ms_category = MelonLoader.MelonPreferences.CreateCategory("AMT"); + ms_category = MelonLoader.MelonPreferences.CreateCategory("AMT", null, true); ms_entries = new List() { @@ -75,11 +79,26 @@ namespace ml_amt ms_category.CreateEntry(ModSetting.FollowHips.ToString(), FollowHips), ms_category.CreateEntry(ModSetting.MassCenter.ToString(), MassCenter), ms_category.CreateEntry(ModSetting.ScaledSteps.ToString(), ScaledSteps), + ms_category.CreateEntry(ModSetting.ScaledJump.ToString(), ScaledJump), ms_category.CreateEntry(ModSetting.CollisionScale.ToString(), CollisionScale), ms_category.CreateEntry(ModSetting.OverrideFix.ToString(), OverrideFix) }; - Load(); + IKOverrideCrouch = (bool)ms_entries[(int)ModSetting.IKOverrideCrouch].BoxedValue; + CrouchLimit = ((int)ms_entries[(int)ModSetting.CrouchLimit].BoxedValue) * 0.01f; + IKOverrideProne = (bool)ms_entries[(int)ModSetting.IKOverrideProne].BoxedValue; + ProneLimit = ((int)ms_entries[(int)ModSetting.ProneLimit].BoxedValue) * 0.01f; + PoseTransitions = (bool)ms_entries[(int)ModSetting.PoseTransitions].BoxedValue; + AdjustedMovement = (bool)ms_entries[(int)ModSetting.AdjustedMovement].BoxedValue; + IKOverrideFly = (bool)ms_entries[(int)ModSetting.IKOverrideFly].BoxedValue; + IKOverrideJump = (bool)ms_entries[(int)ModSetting.IKOverrideJump].BoxedValue; + DetectEmotes = (bool)ms_entries[(int)ModSetting.DetectEmotes].BoxedValue; + FollowHips = (bool)ms_entries[(int)ModSetting.FollowHips].BoxedValue; + MassCenter = (bool)ms_entries[(int)ModSetting.MassCenter].BoxedValue; + ScaledSteps = (bool)ms_entries[(int)ModSetting.ScaledSteps].BoxedValue; + ScaledJump = (bool)ms_entries[(int)ModSetting.ScaledJump].BoxedValue; + CollisionScale = (bool)ms_entries[(int)ModSetting.CollisionScale].BoxedValue; + OverrideFix = (bool)ms_entries[(int)ModSetting.OverrideFix].BoxedValue; MelonLoader.MelonCoroutines.Start(WaitMainMenuUi()); } @@ -106,24 +125,6 @@ namespace ml_amt }; } - static void Load() - { - IKOverrideCrouch = (bool)ms_entries[(int)ModSetting.IKOverrideCrouch].BoxedValue; - CrouchLimit = ((int)ms_entries[(int)ModSetting.CrouchLimit].BoxedValue) * 0.01f; - IKOverrideProne = (bool)ms_entries[(int)ModSetting.IKOverrideProne].BoxedValue; - ProneLimit = ((int)ms_entries[(int)ModSetting.ProneLimit].BoxedValue) * 0.01f; - PoseTransitions = (bool)ms_entries[(int)ModSetting.PoseTransitions].BoxedValue; - AdjustedMovement = (bool)ms_entries[(int)ModSetting.AdjustedMovement].BoxedValue; - IKOverrideFly = (bool)ms_entries[(int)ModSetting.IKOverrideFly].BoxedValue; - IKOverrideJump = (bool)ms_entries[(int)ModSetting.IKOverrideJump].BoxedValue; - DetectEmotes = (bool)ms_entries[(int)ModSetting.DetectEmotes].BoxedValue; - FollowHips = (bool)ms_entries[(int)ModSetting.FollowHips].BoxedValue; - MassCenter = (bool)ms_entries[(int)ModSetting.MassCenter].BoxedValue; - ScaledSteps = (bool)ms_entries[(int)ModSetting.ScaledSteps].BoxedValue; - CollisionScale = (bool)ms_entries[(int)ModSetting.CollisionScale].BoxedValue; - OverrideFix = (bool)ms_entries[(int)ModSetting.OverrideFix].BoxedValue; - } - static void OnSliderUpdate(string p_name, string p_value) { if(Enum.TryParse(p_name, out ModSetting l_setting)) @@ -225,6 +226,13 @@ namespace ml_amt } break; + case ModSetting.ScaledJump: + { + ScaledJump = bool.Parse(p_value); + ScaledJumpChange?.Invoke(ScaledJump); + } + break; + case ModSetting.CollisionScale: { CollisionScale = bool.Parse(p_value); diff --git a/ml_amt/Utils.cs b/ml_amt/Utils.cs index f49bc9f..2117d9b 100644 --- a/ml_amt/Utils.cs +++ b/ml_amt/Utils.cs @@ -1,27 +1,58 @@ -using UnityEngine; -using System.Reflection; +using ABI.CCK.Components; using ABI_RC.Core.UI; +using ABI_RC.Systems.MovementSystem; +using RootMotion.FinalIK; +using System.Reflection; +using UnityEngine; namespace ml_amt { static class Utils { - static MethodInfo ms_getSineKeyframes = typeof(RootMotion.FinalIK.IKSolverVR).GetMethod("GetSineKeyframes", BindingFlags.NonPublic | BindingFlags.Static); + static readonly FieldInfo ms_grounded = typeof(MovementSystem).GetField("_isGrounded", BindingFlags.NonPublic | BindingFlags.Instance); + static readonly FieldInfo ms_groundedRaw = typeof(MovementSystem).GetField("_isGroundedRaw", BindingFlags.NonPublic | BindingFlags.Instance); + static readonly FieldInfo ms_hasToes = typeof(IKSolverVR).GetField("hasToes", BindingFlags.NonPublic | BindingFlags.Instance); + static MethodInfo ms_getSineKeyframes = typeof(IKSolverVR).GetMethod("GetSineKeyframes", BindingFlags.NonPublic | BindingFlags.Static); static FieldInfo ms_cohtmlView = typeof(CohtmlControlledViewDisposable).GetField("_view", BindingFlags.NonPublic | BindingFlags.Instance); public static bool IsInVR() => ((ABI_RC.Core.Savior.CheckVR.Instance != null) && ABI_RC.Core.Savior.CheckVR.Instance.hasVrDeviceLoaded); - // Extensions - public static Matrix4x4 GetMatrix(this Transform p_transform, bool p_pos = true, bool p_rot = true, bool p_scl = false) - { - return Matrix4x4.TRS(p_pos ? p_transform.position : Vector3.zero, p_rot ? p_transform.rotation : Quaternion.identity, p_scl ? p_transform.localScale : Vector3.one); - } + public static bool IsGrounded(this MovementSystem p_instance) => (bool)ms_grounded.GetValue(MovementSystem.Instance); + public static bool IsGroundedRaw(this MovementSystem p_instance) => (bool)ms_groundedRaw.GetValue(MovementSystem.Instance); + public static bool HasToes(this IKSolverVR p_instance) => (bool)ms_hasToes.GetValue(p_instance); public static Keyframe[] GetSineKeyframes(float p_mag) { return (Keyframe[])ms_getSineKeyframes.Invoke(null, new object[] { p_mag }); } - public static void ExecuteScript(this CohtmlControlledViewDisposable p_viewDisposable, string p_script) => ((cohtml.Net.View)ms_cohtmlView.GetValue(p_viewDisposable))?.ExecuteScript(p_script); + public static bool IsWorldSafe() => ((CVRWorld.Instance != null) && CVRWorld.Instance.allowFlying); + public static float GetWorldJumpHeight() + { + float l_result = 1f; + if(CVRWorld.Instance != null) + l_result = CVRWorld.Instance.jumpHeight; + return l_result; + } + public static float GetWorldMovementLimit() + { + float l_result = 1f; + if(CVRWorld.Instance != null) + { + l_result = CVRWorld.Instance.baseMovementSpeed; + l_result *= CVRWorld.Instance.sprintMultiplier; + l_result *= CVRWorld.Instance.inAirMovementMultiplier; + l_result *= CVRWorld.Instance.flyMultiplier; + } + return l_result; + } + + public static void ExecuteScript(this CohtmlControlledViewDisposable p_instance, string p_script) => ((cohtml.Net.View)ms_cohtmlView.GetValue(p_instance))?.ExecuteScript(p_script); + + // Engine extensions + public static Matrix4x4 GetMatrix(this Transform p_transform, bool p_pos = true, bool p_rot = true, bool p_scl = false) + { + return Matrix4x4.TRS(p_pos ? p_transform.position : Vector3.zero, p_rot ? p_transform.rotation : Quaternion.identity, p_scl ? p_transform.localScale : Vector3.one); + } } } diff --git a/ml_amt/ml_amt.csproj b/ml_amt/ml_amt.csproj index d3318ed..eb0ac10 100644 --- a/ml_amt/ml_amt.csproj +++ b/ml_amt/ml_amt.csproj @@ -6,7 +6,7 @@ None AvatarMotionTweaker AvatarMotionTweaker - 1.2.4 + 1.2.8 x64 ml_amt @@ -33,8 +33,7 @@ - D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\0Harmony.dll - false + D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll @@ -53,9 +52,13 @@ false - D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\MelonLoader.dll - false - false + D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\Mods\ml_pmc.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\Mods\ml_prm.dll D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll diff --git a/ml_amt/resources/menu.js b/ml_amt/resources/menu.js index 152a75c..e8fb5b3 100644 --- a/ml_amt/resources/menu.js +++ b/ml_amt/resources/menu.js @@ -263,16 +263,25 @@ function inp_toggle_mod_amt(_obj, _callbackName) {

    + +

    Avatar independent game fixes/overhauls


    + +
    +
    Scaled locomotion jump:
    +
    +
    +
    +
    -
    Alternative avatar collider scale:
    +
    Alternative avatar collider:
    -
    Fix animation overrides (chairs, etc.):
    +
    Fix animator overrides (chairs, etc.):
    diff --git a/ml_drs/Properties/AssemblyInfo.cs b/ml_drs/Properties/AssemblyInfo.cs index 31fc69a..7154274 100644 --- a/ml_drs/Properties/AssemblyInfo.cs +++ b/ml_drs/Properties/AssemblyInfo.cs @@ -1,4 +1,6 @@ -[assembly: MelonLoader.MelonInfo(typeof(ml_drs.DesktopReticleSwitch), "DesktopReticleSwitch", "1.0.0-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] +using System.Reflection; + +[assembly: MelonLoader.MelonInfo(typeof(ml_drs.DesktopReticleSwitch), "DesktopReticleSwitch", "1.0.0", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] [assembly: MelonLoader.MelonGame(null, "ChilloutVR")] [assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] [assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)] \ No newline at end of file diff --git a/ml_drs/ml_drs.csproj b/ml_drs/ml_drs.csproj index 05af04f..a8b90e0 100644 --- a/ml_drs/ml_drs.csproj +++ b/ml_drs/ml_drs.csproj @@ -29,8 +29,7 @@ false - D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\MelonLoader.dll - false + D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll diff --git a/ml_egn/Main.cs b/ml_egn/Main.cs index c77bf82..90d54a2 100644 --- a/ml_egn/Main.cs +++ b/ml_egn/Main.cs @@ -1,5 +1,4 @@ using ABI_RC.Core.EventSystem; -using ABI_RC.Core.InteractionSystem; using ABI_RC.Core.IO; using ABI_RC.Core.Networking; using ABI_RC.Core.Util; @@ -57,6 +56,7 @@ namespace ml_egn Utils.ShowMenuNotification("Avatar changed", 1f); else Utils.ShowHUDNotification("(Synced) Client", "Avatar changed"); + } catch(System.Exception e) { @@ -68,19 +68,37 @@ namespace ml_egn { try { - if(Utils.IsConnected()) + if(Utils.ArePropsEnabled()) { - if(Utils.IsMenuOpened()) - Utils.ShowMenuNotification("Prop spawned", 1f); + if(Utils.ArePropsAllowed()) + { + if(Utils.IsConnected()) + { + if(Utils.IsMenuOpened()) + Utils.ShowMenuNotification("Prop spawned", 1f); + else + Utils.ShowHUDNotification("(Synced) Client", "Prop spawned"); + } + else + { + if(Utils.IsMenuOpened()) + Utils.ShowMenuAlert("Prop Error", "Not connected to live instance"); + else + Utils.ShowHUDNotification("(Local) Client", "Unable to spawn prop", "Not connected to live instance"); + } + } else - Utils.ShowHUDNotification("(Synced) Client", "Prop spawned"); + { + if(Utils.IsMenuOpened()) + Utils.ShowMenuAlert("Prop Error", "Props are not allowed in this world"); + } } else { if(Utils.IsMenuOpened()) - Utils.ShowMenuAlert("Prop Error", "Not connected to live instance"); + Utils.ShowMenuAlert("Prop Error", "Props are disabled in game settings"); else - Utils.ShowHUDNotification("(Local) Client", "Unable to spawn prop", "Not connected to live instance"); + Utils.ShowHUDNotification("(Local) Client", "Unable to spawn prop", "Props are disabled in game settings"); } } catch(System.Exception e) diff --git a/ml_egn/Properties/AssemblyInfo.cs b/ml_egn/Properties/AssemblyInfo.cs index b1c8d98..f0961c3 100644 --- a/ml_egn/Properties/AssemblyInfo.cs +++ b/ml_egn/Properties/AssemblyInfo.cs @@ -1,4 +1,6 @@ -[assembly: MelonLoader.MelonInfo(typeof(ml_egn.ExtendedGameNotifications), "ExtendedGameNotifications", "1.0.1-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] +using System.Reflection; + +[assembly: MelonLoader.MelonInfo(typeof(ml_egn.ExtendedGameNotifications), "ExtendedGameNotifications", "1.0.2", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] [assembly: MelonLoader.MelonGame(null, "ChilloutVR")] [assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] [assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)] \ No newline at end of file diff --git a/ml_egn/Utils.cs b/ml_egn/Utils.cs index f4935b9..319e7ac 100644 --- a/ml_egn/Utils.cs +++ b/ml_egn/Utils.cs @@ -1,5 +1,6 @@ using ABI_RC.Core.InteractionSystem; using ABI_RC.Core.Networking; +using ABI_RC.Core.Savior; using ABI_RC.Core.UI; using DarkRift; @@ -42,5 +43,8 @@ namespace ml_egn l_result = (NetworkManager.Instance.GameNetwork.ConnectionState == ConnectionState.Connected); return l_result; } + + public static bool ArePropsAllowed() => ((MetaPort.Instance != null) && MetaPort.Instance.worldAllowProps); + public static bool ArePropsEnabled() => ((MetaPort.Instance != null) && MetaPort.Instance.settings.GetSettingsBool("ContentFilterPropsEnabled")); } } diff --git a/ml_egn/ml_egn.csproj b/ml_egn/ml_egn.csproj index 1bde6ae..be33045 100644 --- a/ml_egn/ml_egn.csproj +++ b/ml_egn/ml_egn.csproj @@ -4,7 +4,7 @@ netstandard2.1 x64 ExtendedGameNotifications - 1.0.1 + 1.0.2 SDraw None ExtendedGameNotifications @@ -21,8 +21,7 @@ - D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\0Harmony.dll - false + D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll @@ -41,8 +40,7 @@ false - D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\MelonLoader.dll - false + D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll diff --git a/ml_fpt/Main.cs b/ml_fpt/Main.cs deleted file mode 100644 index f748e3a..0000000 --- a/ml_fpt/Main.cs +++ /dev/null @@ -1,313 +0,0 @@ -using ABI.CCK.Scripts; -using ABI_RC.Core.InteractionSystem; -using ABI_RC.Core.Player; -using ABI_RC.Core.Savior; -using ABI_RC.Core.UI; -using ABI_RC.Systems.IK; -using ABI_RC.Systems.IK.SubSystems; -using System; -using System.Collections.Generic; -using System.Reflection; -using UnityEngine; - -namespace ml_fpt -{ - public class FourPointTracking : MelonLoader.MelonMod - { - static FourPointTracking ms_instance = null; - - bool m_ready = false; - - IndexIK m_indexIK = null; - RootMotion.FinalIK.VRIK m_vrIK = null; - RuntimeAnimatorController m_runtimeAnimator = null; - List m_aasParameters = null; - - bool m_calibrationActive = false; - object m_calibrationTask = null; - - int m_hipsTrackerIndex = -1; - Transform m_hips = null; - - Dictionary> m_avatarCalibrations = null; - - public override void OnInitializeMelon() - { - if(ms_instance == null) - ms_instance = this; - - m_avatarCalibrations = new Dictionary>(); - - HarmonyInstance.Patch( - typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar)), - null, - new HarmonyLib.HarmonyMethod(typeof(FourPointTracking).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.NonPublic | BindingFlags.Static)) - ); - HarmonyInstance.Patch( - typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar)), - null, - new HarmonyLib.HarmonyMethod(typeof(FourPointTracking).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) - ); - - MelonLoader.MelonCoroutines.Start(WaitForMainMenuView()); - MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer()); - } - - System.Collections.IEnumerator WaitForMainMenuView() - { - while(ViewManager.Instance == null) - yield return null; - while(ViewManager.Instance.gameMenuView == null) - yield return null; - while(ViewManager.Instance.gameMenuView.Listener == null) - yield return null; - - ViewManager.Instance.gameMenuView.Listener.ReadyForBindings += () => - { - ViewManager.Instance.gameMenuView.View.RegisterForEvent("MelonMod_FPT_Action_Calibrate", new Action(this.StartCalibration)); - }; - - ViewManager.Instance.gameMenuView.Listener.FinishLoad += (_) => - { - ViewManager.Instance.gameMenuView.View.ExecuteScript(Scripts.GetEmbeddedScript("menu.js")); - }; - } - - System.Collections.IEnumerator WaitForLocalPlayer() - { - while(PlayerSetup.Instance == null) - yield return null; - - m_indexIK = PlayerSetup.Instance.gameObject.GetComponent(); - - m_ready = true; - } - - public override void OnDeinitializeMelon() - { - if(ms_instance == this) - ms_instance = null; - - m_ready = false; - m_aasParameters?.Clear(); - m_aasParameters = null; - m_avatarCalibrations?.Clear(); - m_avatarCalibrations = null; - m_hipsTrackerIndex = -1; - - if(m_calibrationTask != null) - MelonLoader.MelonCoroutines.Stop(m_calibrationTask); - m_calibrationTask = null; - } - - void StartCalibration() - { - if(m_ready && !m_calibrationActive && PlayerSetup.Instance._inVr && !PlayerSetup.Instance.avatarIsLoading && PlayerSetup.Instance._animator.isHuman && !BodySystem.isCalibrating && !BodySystem.isCalibratedAsFullBody) - { - m_hipsTrackerIndex = GetHipsTracker(); - if(m_hipsTrackerIndex != -1) - { - m_avatarCalibrations.Remove(MetaPort.Instance.currentAvatarGuid); - - m_runtimeAnimator = PlayerSetup.Instance._animator.runtimeAnimatorController; - m_aasParameters = PlayerSetup.Instance.animatorManager.GetAdditionalSettingsCurrent(); - PlayerSetup.Instance._animator.runtimeAnimatorController = PlayerSetup.Instance.tPoseAnimatorController; - PlayerSetup.Instance.animatorManager.SetAnimator(PlayerSetup.Instance._animator, PlayerSetup.Instance.tPoseAnimatorController); - - m_hips = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.Hips); - m_vrIK = PlayerSetup.Instance._animator.GetComponent(); - - if(m_vrIK != null) - m_vrIK.solver.OnPreUpdate += this.OverrideIKWeight; - - IKSystem.Instance.leftHandModel.SetActive(true); - IKSystem.Instance.rightHandModel.SetActive(true); - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].ShowTracker(true); - CVR_InteractableManager.enableInteractions = false; - - m_calibrationActive = true; - m_calibrationTask = MelonLoader.MelonCoroutines.Start(CalibrationTask()); - - ViewManager.Instance.ForceUiStatus(false); - ShowHudNotification("Calibration started"); - } - else - ShowMenuAlert("No hips tracker detected. Check if tracker has waist role in SteamVR settings."); - } - else - ShowMenuAlert("Calibraton requirements aren't met: be in VR, be not in FBT or avatar calibration, humanoid avatar"); - } - - System.Collections.IEnumerator CalibrationTask() - { - while(m_calibrationActive) - { - if(m_vrIK != null) - m_vrIK.enabled = false; - - m_indexIK.enabled = false; - - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].ShowLine(true, m_hips); - - if((CVRInputManager.Instance.interactLeftValue > 0.9f) && (CVRInputManager.Instance.interactRightValue > 0.9f)) - { - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].target.transform.position = m_hips.position; - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].target.transform.rotation = m_hips.rotation; - - m_avatarCalibrations.Add( - MetaPort.Instance.currentAvatarGuid, - new Tuple( - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].target.transform.localPosition, - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].target.transform.localRotation - ) - ); - - if(m_vrIK != null) - { - m_vrIK.solver.spine.pelvisTarget = PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].target; - m_vrIK.solver.spine.pelvisPositionWeight = 1f; - m_vrIK.solver.spine.pelvisRotationWeight = 1f; - m_vrIK.solver.OnPreUpdate -= this.OverrideIKWeight; - m_vrIK.solver.IKPositionWeight = 1f; - m_vrIK.enabled = true; - } - - m_indexIK.enabled = true; - - PlayerSetup.Instance._animator.runtimeAnimatorController = m_runtimeAnimator; - PlayerSetup.Instance.animatorManager.SetAnimator(PlayerSetup.Instance._animator, m_runtimeAnimator); - if(m_aasParameters != null) - { - foreach(var l_param in m_aasParameters) - { - PlayerSetup.Instance.animatorManager.SetAnimatorParameter(l_param.name, l_param.value); - } - } - - IKSystem.Instance.leftHandModel.SetActive(false); - IKSystem.Instance.rightHandModel.SetActive(false); - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].ShowTracker(false); - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].ShowLine(false); - CVR_InteractableManager.enableInteractions = true; - - Reset(); - - ShowHudNotification("Calibration completed"); - } - - yield return null; - } - - m_calibrationTask = null; // Idk if it's safe or not - } - - void OverrideIKWeight() - { - if(m_calibrationActive) - { - m_vrIK.solver.IKPositionWeight = 0f; - } - } - - void Reset() - { - m_vrIK = null; - m_runtimeAnimator = null; - m_aasParameters = null; - m_calibrationActive = false; - m_calibrationTask = null; - m_hipsTrackerIndex = -1; - m_hips = null; - } - - static void OnAvatarClear_Postfix() => ms_instance?.OnAvatarClear(); - void OnAvatarClear() - { - try - { - if(m_calibrationActive) - { - if(m_calibrationTask != null) - MelonLoader.MelonCoroutines.Stop(m_calibrationTask); - - m_indexIK.enabled = true; - - IKSystem.Instance.leftHandModel.SetActive(false); - IKSystem.Instance.rightHandModel.SetActive(false); - - if(m_hipsTrackerIndex != -1) - { - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].ShowTracker(false); - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].ShowLine(false); - } - CVR_InteractableManager.enableInteractions = true; - - Reset(); - - ShowHudNotification("Calibration canceled"); - } - } - catch(Exception e) - { - MelonLoader.MelonLogger.Error(e); - } - } - - static void OnSetupAvatar_Postfix() => ms_instance?.OnSetupAvatar(); - void OnSetupAvatar() - { - try - { - if(m_ready && PlayerSetup.Instance._inVr && PlayerSetup.Instance._animator.isHuman && !VRTrackerManager.Instance.CheckFullBody()) - { - int l_hipsTracker = GetHipsTracker(); - if((l_hipsTracker != -1) && m_avatarCalibrations.TryGetValue(MetaPort.Instance.currentAvatarGuid, out var l_stored)) - { - var l_vrIK = PlayerSetup.Instance._animator.GetComponent(); - if(l_vrIK != null) - { - l_vrIK.solver.spine.pelvisTarget = PlayerSetup.Instance._trackerManager.trackers[l_hipsTracker].target; - l_vrIK.solver.spine.pelvisPositionWeight = 1f; - l_vrIK.solver.spine.pelvisRotationWeight = 1f; - - l_vrIK.solver.spine.pelvisTarget.localPosition = l_stored.Item1; - l_vrIK.solver.spine.pelvisTarget.localRotation = l_stored.Item2; - - ShowHudNotification("Applied saved calibration"); - } - } - } - } - catch(System.Exception e) - { - MelonLoader.MelonLogger.Error(e); - } - } - - static void ShowHudNotification(string p_message) - { - if(CohtmlHud.Instance != null) - CohtmlHud.Instance.ViewDropText("4-Point Tracking", p_message); - } - - static void ShowMenuAlert(string p_message) - { - if(ViewManager.Instance != null) - ViewManager.Instance.TriggerAlert("4-Point Tracking", p_message, 0, false); - } - - static int GetHipsTracker() - { - int l_result = -1; - for(int i = 0; i < PlayerSetup.Instance._trackerManager.trackerNames.Length; i++) - { - if((PlayerSetup.Instance._trackerManager.trackerNames[i] == "vive_tracker_waist") && PlayerSetup.Instance._trackerManager.trackers[i].active) - { - l_result = i; - break; - } - } - return l_result; - } - } -} \ No newline at end of file diff --git a/ml_fpt/README.md b/ml_fpt/README.md deleted file mode 100644 index 8eaeeb7..0000000 --- a/ml_fpt/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Four Point Tracking -This mod adds ability to use 4-point tracking. - -# Installation -* Install [latest MelonLoader](https://github.com/LavaGang/MelonLoader) -* Get [latest release DLL](../../../releases/latest): - * Put `ml_fpt.dll` in `Mods` folder of game - -# Usage -* Be sure that your tracker role is set to `Hips` in SteamVR -* Go to `Settings - Implementation - 4-Point Tracking` and press `Calibrate` button -* Adjust your tracker in a similar way as in FBT calibration -* Press trigger on both controllers - -# Notes -* Will be deprecated soon -* Calibration is saved per avatar for game session. -* AAS parameters are restored after calibration. diff --git a/ml_fpt/Scripts.cs b/ml_fpt/Scripts.cs deleted file mode 100644 index a0b5f81..0000000 --- a/ml_fpt/Scripts.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.IO; -using System.Reflection; - -namespace ml_fpt -{ - static class Scripts - { - public static string GetEmbeddedScript(string p_name) - { - string l_result = ""; - Assembly l_assembly = Assembly.GetExecutingAssembly(); - string l_assemblyName = l_assembly.GetName().Name; - - try - { - Stream l_libraryStream = l_assembly.GetManifestResourceStream(l_assemblyName + ".resources." + p_name); - StreamReader l_streadReader = new StreamReader(l_libraryStream); - l_result = l_streadReader.ReadToEnd(); - } - catch(Exception) { } - - return l_result; - } - } -} diff --git a/ml_fpt/ml_fpt.csproj b/ml_fpt/ml_fpt.csproj deleted file mode 100644 index 77ebda4..0000000 --- a/ml_fpt/ml_fpt.csproj +++ /dev/null @@ -1,88 +0,0 @@ - - - - - Debug - AnyCPU - {EC0A8C41-A429-42CD-B8FA-401A802D4BA6} - Library - Properties - ml_fpt - ml_fpt - v4.7.2 - 512 - true - - - - - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - prompt - MinimumRecommendedRules.ruleset - - - bin\x64\Release\ - TRACE - true - pdbonly - x64 - prompt - MinimumRecommendedRules.ruleset - - - - False - - - C:\Games\Steam\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll - False - - - False - C:\Games\Steam\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp-firstpass.dll - False - - - C:\Games\Steam\common\ChilloutVR\ChilloutVR_Data\Managed\cohtml.Net.dll - False - - - C:\Games\Steam\common\ChilloutVR\ChilloutVR_Data\Managed\Cohtml.Runtime.dll - False - - - C:\Games\Steam\common\ChilloutVR\MelonLoader\MelonLoader.dll - False - - - - - - - - - - False - - - False - - - - - - - - - - - - - copy /y "$(TargetPath)" "C:\Games\Steam\common\ChilloutVR\Mods\ - - \ No newline at end of file diff --git a/ml_fpt/ml_fpt.csproj.user b/ml_fpt/ml_fpt.csproj.user deleted file mode 100644 index 2539084..0000000 --- a/ml_fpt/ml_fpt.csproj.user +++ /dev/null @@ -1,6 +0,0 @@ - - - - C:\Games\Steam\common\ChilloutVR\MelonLoader\;C:\Games\Steam\common\ChilloutVR\ChilloutVR_Data\Managed\ - - \ No newline at end of file diff --git a/ml_fpt/resources/menu.js b/ml_fpt/resources/menu.js deleted file mode 100644 index ee02114..0000000 --- a/ml_fpt/resources/menu.js +++ /dev/null @@ -1,12 +0,0 @@ -{ - let l_block = document.createElement('div'); - l_block.innerHTML = ` -
    -
    4-Point Tracking
    -
    -
    - -
    Calibrate
    - `; - document.getElementById('settings-implementation').appendChild(l_block); -} \ No newline at end of file diff --git a/ml_lme/LeapInput.cs b/ml_lme/LeapInput.cs index cd6414b..f6e9f59 100644 --- a/ml_lme/LeapInput.cs +++ b/ml_lme/LeapInput.cs @@ -2,20 +2,19 @@ using ABI_RC.Core.Player; using ABI_RC.Core.Savior; using ABI_RC.Systems.IK; +using ABI_RC.Systems.InputManagement; using System.Collections; -using System.Reflection; using UnityEngine; namespace ml_lme { - [DisallowMultipleComponent] class LeapInput : CVRInputModule { - CVRInputManager m_inputManager = null; - InputModuleOpenXR m_openXrModule = null; bool m_inVR = false; bool m_gripToGrab = true; + bool m_handVisibleLeft = false; + bool m_handVisibleRight = false; ControllerRay m_handRayLeft = null; ControllerRay m_handRayRight = null; LineRenderer m_lineLeft = null; @@ -25,22 +24,31 @@ namespace ml_lme bool m_gripLeft = false; bool m_gripRight = false; - public new void Start() + ~LeapInput() { - base.Start(); + Settings.EnabledChange -= this.OnEnableChange; + Settings.InputChange -= this.OnInputChange; + + MetaPort.Instance.settings.settingBoolChanged.RemoveListener(this.OnGameSettingBoolChange); + } + + public override void ModuleAdded() + { + base.ModuleAdded(); + + InputEnabled = Settings.Enabled; + HapticFeedback = false; - m_inputManager = CVRInputManager.Instance; // _inputManager is stripped out, cool beans - m_openXrModule = m_inputManager.GetComponent(); m_inVR = Utils.IsInVR(); - m_handRayLeft = LeapTracking.GetInstance().GetLeftHand().gameObject.AddComponent(); + m_handRayLeft = LeapTracking.Instance.GetLeftHand().gameObject.AddComponent(); m_handRayLeft.hand = true; m_handRayLeft.generalMask = -1485; m_handRayLeft.isInteractionRay = true; m_handRayLeft.triggerGazeEvents = false; m_handRayLeft.holderRoot = m_handRayLeft.gameObject; - m_handRayRight = LeapTracking.GetInstance().GetRightHand().gameObject.AddComponent(); + m_handRayRight = LeapTracking.Instance.GetRightHand().gameObject.AddComponent(); m_handRayRight.hand = false; m_handRayRight.generalMask = -1485; m_handRayRight.isInteractionRay = true; @@ -107,43 +115,64 @@ namespace ml_lme m_lineRight.gameObject.layer = PlayerSetup.Instance.leftRay.gameObject.layer; } - void OnDestroy() - { - Settings.EnabledChange -= this.OnEnableChange; - Settings.InputChange -= this.OnInputChange; - } - - void Update() - { - GestureMatcher.LeapData l_data = LeapManager.GetInstance().GetLatestData(); - - if(Settings.Enabled) - { - if(l_data.m_leftHand.m_present) - SetFingersInput(l_data.m_leftHand, true); - - if(l_data.m_rightHand.m_present) - SetFingersInput(l_data.m_rightHand, false); - - if(m_inVR) - { - m_inputManager.individualFingerTracking = !m_openXrModule.GetIndexGestureToggle(); - m_inputManager.individualFingerTracking |= (l_data.m_leftHand.m_present || l_data.m_rightHand.m_present); - } - else - m_inputManager.individualFingerTracking = (l_data.m_leftHand.m_present || l_data.m_rightHand.m_present); - IKSystem.Instance.FingerSystem.controlActive = m_inputManager.individualFingerTracking; - } - - m_handRayLeft.enabled = (l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly)); - m_handRayRight.enabled = (l_data.m_rightHand.m_present && (!m_inVR || !Utils.IsRightHandTracked() || !Settings.FingersOnly)); - } - public override void UpdateInput() { - if(Settings.Enabled && Settings.Input) + if(InputEnabled) { - GestureMatcher.LeapData l_data = LeapManager.GetInstance().GetLatestData(); + GestureMatcher.LeapData l_data = LeapManager.Instance.GetLatestData(); + + if(l_data.m_leftHand.m_present) + { + SetFingersInput(l_data.m_leftHand, true); + m_handVisibleLeft = true; + } + else + { + if(m_handVisibleLeft) + { + ResetFingers(true); + m_handVisibleLeft = false; + } + } + + if(l_data.m_rightHand.m_present) + { + SetFingersInput(l_data.m_rightHand, false); + m_handVisibleRight = true; + } + else + { + if(m_handVisibleRight) + { + ResetFingers(false); + m_handVisibleRight = false; + } + } + + if(!ModSupporter.SkipFingersOverride()) + { + if(m_inVR) + { + _inputManager.individualFingerTracking = !CVRInputManager._moduleXR.GestureToggleValue; + _inputManager.individualFingerTracking |= (l_data.m_leftHand.m_present || l_data.m_rightHand.m_present); + } + else + _inputManager.individualFingerTracking = (l_data.m_leftHand.m_present || l_data.m_rightHand.m_present); + IKSystem.Instance.FingerSystem.controlActive = _inputManager.individualFingerTracking; + } + + m_handRayLeft.enabled = (l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly)); + m_handRayRight.enabled = (l_data.m_rightHand.m_present && (!m_inVR || !Utils.IsRightHandTracked() || !Settings.FingersOnly)); + + base.UpdateInput(); + } + } + + public override void Update_Interaction() + { + if(Settings.Input) + { + GestureMatcher.LeapData l_data = LeapManager.Instance.GetLatestData(); if(l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly)) { @@ -154,22 +183,22 @@ namespace ml_lme l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(Mathf.Min(Settings.GripThreadhold, Settings.InteractThreadhold), Mathf.Max(Settings.GripThreadhold, Settings.InteractThreadhold), l_strength)); else l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.InteractThreadhold, l_strength)); - m_inputManager.interactLeftValue = Mathf.Max(l_interactValue, m_inputManager.interactLeftValue); + _inputManager.interactLeftValue = Mathf.Max(l_interactValue, _inputManager.interactLeftValue); if(m_interactLeft != (l_strength > Settings.InteractThreadhold)) { m_interactLeft = (l_strength > Settings.InteractThreadhold); - m_inputManager.interactLeftDown |= m_interactLeft; - m_inputManager.interactLeftUp |= !m_interactLeft; + _inputManager.interactLeftDown |= m_interactLeft; + _inputManager.interactLeftUp |= !m_interactLeft; } float l_gripValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.GripThreadhold, l_strength)); - m_inputManager.gripLeftValue = Mathf.Max(l_gripValue, m_inputManager.gripLeftValue); + _inputManager.gripLeftValue = Mathf.Max(l_gripValue, _inputManager.gripLeftValue); if(m_gripLeft != (l_strength > Settings.GripThreadhold)) { m_gripLeft = (l_strength > Settings.GripThreadhold); - m_inputManager.gripLeftDown |= m_gripLeft; - m_inputManager.gripLeftUp |= !m_gripLeft; + _inputManager.gripLeftDown |= m_gripLeft; + _inputManager.gripLeftUp |= !m_gripLeft; } } @@ -182,22 +211,22 @@ namespace ml_lme l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(Mathf.Min(Settings.GripThreadhold, Settings.InteractThreadhold), Mathf.Max(Settings.GripThreadhold, Settings.InteractThreadhold), l_strength)); else l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.InteractThreadhold, l_strength)); - m_inputManager.interactRightValue = Mathf.Max(l_interactValue, m_inputManager.interactRightValue); + _inputManager.interactRightValue = Mathf.Max(l_interactValue, _inputManager.interactRightValue); if(m_interactRight != (l_strength > Settings.InteractThreadhold)) { m_interactRight = (l_strength > Settings.InteractThreadhold); - m_inputManager.interactRightDown |= m_interactRight; - m_inputManager.interactRightUp |= !m_interactRight; + _inputManager.interactRightDown |= m_interactRight; + _inputManager.interactRightUp |= !m_interactRight; } float l_gripValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.GripThreadhold, l_strength)); - m_inputManager.gripRightValue = Mathf.Max(l_gripValue, m_inputManager.gripRightValue); + _inputManager.gripRightValue = Mathf.Max(l_gripValue, _inputManager.gripRightValue); if(m_gripRight != (l_strength > Settings.GripThreadhold)) { m_gripRight = (l_strength > Settings.GripThreadhold); - m_inputManager.gripRightDown |= m_gripRight; - m_inputManager.gripRightUp |= !m_gripRight; + _inputManager.gripRightDown |= m_gripRight; + _inputManager.gripRightUp |= !m_gripRight; } } } @@ -206,8 +235,12 @@ namespace ml_lme // Settings changes void OnEnableChange(bool p_state) { + InputEnabled = p_state; + OnInputChange(p_state && Settings.Input); UpdateFingerTracking(); + m_handVisibleLeft &= p_state; + m_handVisibleRight &= p_state; } void OnInputChange(bool p_state) @@ -248,27 +281,73 @@ namespace ml_lme // Arbitrary void UpdateFingerTracking() { - m_inputManager.individualFingerTracking = (Settings.Enabled || (m_inVR && m_openXrModule.AreKnucklesInUse() && !m_openXrModule.GetIndexGestureToggle())); - IKSystem.Instance.FingerSystem.controlActive = m_inputManager.individualFingerTracking; + _inputManager.individualFingerTracking = (Settings.Enabled || (m_inVR && Utils.AreKnucklesInUse() && !CVRInputManager._moduleXR.GestureToggleValue)); + IKSystem.Instance.FingerSystem.controlActive = _inputManager.individualFingerTracking; + + if(!Settings.Enabled) + { + ResetFingers(true); + ResetFingers(false); + } } void SetFingersInput(GestureMatcher.HandData p_hand, bool p_left) { if(p_left) { - m_inputManager.fingerCurlLeftThumb = p_hand.m_bends[0]; - m_inputManager.fingerCurlLeftIndex = p_hand.m_bends[1]; - m_inputManager.fingerCurlLeftMiddle = p_hand.m_bends[2]; - m_inputManager.fingerCurlLeftRing = p_hand.m_bends[3]; - m_inputManager.fingerCurlLeftPinky = p_hand.m_bends[4]; + _inputManager.fingerCurlLeftThumb = p_hand.m_bends[0]; + _inputManager.fingerCurlLeftIndex = p_hand.m_bends[1]; + _inputManager.fingerCurlLeftMiddle = p_hand.m_bends[2]; + _inputManager.fingerCurlLeftRing = p_hand.m_bends[3]; + _inputManager.fingerCurlLeftPinky = p_hand.m_bends[4]; + _inputManager.fingerSpreadLeftThumb = p_hand.m_spreads[0]; + _inputManager.fingerSpreadLeftIndex = p_hand.m_spreads[1]; + _inputManager.fingerSpreadLeftMiddle = p_hand.m_spreads[2]; + _inputManager.fingerSpreadLeftRing = p_hand.m_spreads[3]; + _inputManager.fingerSpreadLeftPinky = p_hand.m_spreads[4]; } else { - m_inputManager.fingerCurlRightThumb = p_hand.m_bends[0]; - m_inputManager.fingerCurlRightIndex = p_hand.m_bends[1]; - m_inputManager.fingerCurlRightMiddle = p_hand.m_bends[2]; - m_inputManager.fingerCurlRightRing = p_hand.m_bends[3]; - m_inputManager.fingerCurlRightPinky = p_hand.m_bends[4]; + _inputManager.fingerCurlRightThumb = p_hand.m_bends[0]; + _inputManager.fingerCurlRightIndex = p_hand.m_bends[1]; + _inputManager.fingerCurlRightMiddle = p_hand.m_bends[2]; + _inputManager.fingerCurlRightRing = p_hand.m_bends[3]; + _inputManager.fingerCurlRightPinky = p_hand.m_bends[4]; + _inputManager.fingerSpreadRightThumb = p_hand.m_spreads[0]; + _inputManager.fingerSpreadRightIndex = p_hand.m_spreads[1]; + _inputManager.fingerSpreadRightMiddle = p_hand.m_spreads[2]; + _inputManager.fingerSpreadRightRing = p_hand.m_spreads[3]; + _inputManager.fingerSpreadRightPinky = p_hand.m_spreads[4]; + } + } + + void ResetFingers(bool p_left) + { + if(p_left) + { + _inputManager.fingerCurlLeftThumb = 0f; + _inputManager.fingerCurlLeftIndex = 0f; + _inputManager.fingerCurlLeftMiddle = 0f; + _inputManager.fingerCurlLeftRing = 0f; + _inputManager.fingerCurlLeftPinky = 0f; + _inputManager.fingerSpreadLeftThumb = 0f; + _inputManager.fingerSpreadLeftIndex = 0f; + _inputManager.fingerSpreadLeftMiddle = 0f; + _inputManager.fingerSpreadLeftRing = 0f; + _inputManager.fingerSpreadLeftPinky = 0f; + } + else + { + _inputManager.fingerCurlRightThumb = 0f; + _inputManager.fingerCurlRightIndex = 0f; + _inputManager.fingerCurlRightMiddle = 0f; + _inputManager.fingerCurlRightRing = 0f; + _inputManager.fingerCurlRightPinky = 0f; + _inputManager.fingerSpreadRightThumb = 0f; + _inputManager.fingerSpreadRightIndex = 0f; + _inputManager.fingerSpreadRightMiddle = 0f; + _inputManager.fingerSpreadRightRing = 0f; + _inputManager.fingerSpreadRightPinky = 0f; } } diff --git a/ml_lme/LeapManager.cs b/ml_lme/LeapManager.cs index 1edaa21..2819eb7 100644 --- a/ml_lme/LeapManager.cs +++ b/ml_lme/LeapManager.cs @@ -1,5 +1,6 @@ using ABI_RC.Core.Player; using ABI_RC.Core.Savior; +using ABI_RC.Systems.InputManagement; using System.Collections; using UnityEngine; @@ -8,32 +9,22 @@ namespace ml_lme [DisallowMultipleComponent] class LeapManager : MonoBehaviour { - static LeapManager ms_instance = null; + public static LeapManager Instance { get; private set; } = null; - readonly Leap.Controller m_leapController = null; - readonly GestureMatcher.LeapData m_leapData = null; + Leap.Controller m_leapController = null; + GestureMatcher.LeapData m_leapData = null; LeapTracking m_leapTracking = null; LeapTracked m_leapTracked = null; LeapInput m_leapInput = null; - public static LeapManager GetInstance() => ms_instance; - - internal LeapManager() + void Awake() { + if(Instance == null) + Instance = this; + m_leapController = new Leap.Controller(); m_leapData = new GestureMatcher.LeapData(); - } - ~LeapManager() - { - m_leapController.StopConnection(); - m_leapController.Dispose(); - } - - void Start() - { - if(ms_instance == null) - ms_instance = this; DontDestroyOnLoad(this); @@ -49,41 +40,44 @@ namespace ml_lme m_leapTracking = new GameObject("[LeapTrackingRoot]").AddComponent(); m_leapTracking.transform.parent = this.transform; - MelonLoader.MelonCoroutines.Start(WaitForInputManager()); - MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer()); - OnEnableChange(Settings.Enabled); OnTrackingModeChange(Settings.TrackingMode); + + MelonLoader.MelonCoroutines.Start(WaitForObjects()); } void OnDestroy() { - if(ms_instance == this) - ms_instance = null; + if(Instance == this) + Instance = null; + m_leapController.StopConnection(); m_leapController.Device -= this.OnLeapDeviceInitialized; m_leapController.DeviceFailure -= this.OnLeapDeviceFailure; m_leapController.DeviceLost -= this.OnLeapDeviceLost; m_leapController.Connect -= this.OnLeapServiceConnect; m_leapController.Disconnect -= this.OnLeapServiceDisconnect; + m_leapController.Dispose(); + m_leapController = null; Settings.EnabledChange -= this.OnEnableChange; Settings.TrackingModeChange -= this.OnTrackingModeChange; } - IEnumerator WaitForInputManager() + IEnumerator WaitForObjects() { while(CVRInputManager.Instance == null) yield return null; - m_leapInput = CVRInputManager.Instance.gameObject.AddComponent(); - } - - IEnumerator WaitForLocalPlayer() - { while(PlayerSetup.Instance == null) yield return null; + while(LeapTracking.Instance == null) + yield return null; + + m_leapInput = new LeapInput(); + CVRInputManager.Instance.AddInputModule(m_leapInput); + m_leapTracked = PlayerSetup.Instance.gameObject.AddComponent(); } @@ -168,8 +162,9 @@ namespace ml_lme { if(m_leapTracking != null) m_leapTracking.OnAvatarSetup(); - if(m_leapInput != null) - m_leapInput.OnAvatarSetup(); + + m_leapInput?.OnAvatarSetup(); + if(m_leapTracked != null) m_leapTracked.OnAvatarSetup(); } @@ -182,8 +177,7 @@ namespace ml_lme internal void OnRayScale(float p_scale) { - if(m_leapInput != null) - m_leapInput.OnRayScale(p_scale); + m_leapInput?.OnRayScale(p_scale); } internal void OnPlayspaceScale(float p_relation) diff --git a/ml_lme/LeapTracked.cs b/ml_lme/LeapTracked.cs index 7c8cfea..fe0b76a 100644 --- a/ml_lme/LeapTracked.cs +++ b/ml_lme/LeapTracked.cs @@ -43,12 +43,12 @@ namespace ml_lme m_inVR = Utils.IsInVR(); m_leftHandTarget = new GameObject("RotationTarget").transform; - m_leftHandTarget.parent = LeapTracking.GetInstance().GetLeftHand(); + m_leftHandTarget.parent = LeapTracking.Instance.GetLeftHand(); m_leftHandTarget.localPosition = Vector3.zero; m_leftHandTarget.localRotation = Quaternion.identity; m_rightHandTarget = new GameObject("RotationTarget").transform; - m_rightHandTarget.parent = LeapTracking.GetInstance().GetRightHand(); + m_rightHandTarget.parent = LeapTracking.Instance.GetRightHand(); m_rightHandTarget.localPosition = Vector3.zero; m_rightHandTarget.localRotation = Quaternion.identity; @@ -72,7 +72,7 @@ namespace ml_lme { if(m_enabled) { - GestureMatcher.LeapData l_data = LeapManager.GetInstance().GetLatestData(); + GestureMatcher.LeapData l_data = LeapManager.Instance.GetLatestData(); if((m_leftArmIK != null) && (m_rightArmIK != null)) { @@ -92,7 +92,7 @@ namespace ml_lme if(l_data.m_leftHand.m_present && !m_leftTargetActive) { m_vrIK.solver.leftArm.target = m_leftHandTarget; - m_vrIK.solver.leftArm.bendGoal = LeapTracking.GetInstance().GetLeftElbow(); + m_vrIK.solver.leftArm.bendGoal = LeapTracking.Instance.GetLeftElbow(); m_vrIK.solver.leftArm.bendGoalWeight = (m_trackElbows ? 1f : 0f); m_leftTargetActive = true; } @@ -107,7 +107,7 @@ namespace ml_lme if(l_data.m_rightHand.m_present && !m_rightTargetActive) { m_vrIK.solver.rightArm.target = m_rightHandTarget; - m_vrIK.solver.rightArm.bendGoal = LeapTracking.GetInstance().GetRightElbow(); + m_vrIK.solver.rightArm.bendGoal = LeapTracking.Instance.GetRightElbow(); m_vrIK.solver.rightArm.bendGoalWeight = (m_trackElbows ? 1f : 0f); m_rightTargetActive = true; } @@ -126,7 +126,7 @@ namespace ml_lme { if(m_enabled && !m_inVR && (m_poseHandler != null)) { - GestureMatcher.LeapData l_data = LeapManager.GetInstance().GetLatestData(); + GestureMatcher.LeapData l_data = LeapManager.Instance.GetLatestData(); Vector3 l_hipsLocalPos = m_hips.localPosition; Quaternion l_hipsLocalRot = m_hips.localRotation; @@ -232,7 +232,10 @@ namespace ml_lme if(PlayerSetup.Instance._animator.isHuman) { + Vector3 l_hipsPos = Vector3.zero; m_hips = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.Hips); + if(m_hips != null) + l_hipsPos = m_hips.localPosition; if(!m_inVR) { @@ -278,7 +281,7 @@ namespace ml_lme PlayerSetup.Instance._animator.transform ); m_leftArmIK.solver.arm.target = m_leftHandTarget; - m_leftArmIK.solver.arm.bendGoal = LeapTracking.GetInstance().GetLeftElbow(); + m_leftArmIK.solver.arm.bendGoal = LeapTracking.Instance.GetLeftElbow(); m_leftArmIK.solver.arm.bendGoalWeight = (m_trackElbows ? 1f : 0f); m_leftArmIK.enabled = (m_enabled && !m_fingersOnly); @@ -293,7 +296,7 @@ namespace ml_lme PlayerSetup.Instance._animator.transform ); m_rightArmIK.solver.arm.target = m_rightHandTarget; - m_rightArmIK.solver.arm.bendGoal = LeapTracking.GetInstance().GetRightElbow(); + m_rightArmIK.solver.arm.bendGoal = LeapTracking.Instance.GetRightElbow(); m_rightArmIK.solver.arm.bendGoalWeight = (m_trackElbows ? 1f : 0f); m_rightArmIK.enabled = (m_enabled && !m_fingersOnly); @@ -308,6 +311,9 @@ namespace ml_lme m_vrIK.solver.OnPreUpdate += this.OnIKPreUpdate; m_vrIK.solver.OnPostUpdate += this.OnIKPostUpdate; } + + if(m_hips != null) + m_hips.localPosition = l_hipsPos; } } diff --git a/ml_lme/LeapTracking.cs b/ml_lme/LeapTracking.cs index 251b9cd..429b904 100644 --- a/ml_lme/LeapTracking.cs +++ b/ml_lme/LeapTracking.cs @@ -7,7 +7,7 @@ namespace ml_lme [DisallowMultipleComponent] class LeapTracking : MonoBehaviour { - static LeapTracking ms_instance = null; + public static LeapTracking Instance { get; private set; } = null; static Quaternion ms_identityRotation = Quaternion.identity; bool m_inVR = false; @@ -20,12 +20,10 @@ namespace ml_lme float m_scaleRelation = 1f; - public static LeapTracking GetInstance() => ms_instance; - void Start() { - if(ms_instance == null) - ms_instance = this; + if(Instance == null) + Instance = this; m_inVR = Utils.IsInVR(); @@ -82,8 +80,8 @@ namespace ml_lme void OnDestroy() { - if(ms_instance == this) - ms_instance = null; + if(Instance == this) + Instance = null; Settings.DesktopOffsetChange -= this.OnDesktopOffsetChange; Settings.ModelVisibilityChange -= this.OnModelVisibilityChange; @@ -97,7 +95,7 @@ namespace ml_lme { if(Settings.Enabled) { - GestureMatcher.LeapData l_data = LeapManager.GetInstance().GetLatestData(); + GestureMatcher.LeapData l_data = LeapManager.Instance.GetLatestData(); if(l_data.m_leftHand.m_present) { diff --git a/ml_lme/Main.cs b/ml_lme/Main.cs index 2bfb331..a2c9635 100644 --- a/ml_lme/Main.cs +++ b/ml_lme/Main.cs @@ -49,6 +49,7 @@ namespace ml_lme new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnPlayspaceScale_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) ); + ModSupporter.Init(); MelonLoader.MelonCoroutines.Start(WaitForRootLogic()); } diff --git a/ml_lme/ModSupporter.cs b/ml_lme/ModSupporter.cs new file mode 100644 index 0000000..9747c8d --- /dev/null +++ b/ml_lme/ModSupporter.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ml_lme +{ + static class ModSupporter + { + static bool ms_copycatMod = false; + + public static void Init() + { + if(MelonLoader.MelonMod.RegisteredMelons.FirstOrDefault(m => m.Info.Name == "PlayerMovementCopycat") != null) + MelonLoader.MelonCoroutines.Start(WaitForCopycatInstance()); + } + + // PlayerMovementCopycat support + static IEnumerator WaitForCopycatInstance() + { + while(ml_pmc.PoseCopycat.Instance == null) + yield return null; + + ms_copycatMod = true; + } + static bool IsCopycating() => (ml_pmc.PoseCopycat.Instance.IsActive() && ml_pmc.PoseCopycat.Instance.IsFingerTrackingActive()); + + public static bool SkipFingersOverride() + { + bool l_result = false; + l_result |= (ms_copycatMod && IsCopycating()); + return l_result; + } + } +} diff --git a/ml_lme/Properties/AssemblyInfo.cs b/ml_lme/Properties/AssemblyInfo.cs index 6599485..7352871 100644 --- a/ml_lme/Properties/AssemblyInfo.cs +++ b/ml_lme/Properties/AssemblyInfo.cs @@ -1,4 +1,7 @@ -[assembly: MelonLoader.MelonInfo(typeof(ml_lme.LeapMotionExtension), "LeapMotionExtension", "1.3.2-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] +using System.Reflection; + +[assembly: MelonLoader.MelonInfo(typeof(ml_lme.LeapMotionExtension), "LeapMotionExtension", "1.3.7", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] [assembly: MelonLoader.MelonGame(null, "ChilloutVR")] +[assembly: MelonLoader.MelonOptionalDependencies("ml_pmc")] [assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] [assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)] diff --git a/ml_lme/Settings.cs b/ml_lme/Settings.cs index b1c04c6..56ff521 100644 --- a/ml_lme/Settings.cs +++ b/ml_lme/Settings.cs @@ -1,4 +1,5 @@ using ABI_RC.Core.InteractionSystem; +using cohtml; using System; using System.Collections.Generic; using UnityEngine; @@ -67,7 +68,7 @@ namespace ml_lme internal static void Init() { - ms_category = MelonLoader.MelonPreferences.CreateCategory("LME"); + ms_category = MelonLoader.MelonPreferences.CreateCategory("LME", null, true); ms_entries = new List() { diff --git a/ml_lme/Utils.cs b/ml_lme/Utils.cs index b2eed59..455a165 100644 --- a/ml_lme/Utils.cs +++ b/ml_lme/Utils.cs @@ -1,8 +1,10 @@ -using ABI_RC.Core.Savior; +using ABI_RC.Core.Player; +using ABI_RC.Core.Savior; using ABI_RC.Core.UI; +using ABI_RC.Systems.InputManagement; +using System.Linq; using System.Reflection; using UnityEngine; -using UnityEngine.XR; namespace ml_lme { @@ -10,25 +12,19 @@ namespace ml_lme { static readonly Quaternion ms_hmdRotationFix = new Quaternion(0f, 0.7071068f, 0.7071068f, 0f); static readonly Quaternion ms_screentopRotationFix = new Quaternion(0f, 0f, -1f, 0f); - static readonly FieldInfo ms_leftControllerName = typeof(InputModuleOpenXR).GetField("_leftHandControllerName", BindingFlags.NonPublic | BindingFlags.Instance); - static readonly FieldInfo ms_rightControllerName = typeof(InputModuleOpenXR).GetField("_rightHandControllerName", BindingFlags.NonPublic | BindingFlags.Instance); - static readonly FieldInfo ms_indexGestureToggle = typeof(InputModuleOpenXR).GetField("_steamVrIndexGestureToggleValue", BindingFlags.Instance | BindingFlags.NonPublic); + static FieldInfo ms_cohtmlView = typeof(CohtmlControlledViewDisposable).GetField("_view", BindingFlags.NonPublic | BindingFlags.Instance); public static bool IsInVR() => ((CheckVR.Instance != null) && CheckVR.Instance.hasVrDeviceLoaded); - public static bool AreKnucklesInUse(this InputModuleOpenXR p_module) => (((string)ms_leftControllerName.GetValue(p_module)).Contains("Index") || ((string)ms_rightControllerName.GetValue(p_module)).Contains("Index")); - public static bool GetIndexGestureToggle(this InputModuleOpenXR p_module) => (bool)ms_indexGestureToggle.GetValue(p_module); - public static bool IsLeftHandTracked() => InputDevices.GetDeviceAtXRNode(XRNode.LeftHand).isValid; - public static bool IsRightHandTracked() => InputDevices.GetDeviceAtXRNode(XRNode.RightHand).isValid; - + public static bool AreKnucklesInUse() => ((CVRInputManager.Instance._leftController == ABI_RC.Systems.InputManagement.XR.EXRControllerType.Index) || (CVRInputManager.Instance._rightController == ABI_RC.Systems.InputManagement.XR.EXRControllerType.Index)); + public static bool IsLeftHandTracked() => (CVRInputManager.Instance._leftController != ABI_RC.Systems.InputManagement.XR.EXRControllerType.None); + public static bool IsRightHandTracked() => (CVRInputManager.Instance._rightController != ABI_RC.Systems.InputManagement.XR.EXRControllerType.None); public static Matrix4x4 GetMatrix(this Transform p_transform, bool p_pos = true, bool p_rot = true, bool p_scl = false) { return Matrix4x4.TRS(p_pos ? p_transform.position : Vector3.zero, p_rot ? p_transform.rotation : Quaternion.identity, p_scl ? p_transform.lossyScale : Vector3.one); } - public static void ExecuteScript(this CohtmlControlledViewDisposable p_viewDisposable, string p_script) => ((cohtml.Net.View)ms_cohtmlView.GetValue(p_viewDisposable))?.ExecuteScript(p_script); - public static void ShowHUDNotification(string p_title, string p_message, string p_small = "", bool p_immediate = false) { if(CohtmlHud.Instance != null) @@ -40,6 +36,8 @@ namespace ml_lme } } + public static void ExecuteScript(this CohtmlControlledViewDisposable p_instance, string p_script) => ((cohtml.Net.View)ms_cohtmlView.GetValue(p_instance))?.ExecuteScript(p_script); + public static void LeapToUnity(ref Vector3 p_pos, ref Quaternion p_rot, Settings.LeapTrackingMode p_mode) { p_pos *= 0.001f; @@ -50,20 +48,20 @@ namespace ml_lme switch(p_mode) { case Settings.LeapTrackingMode.Screentop: - { - p_pos.x *= -1f; - p_pos.y *= -1f; - p_rot = (ms_screentopRotationFix * p_rot); - } - break; + { + p_pos.x *= -1f; + p_pos.y *= -1f; + p_rot = (ms_screentopRotationFix * p_rot); + } + break; case Settings.LeapTrackingMode.HMD: - { - p_pos.x *= -1f; - Swap(ref p_pos.y, ref p_pos.z); - p_rot = (ms_hmdRotationFix * p_rot); - } - break; + { + p_pos.x *= -1f; + Swap(ref p_pos.y, ref p_pos.z); + p_rot = (ms_hmdRotationFix * p_rot); + } + break; } } diff --git a/ml_lme/ml_lme.csproj b/ml_lme/ml_lme.csproj index bd5702a..ff9c655 100644 --- a/ml_lme/ml_lme.csproj +++ b/ml_lme/ml_lme.csproj @@ -4,7 +4,7 @@ netstandard2.1 x64 LeapMotionExtension - 1.3.2 + 1.3.7 SDraw None LeapMotionExtension @@ -37,8 +37,7 @@ - D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\0Harmony.dll - false + D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll @@ -57,8 +56,10 @@ false - D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\MelonLoader.dll - false + D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\Mods\ml_pmc.dll D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll diff --git a/ml_mods_cvr.sln b/ml_mods_cvr.sln index ecbbad0..9a06e49 100644 --- a/ml_mods_cvr.sln +++ b/ml_mods_cvr.sln @@ -15,6 +15,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ml_lme", "ml_lme\ml_lme.csp EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ml_pam", "ml_pam\ml_pam.csproj", "{5B614459-234A-443D-B06D-34FF81ADA67E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ml_prm", "ml_prm\ml_prm.csproj", "{D27B6D36-884F-4A49-9A25-B9C121E7B65F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ml_pmc", "ml_pmc\ml_pmc.csproj", "{118675AA-9AC7-4B0C-BFB1-FA1691619502}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -39,6 +43,12 @@ Global {5B614459-234A-443D-B06D-34FF81ADA67E}.Debug|x64.ActiveCfg = Debug|x64 {5B614459-234A-443D-B06D-34FF81ADA67E}.Release|x64.ActiveCfg = Release|x64 {5B614459-234A-443D-B06D-34FF81ADA67E}.Release|x64.Build.0 = Release|x64 + {D27B6D36-884F-4A49-9A25-B9C121E7B65F}.Debug|x64.ActiveCfg = Debug|x64 + {D27B6D36-884F-4A49-9A25-B9C121E7B65F}.Release|x64.ActiveCfg = Release|x64 + {D27B6D36-884F-4A49-9A25-B9C121E7B65F}.Release|x64.Build.0 = Release|x64 + {118675AA-9AC7-4B0C-BFB1-FA1691619502}.Debug|x64.ActiveCfg = Debug|x64 + {118675AA-9AC7-4B0C-BFB1-FA1691619502}.Release|x64.ActiveCfg = Release|x64 + {118675AA-9AC7-4B0C-BFB1-FA1691619502}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/ml_pam/ArmMover.cs b/ml_pam/ArmMover.cs index c9940ae..6091e3b 100644 --- a/ml_pam/ArmMover.cs +++ b/ml_pam/ArmMover.cs @@ -132,6 +132,11 @@ namespace ml_pam if(PlayerSetup.Instance._animator.isHuman) { + Vector3 l_hipsPos = Vector3.zero; + Transform l_hips = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.Hips); + if(l_hips != null) + l_hipsPos = l_hips.localPosition; + HumanPose l_currentPose = new HumanPose(); HumanPoseHandler l_poseHandler = null; @@ -190,6 +195,9 @@ namespace ml_pam l_poseHandler?.SetHumanPose(ref l_currentPose); l_poseHandler?.Dispose(); + + if(l_hips != null) + l_hips.localPosition = l_hipsPos; } if(m_enabled) diff --git a/ml_pam/Properties/AssemblyInfo.cs b/ml_pam/Properties/AssemblyInfo.cs index 4e400ae..fd2a783 100644 --- a/ml_pam/Properties/AssemblyInfo.cs +++ b/ml_pam/Properties/AssemblyInfo.cs @@ -1,4 +1,6 @@ -[assembly: MelonLoader.MelonInfo(typeof(ml_pam.PickupArmMovement), "PickupArmMovement", "1.0.2-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] +using System.Reflection; + +[assembly: MelonLoader.MelonInfo(typeof(ml_pam.PickupArmMovement), "PickupArmMovement", "1.0.5", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] [assembly: MelonLoader.MelonGame(null, "ChilloutVR")] [assembly: MelonLoader.MelonPriority(1)] [assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] diff --git a/ml_pam/Settings.cs b/ml_pam/Settings.cs index 92ac61a..433cdab 100644 --- a/ml_pam/Settings.cs +++ b/ml_pam/Settings.cs @@ -1,4 +1,5 @@ using ABI_RC.Core.InteractionSystem; +using cohtml; using System; using System.Collections.Generic; @@ -23,7 +24,7 @@ namespace ml_pam internal static void Init() { - ms_category = MelonLoader.MelonPreferences.CreateCategory("PAM"); + ms_category = MelonLoader.MelonPreferences.CreateCategory("PAM", null, true); ms_entries = new List() { diff --git a/ml_pam/Utils.cs b/ml_pam/Utils.cs index 9bed194..fc1a2ab 100644 --- a/ml_pam/Utils.cs +++ b/ml_pam/Utils.cs @@ -10,12 +10,12 @@ namespace ml_pam public static bool IsInVR() => ((ABI_RC.Core.Savior.CheckVR.Instance != null) && ABI_RC.Core.Savior.CheckVR.Instance.hasVrDeviceLoaded); + public static void ExecuteScript(this CohtmlControlledViewDisposable p_instance, string p_script) => ((cohtml.Net.View)ms_cohtmlView.GetValue(p_instance))?.ExecuteScript(p_script); + // Extensions public static Matrix4x4 GetMatrix(this Transform p_transform, bool p_pos = true, bool p_rot = true, bool p_scl = false) { return Matrix4x4.TRS(p_pos ? p_transform.position : Vector3.zero, p_rot ? p_transform.rotation : Quaternion.identity, p_scl ? p_transform.localScale : Vector3.one); } - - public static void ExecuteScript(this CohtmlControlledViewDisposable p_viewDisposable, string p_script) => ((cohtml.Net.View)ms_cohtmlView.GetValue(p_viewDisposable))?.ExecuteScript(p_script); } } diff --git a/ml_pam/ml_pam.csproj b/ml_pam/ml_pam.csproj index 83de615..51dd025 100644 --- a/ml_pam/ml_pam.csproj +++ b/ml_pam/ml_pam.csproj @@ -4,7 +4,7 @@ netstandard2.1 x64 PickupArmMovement - 1.0.2 + 1.0.5 SDraw None PickupArmMovement @@ -26,8 +26,7 @@ - D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\0Harmony.dll - false + D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll @@ -46,8 +45,7 @@ false - D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\MelonLoader.dll - false + D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll diff --git a/ml_pmc/Main.cs b/ml_pmc/Main.cs new file mode 100644 index 0000000..bb3a3ea --- /dev/null +++ b/ml_pmc/Main.cs @@ -0,0 +1,130 @@ +using ABI_RC.Core.Networking.IO.Social; +using ABI_RC.Core.Player; +using ABI_RC.Systems.MovementSystem; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEngine; + +namespace ml_pmc +{ + public class PlayerMovementCopycat : MelonLoader.MelonMod + { + static PlayerMovementCopycat ms_instance = null; + + PoseCopycat m_localCopycat = null; + + public override void OnInitializeMelon() + { + if(ms_instance == null) + ms_instance = this; + + Settings.Init(); + ModUi.Init(); + + HarmonyInstance.Patch( + typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar)), + null, + new HarmonyLib.HarmonyMethod(typeof(PlayerMovementCopycat).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.NonPublic | BindingFlags.Static)) + ); + HarmonyInstance.Patch( + typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar)), + null, + new HarmonyLib.HarmonyMethod(typeof(PlayerMovementCopycat).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) + ); + + MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer()); + } + + public override void OnDeinitializeMelon() + { + if(ms_instance == this) + ms_instance = null; + + m_localCopycat = null; + } + + System.Collections.IEnumerator WaitForLocalPlayer() + { + while(PlayerSetup.Instance == null) + yield return null; + + m_localCopycat = PlayerSetup.Instance.gameObject.AddComponent(); + ModUi.CopySwitch += this.OnTargetSelect; + } + + void OnTargetSelect(string p_id) + { + if(m_localCopycat != null) + { + if(m_localCopycat.IsActive()) + m_localCopycat.SetTarget(null); + else + { + if(Friends.FriendsWith(p_id)) + { + if(CVRPlayerManager.Instance.GetPlayerPuppetMaster(p_id, out PuppetMaster l_puppetMaster)) + { + if(IsInSight(MovementSystem.Instance.proxyCollider, l_puppetMaster.GetComponent(), Utils.GetWorldMovementLimit())) + m_localCopycat.SetTarget(l_puppetMaster.gameObject); + else + ModUi.ShowAlert("Selected player is too far away or obstructed"); + } + else + ModUi.ShowAlert("Selected player isn't connected or ready yet"); + } + else + ModUi.ShowAlert("Selected player isn't your friend"); + } + } + } + + static bool IsInSight(CapsuleCollider p_source, CapsuleCollider p_target, float p_limit) + { + bool l_result = false; + if((p_source != null) && (p_target != null)) + { + Ray l_ray = new Ray(); + l_ray.origin = (p_source.transform.position + p_source.transform.rotation * p_source.center); + l_ray.direction = (p_target.transform.position + p_target.transform.rotation * p_target.center) - l_ray.origin; + List l_hits = Physics.RaycastAll(l_ray, p_limit, LayerMask.NameToLayer("UI Internal")).ToList(); + if(l_hits.Count > 0) + { + l_hits.Sort((a, b) => ((a.distance < b.distance) ? -1 : 1)); + l_result = (l_hits.First().collider.gameObject.transform.root == p_target.transform.root); + } + } + return l_result; + } + + // Patches + static void OnAvatarClear_Postfix() => ms_instance?.OnAvatarClear(); + void OnAvatarClear() + { + try + { + if(m_localCopycat != null) + m_localCopycat.OnAvatarClear(); + } + catch(Exception e) + { + MelonLoader.MelonLogger.Error(e); + } + } + + static void OnSetupAvatar_Postfix() => ms_instance?.OnSetupAvatar(); + void OnSetupAvatar() + { + try + { + if(m_localCopycat != null) + m_localCopycat.OnAvatarSetup(); + } + catch(Exception e) + { + MelonLoader.MelonLogger.Error(e); + } + } + } +} diff --git a/ml_pmc/ModUi.cs b/ml_pmc/ModUi.cs new file mode 100644 index 0000000..c537cd2 --- /dev/null +++ b/ml_pmc/ModUi.cs @@ -0,0 +1,136 @@ +using BTKUILib.UIObjects; +using BTKUILib.UIObjects.Components; +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; + +namespace ml_pmc +{ + static class ModUi + { + enum UiIndex + { + Toggle, + Position, + Rotation, + Gestures, + LookAtMix, + MirrorPose, + MirrorPosition, + MirrorRotation, + Reset + } + + internal static Action CopySwitch; + + static List ms_uiElements = null; + static string ms_selectedPlayer; + + internal static void Init() + { + ms_uiElements = new List(); + + BTKUILib.QuickMenuAPI.PrepareIcon("PlayerMovementCopycat", "PMC-Dancing", GetIconStream("dancing.png")); + BTKUILib.QuickMenuAPI.PrepareIcon("PlayerMovementCopycat", "PMC-Dancing-On", GetIconStream("dancing_on.png")); + + var l_category = BTKUILib.QuickMenuAPI.PlayerSelectPage.AddCategory("Player Movement Copycat", "PlayerMovementCopycat"); + + ms_uiElements.Add(l_category.AddButton("Copy movement", "PMC-Dancing", "Start/stop copy of player's movement")); + (ms_uiElements[(int)UiIndex.Toggle] as Button).OnPress += OnCopySwitch; + + ms_uiElements.Add(l_category.AddToggle("Apply position", "Apply local position change of target player", Settings.Position)); + (ms_uiElements[(int)UiIndex.Position] as ToggleButton).OnValueUpdated += (value) => OnToggleUpdate(UiIndex.Position, value); + + ms_uiElements.Add(l_category.AddToggle("Apply rotation", "Apply local rotation change of target player", Settings.Rotation)); + (ms_uiElements[(int)UiIndex.Rotation] as ToggleButton).OnValueUpdated += (value) => OnToggleUpdate(UiIndex.Rotation, value); + + ms_uiElements.Add(l_category.AddToggle("Copy gestures", "Copy gestures of target player", Settings.Gestures)); + (ms_uiElements[(int)UiIndex.Gestures] as ToggleButton).OnValueUpdated += (value) => OnToggleUpdate(UiIndex.Gestures, value); + + ms_uiElements.Add(l_category.AddToggle("Apply LookAtIK", "Mix target player pose and camera view direction (desktop only)", Settings.LookAtMix)); + (ms_uiElements[(int)UiIndex.LookAtMix] as ToggleButton).OnValueUpdated += (value) => OnToggleUpdate(UiIndex.LookAtMix, value); + + ms_uiElements.Add(l_category.AddToggle("Mirror pose", "Mirror target player pose", Settings.MirrorPose)); + (ms_uiElements[(int)UiIndex.MirrorPose] as ToggleButton).OnValueUpdated += (value) => OnToggleUpdate(UiIndex.MirrorPose, value); + + ms_uiElements.Add(l_category.AddToggle("Mirror position", "Mirror target player movement against 0YZ plane", Settings.MirrorPosition)); + (ms_uiElements[(int)UiIndex.MirrorPosition] as ToggleButton).OnValueUpdated += (value) => OnToggleUpdate(UiIndex.MirrorPosition, value); + + ms_uiElements.Add(l_category.AddToggle("Mirror rotation", "Mirror target player rotation against 0YZ plane", Settings.MirrorRotation)); + (ms_uiElements[(int)UiIndex.MirrorRotation] as ToggleButton).OnValueUpdated += (value) => OnToggleUpdate(UiIndex.MirrorRotation, value); + + ms_uiElements.Add(l_category.AddButton("Reset settings", "", "Reset mod's settings to default")); + (ms_uiElements[(int)UiIndex.Reset] as Button).OnPress += Reset; + + BTKUILib.QuickMenuAPI.OnPlayerSelected += (_, id) => ms_selectedPlayer = id; + PoseCopycat.OnActivityChange += UpdateToggleColor; + } + + static void OnCopySwitch() => CopySwitch?.Invoke(ms_selectedPlayer); + + static void OnToggleUpdate(UiIndex p_index, bool p_value, bool p_force = false) + { + switch(p_index) + { + case UiIndex.Position: + Settings.SetSetting(Settings.ModSetting.Position, p_value); + break; + + case UiIndex.Rotation: + Settings.SetSetting(Settings.ModSetting.Rotation, p_value); + break; + + case UiIndex.Gestures: + Settings.SetSetting(Settings.ModSetting.Gestures, p_value); + break; + + case UiIndex.LookAtMix: + Settings.SetSetting(Settings.ModSetting.LookAtMix, p_value); + break; + + case UiIndex.MirrorPose: + Settings.SetSetting(Settings.ModSetting.MirrorPose, p_value); + break; + + case UiIndex.MirrorPosition: + Settings.SetSetting(Settings.ModSetting.MirrorPosition, p_value); + break; + + case UiIndex.MirrorRotation: + Settings.SetSetting(Settings.ModSetting.MirrorRotation, p_value); + break; + } + + if(p_force) + (ms_uiElements[(int)p_index] as ToggleButton).ToggleValue = p_value; + } + + static void Reset() + { + OnToggleUpdate(UiIndex.Position, true, true); + OnToggleUpdate(UiIndex.Rotation, true, true); + OnToggleUpdate(UiIndex.Gestures, true, true); + OnToggleUpdate(UiIndex.LookAtMix, true, true); + OnToggleUpdate(UiIndex.MirrorPose, false, true); + OnToggleUpdate(UiIndex.MirrorPosition, false, true); + OnToggleUpdate(UiIndex.MirrorRotation, false, true); + } + + internal static void ShowAlert(string p_text) => BTKUILib.QuickMenuAPI.ShowAlertToast(p_text, 2); + + // Currently broken in BTKUILib, waiting for fix + static void UpdateToggleColor(bool p_state) + { + //(ms_uiElements[(int)UiIndex.Toggle] as Button).ButtonIcon = (p_state ? "PMC-Dancing-On" : "PMC-Dancing"); + //(ms_uiElements[(int)UiIndex.Toggle] as Button).ButtonText = (p_state ? "PMC-Dancing-On" : "PMC-Dancing"); + } + + static Stream GetIconStream(string p_name) + { + Assembly l_assembly = Assembly.GetExecutingAssembly(); + string l_assemblyName = l_assembly.GetName().Name; + return l_assembly.GetManifestResourceStream(l_assemblyName + ".resources." + p_name); + } + } +} diff --git a/ml_pmc/PoseCopycat.cs b/ml_pmc/PoseCopycat.cs new file mode 100644 index 0000000..5e0bad0 --- /dev/null +++ b/ml_pmc/PoseCopycat.cs @@ -0,0 +1,301 @@ +using ABI_RC.Core.Player; +using ABI_RC.Core.Savior; +using ABI_RC.Systems.IK; +using ABI_RC.Systems.IK.SubSystems; +using ABI_RC.Systems.InputManagement; +using ABI_RC.Systems.MovementSystem; +using RootMotion.FinalIK; +using UnityEngine; + +namespace ml_pmc +{ + [DisallowMultipleComponent] + public class PoseCopycat : MonoBehaviour + { + static readonly Vector4 ms_pointVector = new Vector4(0f, 0f, 0f, 1f); + + static public PoseCopycat Instance { get; private set; } = null; + static internal System.Action OnActivityChange; + + Animator m_animator = null; + VRIK m_vrIk = null; + float m_ikWeight = 1f; + LookAtIK m_lookAtIk = null; + float m_lookIkWeight = 1f; + bool m_sitting = false; + bool m_inVr = false; + + bool m_active = false; + float m_distanceLimit = float.MaxValue; + bool m_fingerTracking = false; + + HumanPoseHandler m_poseHandler = null; + HumanPose m_pose; + PuppetParser m_puppetParser = null; + + internal PoseCopycat() + { + if(Instance == null) + Instance = this; + } + ~PoseCopycat() + { + if(Instance == this) + Instance = null; + } + + // Unity events + void Update() + { + m_sitting = (MovementSystem.Instance.lastSeat != null); + + if(m_active && (m_puppetParser != null)) + { + OverrideIK(); + + if(m_puppetParser.HasAnimator()) + { + bool l_mirror = Settings.MirrorPose; + + if(Settings.Gestures) + { + CVRInputManager.Instance.gestureLeft = (l_mirror ? m_puppetParser.GetRightGesture() : m_puppetParser.GetLeftGesture()); + CVRInputManager.Instance.gestureRight = (l_mirror ? m_puppetParser.GetLeftGesture() : m_puppetParser.GetRightGesture()); + } + + if(m_puppetParser.HasFingerTracking()) + { + m_fingerTracking = true; + + CVRInputManager.Instance.individualFingerTracking = true; + IKSystem.Instance.FingerSystem.controlActive = true; + + ref float[] l_curls = ref m_puppetParser.GetFingerCurls(); + + CVRInputManager.Instance.fingerCurlLeftThumb = l_curls[l_mirror ? 5 : 0]; + CVRInputManager.Instance.fingerCurlLeftIndex = l_curls[l_mirror ? 6 : 1]; + CVRInputManager.Instance.fingerCurlLeftMiddle = l_curls[l_mirror ? 7 : 2]; + CVRInputManager.Instance.fingerCurlLeftRing = l_curls[l_mirror ? 8 : 3]; + CVRInputManager.Instance.fingerCurlLeftPinky = l_curls[l_mirror ? 9 : 4]; + CVRInputManager.Instance.fingerCurlRightThumb = l_curls[l_mirror ? 0 : 5]; + CVRInputManager.Instance.fingerCurlRightIndex = l_curls[l_mirror ? 1 : 6]; + CVRInputManager.Instance.fingerCurlRightMiddle = l_curls[l_mirror ? 2 : 7]; + CVRInputManager.Instance.fingerCurlRightRing = l_curls[l_mirror ? 3 : 8]; + CVRInputManager.Instance.fingerCurlRightPinky = l_curls[l_mirror ? 4 : 9]; + } + else + { + if(m_fingerTracking) + { + RestoreFingerTracking(); + m_fingerTracking = false; + } + } + + Matrix4x4 l_offset = m_puppetParser.GetOffset(); + Vector3 l_pos = l_offset * ms_pointVector; + Quaternion l_rot = l_offset.rotation; + + l_pos.y = 0f; + if(Settings.MirrorPosition) + l_pos.x *= -1f; + l_pos = Vector3.ClampMagnitude(l_pos, m_distanceLimit); + + l_rot = Quaternion.Euler(0f, l_rot.eulerAngles.y * (Settings.MirrorRotation ? -1f : 1f), 0f); + + Matrix4x4 l_result = PlayerSetup.Instance.transform.GetMatrix() * Matrix4x4.TRS(l_pos, l_rot, Vector3.one); + + if(Settings.Position && !m_sitting && !m_puppetParser.IsSitting() && Utils.IsWorldSafe() && Utils.IsCombatSafe()) + PlayerSetup.Instance.transform.position = l_result * ms_pointVector; + + if(Settings.Rotation && !m_sitting && !m_puppetParser.IsSitting() && Utils.IsCombatSafe()) + { + if(m_inVr) + { + Vector3 l_avatarPos = PlayerSetup.Instance._avatar.transform.position; + PlayerSetup.Instance.transform.rotation = l_result.rotation; + Vector3 l_dif = l_avatarPos - PlayerSetup.Instance._avatar.transform.position; + PlayerSetup.Instance.transform.position += l_dif; + } + else + PlayerSetup.Instance.transform.rotation = l_result.rotation; + } + } + else + { + if(!m_puppetParser.IsWaitingAnimator()) + SetTarget(null); + } + + if(Vector3.Distance(this.transform.position, m_puppetParser.transform.position) > m_distanceLimit) + SetTarget(null); + } + } + + void LateUpdate() + { + if(m_active && (m_animator != null) && (m_puppetParser != null) && m_puppetParser.IsPoseParsed()) + { + OverrideIK(); + + m_puppetParser.GetPose().CopyTo(ref m_pose); + if(Settings.MirrorPose) + Utils.MirrorPose(ref m_pose); + m_poseHandler.SetHumanPose(ref m_pose); + } + } + + // Patches + internal void OnAvatarClear() + { + m_inVr = Utils.IsInVR(); + + if(m_puppetParser != null) + Object.Destroy(m_puppetParser); + m_puppetParser = null; + + m_animator = null; + m_vrIk = null; + m_lookAtIk = null; + + m_poseHandler?.Dispose(); + m_poseHandler = null; + m_active = false; + m_distanceLimit = float.MaxValue; + m_fingerTracking = false; + m_pose = new HumanPose(); + } + internal void OnAvatarSetup() + { + m_animator = PlayerSetup.Instance._animator; + m_vrIk = PlayerSetup.Instance._avatar.GetComponent(); + m_lookAtIk = PlayerSetup.Instance._avatar.GetComponent(); + + if((m_animator != null) && m_animator.isHuman) + { + m_poseHandler = new HumanPoseHandler(m_animator.avatar, m_animator.transform); + m_poseHandler.GetHumanPose(ref m_pose); + + if(m_vrIk != null) + { + m_vrIk.onPreSolverUpdate.AddListener(this.OnVRIKPreUpdate); + m_vrIk.onPostSolverUpdate.AddListener(this.OnVRIKPostUpdate); + } + + if(m_lookAtIk != null) + { + m_lookAtIk.onPreSolverUpdate.AddListener(this.OnLookAtIKPreUpdate); + m_lookAtIk.onPostSolverUpdate.AddListener(this.OnLookAtIKPostUpdate); + } + } + else + m_animator = null; + } + + // IK updates + void OnVRIKPreUpdate() + { + if(m_active) + { + m_ikWeight = m_vrIk.solver.IKPositionWeight; + m_vrIk.solver.IKPositionWeight = 0f; + } + } + void OnVRIKPostUpdate() + { + if(m_active) + m_vrIk.solver.IKPositionWeight = m_ikWeight; + } + + void OnLookAtIKPreUpdate() + { + if(m_active && !Settings.LookAtMix) + { + m_lookIkWeight = m_lookAtIk.solver.IKPositionWeight; + m_lookAtIk.solver.IKPositionWeight = 0f; + } + } + void OnLookAtIKPostUpdate() + { + if(m_active && !Settings.LookAtMix) + m_lookAtIk.solver.IKPositionWeight = m_lookIkWeight; + } + + // Arbitrary + public void SetTarget(GameObject p_target) + { + if(m_animator != null) + { + if(!m_active) + { + if(p_target != null) + { + m_puppetParser = p_target.AddComponent(); + m_distanceLimit = Utils.GetWorldMovementLimit(); + + m_active = true; + OnActivityChange?.Invoke(m_active); + } + } + else + { + if(p_target == null) + { + if(m_puppetParser != null) + Object.Destroy(m_puppetParser); + m_puppetParser = null; + + if(!m_sitting) + { + Quaternion l_rot = PlayerSetup.Instance.transform.rotation; + PlayerSetup.Instance.transform.rotation = Quaternion.Euler(0f, l_rot.eulerAngles.y, 0f); + } + + RestoreIK(); + RestoreFingerTracking(); + m_fingerTracking = false; + + m_active = false; + OnActivityChange?.Invoke(m_active); + } + } + } + } + + public bool IsActive() => m_active; + public bool IsFingerTrackingActive() => m_fingerTracking; + + void OverrideIK() + { + if((m_vrIk != null) && !BodySystem.isCalibrating) + BodySystem.TrackingPositionWeight = 0f; + } + void RestoreIK() + { + if((m_vrIk != null) && !BodySystem.isCalibrating) + { + BodySystem.TrackingPositionWeight = 1f; + m_vrIk.solver.Reset(); + } + } + void RestoreFingerTracking() + { + CVRInputManager.Instance.individualFingerTracking = (m_inVr && Utils.AreKnucklesInUse() && !CVRInputManager._moduleXR.GestureToggleValue); + IKSystem.Instance.FingerSystem.controlActive = CVRInputManager.Instance.individualFingerTracking; + + if(!CVRInputManager.Instance.individualFingerTracking) + { + CVRInputManager.Instance.fingerCurlLeftThumb = 0f; + CVRInputManager.Instance.fingerCurlLeftIndex = 0f; + CVRInputManager.Instance.fingerCurlLeftMiddle = 0f; + CVRInputManager.Instance.fingerCurlLeftRing = 0f; + CVRInputManager.Instance.fingerCurlLeftPinky = 0f; + CVRInputManager.Instance.fingerCurlRightThumb = 0f; + CVRInputManager.Instance.fingerCurlRightIndex = 0f; + CVRInputManager.Instance.fingerCurlRightMiddle = 0f; + CVRInputManager.Instance.fingerCurlRightRing = 0f; + CVRInputManager.Instance.fingerCurlRightPinky = 0f; + } + } + } +} diff --git a/ml_fpt/Properties/AssemblyInfo.cs b/ml_pmc/Properties/AssemblyInfo.cs similarity index 52% rename from ml_fpt/Properties/AssemblyInfo.cs rename to ml_pmc/Properties/AssemblyInfo.cs index 388da0e..0f573da 100644 --- a/ml_fpt/Properties/AssemblyInfo.cs +++ b/ml_pmc/Properties/AssemblyInfo.cs @@ -1,10 +1,8 @@ using System.Reflection; -[assembly: AssemblyTitle("FourPointTracking")] -[assembly: AssemblyVersion("1.0.9")] -[assembly: AssemblyFileVersion("1.0.9")] - -[assembly: MelonLoader.MelonInfo(typeof(ml_fpt.FourPointTracking), "FourPointTracking", "1.0.9", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] +[assembly: MelonLoader.MelonInfo(typeof(ml_pmc.PlayerMovementCopycat), "PlayerMovementCopycat", "1.0.0", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] [assembly: MelonLoader.MelonGame(null, "ChilloutVR")] +[assembly: MelonLoader.MelonPriority(3)] +[assembly: MelonLoader.MelonAdditionalDependencies("BTKUILib")] [assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] [assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)] \ No newline at end of file diff --git a/ml_pmc/PuppetParser.cs b/ml_pmc/PuppetParser.cs new file mode 100644 index 0000000..531795a --- /dev/null +++ b/ml_pmc/PuppetParser.cs @@ -0,0 +1,156 @@ +using ABI_RC.Core.Player; +using UnityEngine; + +namespace ml_pmc +{ + [DisallowMultipleComponent] + class PuppetParser : MonoBehaviour + { + static readonly Vector4 ms_pointVector = new Vector4(0f, 0f, 0f, 1f); + + PuppetMaster m_puppetMaster = null; + Animator m_animator = null; + AnimatorCullingMode m_cullMode; + float m_armatureScale = 1f; + float m_armatureHeight = 0f; + + bool m_waitAnimator = true; + HumanPoseHandler m_poseHandler = null; + HumanPose m_pose; + bool m_poseParsed = false; + + Matrix4x4 m_matrix = Matrix4x4.identity; + Matrix4x4 m_offset = Matrix4x4.identity; + + bool m_sitting = false; + float m_leftGesture = 0f; + float m_rightGesture = 0f; + bool m_fingerTracking = false; + float[] m_fingerCurls = null; + + internal PuppetParser() + { + m_fingerCurls = new float[10]; + } + + // Unity events + void Start() + { + m_puppetMaster = this.GetComponent(); + m_matrix = this.transform.GetMatrix(); + StartCoroutine(WaitForAnimator()); + } + + void OnDestroy() + { + if(m_animator != null) + m_animator.cullingMode = m_cullMode; + + m_poseHandler?.Dispose(); + } + + void Update() + { + if(m_puppetMaster != null) + { + m_sitting = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorSitting; + m_leftGesture = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorGestureLeft; + m_rightGesture = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorGestureRight; + m_fingerTracking = m_puppetMaster.PlayerAvatarMovementDataInput.IndexUseIndividualFingers; + if(m_fingerTracking) + { + m_fingerCurls[0] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftThumbCurl; + m_fingerCurls[1] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftIndexCurl; + m_fingerCurls[2] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftMiddleCurl; + m_fingerCurls[3] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftRingCurl; + m_fingerCurls[4] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftPinkyCurl; + m_fingerCurls[5] = m_puppetMaster.PlayerAvatarMovementDataInput.RightThumbCurl; + m_fingerCurls[6] = m_puppetMaster.PlayerAvatarMovementDataInput.RightIndexCurl; + m_fingerCurls[7] = m_puppetMaster.PlayerAvatarMovementDataInput.RightMiddleCurl; + m_fingerCurls[8] = m_puppetMaster.PlayerAvatarMovementDataInput.RightRingCurl; + m_fingerCurls[9] = m_puppetMaster.PlayerAvatarMovementDataInput.RightPinkyCurl; + } + } + + if(!ReferenceEquals(m_animator, null)) + { + if(m_animator != null) + { + Matrix4x4 l_current = this.transform.GetMatrix(); + m_offset = m_matrix.inverse * l_current; + m_matrix = l_current; + } + else + Reset(); + } + } + + void LateUpdate() + { + if(m_animator != null) + { + m_poseHandler.GetHumanPose(ref m_pose); + m_pose.bodyPosition *= m_armatureScale; + m_pose.bodyPosition.y += m_armatureHeight; + m_poseParsed = true; + } + } + + // Arbitrary + System.Collections.IEnumerator WaitForAnimator() + { + while(m_puppetMaster.avatarObject == null) + yield return null; + + while(m_animator == null) + { + m_animator = m_puppetMaster.avatarObject.GetComponent(); + yield return null; + } + + if(m_animator.isHuman) + { + m_cullMode = m_animator.cullingMode; + m_animator.cullingMode = AnimatorCullingMode.AlwaysAnimate; + + Transform l_hips = m_animator.GetBoneTransform(HumanBodyBones.Hips); + if((l_hips != null) && (l_hips.parent != null)) + { + m_armatureScale = l_hips.parent.localScale.y; + m_armatureHeight = ((m_puppetMaster.transform.GetMatrix().inverse * l_hips.parent.GetMatrix()) * ms_pointVector).y; + } + + m_poseHandler = new HumanPoseHandler(m_animator.avatar, m_animator.transform); + m_matrix = this.transform.GetMatrix(); + } + else + Reset(); + + m_waitAnimator = false; + } + + void Reset() + { + m_animator = null; + m_poseHandler?.Dispose(); + m_poseHandler = null; + m_pose = new HumanPose(); + m_poseParsed = false; + m_offset = Matrix4x4.identity; + m_sitting = false; + m_leftGesture = 0f; + m_rightGesture = 0f; + } + + public bool IsWaitingAnimator() => m_waitAnimator; + public bool HasAnimator() => !ReferenceEquals(m_animator, null); + public ref HumanPose GetPose() => ref m_pose; + public bool IsPoseParsed() => m_poseParsed; + public ref Matrix4x4 GetOffset() => ref m_offset; + public bool IsSitting() => m_sitting; + public float GetLeftGesture() => m_leftGesture; + public float GetRightGesture() => m_rightGesture; + public bool HasFingerTracking() => m_fingerTracking; + public ref float[] GetFingerCurls() => ref m_fingerCurls; + } +} diff --git a/ml_pmc/Settings.cs b/ml_pmc/Settings.cs new file mode 100644 index 0000000..d412dc2 --- /dev/null +++ b/ml_pmc/Settings.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; + +namespace ml_pmc +{ + static class Settings + { + public enum ModSetting + { + Position, + Rotation, + Gestures, + LookAtMix, + MirrorPose, + MirrorPosition, + MirrorRotation + } + + public static bool Position { get; private set; } = true; + public static bool Rotation { get; private set; } = true; + public static bool Gestures { get; private set; } = true; + public static bool LookAtMix { get; private set; } = true; + public static bool MirrorPose { get; private set; } = false; + public static bool MirrorPosition { get; private set; } = false; + public static bool MirrorRotation { get; private set; } = false; + + public static Action PositionChange; + public static Action RotationChange; + public static Action GesturesChange; + public static Action LookAtMixChange; + public static Action MirrorPoseChange; + public static Action MirrorPositionChange; + public static Action MirrorRotationChange; + + static MelonLoader.MelonPreferences_Category ms_category = null; + static List ms_entries = null; + + internal static void Init() + { + ms_category = MelonLoader.MelonPreferences.CreateCategory("PMC", null, true); + ms_entries = new List() + { + ms_category.CreateEntry(ModSetting.Position.ToString(), Position), + ms_category.CreateEntry(ModSetting.Rotation.ToString(), Rotation), + ms_category.CreateEntry(ModSetting.Gestures.ToString(), Gestures), + ms_category.CreateEntry(ModSetting.LookAtMix.ToString(), LookAtMix), + ms_category.CreateEntry(ModSetting.MirrorPose.ToString(), MirrorPose), + ms_category.CreateEntry(ModSetting.MirrorPosition.ToString(), MirrorPosition), + ms_category.CreateEntry(ModSetting.MirrorRotation.ToString(), MirrorRotation), + }; + + Position = (bool)ms_entries[(int)ModSetting.Position].BoxedValue; + Rotation = (bool)ms_entries[(int)ModSetting.Rotation].BoxedValue; + Gestures = (bool)ms_entries[(int)ModSetting.Gestures].BoxedValue; + LookAtMix = (bool)ms_entries[(int)ModSetting.LookAtMix].BoxedValue; + MirrorPose = (bool)ms_entries[(int)ModSetting.MirrorPose].BoxedValue; + MirrorPosition = (bool)ms_entries[(int)ModSetting.MirrorPosition].BoxedValue; + MirrorRotation = (bool)ms_entries[(int)ModSetting.MirrorRotation].BoxedValue; + } + + public static void SetSetting(ModSetting p_setting, object p_value) + { + switch(p_setting) + { + case ModSetting.Position: + { + Position = (bool)p_value; + PositionChange?.Invoke((bool)p_value); + } + break; + + case ModSetting.Rotation: + { + Rotation = (bool)p_value; + RotationChange?.Invoke((bool)p_value); + break; + } + + case ModSetting.Gestures: + { + Gestures = (bool)p_value; + GesturesChange?.Invoke((bool)p_value); + } + break; + + case ModSetting.LookAtMix: + { + LookAtMix = (bool)p_value; + LookAtMixChange?.Invoke((bool)p_value); + } + break; + + // + case ModSetting.MirrorPose: + { + MirrorPose = (bool)p_value; + MirrorPoseChange?.Invoke((bool)p_value); + } + break; + + case ModSetting.MirrorPosition: + { + MirrorPosition = (bool)p_value; + MirrorPositionChange?.Invoke((bool)p_value); + } + break; + + case ModSetting.MirrorRotation: + { + MirrorRotation = (bool)p_value; + MirrorRotationChange?.Invoke((bool)p_value); + } + break; + } + + if(ms_entries != null) + ms_entries[(int)p_setting].BoxedValue = p_value; + } + } +} diff --git a/ml_pmc/Utils.cs b/ml_pmc/Utils.cs new file mode 100644 index 0000000..0b93404 --- /dev/null +++ b/ml_pmc/Utils.cs @@ -0,0 +1,79 @@ +using ABI.CCK.Components; +using ABI_RC.Core.Player; +using ABI_RC.Core.Savior; +using ABI_RC.Systems.InputManagement; +using System.Linq; +using System.Reflection; +using UnityEngine; + +namespace ml_pmc +{ + static class Utils + { + static readonly (int, int)[] ms_sideMuscles = new (int, int)[] + { + (29,21), (30,22), (31,23), (32,24), (33,25), (34,26), (35,27), (36,28), + (46,37), (47,38), (48,39), (49,40), (50,41), (51,42), (52,43), (53,44), (54,45), + (75,55), (76,56), (77,57), (78,58), (79,59), (80,60), (81,61), (82,62), (83,63), (84,64), + (85,65), (86,66), (87,67), (88,68), (89, 69), (90,70), (91,71), (92,72), (93,73), (94,74) + }; + static readonly int[] ms_centralMuscles = new int[] { 1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 18, 20 }; + + public static bool IsInVR() => ((CheckVR.Instance != null) && CheckVR.Instance.hasVrDeviceLoaded); + public static bool AreKnucklesInUse() => ((CVRInputManager.Instance._leftController == ABI_RC.Systems.InputManagement.XR.EXRControllerType.Index) || (CVRInputManager.Instance._rightController == ABI_RC.Systems.InputManagement.XR.EXRControllerType.Index)); + + public static bool IsWorldSafe() => ((CVRWorld.Instance != null) && CVRWorld.Instance.allowFlying); + public static bool IsCombatSafe() => ((CombatSystem.Instance == null) || !CombatSystem.Instance.isDown); + + public static float GetWorldMovementLimit() + { + float l_result = 1f; + if(CVRWorld.Instance != null) + { + l_result = CVRWorld.Instance.baseMovementSpeed; + l_result *= CVRWorld.Instance.sprintMultiplier; + l_result *= CVRWorld.Instance.inAirMovementMultiplier; + l_result *= CVRWorld.Instance.flyMultiplier; + } + return l_result; + } + + public static Matrix4x4 GetMatrix(this Transform p_transform, bool p_pos = true, bool p_rot = true, bool p_scl = false) + { + return Matrix4x4.TRS(p_pos ? p_transform.position : Vector3.zero, p_rot ? p_transform.rotation : Quaternion.identity, p_scl ? p_transform.lossyScale : Vector3.one); + } + + public static void CopyTo(this HumanPose p_source, ref HumanPose p_target) + { + p_target.bodyPosition = p_source.bodyPosition; + p_target.bodyRotation = p_source.bodyRotation; + + int l_count = Mathf.Min(p_source.muscles.Length, p_target.muscles.Length); + for(int i = 0; i < l_count; i++) + p_target.muscles[i] = p_source.muscles[i]; + } + + public static void MirrorPose(ref HumanPose p_pose) + { + int l_count = p_pose.muscles.Length; + foreach(var l_pair in ms_sideMuscles) + { + if((l_count > l_pair.Item1) && (l_count > l_pair.Item2)) + { + float l_temp = p_pose.muscles[l_pair.Item1]; + p_pose.muscles[l_pair.Item1] = p_pose.muscles[l_pair.Item2]; + p_pose.muscles[l_pair.Item2] = l_temp; + } + } + foreach(int l_index in ms_centralMuscles) + { + if(l_count > l_index) + p_pose.muscles[l_index] *= -1f; + } + + p_pose.bodyRotation.x *= -1f; + p_pose.bodyRotation.w *= -1f; + p_pose.bodyPosition.x *= -1f; + } + } +} diff --git a/ml_pmc/ml_pmc.csproj b/ml_pmc/ml_pmc.csproj new file mode 100644 index 0000000..946425c --- /dev/null +++ b/ml_pmc/ml_pmc.csproj @@ -0,0 +1,46 @@ + + + + netstandard2.1 + x64 + PlayerMovementCopycat + SDraw + None + PlayerMovementCopycat + + + + + + + + + D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp-firstpass.dll + + + D:\Games\Steam\steamapps\common\ChilloutVR\Mods\[broken]\BTKUILib.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AnimationModule.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.PhysicsModule.dll + + + + diff --git a/ml_pmc/resources/dancing.png b/ml_pmc/resources/dancing.png new file mode 100644 index 0000000000000000000000000000000000000000..d54c17c730829147bd61f5da4199790614913204 GIT binary patch literal 4168 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 (!m.IsGenericMethod && m.Name == nameof(CombatSystem.Down))), + new HarmonyLib.HarmonyMethod(typeof(PlayerRagdollMod).GetMethod(nameof(OnCombatDown_Prefix), BindingFlags.Static | BindingFlags.NonPublic)), + null + ); + HarmonyInstance.Patch( + typeof(MovementSystem).GetMethod(nameof(MovementSystem.ToggleFlight)), + null, + new HarmonyLib.HarmonyMethod(typeof(PlayerRagdollMod).GetMethod(nameof(OnToggleFlight_Postfix), BindingFlags.Static | BindingFlags.NonPublic)) + ); + + // Whitelist the toggle script + (typeof(SharedFilter).GetField("_localComponentWhitelist", BindingFlags.NonPublic | BindingFlags.Static)?.GetValue(null) as HashSet)?.Add(typeof(RagdollToggle)); + + MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer()); + } + + public override void OnDeinitializeMelon() + { + if(ms_instance == this) + ms_instance = null; + + m_localController = null; + } + + System.Collections.IEnumerator WaitForLocalPlayer() + { + while(PlayerSetup.Instance == null) + yield return null; + + m_localController = PlayerSetup.Instance.gameObject.AddComponent(); + ModUi.SwitchChange += this.OnSwitchActivation; + } + + void OnSwitchActivation() + { + if(m_localController != null) + m_localController.SwitchRagdoll(); + } + + // Patches + static void OnAvatarClear_Postfix() => ms_instance?.OnAvatarClear(); + void OnAvatarClear() + { + try + { + if(m_localController != null) + m_localController.OnAvatarClear(); + } + catch(Exception e) + { + MelonLoader.MelonLogger.Error(e); + } + } + + static void OnSetupAvatar_Postfix() => ms_instance?.OnSetupAvatar(); + void OnSetupAvatar() + { + try + { + if(m_localController != null) + m_localController.OnAvatarSetup(); + } + catch(Exception e) + { + MelonLoader.MelonLogger.Error(e); + } + } + + static void OnSetupIKScaling_Postfix(ref UnityEngine.Vector3 ___scaleDifference) => ms_instance?.OnSetupIKScaling(___scaleDifference.y); + void OnSetupIKScaling(float p_scaleDifference) + { + try + { + if(m_localController != null) + m_localController.OnAvatarScaling(1f + p_scaleDifference); + } + catch(Exception e) + { + MelonLoader.MelonLogger.Error(e); + } + } + + static void OnCVRSeatSitDown_Prefix(ref CVRSeat __instance) => ms_instance?.OnCVRSeatSitDown(__instance); + void OnCVRSeatSitDown(CVRSeat p_seat) + { + try + { + if(m_localController != null) + m_localController.OnSeatSitDown(p_seat); + } + catch(Exception e) + { + MelonLoader.MelonLogger.Error(e); + } + } + + static void OnStartCalibration_Prefix() => ms_instance?.OnStartCalibration(); + void OnStartCalibration() + { + try + { + if(m_localController != null) + m_localController.OnStartCalibration(); + } + catch(Exception e) + { + MelonLoader.MelonLogger.Error(e); + } + } + + static void OnWorldSpawn_Prefix() => ms_instance?.OnWorldSpawn(); + void OnWorldSpawn() + { + try + { + if(m_localController != null) + m_localController.OnWorldSpawn(); + } + catch(Exception e) + { + MelonLoader.MelonLogger.Error(e); + } + } + + static void OnCombatDown_Prefix(ref CombatSystem __instance) + { + if((__instance == CombatSystem.Instance) && !__instance.isDown) + ms_instance?.OnCombatDown(); + } + void OnCombatDown() + { + try + { + if(m_localController != null) + m_localController.OnCombatDown(); + } + catch(Exception e) + { + MelonLoader.MelonLogger.Error(e); + } + } + + static void OnToggleFlight_Postfix() => ms_instance?.OnToggleFlight(); + void OnToggleFlight() + { + try + { + if(m_localController != null) + m_localController.OnToggleFlight(); + } + catch(Exception e) + { + MelonLoader.MelonLogger.Error(e); + } + } + } +} diff --git a/ml_prm/ModUi.cs b/ml_prm/ModUi.cs new file mode 100644 index 0000000..2a77f31 --- /dev/null +++ b/ml_prm/ModUi.cs @@ -0,0 +1,198 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; + +namespace ml_prm +{ + static class ModUi + { + enum UiIndex + { + Hotkey = 0, + Gravity, + PointersReaction, + IgnoreLocal, + CombatReaction, + AutoRecover, + Slipperiness, + Bounciness, + ViewVelocity, + JumpRecover, + VelocityMultiplier, + MovementDrag, + AngularDrag, + RecoverDelay + } + + static public event Action SwitchChange; + + static List ms_uiElements = null; + + internal static void Init() + { + ms_uiElements = new List(); + + if(MelonLoader.MelonMod.RegisteredMelons.FirstOrDefault(m => m.Info.Name == "BTKUILib") != null) + CreateUi(); + } + + // Separated method, otherwise exception is thrown, funny CSharp and optional references, smh + static void CreateUi() + { + BTKUILib.QuickMenuAPI.PrepareIcon("PlayerRagdollMod", "PRM-Person", GetIconStream("person.png")); + + var l_modRoot = new BTKUILib.UIObjects.Page("PlayerRagdollMod", "MainPage", true, "PRM-Person"); + l_modRoot.MenuTitle = "Player Ragdoll Mod"; + l_modRoot.MenuSubtitle = "Become a ragdoll and change various settings for people amusement"; + + var l_modCategory = l_modRoot.AddCategory("Settings"); + + l_modCategory.AddButton("Switch ragdoll", "PRM-Person", "Switch between normal and ragdoll state").OnPress += () => SwitchChange?.Invoke(); + + ms_uiElements.Add(l_modCategory.AddToggle("Use hotkey", "Switch ragdoll mode with 'R' key", Settings.Hotkey)); + (ms_uiElements[(int)UiIndex.Hotkey] as BTKUILib.UIObjects.Components.ToggleButton).OnValueUpdated += (state) => OnToggleUpdate(UiIndex.Hotkey, state); + + ms_uiElements.Add(l_modCategory.AddToggle("Use gravity", "Apply gravity to ragdoll", Settings.Gravity)); + (ms_uiElements[(int)UiIndex.Gravity] as BTKUILib.UIObjects.Components.ToggleButton).OnValueUpdated += (state) => OnToggleUpdate(UiIndex.Gravity, state); + + ms_uiElements.Add(l_modCategory.AddToggle("Pointers reaction", "React to trigger colliders with CVRPointer component of 'ragdoll' type", Settings.PointersReaction)); + (ms_uiElements[(int)UiIndex.PointersReaction] as BTKUILib.UIObjects.Components.ToggleButton).OnValueUpdated += (state) => OnToggleUpdate(UiIndex.PointersReaction, state); + + ms_uiElements.Add(l_modCategory.AddToggle("Ignore local pointers", "Ignore local avatar's CVRPointer components of 'ragdoll' type", Settings.IgnoreLocal)); + (ms_uiElements[(int)UiIndex.IgnoreLocal] as BTKUILib.UIObjects.Components.ToggleButton).OnValueUpdated += (state) => OnToggleUpdate(UiIndex.IgnoreLocal, state); + + ms_uiElements.Add(l_modCategory.AddToggle("Combat reaction", "Ragdoll upon combat system death", Settings.CombatReaction)); + (ms_uiElements[(int)UiIndex.CombatReaction] as BTKUILib.UIObjects.Components.ToggleButton).OnValueUpdated += (state) => OnToggleUpdate(UiIndex.CombatReaction, state); + + ms_uiElements.Add(l_modCategory.AddToggle("Auto recover", "Automatically unragdoll after set recover delay", Settings.AutoRecover)); + (ms_uiElements[(int)UiIndex.AutoRecover] as BTKUILib.UIObjects.Components.ToggleButton).OnValueUpdated += (state) => OnToggleUpdate(UiIndex.AutoRecover, state); + + ms_uiElements.Add(l_modCategory.AddToggle("Slipperiness", "Enables/disables friction of ragdoll", Settings.Slipperiness)); + (ms_uiElements[(int)UiIndex.Slipperiness] as BTKUILib.UIObjects.Components.ToggleButton).OnValueUpdated += (state) => OnToggleUpdate(UiIndex.Slipperiness, state); + + ms_uiElements.Add(l_modCategory.AddToggle("Bounciness", "Enables/disables bounciness of ragdoll", Settings.Bounciness)); + (ms_uiElements[(int)UiIndex.Bounciness] as BTKUILib.UIObjects.Components.ToggleButton).OnValueUpdated += (state) => OnToggleUpdate(UiIndex.Bounciness, state); + + ms_uiElements.Add(l_modCategory.AddToggle("View direction velocity", "Apply velocity to camera view direction", Settings.ViewVelocity)); + (ms_uiElements[(int)UiIndex.ViewVelocity] as BTKUILib.UIObjects.Components.ToggleButton).OnValueUpdated += (state) => OnToggleUpdate(UiIndex.ViewVelocity, state); + + ms_uiElements.Add(l_modCategory.AddToggle("Jump recover", "Recover from ragdoll state by jumping", Settings.JumpRecover)); + (ms_uiElements[(int)UiIndex.JumpRecover] as BTKUILib.UIObjects.Components.ToggleButton).OnValueUpdated += (state) => OnToggleUpdate(UiIndex.JumpRecover, state); + + ms_uiElements.Add(l_modRoot.AddSlider("Velocity multiplier", "Velocity multiplier upon entering ragdoll state", Settings.VelocityMultiplier, 1f, 50f)); + (ms_uiElements[(int)UiIndex.VelocityMultiplier] as BTKUILib.UIObjects.Components.SliderFloat).OnValueUpdated += (value) => OnSliderUpdate(UiIndex.VelocityMultiplier, value); + + ms_uiElements.Add(l_modRoot.AddSlider("Movement drag", "Movement resistance", Settings.MovementDrag, 0f, 50f)); + (ms_uiElements[(int)UiIndex.MovementDrag] as BTKUILib.UIObjects.Components.SliderFloat).OnValueUpdated += (value) => OnSliderUpdate(UiIndex.MovementDrag, value); + + ms_uiElements.Add(l_modRoot.AddSlider("Angular movement drag", "Rotation movement resistance", Settings.AngularDrag, 0f, 50f)); + (ms_uiElements[(int)UiIndex.AngularDrag] as BTKUILib.UIObjects.Components.SliderFloat).OnValueUpdated += (value) => OnSliderUpdate(UiIndex.AngularDrag, value); + + ms_uiElements.Add(l_modRoot.AddSlider("Recover delay (seconds)", "Recover delay for automatic recover", Settings.RecoverDelay, 1f, 10f)); + (ms_uiElements[(int)UiIndex.RecoverDelay] as BTKUILib.UIObjects.Components.SliderFloat).OnValueUpdated += (value) => OnSliderUpdate(UiIndex.RecoverDelay, value); + + l_modCategory.AddButton("Reset settings", "", "Reset mod settings to default").OnPress += Reset; + } + + static void OnToggleUpdate(UiIndex p_index, bool p_state, bool p_force = false) + { + switch(p_index) + { + case UiIndex.Hotkey: + Settings.SetSetting(Settings.ModSetting.Hotkey, p_state); + break; + + case UiIndex.Gravity: + Settings.SetSetting(Settings.ModSetting.Gravity, p_state); + break; + + case UiIndex.PointersReaction: + Settings.SetSetting(Settings.ModSetting.PointersReaction, p_state); + break; + + case UiIndex.IgnoreLocal: + Settings.SetSetting(Settings.ModSetting.IgnoreLocal, p_state); + break; + + case UiIndex.CombatReaction: + Settings.SetSetting(Settings.ModSetting.CombatReaction, p_state); + break; + + case UiIndex.AutoRecover: + Settings.SetSetting(Settings.ModSetting.AutoRecover, p_state); + break; + + case UiIndex.Slipperiness: + Settings.SetSetting(Settings.ModSetting.Slipperiness, p_state); + break; + + case UiIndex.Bounciness: + Settings.SetSetting(Settings.ModSetting.Bounciness, p_state); + break; + + case UiIndex.ViewVelocity: + Settings.SetSetting(Settings.ModSetting.ViewVelocity, p_state); + break; + + case UiIndex.JumpRecover: + Settings.SetSetting(Settings.ModSetting.JumpRecover, p_state); + break; + } + + if(p_force) + (ms_uiElements[(int)p_index] as BTKUILib.UIObjects.Components.ToggleButton).ToggleValue = p_state; + } + + static void OnSliderUpdate(UiIndex p_index, float p_value, bool p_force = false) + { + switch(p_index) + { + case UiIndex.VelocityMultiplier: + Settings.SetSetting(Settings.ModSetting.VelocityMultiplier, p_value); + break; + + case UiIndex.MovementDrag: + Settings.SetSetting(Settings.ModSetting.MovementDrag, p_value); + break; + + case UiIndex.AngularDrag: + Settings.SetSetting(Settings.ModSetting.AngularDrag, p_value); + break; + + case UiIndex.RecoverDelay: + Settings.SetSetting(Settings.ModSetting.RecoverDelay, p_value); + break; + } + + if(p_force) + (ms_uiElements[(int)p_index] as BTKUILib.UIObjects.Components.SliderFloat).SetSliderValue(p_value); + } + + static void Reset() + { + OnToggleUpdate(UiIndex.Hotkey, true, true); + OnToggleUpdate(UiIndex.Gravity, true, true); + OnToggleUpdate(UiIndex.PointersReaction, true, true); + OnToggleUpdate(UiIndex.IgnoreLocal, true, true); + OnToggleUpdate(UiIndex.CombatReaction, true, true); + OnToggleUpdate(UiIndex.AutoRecover, false, true); + OnToggleUpdate(UiIndex.Slipperiness, false, true); + OnToggleUpdate(UiIndex.Bounciness, false, true); + OnToggleUpdate(UiIndex.ViewVelocity, false, true); + OnToggleUpdate(UiIndex.JumpRecover, false, true); + OnSliderUpdate(UiIndex.VelocityMultiplier, 2f, true); + OnSliderUpdate(UiIndex.MovementDrag, 2f, true); + OnSliderUpdate(UiIndex.AngularDrag, 2f, true); + OnSliderUpdate(UiIndex.RecoverDelay, 3f, true); + } + + static Stream GetIconStream(string p_name) + { + Assembly l_assembly = Assembly.GetExecutingAssembly(); + string l_assemblyName = l_assembly.GetName().Name; + return l_assembly.GetManifestResourceStream(l_assemblyName + ".resources." + p_name); + } + } +} diff --git a/ml_aci/Properties/AssemblyInfo.cs b/ml_prm/Properties/AssemblyInfo.cs similarity index 55% rename from ml_aci/Properties/AssemblyInfo.cs rename to ml_prm/Properties/AssemblyInfo.cs index fbd14c8..1514466 100644 --- a/ml_aci/Properties/AssemblyInfo.cs +++ b/ml_prm/Properties/AssemblyInfo.cs @@ -1,10 +1,8 @@ using System.Reflection; -[assembly: AssemblyTitle("AvatarChangeInfo")] -[assembly: AssemblyVersion("1.0.3")] -[assembly: AssemblyFileVersion("1.0.3")] - -[assembly: MelonLoader.MelonInfo(typeof(ml_aci.AvatarChangeInfo), "AvatarChangeInfo", "1.0.3", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] +[assembly: MelonLoader.MelonInfo(typeof(ml_prm.PlayerRagdollMod), "PlayerRagdollMod", "1.0.5", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] [assembly: MelonLoader.MelonGame(null, "ChilloutVR")] +[assembly: MelonLoader.MelonPriority(2)] +[assembly: MelonLoader.MelonOptionalDependencies("BTKUILib")] [assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] [assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)] \ No newline at end of file diff --git a/ml_prm/RagdollController.cs b/ml_prm/RagdollController.cs new file mode 100644 index 0000000..044a4ff --- /dev/null +++ b/ml_prm/RagdollController.cs @@ -0,0 +1,562 @@ +using ABI.CCK.Components; +using ABI_RC.Core.InteractionSystem; +using ABI_RC.Core.Player; +using ABI_RC.Core.Savior; +using ABI_RC.Systems.IK.SubSystems; +using ABI_RC.Systems.InputManagement; +using ABI_RC.Systems.MovementSystem; +using RootMotion.Dynamics; +using RootMotion.FinalIK; +using System.Collections.Generic; +using UnityEngine; + +namespace ml_prm +{ + [DisallowMultipleComponent] + public class RagdollController : MonoBehaviour + { + public static RagdollController Instance { get; private set; } = null; + + VRIK m_vrIK = null; + float m_vrIkWeight = 1f; + bool m_inVr = false; + + bool m_enabled = false; + + readonly List m_rigidBodies = null; + readonly List m_colliders = null; + Transform m_puppetRoot = null; + Transform m_puppet = null; + BipedRagdollReferences m_puppetReferences; + readonly List> m_boneLinks = null; + readonly List> m_jointAnchors = null; + + bool m_avatarReady = false; + Vector3 m_lastPosition = Vector3.zero; + Vector3 m_velocity = Vector3.zero; + Vector3 m_ragdollLastPos = Vector3.zero; + + RagdollToggle m_avatarRagdollToggle = null; + RagdollTrigger m_customTrigger = null; + AvatarBoolParameter m_ragdolledParameter = null; + readonly PhysicMaterial m_physicsMaterial = null; + + bool m_reachedGround = true; + float m_groundedTime = 0f; + float m_downTime = float.MinValue; + + internal RagdollController() + { + if(Instance == null) + Instance = this; + + m_rigidBodies = new List(); + m_colliders = new List(); + m_boneLinks = new List>(); + m_jointAnchors = new List>(); + + m_physicsMaterial = new PhysicMaterial("Ragdoll"); + m_physicsMaterial.dynamicFriction = 0.5f; + m_physicsMaterial.staticFriction = 0.5f; + m_physicsMaterial.frictionCombine = PhysicMaterialCombine.Average; + m_physicsMaterial.bounciness = 0f; + m_physicsMaterial.bounceCombine = PhysicMaterialCombine.Average; + } + ~RagdollController() + { + if(Instance == this) + Instance = null; + } + + // Unity events + void Start() + { + m_inVr = Utils.IsInVR(); + + m_puppetRoot = new GameObject("[PlayerAvatarPuppet]").transform; + m_puppetRoot.parent = PlayerSetup.Instance.transform; + m_puppetRoot.localPosition = Vector3.zero; + m_puppetRoot.localRotation = Quaternion.identity; + + m_customTrigger = MovementSystem.Instance.proxyCollider.gameObject.AddComponent(); + + Settings.MovementDragChange += this.OnMovementDragChange; + Settings.AngularDragChange += this.OnAngularDragChange; + Settings.GravityChange += this.OnGravityChange; + Settings.SlipperinessChange += this.OnPhysicsMaterialChange; + Settings.BouncinessChange += this.OnPhysicsMaterialChange; + } + + void OnDestroy() + { + if(m_customTrigger != null) + { + Object.Destroy(m_customTrigger); + m_customTrigger = null; + } + + Settings.MovementDragChange -= this.OnMovementDragChange; + Settings.AngularDragChange -= this.OnAngularDragChange; + Settings.GravityChange -= this.OnGravityChange; + Settings.SlipperinessChange -= this.OnPhysicsMaterialChange; + Settings.BouncinessChange -= this.OnPhysicsMaterialChange; + } + + void Update() + { + if(m_avatarReady && m_enabled) + { + Vector3 l_dif = m_puppetReferences.hips.position - m_ragdollLastPos; + PlayerSetup.Instance.transform.position += l_dif; + m_puppetReferences.hips.position -= l_dif; + m_ragdollLastPos = m_puppetReferences.hips.position; + } + + if(m_avatarReady && !m_enabled) + { + Vector3 l_pos = PlayerSetup.Instance.transform.position; + m_velocity = (m_velocity + (l_pos - m_lastPosition) / Time.deltaTime) * 0.5f; + m_lastPosition = l_pos; + + if(!m_reachedGround && MovementSystem.Instance.IsGrounded()) + { + m_groundedTime += Time.deltaTime; + if(m_groundedTime >= 0.25f) + m_reachedGround = true; + } + } + + if(m_avatarReady && m_enabled && !BodySystem.isCalibrating) + BodySystem.TrackingPositionWeight = 0f; + + if(m_avatarReady && m_enabled && Settings.AutoRecover) + { + m_downTime += Time.deltaTime; + if(m_downTime >= Settings.RecoverDelay) + { + SwitchRagdoll(); + m_downTime = float.MinValue; // One attepmt to recover + } + } + + if((m_avatarRagdollToggle != null) && m_avatarRagdollToggle.isActiveAndEnabled && m_avatarRagdollToggle.shouldOverride && (m_enabled != m_avatarRagdollToggle.isOn)) + SwitchRagdoll(); + + if((m_customTrigger != null) && m_customTrigger.GetStateWithReset() && m_avatarReady && !m_enabled && Settings.PointersReaction) + SwitchRagdoll(); + + if(Settings.Hotkey && Input.GetKeyDown(KeyCode.R) && !ViewManager.Instance.isGameMenuOpen()) + SwitchRagdoll(); + + if(m_avatarReady && m_enabled && CVRInputManager.Instance.jump && Settings.JumpRecover) + SwitchRagdoll(); + } + + void LateUpdate() + { + if(m_avatarReady) + { + if(m_enabled) + { + if(!BodySystem.isCalibrating) + { + BodySystem.TrackingPositionWeight = 0f; + + foreach(var l_link in m_boneLinks) + l_link.Item1.CopyGlobal(l_link.Item2); + } + } + else + { + foreach(var l_link in m_boneLinks) + l_link.Item2.CopyGlobal(l_link.Item1); + } + } + } + + // Game events + internal void OnAvatarClear() + { + if(m_enabled && (MovementSystem.Instance != null)) + MovementSystem.Instance.SetImmobilized(false); + + if(m_puppet != null) + Object.Destroy(m_puppet.gameObject); + m_puppet = null; + + m_vrIK = null; + m_enabled = false; + m_avatarReady = false; + m_avatarRagdollToggle = null; + m_ragdolledParameter = null; + m_rigidBodies.Clear(); + m_colliders.Clear(); + m_puppetReferences = new BipedRagdollReferences(); + m_boneLinks.Clear(); + m_jointAnchors.Clear(); + m_reachedGround = true; + m_groundedTime = 0f; + m_downTime = float.MinValue; + m_puppetRoot.localScale = Vector3.one; + } + + internal void OnAvatarSetup() + { + m_inVr = Utils.IsInVR(); + + if(PlayerSetup.Instance._animator.isHuman) + { + BipedRagdollReferences l_avatarReferences = BipedRagdollReferences.FromAvatar(PlayerSetup.Instance._animator); + + m_puppet = new GameObject("Root").transform; + m_puppet.parent = m_puppetRoot; + m_puppet.localPosition = Vector3.zero; + m_puppet.localRotation = Quaternion.identity; + + m_puppetReferences.root = m_puppet; + m_puppetReferences.hips = CloneTransform(l_avatarReferences.hips, m_puppetReferences.root, "Hips"); + m_puppetReferences.spine = CloneTransform(l_avatarReferences.spine, m_puppetReferences.hips, "Spine"); + + if(l_avatarReferences.chest != null) + m_puppetReferences.chest = CloneTransform(l_avatarReferences.chest, m_puppetReferences.spine, "Chest"); + + m_puppetReferences.head = CloneTransform(l_avatarReferences.head, (m_puppetReferences.chest != null) ? m_puppetReferences.chest : m_puppetReferences.spine, "Head"); + + m_puppetReferences.leftUpperArm = CloneTransform(l_avatarReferences.leftUpperArm, (m_puppetReferences.chest != null) ? m_puppetReferences.chest : m_puppetReferences.spine, "LeftUpperArm"); + m_puppetReferences.leftLowerArm = CloneTransform(l_avatarReferences.leftLowerArm, m_puppetReferences.leftUpperArm, "LeftLowerArm"); + m_puppetReferences.leftHand = CloneTransform(l_avatarReferences.leftHand, m_puppetReferences.leftLowerArm, "LeftHand"); + + m_puppetReferences.rightUpperArm = CloneTransform(l_avatarReferences.rightUpperArm, (m_puppetReferences.chest != null) ? m_puppetReferences.chest : m_puppetReferences.spine, "RightUpperArm"); + m_puppetReferences.rightLowerArm = CloneTransform(l_avatarReferences.rightLowerArm, m_puppetReferences.rightUpperArm, "RightLowerArm"); + m_puppetReferences.rightHand = CloneTransform(l_avatarReferences.rightHand, m_puppetReferences.rightLowerArm, "RightHand"); + + m_puppetReferences.leftUpperLeg = CloneTransform(l_avatarReferences.leftUpperLeg, m_puppetReferences.hips, "LeftUpperLeg"); + m_puppetReferences.leftLowerLeg = CloneTransform(l_avatarReferences.leftLowerLeg, m_puppetReferences.leftUpperLeg, "LeftLowerLeg"); + m_puppetReferences.leftFoot = CloneTransform(l_avatarReferences.leftFoot, m_puppetReferences.leftLowerLeg, "LeftFoot"); + + m_puppetReferences.rightUpperLeg = CloneTransform(l_avatarReferences.rightUpperLeg, m_puppetReferences.hips, "RightUpperLeg"); + m_puppetReferences.rightLowerLeg = CloneTransform(l_avatarReferences.rightLowerLeg, m_puppetReferences.rightUpperLeg, "RightLowerLeg"); + m_puppetReferences.rightFoot = CloneTransform(l_avatarReferences.rightFoot, m_puppetReferences.rightLowerLeg, "RightFoot"); + + // Move to world origin to overcome possible issues, maybe? + m_puppetRoot.position = Vector3.zero; + m_puppetRoot.rotation = Quaternion.identity; + + BipedRagdollCreator.Options l_options = BipedRagdollCreator.AutodetectOptions(m_puppetReferences); + l_options.joints = RagdollCreator.JointType.Character; + BipedRagdollCreator.Create(m_puppetReferences, l_options); + + Transform[] l_puppetTransforms = m_puppetReferences.GetRagdollTransforms(); + Transform[] l_avatarTransforms = l_avatarReferences.GetRagdollTransforms(); + for(int i = 0; i < l_puppetTransforms.Length; i++) + { + if(l_puppetTransforms[i] != null) + { + Rigidbody l_body = l_puppetTransforms[i].GetComponent(); + if(l_body != null) + { + m_rigidBodies.Add(l_body); + l_body.isKinematic = true; + l_body.angularDrag = Settings.AngularDrag; + l_body.drag = (Utils.IsWorldSafe() ? Settings.MovementDrag : 1f); + l_body.useGravity = (!Utils.IsWorldSafe() || Settings.Gravity); + l_body.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic; + } + + CharacterJoint l_joint = l_puppetTransforms[i].GetComponent(); + if(l_joint != null) + { + l_joint.enablePreprocessing = false; + l_joint.enableProjection = true; + m_jointAnchors.Add(System.Tuple.Create(l_joint, l_joint.connectedAnchor)); + } + + Collider l_collider = l_puppetTransforms[i].GetComponent(); + if(l_collider != null) + { + Physics.IgnoreCollision(l_collider, MovementSystem.Instance.proxyCollider, true); + Physics.IgnoreCollision(l_collider, MovementSystem.Instance.controller, true); + Physics.IgnoreCollision(l_collider, MovementSystem.Instance.forceCollider, true); + l_collider.enabled = false; + l_collider.sharedMaterial = m_physicsMaterial; + l_collider.material = m_physicsMaterial; + m_colliders.Add(l_collider); + } + + if(l_avatarTransforms[i] != null) + m_boneLinks.Add(System.Tuple.Create(l_puppetTransforms[i], l_avatarTransforms[i])); + } + } + + // And return back + m_puppetRoot.localPosition = Vector3.zero; + m_puppetRoot.localRotation = Quaternion.identity; + m_puppetRoot.gameObject.SetActive(false); + + m_vrIK = PlayerSetup.Instance._avatar.GetComponent(); + if(m_vrIK != null) + { + m_vrIK.onPreSolverUpdate.AddListener(this.OnIKPreUpdate); + m_vrIK.onPostSolverUpdate.AddListener(this.OnIKPostUpdate); + } + + m_avatarRagdollToggle = PlayerSetup.Instance._avatar.GetComponentInChildren(true); + m_ragdolledParameter = new AvatarBoolParameter("Ragdolled", PlayerSetup.Instance.animatorManager); + + m_avatarReady = true; + } + } + + internal void OnAvatarScaling(float p_scaleDifference) + { + if(m_avatarReady) + { + m_puppetRoot.localScale = Vector3.one * p_scaleDifference; + foreach(var l_pair in m_jointAnchors) + l_pair.Item1.connectedAnchor = l_pair.Item2 * p_scaleDifference; + } + } + + internal void OnSeatSitDown(CVRSeat p_seat) + { + if(m_avatarReady && m_enabled && !p_seat.occupied) + SwitchRagdoll(); + } + + internal void OnStartCalibration() + { + if(m_avatarReady && m_enabled) + SwitchRagdoll(); + } + + internal void OnWorldSpawn() + { + if(m_avatarReady && m_enabled) + SwitchRagdoll(); + + OnGravityChange(Settings.Gravity); + OnPhysicsMaterialChange(true); + OnMovementDragChange(Settings.MovementDrag); + } + + internal void OnCombatDown() + { + if(m_avatarReady && !m_enabled && Settings.CombatReaction) + { + m_reachedGround = true; + SwitchRagdoll(); + } + } + + internal void OnToggleFlight() + { + if(m_avatarReady && m_enabled && MovementSystem.Instance.flying) + SwitchRagdoll(); + } + + // IK updates + void OnIKPreUpdate() + { + if(m_enabled) + { + m_vrIkWeight = m_vrIK.solver.IKPositionWeight; + m_vrIK.solver.IKPositionWeight = 0f; + } + } + void OnIKPostUpdate() + { + if(m_enabled) + m_vrIK.solver.IKPositionWeight = m_vrIkWeight; + else + { + foreach(var l_link in m_boneLinks) + l_link.Item2.CopyGlobal(l_link.Item1); + } + } + + // Settings + void OnMovementDragChange(float p_value) + { + if(m_avatarReady) + { + float l_drag = (Utils.IsWorldSafe() ? p_value : 1f); + foreach(Rigidbody l_body in m_rigidBodies) + { + l_body.drag = l_drag; + if(m_enabled) + l_body.WakeUp(); + } + } + } + void OnAngularDragChange(float p_value) + { + if(m_avatarReady) + { + foreach(Rigidbody l_body in m_rigidBodies) + { + l_body.angularDrag = p_value; + if(m_enabled) + l_body.WakeUp(); + } + } + } + void OnGravityChange(bool p_state) + { + if(m_avatarReady) + { + bool l_gravity = (!Utils.IsWorldSafe() || p_state); + foreach(Rigidbody l_body in m_rigidBodies) + l_body.useGravity = l_gravity; + } + } + void OnPhysicsMaterialChange(bool p_state) + { + if(m_physicsMaterial != null) + { + bool l_slipperiness = (Settings.Slipperiness && Utils.IsWorldSafe()); + bool l_bounciness = (Settings.Bounciness && Utils.IsWorldSafe()); + m_physicsMaterial.dynamicFriction = (l_slipperiness ? 0f : 0.5f); + m_physicsMaterial.staticFriction = (l_slipperiness ? 0f : 0.5f); + m_physicsMaterial.frictionCombine = (l_slipperiness ? PhysicMaterialCombine.Minimum : PhysicMaterialCombine.Average); + m_physicsMaterial.bounciness = (l_bounciness ? 1f : 0f); + m_physicsMaterial.bounceCombine = (l_bounciness ? PhysicMaterialCombine.Maximum : PhysicMaterialCombine.Average); + } + } + + // Arbitrary + public void SwitchRagdoll() + { + if(m_avatarReady) + { + if(!m_enabled) + { + if(IsSafeToRagdoll() && m_reachedGround) + { + // Eject player from seat + if(MovementSystem.Instance.lastSeat != null) + { + Vector3 l_pos = PlayerSetup.Instance.transform.position; + Quaternion l_rot = PlayerSetup.Instance.transform.rotation; + + if(MetaPort.Instance.isUsingVr) + { + MetaPort.Instance.isUsingVr = false; + MovementSystem.Instance.lastSeat.ExitSeat(); + MetaPort.Instance.isUsingVr = true; + } + else + MovementSystem.Instance.lastSeat.ExitSeat(); + + PlayerSetup.Instance.transform.position = l_pos; + PlayerSetup.Instance.transform.rotation = Quaternion.Euler(0f, l_rot.eulerAngles.y, 0f); + } + + if(MovementSystem.Instance.flying) + MovementSystem.Instance.ChangeFlight(false); + + MovementSystem.Instance.SetImmobilized(true); + PlayerSetup.Instance.animatorManager.SetAnimatorParameterTrigger("CancelEmote"); + m_ragdolledParameter.SetValue(true); + if(!BodySystem.isCalibrating) + BodySystem.TrackingPositionWeight = 0f; + + if(!Utils.IsWorldSafe()) + { + m_reachedGround = false; // Force player to unragdoll and reach ground first + m_groundedTime = 0f; + } + + m_puppetRoot.gameObject.SetActive(true); + + foreach(Rigidbody l_body in m_rigidBodies) + l_body.isKinematic = false; + + Vector3 l_velocity = Vector3.ClampMagnitude(m_velocity * (Utils.IsWorldSafe() ? Settings.VelocityMultiplier : 1f), Utils.GetWorldMovementLimit()); + if(Settings.ViewVelocity && Utils.IsWorldSafe()) + { + float l_mag = l_velocity.magnitude; + l_velocity = PlayerSetup.Instance.GetActiveCamera().transform.forward * l_mag; + } + + foreach(Rigidbody l_body in m_rigidBodies) + { + l_body.velocity = l_velocity; + l_body.angularVelocity = Vector3.zero; + } + + foreach(Collider l_collider in m_colliders) + l_collider.enabled = true; + + m_ragdollLastPos = m_puppetReferences.hips.position; + m_downTime = 0f; + + m_enabled = true; + } + } + else + { + if(IsSafeToUnragdoll()) + { + MovementSystem.Instance.SetImmobilized(false); + if(!Utils.IsWorldSafe()) + { + Vector3 l_vec = MovementSystem.Instance.GetAppliedGravity(); + l_vec.y = Mathf.Clamp(l_vec.y, float.MinValue, 0f); + MovementSystem.Instance.SetAppliedGravity(l_vec); + } + + m_ragdolledParameter.SetValue(false); + if(!BodySystem.isCalibrating) + BodySystem.TrackingPositionWeight = 1f; + + m_puppetRoot.gameObject.SetActive(false); + + foreach(Rigidbody l_body in m_rigidBodies) + l_body.isKinematic = true; + + PlayerSetup.Instance.transform.position = m_puppetReferences.hips.position; + if(m_inVr) + PlayerSetup.Instance.transform.position -= (PlayerSetup.Instance.transform.rotation * PlayerSetup.Instance._avatar.transform.localPosition); + + foreach(Collider l_collider in m_colliders) + l_collider.enabled = false; + + if(m_vrIK != null) + m_vrIK.solver.Reset(); + + m_lastPosition = PlayerSetup.Instance.transform.position; + m_velocity = Vector3.zero; + m_downTime = float.MinValue; + + m_enabled = false; + } + } + } + } + + public bool IsRagdolled() => (m_avatarReady && m_enabled); + + static Transform CloneTransform(Transform p_source, Transform p_parent, string p_name) + { + Transform l_target = new GameObject(p_name).transform; + l_target.parent = p_parent; + p_source.CopyGlobal(l_target); + return l_target; + } + + static bool IsSafeToRagdoll() + { + bool l_result = true; + l_result &= !BodySystem.isCalibrating; // Not calibrating + l_result &= ((CombatSystem.Instance == null) || !CombatSystem.Instance.isDown); // Non-combat world or not dead + return l_result; + } + + static bool IsSafeToUnragdoll() + { + bool l_result = true; + l_result &= ((CombatSystem.Instance == null) || !CombatSystem.Instance.isDown); // Non-combat world or not dead + return l_result; + } + } +} diff --git a/ml_prm/RagdollToggle.cs b/ml_prm/RagdollToggle.cs new file mode 100644 index 0000000..63343a2 --- /dev/null +++ b/ml_prm/RagdollToggle.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace ml_prm +{ + public class RagdollToggle : MonoBehaviour + { + [Tooltip("Whether or not is should use the isOn property to override the current Ragdoll State of the Avatar.")] + [SerializeField] public bool shouldOverride; + [Tooltip("Whether Ragdoll State is active or not on the Avatar. Requires shouldOverride to be true to work.")] + [SerializeField] public bool isOn; + } +} diff --git a/ml_prm/RagdollTrigger.cs b/ml_prm/RagdollTrigger.cs new file mode 100644 index 0000000..d5996bd --- /dev/null +++ b/ml_prm/RagdollTrigger.cs @@ -0,0 +1,61 @@ +using ABI.CCK.Components; +using ABI_RC.Core.Player; +using UnityEngine; + +namespace ml_prm +{ + [DisallowMultipleComponent] + class RagdollTrigger : MonoBehaviour + { + Collider m_collider = null; + Collider m_lastTrigger = null; + bool m_triggered = false; + + void Start() + { + m_collider = this.GetComponent(); + } + + void Update() + { + if(!ReferenceEquals(m_lastTrigger, null)) + { + if(m_lastTrigger != null) + { + if(!m_collider.bounds.Intersects(m_lastTrigger.bounds)) + m_lastTrigger = null; + } + else + m_lastTrigger = null; + } + } + + void OnTriggerEnter(Collider p_other) + { + CVRPointer l_pointer = p_other.GetComponent(); + if((l_pointer != null) && (l_pointer.type == "ragdoll") && !IsIgnored(l_pointer.transform) && (m_lastTrigger != p_other)) + { + m_lastTrigger = p_other; + m_triggered = true; + } + } + + void OnTriggerExit(Collider p_other) + { + if(m_lastTrigger == p_other) + m_lastTrigger = null; + } + + public bool GetStateWithReset() + { + bool l_state = m_triggered; + m_triggered = false; + return l_state; + } + + static bool IsIgnored(Transform p_transform) + { + return (Settings.IgnoreLocal && (p_transform.root == PlayerSetup.Instance.transform)); + } + } +} diff --git a/ml_prm/Settings.cs b/ml_prm/Settings.cs new file mode 100644 index 0000000..e5d92f7 --- /dev/null +++ b/ml_prm/Settings.cs @@ -0,0 +1,207 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace ml_prm +{ + static class Settings + { + public enum ModSetting + { + Hotkey = 0, + VelocityMultiplier, + MovementDrag, + AngularDrag, + Gravity, + PointersReaction, + IgnoreLocal, + CombatReaction, + AutoRecover, + RecoverDelay, + Slipperiness, + Bounciness, + ViewVelocity, + JumpRecover + } + + public static bool Hotkey { get; private set; } = true; + public static float VelocityMultiplier { get; private set; } = 2f; + public static float MovementDrag { get; private set; } = 2f; + public static float AngularDrag { get; private set; } = 2f; + public static bool Gravity { get; private set; } = true; + public static bool PointersReaction { get; private set; } = true; + public static bool IgnoreLocal { get; private set; } = true; + public static bool CombatReaction { get; private set; } = true; + public static bool AutoRecover { get; private set; } = false; + public static float RecoverDelay { get; private set; } = 3f; + public static bool Slipperiness { get; private set; } = false; + public static bool Bounciness { get; private set; } = false; + public static bool ViewVelocity { get; private set; } = false; + public static bool JumpRecover { get; private set; } = false; + + static public event Action HotkeyChange; + static public event Action VelocityMultiplierChange; + static public event Action MovementDragChange; + static public event Action AngularDragChange; + static public event Action GravityChange; + static public event Action PointersReactionChange; + static public event Action IgnoreLocalChange; + static public event Action CombatReactionChange; + static public event Action AutoRecoverChange; + static public event Action RecoverDelayChange; + static public event Action SlipperinessChange; + static public event Action BouncinessChange; + static public event Action ViewVelocityChange; + static public event Action JumpRecoverChange; + + static MelonLoader.MelonPreferences_Category ms_category = null; + static List ms_entries = null; + + internal static void Init() + { + ms_category = MelonLoader.MelonPreferences.CreateCategory("PRM", null, true); + ms_entries = new List() + { + ms_category.CreateEntry(ModSetting.Hotkey.ToString(), Hotkey), + ms_category.CreateEntry(ModSetting.VelocityMultiplier.ToString(), VelocityMultiplier), + ms_category.CreateEntry(ModSetting.MovementDrag.ToString(), MovementDrag), + ms_category.CreateEntry(ModSetting.AngularDrag.ToString(), AngularDrag), + ms_category.CreateEntry(ModSetting.Gravity.ToString(), Gravity), + ms_category.CreateEntry(ModSetting.PointersReaction.ToString(), PointersReaction), + ms_category.CreateEntry(ModSetting.IgnoreLocal.ToString(), IgnoreLocal), + ms_category.CreateEntry(ModSetting.CombatReaction.ToString(), CombatReaction), + ms_category.CreateEntry(ModSetting.AutoRecover.ToString(), AutoRecover), + ms_category.CreateEntry(ModSetting.RecoverDelay.ToString(), RecoverDelay), + ms_category.CreateEntry(ModSetting.Slipperiness.ToString(), Slipperiness), + ms_category.CreateEntry(ModSetting.Bounciness.ToString(), Bounciness), + ms_category.CreateEntry(ModSetting.ViewVelocity.ToString(), ViewVelocity), + ms_category.CreateEntry(ModSetting.JumpRecover.ToString(), JumpRecover) + }; + + Hotkey = (bool)ms_entries[(int)ModSetting.Hotkey].BoxedValue; + VelocityMultiplier = Mathf.Clamp((float)ms_entries[(int)ModSetting.VelocityMultiplier].BoxedValue, 1f, 50f); + MovementDrag = Mathf.Clamp((float)ms_entries[(int)ModSetting.MovementDrag].BoxedValue, 0f, 50f); + AngularDrag = Mathf.Clamp((float)ms_entries[(int)ModSetting.AngularDrag].BoxedValue, 0f, 50f); + Gravity = (bool)ms_entries[(int)ModSetting.Gravity].BoxedValue; + PointersReaction = (bool)ms_entries[(int)ModSetting.PointersReaction].BoxedValue; + IgnoreLocal = (bool)ms_entries[(int)ModSetting.IgnoreLocal].BoxedValue; + CombatReaction = (bool)ms_entries[(int)ModSetting.CombatReaction].BoxedValue; + AutoRecover = (bool)ms_entries[(int)ModSetting.AutoRecover].BoxedValue; + RecoverDelay = Mathf.Clamp((float)ms_entries[(int)ModSetting.RecoverDelay].BoxedValue, 1f, 10f); + Slipperiness = (bool)ms_entries[(int)ModSetting.Slipperiness].BoxedValue; + Bounciness = (bool)ms_entries[(int)ModSetting.Bounciness].BoxedValue; + ViewVelocity = (bool)ms_entries[(int)ModSetting.ViewVelocity].BoxedValue; + JumpRecover = (bool)ms_entries[(int)ModSetting.JumpRecover].BoxedValue; + } + + public static void SetSetting(ModSetting p_settings, object p_value) + { + switch(p_settings) + { + // Booleans + case ModSetting.Hotkey: + { + Hotkey = (bool)p_value; + HotkeyChange?.Invoke((bool)p_value); + } + break; + + case ModSetting.Gravity: + { + Gravity = (bool)p_value; + GravityChange?.Invoke((bool)p_value); + } + break; + + case ModSetting.PointersReaction: + { + PointersReaction = (bool)p_value; + PointersReactionChange?.Invoke((bool)p_value); + } + break; + + case ModSetting.IgnoreLocal: + { + IgnoreLocal = (bool)p_value; + IgnoreLocalChange?.Invoke((bool)p_value); + } + break; + + case ModSetting.CombatReaction: + { + CombatReaction = (bool)p_value; + CombatReactionChange?.Invoke((bool)p_value); + } + break; + + case ModSetting.AutoRecover: + { + AutoRecover = (bool)p_value; + AutoRecoverChange?.Invoke((bool)p_value); + } + break; + + case ModSetting.Slipperiness: + { + Slipperiness = (bool)p_value; + SlipperinessChange?.Invoke((bool)p_value); + } + break; + + case ModSetting.Bounciness: + { + Bounciness = (bool)p_value; + BouncinessChange?.Invoke((bool)p_value); + } + break; + + case ModSetting.ViewVelocity: + { + ViewVelocity = (bool)p_value; + ViewVelocityChange?.Invoke((bool)p_value); + } + break; + + case ModSetting.JumpRecover: + { + JumpRecover = (bool)p_value; + JumpRecoverChange?.Invoke((bool)p_value); + } + break; + + // Floats + case ModSetting.VelocityMultiplier: + { + VelocityMultiplier = (float)p_value; + VelocityMultiplierChange?.Invoke((float)p_value); + } + break; + + case ModSetting.MovementDrag: + { + MovementDrag = (float)p_value; + MovementDragChange?.Invoke((float)p_value); + } + break; + + case ModSetting.AngularDrag: + { + AngularDrag = (float)p_value; + AngularDragChange?.Invoke((float)p_value); + } + break; + + case ModSetting.RecoverDelay: + { + RecoverDelay = (float)p_value; + RecoverDelayChange?.Invoke((float)p_value); + } + break; + } + + if(ms_entries != null) + ms_entries[(int)p_settings].BoxedValue = p_value; + } + } +} diff --git a/ml_prm/Utils.cs b/ml_prm/Utils.cs new file mode 100644 index 0000000..b9d1e48 --- /dev/null +++ b/ml_prm/Utils.cs @@ -0,0 +1,39 @@ +using ABI.CCK.Components; +using ABI_RC.Core.Savior; +using ABI_RC.Systems.MovementSystem; +using System.Reflection; +using UnityEngine; + +namespace ml_prm +{ + static class Utils + { + static readonly FieldInfo ms_groundedRaw = typeof(MovementSystem).GetField("_isGroundedRaw", BindingFlags.NonPublic | BindingFlags.Instance); + static readonly FieldInfo ms_appliedGravity = typeof(MovementSystem).GetField("_appliedGravity", BindingFlags.NonPublic | BindingFlags.Instance); + + public static bool IsInVR() => ((CheckVR.Instance != null) && CheckVR.Instance.hasVrDeviceLoaded); + public static bool IsWorldSafe() => ((CVRWorld.Instance != null) && CVRWorld.Instance.allowFlying); + public static float GetWorldMovementLimit() + { + float l_result = 1f; + if(CVRWorld.Instance != null) + { + l_result = CVRWorld.Instance.baseMovementSpeed; + l_result *= CVRWorld.Instance.sprintMultiplier; + l_result *= CVRWorld.Instance.inAirMovementMultiplier; + l_result *= CVRWorld.Instance.flyMultiplier; + } + return l_result; + } + + public static bool IsGrounded(this MovementSystem p_instance) => (bool)ms_groundedRaw.GetValue(p_instance); + public static Vector3 GetAppliedGravity(this MovementSystem p_instance) => (Vector3)ms_appliedGravity.GetValue(p_instance); + public static void SetAppliedGravity(this MovementSystem p_instance, Vector3 p_vec) => ms_appliedGravity.SetValue(p_instance, p_vec); + + public static void CopyGlobal(this Transform p_source, Transform p_target) + { + p_target.position = p_source.position; + p_target.rotation = p_source.rotation; + } + } +} diff --git a/ml_prm/ml_prm.csproj b/ml_prm/ml_prm.csproj new file mode 100644 index 0000000..c880de8 --- /dev/null +++ b/ml_prm/ml_prm.csproj @@ -0,0 +1,58 @@ + + + + netstandard2.1 + x64 + PlayerRagdollMod + 1.0.5 + SDraw + None + PlayerRagdollMod + + + + + + + + + + D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp-firstpass.dll + + + D:\Games\Steam\steamapps\common\ChilloutVR\Mods\[broken]\BTKUILib.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AnimationModule.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.ClothModule.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.InputLegacyModule.dll + + + D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.PhysicsModule.dll + + + + + + + + diff --git a/ml_prm/resources/person.png b/ml_prm/resources/person.png new file mode 100644 index 0000000000000000000000000000000000000000..578c19777cfb21a7109615266570ea456989ee7a GIT binary patch literal 5017 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

    dNEt_D+g`qpjDN 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%0DhYIr7Bx+XbiU-R_CF#EQWp~i(3(1Zx|(^ZX0 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 oe*OFP@7KRy|9<`d{`!9d077~(C1XZ>h($ diff --git a/ml_sci/Main.cs b/ml_sci/Main.cs deleted file mode 100644 index 7aa4468..0000000 --- a/ml_sci/Main.cs +++ /dev/null @@ -1,31 +0,0 @@ -using ABI_RC.Core.UI; -using DarkRift.Client; -using System.Reflection; - -namespace ml_sci -{ - public class ServerConnectionInfo : MelonLoader.MelonMod - { - public override void OnInitializeMelon() - { - HarmonyInstance.Patch( - typeof(ABI_RC.Core.Networking.NetworkManager).GetMethod("OnGameNetworkConnectionClosed", BindingFlags.NonPublic | BindingFlags.Instance), - null, - new HarmonyLib.HarmonyMethod(typeof(ServerConnectionInfo).GetMethod(nameof(OnGameNetworkConnectionClosed), BindingFlags.NonPublic | BindingFlags.Static)) - ); - } - - static void OnGameNetworkConnectionClosed(object __0, DisconnectedEventArgs __1) - { - try - { - if((CohtmlHud.Instance != null) && (__1 != null) && (!__1.LocalDisconnect)) - CohtmlHud.Instance.ViewDropTextImmediate("(Local) Client", "Connection lost", (__1.Error != System.Net.Sockets.SocketError.Success) ? ("Reason: " + __1.Error.ToString()) : ""); - } - catch(System.Exception e) - { - MelonLoader.MelonLogger.Error(e); - } - } - } -} diff --git a/ml_sci/Properties/AssemblyInfo.cs b/ml_sci/Properties/AssemblyInfo.cs deleted file mode 100644 index c15c663..0000000 --- a/ml_sci/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Reflection; - -[assembly: AssemblyTitle("ServerConnectionInfo")] -[assembly: AssemblyVersion("1.0.2")] -[assembly: AssemblyFileVersion("1.0.2")] - -[assembly: MelonLoader.MelonInfo(typeof(ml_sci.ServerConnectionInfo), "ServerConnectionInfo", "1.0.2", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] -[assembly: MelonLoader.MelonGame(null, "ChilloutVR")] -[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] -[assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)] \ No newline at end of file diff --git a/ml_sci/README.md b/ml_sci/README.md deleted file mode 100644 index 452a888..0000000 --- a/ml_sci/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Server Connection Info -This mod shows HUD notification upon server disconnection. - -![](.github/img_01.png) - -# Installation -* Install [latest MelonLoader](https://github.com/LavaGang/MelonLoader) -* Get [latest release DLL](../../../releases/latest): - * Put `ml_sci.dll` in `Mods` folder of game diff --git a/ml_sci/ml_sci.csproj b/ml_sci/ml_sci.csproj deleted file mode 100644 index 1e71c50..0000000 --- a/ml_sci/ml_sci.csproj +++ /dev/null @@ -1,79 +0,0 @@ - - - - - Debug - AnyCPU - {E5481D41-196C-4241-AF26-6595EF1863C1} - Library - Properties - ml_sci - ml_sci - v4.7.2 - 512 - true - - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - prompt - MinimumRecommendedRules.ruleset - - - bin\x64\Release\ - TRACE - true - pdbonly - x64 - prompt - MinimumRecommendedRules.ruleset - - - - False - F:\games\Steam\common\ChilloutVR\MelonLoader\0Harmony.dll - False - - - False - F:\games\Steam\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll - False - - - False - C:\Games\Steam\common\ChilloutVR\ChilloutVR_Data\Managed\DarkRift.Client.dll - False - - - False - F:\games\Steam\common\ChilloutVR\MelonLoader\MelonLoader.dll - False - - - - - - - - - - False - False - - - - - - - - - - - - - copy /y "$(TargetPath)" "C:\Games\Steam\common\ChilloutVR\Mods\" - - \ No newline at end of file diff --git a/ml_sci/ml_sci.csproj.user b/ml_sci/ml_sci.csproj.user deleted file mode 100644 index 2539084..0000000 --- a/ml_sci/ml_sci.csproj.user +++ /dev/null @@ -1,6 +0,0 @@ - - - - C:\Games\Steam\common\ChilloutVR\MelonLoader\;C:\Games\Steam\common\ChilloutVR\ChilloutVR_Data\Managed\ - - \ No newline at end of file