From 885dfb33977869d1407fc4b247878a03666944dd Mon Sep 17 00:00:00 2001 From: drewcassidy Date: Mon, 28 Sep 2020 01:02:17 -0700 Subject: [PATCH] Logging refactor dll update --- .../Plugins/ConformalDecals.dll | Bin 82944 -> 81408 bytes Source/ConformalDecals/DecalConfig.cs | 4 ++-- Source/ConformalDecals/DecalIconFixer.cs | 9 +++---- .../MaterialPropertyCollection.cs | 4 ++-- .../MaterialTextureProperty.cs | 2 +- Source/ConformalDecals/Text/FontLoader.cs | 9 +++---- Source/ConformalDecals/Text/TextRenderer.cs | 22 +++++------------- .../ConformalDecals/UI/FontMenuController.cs | 1 - .../ConformalDecals/UI/TextEntryController.cs | 5 ++-- Source/ConformalDecals/UI/UILoader.cs | 1 - Source/ConformalDecals/Util/Logging.cs | 15 ++++++++---- 11 files changed, 34 insertions(+), 38 deletions(-) diff --git a/GameData/ConformalDecals/Plugins/ConformalDecals.dll b/GameData/ConformalDecals/Plugins/ConformalDecals.dll index 2db784f835ea130b107918d33e8a66e2576d1dd4..aca4399660a8f74e781b3bea873919bb235126bc 100644 GIT binary patch delta 32189 zcma*Q2YeJ&*FS#m%#O{NlK2|LF`<^?KCFuM9-#?#EzH`3koO^D+bLY+^G_J5T{-La0 zkx?7JYdpw?u5BIOW9_^Ry z3*H6Y_WCcNv<7-2l^T5Ve@)~Qi7s>g>3?(%U6w_u^!F?VLGyodhC=j?RqF-O zX)8(ymcn2Sb`6_{qw^{|BY>^;3iw3YYOlm4fW9yAVyyH5aVxdu$V}@Cd5qT*R#vnq zF_0`VT0fWz6M~~e2GhbB(CDcA0Atgw{>|sM%Y5`%)|Ajf8s|1o1hParrR8E9tMx~8 zkJTMfJ3y4EZUW3g9$QZuVH()VMDo~rp-}@EzXgaj9%%xIYj;~(R3k|hM6N=A4V;if zDU8D`qeOur@NO7NNvwfkxS*NKaOtq<;$MG#80BFXeICXV1F6uR$!FC`G_e_T;Ab7$ zbTfXUAk)7TNkd!P^NVXb>j9fDbcAX@0-DAMabfBr8Zu}I8M}$^2%Aw8C7*dqI2&senKht!?1jkl-Tt$Ahu_$K!)%x!dxkYBelyJgnK-YQF|>w zo30PC$Eq_S*3Z&s+H>5O$MqrPHoLECHYJ!t2`H*0*IrVflU2!IPx=47RDPuX&Ys`q zTNG0cCR*E{ z^YyzN`Fy|rk|T@v)4y>PhJsYEBM4fbjbQmwEnNafp~(MOs?7m0=U9p))%rovta-53 z)KJ2QDIqx_AzcD{&4js^CyX-^=3kx=PIgL3&Vjx9c4sDEpdWLVjJ;H)dW}+=HEoNU z22@OF-9n{^4Wf z^Jlb?k54agW%Y8R)9VvO{pvDt(Xdlc>#<~@84N{NQeYZ{71gA`KnyE-=y$lvv|gm9 z5czjEh&dE5)wThR(b~gO=rEX;rT^?o>9!E9M5^#mX&ERjhVW1@`Zh*uF_=9)+@1E1 z`VA0mw9?&QosaNE_vxvwc>PCrZd4l-0F#tTqiUIYo+ruQ530Z#fK*H4Lkbi8Ttw-Xy!X4O?Z6P;$d=GHB(^45h;>MK`E?K zZ5lGHzZ$Yls!fL+SOVD)g<1_Pgk0-Yb>=U0S z=w2g~38V~OsrzEG(nIi)c$2U9_J zr3h^e6oFev8#4T&p>`{m^ifLT0<{4XSP86!Tj8~4a?+UkbrfSgz~nkauWFK8iJ+53 zA?y@fHMR#T-NkXsHkh?GooLN%08yU&R{3Z$`YNzqe>66C;08D-4TOP>1h)fB*E@uX zFtCZ>PGJ(QZL})2r|h%%41b?r+pOpLx<=k5{AlIJ!mKa!wF}WgCW#GIU@OG>QLst1 zgyzzn7@UN$Vz^womDFs5^HRyUsYDY=^qs7$>pEvL*hOy)mDZBj1d6{ z!vQXc0Oaz|0A~8CaQd+#Jz+Tgl~$?%x%?x2$Ces&2nWCh0xduo4se$UKrXEV=x6;Y z0femer4DfwvIrxeVTtYZ6Cj}}LKLNos5srOt;t&fdM>bIRT z@Zl~-Da76{K%=gHf(S!hDb2zjTFI>2rM~tuajzfgV(R;+;j#-Z zSRfdy@EW&Vsg{xkZqz@FPY*3e={|IOBc$L7#BfJw7-H&&OcM7;sTOOZ61WEuymp^g zDM)o=o4?8Hkb+J-ydB!TFlj@O#I4}*5YyIeUo)fKX=7KWN&#BpjC+q&()xhpqs2NQ zX#HS-B!~;GP~F&1<(;{0ZJOW5`x&JR$;+l4G$Z!ub|j_ zDfT{67~9uY5pcV~0I&xh0W|CfXpaK?nu2txsgtHo)*b_IB#SY41CNsvnF9xeauBLn zXw~%J6TP7)goY~a3p@##_SrJ46O}-jFo^7hh5u}fr=b65V;m$c<_qne|52N#$@mNa ztvZ0}_$=hH+H=4KSVMTDu!+s6b_mM+L~Quc(9DKMG@~oc#+VDMxhHkE?6zDOQhq-a$i6&W9nttPi1zJYB6^eO=w9n7Kp$? z{n6A;yubc^st;&OOHZP`ML`=$JZ`Jwv}2&S+ebvGc;wc5rKN|KiGHO@R&7VaNE+sz zy&l^uMXDq8#b-d>ReK3)L*s9)5!2qd5nIJw*(h1f%Wx0;o6^)yL6pEN5OGSChaJbO zLMw8p9gD3F3QrR!aJ|rDS}OtET2y$x22IiHA2xU_7kwy&`5bO^M(aFV%cH5d-Nv;p zz(9m7tZKF38~zdakbU6XZVHM*t@D}94-o`yKa1um|Kr0rNTLT^>a@x#MUX)`CybWt) zgrO+%StDw&6;NrrM|t9q@EzC@{gi$@qs-X0e~pRJvTeT(*5I!#ik5A=;xIk1O&1<9 zEs97}kOOSc0=Cv3B3a@E+ z7YeDaGd#s^P)rFr`80LZm4?o0J`0r6fudWjKMhN^+gksgadoR>+?HA6>ffh$7gZF) zcv1+7M+Kvd;q0m}&(7wyNp(VZDZ2>krALTtx6RBh!ptthZTp|IGjpR>C|p28c@C56 zuza_!o!yNZ3*Dvc9Pn-IiW~bGl;7)U_570Uwwswd%*-8b`(>H;XsK&`o&H^xKZM(g z*=A0+Q>w%LRUDg{x=16ZNF%4nh}P9~nmI+9IYqji|65Mf%%V#Rucd0DmVM1yjxaNd zaz~lUOVy0V=v<1V3yfZjGV_Zz^NV&z{cri{?`Nmy(<)>yNX6JT79lY`jeWoeFv)=q zXo?(|U(<7P+EV@afav=j`Ih;<9%dVPIP4%Xi%1)ddX z%_U87ZcZAl$n{iLdIW5It_2tq%~129z94r{=p#7gr^Gf+hF|^_!MzAB8GE*~WGRF-?1D`Uz7viw*L(s8O+%&Z`2)>t6hkR=i-H%)IY9ShZH%6z z9gFs2F^fePVx7SbW48W-mg$&{(qRqp$=Vt{JujZm);s2fwSH4;Gri*U-?XHbBynWi zmp6mItS9DA2+@s1I|pzp_199XX}^(X4&qB{MC~s`ekXuYm8=o9zlJq4NMnnry%5&S zg2vnjV8viDD6lM+S5^B1PR3G;{S1}M>5;TQv1_tJP_>)%zw&d(T+-8)KAHmbwLr(ZlcXX1^zTjF3MpfR4=9c57i*3KVHzz z`Yy!L+DrStEtsY{6P#>bM8M8ry;q;yu2XI$6tWm7=A(ox9zXKO%1R&_Za64{v_n7A z?zZ@UA-ftMl!`@*$1Ng%By2Gk)qm;pOJm}9BA*(+VNGmh-KpPQx@5!-YAs8l!+5MI z>=UKrt3`>yiOBxVBHXDp3sTBj63{4!+K>!cO92!n2G{?Oe){b8asKBoH>uiZRFG}@ zo$XWk4*g*J_`iAJ7|QfG*FKR~>DIDyshEcLrW886@da{_V`^q;yyOq$LPV!7*WKl5 zIFo8u{s~XfeHD}K(f#Ch{}- z<_=jgHP`ggl^j2E{u z*uU*q$XDn|okln)y;$kB7xcPLW&8pCkxrBCKesekfEvt+1`~>Sscs$=e!D>vrMmgT zo@CmSrMjSK;gle?XQKW{=P7&-wQ0M%sQUkG)4NIS!!sdg379R(G+X9l(}zACL&Oy@6Zdnwlw-C3X4X+&%Ex@>$=`lx}R7(sdfRH z-7wJtxCh#LQc0R{_)R+vjfS&ad!SL@+&v+biRqCo1s;GpyS4_Na-avS2&K`UUpoX4 z$A!3Q(JJq@6vj!~gK)Ve|AdT8=Sroe#yEmnf z=gSyq%V93`B3K`Ii-MSq(2~-4rrM0O*`i!j-vGiC*nN(Ia@D%YX{$xo(tC=1h*g8L zV!OVfIw}!E+jwgsn#$@Q?XapifH;c4`g7GuDUXmH2g&xpKq{!HgL zs)n`*8QOzVlwRDuSKdzAa#IJG@8ZyC3d1H+{L@a6f4JM)Cmsa9ypOg^a(0n3C#dP? zx@Sk?S&8MMR&tRe*iKLGk;L!QJM>5hU2P4FM46mY?GnnWb}3N2NYykN2)2L&#R!as zOSWG;?gh|q1(6Z9z_Z9P0!{H0t~GemtI}>y!KSws7Yz%fT8JB1J&4^JNJGtvZvD`1 zEmW<>3rM_RUC3CWz0j)q17i>$_Yv-*SCSpsy!)A*s@Yenxt9VjMi8`u?&wK(U+QF| ztNM`>{^6ui^cD04_2MCnT7E>&T>iXX-!rfL0ZP;IPO}`3FjOiU$z~*ljTdnk({M)$ zx9gdnV@9Bi;)TRIq@cqP+!84(V;Xe8S@tSXwi6WVm{dz{=CetLq^aazyP7;MsxN}n zOh!euC-j?omGXG~*C+btEAdBEh!7^!7foa zL>Ma4w~F%5GOWE+1|ha817<#QfBSzg!>?DQ7h~$hTeXCZtrLw1F2Hq(8tAH z`g!O+gf13Rr5m>;Rg6`$gWUSWK7M^*pJ?ubRO#;cH@ioF9rkBo_d}}mdAdeI~ffix{}(?=v$56scAFNAAy-P4r-Sn!GdQnQ-V@7Hm+g-Xw~|vzMcGk zYeCc2L;t96yt9>a4>%`8V`e>!(DjW}49u*eenlY{A{yKB*~lw9SPmYT194#vGHkpR zuGzuimn(0BGC1#Y-3I6y$Xk0KecnJWhC~J-8S__VdpTwtMqvX^UG4hmejV}~Q1w_1 z8+kRtKN_nHR?#o8*(t%q#+N~nl^D+qp9O95TJ+KVyN75hsB#sc& z+C`-PkkqgILybogwer!{>g&SZSmG}QSq!yWyM&BqDNSQ*W7^V|L%vXnL0c8L_TQRdXwAW^{cNUuNX%TL<_u7osMGPF1eONsC?k07>#2@IoJ7d)Nat z07+}mPY=jT!jfk%wBb%p_03lUb+EN0(o+V`kERMsfdVv`ot9Yr?t%W02uBlNV#O$b zA?hb7qG=?t)(6*953WEck;W*BXhk!hOKFQJt=u~8?v}J7K{$X_Rg5yumGt(5l2eBx zYW_&=W@Hk43Q5FBYt%6$#LBGC8x&haLs(k{5Am6dRCfog#y-H%iix3pO*Pcc>5mL5 z;=A;-gA)1}L!Z2rTG}v(PiZ9Km_Jdf-3%2imvTM1ASpH7P3AqL6fG6_okCtzztVdQ z?%CrvBEEV`m5+IH56u&7Xj|^XDN^m-WJ32Cr6MM2KZ;WQB=86Q--9brHhD;~XB#y2 zm$~RYhO{p<+<$;EU(zU5{vxRsk11wBjRY;xb_^MVZz}#A(z*XGDhvi_tHSJ}!n`M& zcO6Gia$%o71dX^&F5$9gXr?W!J2^Dlk1=kq$9@yr z0m8s-2u4H6HLNHaAJK^$9X67<(Jj>b59`7g>NgLY+?P7RqiCDpEN({QF7>3xg7dHY zkV4x+R_ewUPm)bf(YtPo_M2WdydAgb(}$-a^vdA_`jTau=u~u~9KfCc?=GkyQ_%-_ zI8%$LcUv1WWM5!6-14_e+D=^S@1g3{?A6moB)h487<9GwLq~h2NPXalq-k{f^-uC$ zlu1P-t~E&zq};HirU`}+51ApntrHUoCnge3?A6~Gkr=`b#a^=ydOPjLqQd>9fW?KG zDhG=}e8Ebfwt$AwUsMT2y{JBd#5MO(GnCPm2b*g2D{U9dQQ!-9Kq9r45?uBG9jtS) z&^*6s5kaXHBssVO3H&|{`#-h*K|^(GE0w6Iu?%20ApTt%a=YPZ47tln;Rx;}19o3D z7B#Vxe2_D@9YpMHaKcP-lzw4kR!1_+V!LTPSeF=1a)4a5hu~V6Y&5?two0YZl17ay z2fX^|QEjItK*o)QUR4b@OK9X-B>Qj#ZDijLVbWIPCNj3Aqzlm*riUmKc}!_>pK_vr3_%stSK>GP0vHAM95v7nChZW7>DL<$ zAOLNw2OzyYn2&YM+1=Yh`eEI00>?XN^e+ zJ&7Eo;OC@&4C(5z@5cf`Xbw7i5Rdalet6SFfsFgS%$`Pg3{yo}^7dAVj7BjP!w}db8Br+H zf(*q!6yKtdUez?9vz4bU@HpyaGa4OvjTVhA+X55dXbYjCtgM{{-%3+WVl=adx1i4E z*snzswKRq!xQ7g4>`THR2Z|9V@F4PNQ52Fwj5?YLE!rYzy><`gHUv2!oT8}yEe{8j zjT{KO(H=2y;C~8$2X{5_MA+gFJlRTqDlGc~2V2QchvhU$Vl42C!S%B7v7Tqcw!m{F zVrYyXUm~_)flAt=IjwGo>UL}rZ)LW-9YxVl7!?Z~LW=D+x5MoepE_t&NI-m(F^U3* zVRt*t!IT;N9_=SW(Izi|p=1woFUD6fB;yzkp*N9xPYm||(ZA|)e-wwxw<+*Ea*8Z) zdE_wDj_89Xq=k;c;8i@47h|ywa!({avHb_DqI?`1Wp)~ny3_C zcD;pbYM0_TB^;tiGzMY>PQsRRDfg{L?w88pR<$?u^hq(|`E`s(*1klhqQBfWu>%?1 zqNA!pHxQSwUn?EGWi{Sibk*KA%GauCeW@;d{QnO0-UxSuFK`MHzEF7=7wt4b=sh4l zqN+!D?R}EH(FFxocl4&f8L;?v@ixf5zy}~Xq!w?bwGTnv(fD2^+8u4hbI$A9N2H0+ z&f=m_HI0`jX3NYnTX$B?hsek0^9P#AFVKmN7O6f4^LbqbxJNcpbzOl^pb>j=adU9H zkd@2rGR%QbVQhC&aa)Zc*>X5CvgR`w8tFb%^SOTWT9Q1MwEb(yI$@Ndx%5lLrLV~7VoMdop3(0Kk>{|K9{muW+%l(bbUn~EF zuzx2bgWt^r*j-Wv=I(NhT@l2a#v(xo&P-1)wzK_!WAOjC2dfwIf(KK$bm+ucdo=gYoQ?DK!!i`9+ ze-&=Vu!1X&(6Ij%r<#}cT=g%J)~}6#yQL5ZnUus5IEO+ZzE9{O__a}R$R7$}4CNx+ zt!`5Pg9kpfweqzbPbb4ss2AuRE?y z4~bYkE{pZ9h(#ETh(STAu2L;=5j)O|Eff^n-%3Ga=`HB!^z|KF<-m_fjn{YCh$I{P zhCUFDeZx;YgT73a>qV05C9MVpGqxN>_|}71V59!pwQ1hFkf!Emgu-{MB5>fB_0wae z3tab4&$uEnHf*hZ8@b}it@GbhYi3BbCt+GMqu3Fg)yhbvEOJOSzi~Y@Jx}_b>-SAB z5B-L$>dAzONFUV9#XQ7a6t6I-rD;!(F2Gibm{`z_2D)UR)-eqfCh!LW+6!VZY5#;o zQ}QCN!UMX$AQydN{8ms$JTeY`KsERYsg`P; zv2nAjtBR0J4$ycqTi#Fwkj^nPK3b$pZ|M}Sm(HyEhpu*JMJhI#_QGD0hEqH>fRjeM zqaex}$cErlZGl<(@tLVM89q69$kBhDIsXcJ9>!W^3~Fi@6|G<7Ybl-_90VDUvWsBB zQJJbWAaV|_-BIprv)D8Bhi8>uJ(?Od!x+})#?u>|faKy?N&N1f3%?ghuaD4v80Tu? zxWtxUeAD5F7p?O4?6}}_LXKCrXD0-ICs}JljXe}8^ebkU#fg^n1^9-vM#CIubc z&~G?|2ZWU`onW#LhF!dmhmED+zh*{PH@QTI43sQrgE$e!a%h6Si{Nu4u`fgQiOIR zQs=LcwE4I;ASNaR*@Vs{)Sc!?2+3DJfbuXdVY))b8U8Trel+OuF-po~N(T6tK62f8~P zZdNO=S>n6D{JCZTe1ky)q9yt!iql=vZiQ}^r0H}Sr^n3mhK!rx`^Z!d-j6XwAHiV? z)x9S)Pqxy~(3FG6TWM$%$-&PqX~eiH@)%W;gY+3W?Gq^;wS^q~g?woq7y7Z*LYI#_ z3uUEUYBy0obBZRwi_Aq2#ECmS$_& zpbBg7)sPa1Xs!8Fczz7j?9hu}uQYDV_$9dzitm87Fi{Q;Lwxg&?Sx7kz8Uv!aWd5h zqmTZz-WP<2n5@l07lgz9Us1&-fOb$WDi^i`I7*}L)$Y>&oS&OTGtKxAbPV=;G)~5d zBUGHrM}pX`xaz%wTBz125x@=bYTA4$ zxUiLq9(VJ_uVCY>B^vf@vnTw)CTbpe)dN^TjPGgaV8gx?hu@kDj`dU%Qxr{Z?31ux za#J?Add#cWyvESAxMmOP-S|B<1AH*J;A@;E5|8~`8e#8i>c6O0Q>e_vHIGsp z##_a?!rVigZmA#|TI7I+m&j4g*I%s3#rgcVH3|GN-M+vakM^J(k46;7Z?hmtwK%d? z0zMSx(jCA!le=W0`r;#4nv(XSq@aFzI^*r!V9b<)YHOeeZf8zkWI>4y@57Yf%kaeq zg;?j}jbSHZ<3T?TIX3J?B?IyL;RW$I3E)eyYm&`sCQ|cU6Rs4_)6oS<>lgM+rlq%D zCGM{$wLf2q6#~}D`TCTFSv)~szOW!a2@y&icxNKg+6%nCnrD#IjWZpsVvveB1m3nyT zE3u2JGF|ublNsc8KK)cm4r{Dz)NiRxNFKswuo@PD z4;pTePbA;SX0a85oe?a+Hermp*hAU9Y9aa}8!C(k zI&{rn#a?3*1^ZgC*Vz<K&^`$gE zzBk!Suqd!y!Zsev19p#KYruS9_i{Pi#TMfTcnH{Tk;9wVvBvTr*!}Pfx!B!sO<+H; zhlO!2MsFmHdqtQtBIsXWRG1nRW(fO>?Q0d3@%_SvRU9^nKQ7XpL%Mus;ZF-&H&J^F ze};SEwHWM1jI0;9n@tEM&x~@j#btAWSC=gWD!E-HH+!UHkkpnvRoDQH9I+y*EqgY9 zZd5tjm)TV+XAjGSZBq#2;|OOa6Bbqx_Gn8eClWqYLC9meN<$iNjvFee?Cuo8$#H{# zOUgq;hUTt{QdyIK2F+s2uiA zn`fiaS=*c=!1{!jpznyx(%BEvYbatMiwgI2d&0s*!h4blCuxKc*@Ry?sfgD*snF@7 zN-OOrkk%ea`q;!gDWtOT!jK?Ty{gDHBs3R9;(|ER6ben7WJ)Gwk>*;Vxv}^Z!fo_Z zn{`D~t8B1HwIAK5vb7@P3}k~=6p^b$v=|YgBnmzuc2)ivB%YP}Ebzw^!UQ4r5?Czo z`J`s(+c?)n4QWhEqrS8wGdH_Crz_phiatl%99IWHZmu{Fxf%Y@CljXU`~V!6_bYI7 z#CeRQQ-yy5@6WYHqpCTgbmxnxjJs0^YZSuP`g_YS=^s@c(VTVhuR^#V>@LV{D`SCq z9;)#XH39N#DZgP2m|I48H%5cXo=;3gW=}+B!D@_;+mrL4xizE~L)BS?cqyY4^7gDs zV1&>-CgfxxFUp|A(*GZ zEsbu=_B$GY|J7C?a;FH&>l@n&{zxfDb2Ar#2xqV-@y-lk|(O;@@~BO7{h{+vo>YeMYHL+Lo>EKu1X^|PcS2$oz=BsAv;UM7qW1* zHKzOk*X4p8V+ksk?QE~fipqR02g|~Sk+Ea!vr782THOU(&gRAu3!1D+um=QdVpmy{ zT~79^$^K<^u}J31qbN;m3BLM>3bDy1eZ0tp-=%v=Fr(ZqcE(_=KVD6^SS6iiu;r{* zF0uJ0(*(OuFr(Nm_MFLj`MK<7ubYf2;bCV@_6a)P%R-9_jG#H*ESHzvZnBp>MJ^w6 z78$yP>|yAoI-4g#q#OTd!YyCw^G%3Ud}XEE76=PzI^aaj>|Hz+5xc0)aJ6NBnC$n`8doVB)yc3u=csp;v1NiC=sTvxKqf-Sdo z%v&w@W;;#RFR$Lwn>}cBlab?6>lRa)0Kyl4`izCRHr8^k?xVyU~A89>8);w#L8IGJv%= z*=O=Wc_14tSX0RMt-RDSkkPLwQkV-c4q{skqfJ(pS_ZMBrY%xAC=X^|nl?XdgPFaz zk#0@JCV2?+2-alVS+Uqh++^$9^mJd({xF$M8sxr_d50PWO=>gVy^`gbtW*kJ>t4mWnY3-2 z1@5(Mw8_rzW~bbbuo8o@e@my_``J#D)yi+UA7%5#QWzc4K5{?CP6%ey z{&DuBU`FkqV*SUF=W_av9+71rNmA4^|Hyu!wr?1=31yvnAV>=ii? ztWK~EtdBR{^BOxCGK_48o8wUAC6nFeDfPU;Y?DL{*>~;<_7kkL$=>&H_7+=gvadWY zutx=JVxQqwb&`#rOzE1~O6&|yvO|IyJBpL+q+pbN2hT~CJtai0%SHC5Si30(+iV@^ zImO1CY_4~>=Uvuqs<4R-)oC`&V79*PCwfk^aV8tqejwOl!HmMZ$KEh(Y(wN#p7+?d z1`|=TnI`Uk%UM4(;uq`|P-+XiCzgH59x&PO z?pXE}d)Z`u*#5&lH<{HN%g!pbV#_kxAivCr*ydcI>Zvkl`Z=Q_`S*>00vpRvyKBm2~3UuW&| z{LIqk7@ik0c6lzau_o(Q{)p!fwn#8zurc0X*u7M+#=tP~l5V)`b0y!Z(@hwk%=?jdY?775=)xkl!*z z;qRC%^r>$VTz@sF$k4*)1&jMFbBT%r>_8IZp&%YO)!j;uk>onUvbX&Yv_HwS}FZG}#>WRgZ(8FPvO{1BH3jV60n|%^S-L@nX}ssYQEze1%}fP0i1rFd5y{;zB%b5xLTxE7lvw(@i!V zEP)pZc8s-Clf6m2lVC<8rtqGoXK#C+H-%qqFgz<2gKak1W941E>HMV0+LmAG&E#p< zQGUh(mBmBDP5Nmj4n6owChKPz;LYM|7nAF9mQy~`o5NqP7fehijlUz9@kF5UuML~+ z^|BwB#(y*!-5oUkhsjPxP4a47X%JCtr-WzckUzN%alrft;zbrR>|iX46PRQR`IohQLEK? zJM&KkGg_?+cQ!HnGxm>N`9#5})vot;<^yO7BUWu2J&l7p(w62Xi!p>e#L_H zFT-6~D{mM<`w8g-j@I=9_y*wm=*(hNS) zWF4v&v040jlci&|pUv+v*>9PPLU`Hvv`OiVW-fQGGQ#XnYA4O*bp{iC7~r=UOia-L z-)J(Lq5;0uWFv8mIgjr)*|ZdVH^+~d?8SuD*7^KRlPxG&Z4J%mADHyGF#ct-5RCJA z`f5=a+cO0r`+VNbWUmS~-elCj^Z7i%jL|)xSFWLS$Hd?c@~=%s!?K1~-(pm73EFT$ zi1#&VCK_=eA0K8vc^C1cf~{lcU4MBO^L}eZLeUmW#XOM3++HZPuw(o;M~$`4v>oF= zIn~WS7v+S~>-5AdP zH^)Hw6NLCDW0&-kBP(VF7wbRKbB>ajoB6I*L09nyFJq5g#-1@Ve34betm1D9W)y8T zKhw%{HUHG~To2FH{O7RE!q#xhI&mLs=6mq?c?-9#qtZ3=d&|~?VLc@lairaLusDP9 z589Ats%f*7k}X#-V`Fj)Zxdz~*!r01D2KJYzsV?vwfx|E@pisBVrjc7X)Qlu8Yzpl z{NDzPpe)w%lcw!(Zs(Y__{DmopicZDlePMmyRPJs`WJWQ@j1HtZhzFSa(rmSycYVi z61&Rv-FGMHPu%VFZY?8qyBtzCB#`{EKL74vQxl+`&3Xyee~bACA>Si3OZ1xUWqgUgXM1Mq9HBYTo;Zw7 z8=|)4BC$1YA?x#ZJ}G@c!F&mqlC=afdgU#<-nh%B-?Yo4FWZ&Ez50$_!y>6gB)l4@ zD8qI6p4<4){de5ckE3BeyLVcscUgD7j1_48_^m9f^e!B0SEyql)7VN^Y$=m@9W=9f zp7Kii0{%U#(pK<2z_q{|_$J^-xWO!ghU1GH!WnXJ`-6Oj{B8bz&iOZS2YFkiF6|Is zC9JF1ft1<2N_jE*2cE|lhVaTaj~`V2;!AjWf+Dr$kEYIJOL!F~!(VHPd-m4+x=wL#JtWtNOL zxXP}o5zx$z9xF{zYM>dS94iS8l7{fCvdPjCZm7ma50Yjm|0%vk+Kloply;)_*TZLR z(Q2tlc_>Af_V79c-N_pK*GnsvDs2;R52_KNO!eM}3Q*y;LBA09uf^6UrTM%x^I2)W zOs_td@DoL^Ne_tjew5lf#2yt*{j|vJsK6nd-Z(`l(^32H+4+)ec?eI>tCC-352f^z zxADbVEZfFcX+z|b!v9HSqB=!h$(s{r1Ap<(mbXFAS+zoKd04c^KE4b_P4DAd zvF)hh*Wt7~RK-W&a-6?axfS@Sdz1VXFHd{`@?h-|$ZuN@0zWNzKt9ZWtvD_LQS6!nVXG#7= zO0%-2xK_Eq&zCP#n)wZREAZE@zAIX-%upiQ>&h9?Dxad`o`5FW`hxPc(EKPgOZdxe z|Kc;0*Bt**{$RP(PYS0#Ucz6oV;b^)Nvh?7a=yeN&||4qUM-H-=il$oenR;Xz5WCa zKB(`%=M^d0mIw<)a9bMu`IZRfi^_8S!TbH8d`r9~qhcJetZa(qIKRE>8X!i#vz$B%Cm~CCRnbmMlJLnAK5hAq%JsOjOve7wEv-*@ z84+lEEkZ$PZ&=$KJt`N z3BOzNl*93a+jD=ne1&#m>NbY=$@qKF1;vr-5v;2Xnoq+E zpVNFkUi6&igYbgqG#`Z*JEwV0#X&iAniu0u&T0N1yumrmf54lY<9t$Dno6T5S3S;W zq@BR1de^>8InF0YG|p&xe(xT0 zHk)X5D-TxDdNW=>{ooCyRIwovty@DRs@M?eYkbDD68=A7w!W&7JPDs|t>lX=g!sro zzvZFiVTyFva#vbETMT146Yyt|>4ZLp{pOg>Pg{&NFCEjUSnl3TPEZz$VY8oSr+PlJrr+QC|$4&*OMR4j#Q*Oq+8Xl5j)9CAM~)_x)5vYg;YhK z^YAF#(O!7CBOk2uy(0=IDf^`T?Po{qlb-M|Vr|uj6H4vzmbcgx%SwK}q{5zsa*gFH zMHlGT?``LctC(PqkS`W5v0uO#2-&L*)4%tQc2oW<%RaCVQK|j+NelJTec4gvmc#PE zoMgusH9ITQp|9Pig|2e!ljgRa39Lzoh2ta~+3yphzM0R;y3X;Wxujj^t#^Ed^{YEZ z!uHH%j^px=!T|KpD1e17I3$7z{Wy$W1~qluT5V{Ohj zmZ-BUJ^{X3@dYp{>pTkgUp&Y+^G^!jlV4W$l>Y+#dH9@`Yy4*rZEXQ}o|eC@JmaY1 zCnFrrD*ht;Uqw%FyhBA;X- zr%M?jkSaks3&R*8Pk`)XH%jAxE2YW6)sUmu)6#>HHg;5c2l$foJ__`zbQbcPk{3QF zr8wZbQZn!Zk+xajXFwag15!fVfo4~^Yn+5U+;V-aS;1q#P0=Ee~EU;N1x8KS7g%Y`)>X&ABP-alQkeCil z*Q9F5qk*FK!a4<-7n7z4O%vp@SmrwD8k z7}_Q-JdzrxG14QDNuMsTS|E1`jlgPwQv@~%+$Qj_z-ECQ zZ?F*|BreqgrwDBJkb!#%)4Zb3gj_9fiok6G4-0G-$YVq}fz<-12;3&{u)yY+PuRBP zX2Tjwk(**eblE1zVS(HHq&Y0GSztH(Sy{LW+$Qj_z-ECwo~-Ets|8LGxGkOvbXZ`s zK%O9qD6m@Kl!PNR{+k5ZW*8F5X^Oxmf!hQg7T7G1Cy77;s|8LG*d%arIu&TEz(WEj zXOQM><_~OU+~jPM8wG9!V*F3e6DomQ1s)Q3Rv^nKYd3+D1vU!YD)5lNvjSNGd8P?u z#Xqo3afiw?IWiWQRzY$%fs+MpB^(%aNDx*@<}`ub1Wp#%C=g%O;$) zjlam>=0~IyxkwJmJ(bRuK9*Z7Z&<$8w>{M-yVT)vCOgMEuXf(&-0OVG`I7Ur^Q`l0 zrxKYOsYRAYUJ-ds zzidw}_f6Re;IwkWQ7RSU87tvfDq@J8kEU!M7meIL>lEav1!sV7C4CP3QQ%0n203|k+#Y4UdD6y+?L+AK|Q;CqT!QVi}H^)GU zO=qc)X8fOP-30=EXZAe66?z6K<);_0VEGV?hce#4?Z7qPoRX~-Kv4yA1JW_d?Dn4 zK#2|F*Fhc(l<*5(OMt_8EelC(IIo9c1W;ll@!>sZqks|{jo;`D$PdzXd)EfV6>L2VBi{Xx0GH_xv`*@?F4#{9fQ89P~--d44~OV=+<%K6ITccLmOq ztARne2XKMh3%E$W5`P4x4%SN60Ba>{l=}g%hqaPLE)(YE_^z{(tpQWzyD0!>$fO10lQ29~$Q)#lSusmdWT>s`!fn9Un=)BW8F7l-jdd}e-UZW2< zd=+rt;m*8K|Mu{NPy~NcrW0+4dHqE)_yzO&yLq+9Ps(%9#Ov@Y@>^J;^cLHX>*vyM zl2!gqio}ms-ooPL&b(adiXTO`%8EP>*GTA7EnARo8!tqfBNiKPR_*w)@gG7Eet=-H z+VNxKZd~y{CG%8VQ*o`pwF1{cxDK*5NnLF>NWE-tvC+2Mq&x8QIOMl&d!(p{hlQ;; z;xVZ-;w@H%pP>;)g#38KIb6?4%@JD|+5Uh}H~SVg%05c2z@U-*j@zUocrq`Py7Kvs z@8!YH@8#jnu6($&Gk?tavqV4hlwa}loA`Om*=B#!k&oN&pY!Vr^8OBg+#=~OUc4Q@ zk$e4Lvv~4jF8)2|RU0LVms_!9$oSbA?Mi}=ST7^iRFr`oW|IJ-FDthlBV?E7#+zcOH+Dm+z`pXJFq*7 z-_CiDjr(1^2Qp4{^D5qX;}SOy@*6e|iRLLAi#>eW#^W*gmA=q{{jt14<^>0$nrEtBV2 z>=9PQGs3gjv)Hz=LF4|Iubl42Ki!SnJWb!Y7uYBSk%7oY3^;+}5sl#pd9xd7Ubw^&)&eZN| z(IQ$@VQl&2_rHFl;~({b85>((z9aHJlGE0u`=lKsHty-f7aoY}!he&cqh$x&-TAkC IU5WMo0l~}xpa1{> delta 33029 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 diff --git a/Source/ConformalDecals/DecalConfig.cs b/Source/ConformalDecals/DecalConfig.cs index c5bbcae..a0cc843 100644 --- a/Source/ConformalDecals/DecalConfig.cs +++ b/Source/ConformalDecals/DecalConfig.cs @@ -107,7 +107,7 @@ namespace ConformalDecals { } private static Texture2D MakeBlankNormal() { - Debug.Log("ConformalDecals: Generating neutral normal map texture"); + Logging.Log("Generating neutral normal map texture"); var width = 2; var height = 2; var color = new Color32(255, 128, 128, 128); @@ -133,7 +133,7 @@ namespace ConformalDecals { var configs = GameDatabase.Instance.GetConfigs("CONFORMALDECALS"); if (configs.Length > 0) { - Debug.Log("ConformalDecals: loading config"); + Logging.Log("loading config"); foreach (var config in configs) { ParseConfig(config.config); } diff --git a/Source/ConformalDecals/DecalIconFixer.cs b/Source/ConformalDecals/DecalIconFixer.cs index 491a95f..68537e3 100644 --- a/Source/ConformalDecals/DecalIconFixer.cs +++ b/Source/ConformalDecals/DecalIconFixer.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using ConformalDecals.Util; using UnityEngine; namespace ConformalDecals { @@ -12,11 +13,11 @@ namespace ConformalDecals { public void Start() { foreach (var partName in PartNames) { - Debug.Log($"Unf*&king decal preview on {partName}"); + Logging.Log($"Unf*&king decal preview on '{partName}'"); var partInfo = PartLoader.getPartInfoByName(partName); if (partInfo == null) { - Debug.Log($"Part {partName} not found!"); + Logging.LogError($"Part {partName} not found!"); continue; } @@ -28,12 +29,12 @@ namespace ConformalDecals { var backTransform = Part.FindHeirarchyTransform(icon.transform, decalModule.decalBack); if (frontTransform == null) { - Debug.Log($"Part {partName} has no frontTransform"); + Logging.Log($"Part '{partName}' has no frontTransform"); continue; } if (backTransform == null) { - Debug.Log($"Part {partName} has no backTransform"); + Logging.Log($"Part '{partName}' has no backTransform"); continue; } diff --git a/Source/ConformalDecals/MaterialProperties/MaterialPropertyCollection.cs b/Source/ConformalDecals/MaterialProperties/MaterialPropertyCollection.cs index e12cfac..579ff23 100644 --- a/Source/ConformalDecals/MaterialProperties/MaterialPropertyCollection.cs +++ b/Source/ConformalDecals/MaterialProperties/MaterialPropertyCollection.cs @@ -202,7 +202,7 @@ namespace ConformalDecals.MaterialProperties { public void SetShader(string shaderName) { if (string.IsNullOrEmpty(shaderName)) { if (_shader == null) { - Debug.Log("Using default decal shader"); + Logging.Log("Using default decal shader"); shaderName = "ConformalDecals/Decal/Standard"; } else { @@ -211,7 +211,7 @@ namespace ConformalDecals.MaterialProperties { } if (DecalConfig.IsLegacy(shaderName, out var newShader, out var keywords)) { - Debug.LogWarning($"[ConformalDecals] Part is using shader {shaderName}, which has been replaced by {newShader}."); + Logging.LogWarning($"Part is using shader {shaderName}, which has been replaced by {newShader}."); shaderName = newShader; foreach (var keyword in keywords) { var newProperty = AddOrGetProperty(keyword); diff --git a/Source/ConformalDecals/MaterialProperties/MaterialTextureProperty.cs b/Source/ConformalDecals/MaterialProperties/MaterialTextureProperty.cs index 6d0af85..6766f3b 100644 --- a/Source/ConformalDecals/MaterialProperties/MaterialTextureProperty.cs +++ b/Source/ConformalDecals/MaterialProperties/MaterialTextureProperty.cs @@ -109,7 +109,7 @@ namespace ConformalDecals.MaterialProperties { } private static Texture2D LoadTexture(string textureUrl, bool isNormal) { - Debug.Log($"loading texture '{textureUrl}', isNormalMap = {isNormal}"); + //Logging.Log($"loading texture '{textureUrl}', isNormalMap = {isNormal}"); if ((string.IsNullOrEmpty(textureUrl) && isNormal) || textureUrl == "Bump") { return Texture2D.normalTexture; } diff --git a/Source/ConformalDecals/Text/FontLoader.cs b/Source/ConformalDecals/Text/FontLoader.cs index ddb13e5..1fe5863 100644 --- a/Source/ConformalDecals/Text/FontLoader.cs +++ b/Source/ConformalDecals/Text/FontLoader.cs @@ -1,6 +1,7 @@ using System.IO; using System.Collections; using System.Collections.Generic; +using ConformalDecals.Util; using TMPro; using UniLinq; using UnityEngine; @@ -15,18 +16,18 @@ namespace ConformalDecals.Text { public override IEnumerator Load(UrlDir.UrlFile urlFile, FileInfo fileInfo) { if (_fallbackFont == null) { _fallbackFont = Resources.FindObjectsOfTypeAll().First(o => o.name == FallbackName); - if (_fallbackFont == null) Debug.LogError($"Could not find fallback font '{FallbackName}'"); + if (_fallbackFont == null) Logging.LogError($"Could not find fallback font '{FallbackName}'"); } - Debug.Log($"[ConformalDecals] '{urlFile.fullPath}'"); + Logging.Log($"Loading font file '{urlFile.fullPath}'"); var bundle = AssetBundle.LoadFromFile(urlFile.fullPath); if (!bundle) { - Debug.Log($"[ConformalDecals] could not load font asset {urlFile.fullPath}"); + Logging.Log($"Could not load font asset {urlFile.fullPath}"); } else { var loadedFonts = bundle.LoadAllAssets(); foreach (var font in loadedFonts) { - Debug.Log($"[ConformalDecals] adding font {font.name}"); + Logging.Log($"Adding font {font.name}"); font.fallbackFontAssets.Add(_fallbackFont); } } diff --git a/Source/ConformalDecals/Text/TextRenderer.cs b/Source/ConformalDecals/Text/TextRenderer.cs index f7eb319..5f25400 100644 --- a/Source/ConformalDecals/Text/TextRenderer.cs +++ b/Source/ConformalDecals/Text/TextRenderer.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using ConformalDecals.Util; using TMPro; using UnityEngine; using UnityEngine.Events; @@ -66,7 +67,6 @@ namespace ConformalDecals.Text { /// Unregister a user of a piece of text public static void UnregisterText(DecalText text) { - Debug.Log($"[ConformalDecals] Unregistering text '{text.Text}'"); if (RenderCache.TryGetValue(text, out var renderedText)) { renderedText.UserCount--; if (renderedText.UserCount <= 0) { @@ -78,10 +78,10 @@ namespace ConformalDecals.Text { private void Start() { if (_instance != null) { - Debug.Log("[ConformalDecals] Duplicate TextRenderer created???"); + Logging.LogError("Duplicate TextRenderer created???"); } - Debug.Log("[ConformalDecals] Creating TextRenderer Object"); + Logging.Log("Creating TextRenderer Object"); _instance = this; DontDestroyOnLoad(gameObject); } @@ -90,13 +90,13 @@ namespace ConformalDecals.Text { private void Setup() { if (_isSetup) return; - Debug.Log("[ConformalDecals] Setting Up TextRenderer Object"); + Logging.Log("Setting Up TextRenderer Object"); _tmp = gameObject.AddComponent(); _tmp.renderer.enabled = false; // dont automatically render _blitShader = Shabby.Shabby.FindShader(ShaderName); - if (_blitShader == null) Debug.LogError($"[ConformalDecals] could not find text blit shader named '{ShaderName}'"); + if (_blitShader == null) Logging.LogError($"Could not find text blit shader named '{ShaderName}'"); _isSetup = true; } @@ -108,11 +108,6 @@ namespace ConformalDecals.Text { return null; } - Debug.Log($"[ConformalDecals] Starting Text Rendering Job. queue depth = {RenderJobs.Count}, cache size = {RenderCache.Count}"); - foreach (var cacheitem in RenderCache) { - Debug.Log($"[ConformalDecals] Cache item: '{cacheitem.Key.Text}' with {cacheitem.Value.UserCount} users"); - } - job.Start(); Texture2D texture = null; @@ -123,15 +118,10 @@ namespace ConformalDecals.Text { if (oldRender.UserCount <= 0) { // this is the only usage of this output, so we are free to re-render into the texture - Debug.Log("Render output is not shared with other users, so reusing texture and removing cache slot"); texture = oldRender.Texture; RenderCache.Remove(job.OldText); } - else { - // other things are using this render output, so decriment usercount, and we'll make a new entry instead - Debug.Log("Render output is shared with other users, so making new output"); - } } // now that all old references are handled, begin rendering the new output @@ -210,7 +200,7 @@ namespace ConformalDecals.Text { }; if (textureSize.x == 0 || textureSize.y == 0) { - Debug.LogWarning("[ConformalDecals] No text present or error in texture size calculation. Aborting."); + Logging.LogWarning("No text present or error in texture size calculation. Aborting."); return new TextRenderOutput(Texture2D.blackTexture, Rect.zero); } diff --git a/Source/ConformalDecals/UI/FontMenuController.cs b/Source/ConformalDecals/UI/FontMenuController.cs index 60e0115..14928bf 100644 --- a/Source/ConformalDecals/UI/FontMenuController.cs +++ b/Source/ConformalDecals/UI/FontMenuController.cs @@ -46,7 +46,6 @@ namespace ConformalDecals.UI { Toggle active = null; foreach (var font in fonts.OrderBy(x => x.Title)) { - Debug.Log(font.Title); var listItem = GameObject.Instantiate(_menuItem, _menuList.transform); listItem.name = font.Title; listItem.SetActive(true); diff --git a/Source/ConformalDecals/UI/TextEntryController.cs b/Source/ConformalDecals/UI/TextEntryController.cs index 7d40431..c735d77 100644 --- a/Source/ConformalDecals/UI/TextEntryController.cs +++ b/Source/ConformalDecals/UI/TextEntryController.cs @@ -1,5 +1,6 @@ using System; using ConformalDecals.Text; +using ConformalDecals.Util; using TMPro; using UnityEngine; using UnityEngine.Events; @@ -102,7 +103,7 @@ namespace ConformalDecals.UI { _style.LineSpacing = Mathf.Clamp(value, _lineSpacingRange.x, _lineSpacingRange.y); } else { - Debug.LogWarning("[ConformalDecals] line spacing value '{text}' could not be parsed."); + Logging.LogWarning("Line spacing value '{text}' could not be parsed."); } UpdateLineSpacing(); @@ -125,7 +126,7 @@ namespace ConformalDecals.UI { _style.CharSpacing = Mathf.Clamp(value, _charSpacingRange.x, _charSpacingRange.y); } else { - Debug.LogWarning("[ConformalDecals] char spacing value '{text}' could not be parsed."); + Logging.LogWarning("Char spacing value '{text}' could not be parsed."); } UpdateCharSpacing(); diff --git a/Source/ConformalDecals/UI/UILoader.cs b/Source/ConformalDecals/UI/UILoader.cs index 67dfa04..18c92f7 100644 --- a/Source/ConformalDecals/UI/UILoader.cs +++ b/Source/ConformalDecals/UI/UILoader.cs @@ -44,7 +44,6 @@ namespace ConformalDecals.UI { var tags = window.GetComponentsInChildren(true); foreach (var tag in tags) { - Debug.Log($"Handling object {tag.gameObject.name}"); switch (tag.type) { case UITag.UIType.Window: ProcessImage(tag.gameObject, skin.window); diff --git a/Source/ConformalDecals/Util/Logging.cs b/Source/ConformalDecals/Util/Logging.cs index a3206f3..8a48793 100644 --- a/Source/ConformalDecals/Util/Logging.cs +++ b/Source/ConformalDecals/Util/Logging.cs @@ -3,18 +3,23 @@ using UnityEngine; namespace ConformalDecals.Util { public static class Logging { + public static void Log(string message) => Debug.Log("[ConformalDecals] " + message); + public static void Log(this PartModule module, string message) => Debug.Log(FormatMessage(module, message)); - public static void LogWarning(this PartModule module, string message) => - Debug.LogWarning(FormatMessage(module, message)); + public static void LogWarning(string message) => Debug.LogWarning("[ConformalDecals] " + message); + + public static void LogWarning(this PartModule module, string message) => Debug.LogWarning(FormatMessage(module, message)); + + public static void LogError(string message) => Debug.LogError("[ConformalDecals] " + message); - public static void LogError(this PartModule module, string message) => - Debug.LogError(FormatMessage(module, message)); + public static void LogError(this PartModule module, string message) => Debug.LogError(FormatMessage(module, message)); + + public static void LogException(string message, Exception exception) => Debug.LogException(new Exception("[ConformalDecals] " + message, exception)); public static void LogException(this PartModule module, string message, Exception exception) => Debug.LogException(new Exception(FormatMessage(module, message), exception)); - private static string FormatMessage(PartModule module, string message) => $"[{GetPartName(module.part)} {module.GetType()}] {message}";