From 7e0f98ef91c3d5e3b034ac070f063a48beeca029 Mon Sep 17 00:00:00 2001 From: Sinai <49360850+sinai-dev@users.noreply.github.com> Date: Tue, 12 Apr 2022 05:20:35 +1000 Subject: [PATCH] Automatic code cleanup (no real changes) - Use explicit type of var - Use 'new()' - Remove unnecessary usings - Sort usings - Apply formatting --- .../Runtime/UnityExplorer.STANDALONE.Mono.dll | Bin 306688 -> 306688 bytes src/CSConsole/CSAutoCompleter.cs | 30 +++-- src/CSConsole/ConsoleController.cs | 74 ++++++------ src/CSConsole/LexerBuilder.cs | 27 ++--- src/CSConsole/Lexers/CommentLexer.cs | 6 +- src/CSConsole/Lexers/KeywordLexer.cs | 10 +- src/CSConsole/Lexers/Lexer.cs | 1 - src/CSConsole/Lexers/NumberLexer.cs | 2 +- src/CSConsole/Lexers/StringLexer.cs | 2 +- src/CSConsole/Lexers/SymbolLexer.cs | 5 +- src/CSConsole/ScriptEvaluator.cs | 10 +- src/CSConsole/ScriptInteraction.cs | 14 +-- src/CacheObject/CacheConfigEntry.cs | 6 +- src/CacheObject/CacheConstructor.cs | 5 +- src/CacheObject/CacheField.cs | 5 +- src/CacheObject/CacheKeyValuePair.cs | 7 +- src/CacheObject/CacheListEntry.cs | 8 +- src/CacheObject/CacheMember.cs | 15 +-- src/CacheObject/CacheMemberFactory.cs | 11 +- src/CacheObject/CacheMethod.cs | 10 +- src/CacheObject/CacheObjectBase.cs | 26 ++-- src/CacheObject/CacheProperty.cs | 5 - src/CacheObject/ICacheObjectController.cs | 6 +- src/CacheObject/IValues/InteractiveColor.cs | 27 ++--- .../IValues/InteractiveDictionary.cs | 29 ++--- src/CacheObject/IValues/InteractiveEnum.cs | 24 ++-- src/CacheObject/IValues/InteractiveList.cs | 23 ++-- src/CacheObject/IValues/InteractiveString.cs | 16 +-- src/CacheObject/IValues/InteractiveValue.cs | 8 -- .../IValues/InteractiveValueStruct.cs | 31 +++-- src/CacheObject/Views/CacheConfigCell.cs | 15 +-- .../Views/CacheKeyValuePairCell.cs | 17 +-- src/CacheObject/Views/CacheListEntryCell.cs | 12 +- src/CacheObject/Views/CacheMemberCell.cs | 8 +- src/CacheObject/Views/CacheObjectCell.cs | 20 ++-- src/Config/ConfigElement.cs | 3 - src/Config/ConfigHandler.cs | 7 +- src/Config/ConfigManager.cs | 8 +- src/Config/InternalConfigHandler.cs | 13 +- src/ExplorerBehaviour.cs | 8 +- src/ExplorerCore.cs | 113 +++++++++--------- src/Hooks/AddHookCell.cs | 9 +- src/Hooks/HookCell.cs | 7 +- src/Hooks/HookInstance.cs | 23 ++-- src/Hooks/HookManager.cs | 44 ++++--- src/Inspectors/GameObjectInspector.cs | 59 +++++---- .../GameObjectWidgets/ComponentCell.cs | 9 +- .../GameObjectWidgets/ComponentList.cs | 22 ++-- .../GameObjectWidgets/GameObjectControls.cs | 91 +++++++------- src/Inspectors/InspectorBase.cs | 9 +- src/Inspectors/InspectorManager.cs | 12 +- src/Inspectors/InspectorTab.cs | 13 +- src/Inspectors/MouseInspector.cs | 29 ++--- .../MouseInspectors/MouseInspectorBase.cs | 6 +- src/Inspectors/MouseInspectors/UiInspector.cs | 49 ++++---- .../MouseInspectors/WorldInspector.cs | 9 +- src/Inspectors/ReflectionInspector.cs | 48 ++++---- src/Loader/BepInEx/BepInExConfigHandler.cs | 12 +- src/Loader/BepInEx/ExplorerBepInPlugin.cs | 8 +- src/Loader/IExplorerLoader.cs | 3 - src/ObjectExplorer/ObjectSearch.cs | 39 +++--- src/ObjectExplorer/SceneExplorer.cs | 58 +++++---- src/ObjectExplorer/SceneHandler.cs | 20 ++-- src/ObjectExplorer/SearchProvider.cs | 35 +++--- src/Runtime/UERuntimeHelper.cs | 18 +-- src/Runtime/UnityCrashPrevention.cs | 6 +- src/Tests/TestClass.cs | 16 +-- src/UI/DisplayManager.cs | 10 +- src/UI/Notification.cs | 9 +- src/UI/Panels/AutoCompleteModal.cs | 14 +-- src/UI/Panels/CSConsolePanel.cs | 34 +++--- src/UI/Panels/ClipboardPanel.cs | 25 ++-- src/UI/Panels/HookManagerPanel.cs | 38 +++--- src/UI/Panels/InspectorPanel.cs | 14 +-- src/UI/Panels/LogPanel.cs | 31 +++-- src/UI/Panels/MouseInspectorResultsPanel.cs | 10 +- src/UI/Panels/ObjectExplorerPanel.cs | 24 ++-- src/UI/Panels/OptionsPanel.cs | 23 ++-- src/UI/Panels/PanelDragger.cs | 35 +++--- src/UI/Panels/UIPanel.cs | 47 ++++---- src/UI/UIManager.cs | 22 ++-- src/UI/Widgets/AutoComplete/EnumCompleter.cs | 12 +- .../AutoComplete/ISuggestionProvider.cs | 9 +- src/UI/Widgets/AutoComplete/Suggestion.cs | 8 +- src/UI/Widgets/AutoComplete/TypeCompleter.cs | 10 +- .../EvaluateWidget/BaseArgumentHandler.cs | 12 +- .../Widgets/EvaluateWidget/EvaluateWidget.cs | 27 ++--- .../EvaluateWidget/GenericArgumentHandler.cs | 6 +- .../EvaluateWidget/ParameterHandler.cs | 7 +- .../Widgets/TransformTree/CachedTransform.cs | 6 +- src/UI/Widgets/TransformTree/TransformCell.cs | 14 +-- src/UI/Widgets/TransformTree/TransformTree.cs | 16 +-- .../Widgets/UnityObjects/AudioClipWidget.cs | 6 +- .../Widgets/UnityObjects/Texture2DWidget.cs | 11 +- .../Widgets/UnityObjects/UnityObjectWidget.cs | 4 +- 95 files changed, 732 insertions(+), 1073 deletions(-) diff --git a/UnityEditorPackage/Runtime/UnityExplorer.STANDALONE.Mono.dll b/UnityEditorPackage/Runtime/UnityExplorer.STANDALONE.Mono.dll index d2a275781abf09078b161e534b3c079bdbf2fda2..155cec4f07c07757481d089c938498025f4f6520 100644 GIT binary patch delta 55621 zcmaHU2Y6M*)A!7|$<0mAO~Oql2_)f?gc3pvz4sCzl@20J;D#jBl$%gOZw7Jz!7fEn zP|$$oFDgbv5L85LD2fOIf*l)tzu9ww_05dcL&>woa{tj_R=a<@fsU$2a< z$e_Yyu)!H1hB|GaPGLH3v7ap!Dy>FdJE^a*xh72%Njm57r^3;|-pYETJe?y-=?i{Q zd&sMjMk++gSi_tdhMJhW^n{0a7>ev3rl#r}9^vk2A|{$k%^st0Nr$wwPzkI>)poMD zI*9&6kR;Mv9r5&W_@=~Jy|((~<6-mpsUGyNyo*is!bysLMj=9=b#=KAd)HN2NCURKGiIBr0t>eX6HnmVdSG z>dn#nKX;83Yue8qg-7+q!l~S7|KEi+%|FrMvdbhdE62R74x7_w|M)q}Y}~r~Qdx7@ z{aARpMa++^9LRoB`J>MFjeeQE$nD7i`+r#Whla=1l{Zy0FK&3ytE1TKdJZj0@+!O? zMFqj+ybiSbd04Av!hbPu{KKq%bxXAWUFBV^_g~s_Kci(O55%LM?GJq81F(2U62Ox? z26^G}+ta@V!p7aw@OAye~K?*?}krYqu3v;C`YycGpaen+!GCmwwnH1_Q} z(2H-km-Mj?pd*hp;h_DCj5qa zALzrFXYy42RpxlN>zsxa{i!< zGVq^ZG)2H>x21Ygm|uzyK|v^3&0aX?Z}&{K0fvYLpV>st+wPt5lFVdptz-!FxV}VP zx7gtZ&&TeQ>J{eK{sG~`FL}Aniy^)#*>+#oSCaH2yWbs~{O$g*DFcdziK4F|&?3_A z=emG|k>~CD25D%&#VH&X5?~K7Yz&Zg5R@uAABCO19bl+$y`jxQpfppIUi_!LBP7rs zn5u>O5vi60*@IF&+uND+namMx_;1yN_LMGmyU~NeWDmY$ZHPSt);2O)Z4Y*R3(Xi6 z)tA9WUw$f!h)`OYbqHqJVU^vq%CzXLQBF1aV@Vs`G|DF=6g7t${nUW$4er$Juse*J zrA77zu1o)D0FvHvT~>-v`cBQEs5#WES$~i@T)$#r?{sc0yXra`@;PDukaQ!SxP;C0 zS3IzpW~N7J19zyj{*#59@OOHY2an|deW3?OhpAmk?Ptd1wo`ahijLNw_TZ&_RZsWi zA9!SKqLtg*@~^?Rq8;#BiCS3>T2R&>L@ODfsH8((-;4Rlx3r@DNR;&xPSJHq$_&$r zPNQGTq@%T>8vxAZhShxpzG+u0r2#mn`fc24U`7O|0FiAKn$&B~GzMz%`> z@v%5s1z4=cg7Pq?JobJqCDLkfSuFaic5a&ZkF?bTnG!uXdttNpvxVNW_P;4VF)TOv;ihX)Mx8|1ao8d(i?_w*ASVu4%bnPELlp1qg;ti zF9_j&9yXM&=8VwVQz3jrV{d(vgWKV8!oiLFe8AL7#zNfXt^euZSoYDQ!uTon)!zz( za$o&Q7$>ryZV%_UR6j_Uxge~SOcd(ehoN#wu4^T##}?Ww+|2aX$DjoJ>*e7b8RQR< zkig);TaJZlpV4=P^FvVq$VGdCEEd-%Xl_`(D-bzBY;gwZ6C=3V&o0IMQgVa+oWVLr zat!)1Hj*1~px!2u8~KNT-|XRYfx&*a9INz6k(>^J&5=9?_5K>k9k9sKqF_a+K0J!M zaRa?NiW3~hTD!B4FhxemQacgFE?);Uy6#6?Tw!|OXikd$_s(-?YP$VBM54LL@Ow&=+* z==Ny6rXio=7=21Cx8a8R_E=uQv3ip@p5qe-dEXRot1DXH5ywyY#sgD|kJZc7uy%Aj z#|Lnu+VU10&)i6VxFr|a8$-aA01^_L5+5AvOw<$7IL&d26TscqMa&ssQD4{FPU8#jZD z^AB)b&w`M5Bch5|UCoheq`SIW=oM}GC2pyAYR3W2tv6S27kzslj>fk53`#}16ii6& z3JJsv!NH!+Zj!XxtzoWIS(M1>j+|!SzzD=!8}%!F_$%(AzuOnx(?ws|k8|)i-;b*u z${dGJ`)D*BW{HVbSI^p&{n^GLy`TiKa9Ey?)nK{W=uZsbq@dnlxcY$jrVI;aXJ7r( z0i5aVCw1;XoqWpyS6$z5t5}vApgDalWOX=PJ@gR+Ihp(G^^Pi^lpu6sUs0-g zIb$J9z)I)0MrZ1^rv~y|FCI|acLewK#CWXBgU@cQAI{@q9;mm;=S-lgeBQ%@^z@P3 z*k2rya{zoS4n~9Zdq#3^aCVR6)V@Q&fqM;U=|S^lGsQoxXectvqz}xbjFJ``SoWa# zd{nVAMM{Q3D;lOpkK+4ehO8LHEqJ(oXcTw0jetO+#g(Ps8pVw`TaO>jVeTAchIn{e zVM#8MI1;(?@O0eLRR83{O?$ZVMaV0qMX;B1q$F(=Y;%r6N(B@Wz@-M4KaZ--Y}fP3 z7eahAgqj^iM|s_HZ2hP65if=1`PsbI>b0Y>*wgiEqj?rz&_|Eq&wRv>r%Kc|M(;6} z8wZSq4k~{E>XA22FB;3)JYIi$EPTcU{qk5&@f9!WlM;u43D#rBajaXp#gB~fS#?*n zN{eeE#Bo3j4)$=~BS}xYr^BUcLCz%Ps441k%d!3LqO~xOOo<3atkaUA706?um7u4($EaXi#_I&vzcHAVO7J;r0`1N7zNc|0DM$8${b z46uEy!3;;Tu$OZtP!i_yEIf_Q#&I>ZfhJkCEhliaja~ZSX&f`IK-7K!wWqMP8V;=R zh& zOdfVEK&pJSB}C$}u%vR#K#yD2y`Bh`7V5XAbF^=%h+1Kot4vS4kK1#(K2{!XU6)6N zehQDIN=PMzg?OJ!48hGuVK3a%l)QuLoQuG)`#6uoTj4C;dmaj>F@f8Q6@M>KBn|RVS({J!&R*@He~Sz24Fl`ox*+MA20<(RJy%eHNm_bUk?% zH-m<}S@5b$^om*Bx#8Wt_(9)0y;%5#O6#A_;;492^WE%!I#)x->R~Q8&}I587l-}- zHtn!**|Z;V;q0?qKjGqrcw99ez6IPcZn^Y~<|sQR)8(AHzp?hGf;;y&#{I;y<+!-f zClqiOUZFo+fR0_Me_X(AQdXfj-1SE&ZT+W5U8|K=CsvrXqys{vFo$cUo-rH#aE*R( zHqYR-`iMdmxhyN>mQB|gT0Vvrmr9d0wv%f;a{V0sDLri7TXC-hue3q`vXJ8f?>EG8 z>ckv!-LD50aT-_a-HW&>?7FXrBO_KodWTxWBh=gG7nMAHhs-J%*buEyXJ8yb6fqD`P|*6?(@8y+jZ*# zZu0NTJcRHF$8l1ms74eZkvY*5JTq9s$Yw9VV7T-Z3wR$gx#gc-_)hXj(6kR!Ow z9*E`Jx)duFjVZ;tjjml<%D5nYM2{%PM)Rn?yc_}RWBRYc zn{nW=5H4GBRFeab#kB|WRDKO(h{@QX{JIRL>uF>; zFrPJc}-NPx9LdZ0a^bnn>)kD%K+I zt}L+uddw1f{9^2IhxA2@c|pV-efF?_6yoS}NDp0tt-ZBAeF*~D7xf)W_@1bjpvSnb zGL+ZAE+=*`tLsrcVJRQPSbn|~x(DlBs&J@F*XLGon)J%2p?aQ>!7VKfZ$7M@Txv%P3&? za=j(xy|EbT^j}tR4?e25U&+a7ZzJ1@_$$SA3@OZ@@^|obJ%Z>c#JBw#WCZ&<9~C55 zVBW6ddi6>K(#Q3otGE-N&{wbGtNgIOU^VwepT4#l7gFy+L1Ju)>m;5@iLqt%iPZW; z$NEI4`b3xdgtI=;v_3JaJ~5^~(YZcRTAxU&Pjp2>&tJoXJN}murrt6uq5-YQVBRsz ztgFn+VCv`B@SMm~u--qVxwq>*B(N1|CEj4e@w}xMti{pzq+Yd_3o+Y%UyG4Cq(`m8 zG3JndWgWcvAw79LPsd}^dR`Z+2529~DoI`;keBBzO}vcVZg2L5?5I6A@PES8@I-i| z+APLM2jBwJ;(T8ZzaMuFGWIF#@Ub@gP;+8pTQP{!@8>2CQH_g~oyclt*Gi-T7-@ay z{rpZt(WruEt3<&mQ3l&651IAVJRwQS`&dJnvsRe0xc!NC}4$b*hZYxUevQU z@<=pl-$pq9I{nR!JOG(No48S|te+qb@Cfi2;E|U_7T*-|N`7CnII(7}PTcoy;<%ot zA>{fHgpzB>c?fd~*HUm5)*{6@BOI+H7;SKUq@;{1r!>q#_z63*&*}$I8=uub+Qc35 zJ~o78LmdnmygGvGEBXYv72?;6K1C`qc2e1A@^qAaE|0LXa|ZgtczkI*&g0=@Rog+) zSNgOXUT*ywSw$E0-)eXYf1{7nISkv=Je@lxT?EJVEr=5fA1~(&GuzdhS+4k(^s_p4 zh5-F{ol_$VAZ_GJm^nwnO!#Ggt80PYbu-7uED)8KLH_&Y1y=b2y=*gwyBC6+SOHh* z;T$E)^*dny_RvJ$t}93vOF)i!YAZZcAhDF|Dl$v1ffNRH#7>4YoB6gxqMGlK@460x zLv$A$nQutaYAbwI%357N0Im*3gp0JHCmA^aKMEs6V)B*}ldHEcDE)6t{waUIt;g+d5>Tw{#IM_2=~+?ZlYvj1!8*-xk*V$ZdLBUxNDfOKR(88 z(+}P8A9ozm9UpVYqx`ogNQ`Y>?@|7z)9O&q5@(}4T(|l}N`0ak5^lvyuFq;wpGd4v z-0@m>{MgufR(XBmj<5Tlt}@<`sgO1&H`GdghcWW}!+g5`ltlAWwFnEllGLmTfB|XSJwI?x0zoP`VA?Ma?-0 zLynl$QYNNo4L!=l6wR|tv}m5HRGHML1$dPGsr&8VD7UZ_qnXX3o~cdmsv|W*D-{WY zb;}{uxfrHkzTmxzinIHmK2?EJ0|Oz;I7|ij5etyIPxr#bvRJP0SSku8+T^E#FF_gQ;L$^-~`erz8*_~bxH@d*4f4_tKbn-@q5&t(W z$7Q*P7Km%GB6Nv5kd_}srHX_V`AEIKAY=%-{PcpId>>rQXFIu}R{%JgD^TZM9CZgY z-o;JAg21VWhwj2T^QfS(8pPo!vg;FeafAF|VKx?K_l00i009$D!KWfwa%&~`x{<3C zHIv*?CCFU^0$G)dxAY!`KS^#xDHVi4gMM-s4>9Ua6z1+SFuw*7^?K{wJcL8^#k;w2 zlr*fuDKcFuATtR>E-Sk_ibD0*c5_G*ImbFw`zul*mRw%cK#DX(+DOGp%Ax$Ii%wx>DVFC2=njrrr88lfM48rGOOVVbKa zUWIGU!Jw|G3=*l|dYYqxqEN&)#m`#)B;2Dj%0vI*6>bqUegfGgs%~C5YB8<~qV=iI zaB_YOWR3INK+KEFm={_J-WGWH;6|t+c+Ju=C!A74ED+2vKpX%jYZ3MdpG4m>DdFXd zSTSDmy->E1e&re5n$Oo$_i`%E68U>M*1s{h*wg&vTxPzo$FbTkTHn5xZ-uC%ym4wP zDThM5Uafs*A8+UXl{5A^?9_pB((_4a=rITPP3%n2Yxm>gL3N-*|9L-WaH8J)0B2Z} zP_wH^?aTx0gEz;u^PlHRW~ctg3phzP)pyqNxR{|(<)2g>Pb-A+)Z0iDO$Vke>NF5#hQmjRT^vN${ z#M|j>UgqB3>O^a|J0tGS9rRgv0^MsWX06B{13ll!R`KEukjLoO0Rq!m2}h}dmZ0P z;n;Nibv}yA{!MRiKi|%1lNt8tm)_u{e`Q1*;jVXQ)ZTN12WZ@-_L({a*rF=(C~rl8 z@cdB(hIl=3_H7(Q0`$0Jcn##Qw>!o|xohpRV>o%kn0MddalYM9p9^;@KCbWd_Q!b` zUS_O3&e3hu5>7!2H=)I0uI>cSvetMi+;#KQ^;F*In- zKF|~DD%B^RKnN49Z#cnCZS`99*H3Vh_Har#iHF`@z!EC1N-ceV^1ky`l=&@&opPp# z6NrBo;b><)<6Yc}_0kL9<#O&_`@_5ZwT1iCe)vA0vo!82TC|b{uo({cMt4`ge`OH4 z`q!R0!-xJ`^6396`P?V`qK20bGe75dH%vrnb8}{*v9Eb|aR--yJvDJ2; zD;9%BHfJ`n<8H&R7v<;~*RjRK>SM2S(|>I}_g}}WPQ1XpjxA@fe)Bqak5f^ur|cd7 z<87zxhQ?w|R|&|FjuM~PJ};Z+UHa^>k$e!-P) zzP|n!ZtXh~0>(?WQToYWI4pKFGV0&49scLe&n!GfpXsB8>CwM(o4B!%l<4hSwUkS? zKzZTL<#G{i)-(H8c;b9r{}tUkPJi)N+!^QTmwx4>-s4deei9$uh^Wmq0oWgJ;Wmna zi$x#alTJith$rIzdysIo{qNjK`iS2+Avq6B8!q4FQ=Z9~l1AOg49gF(rSvv)?5IP3 ziY+7yrl?qf^XD}fUDRKH?k1N6O@%)BW)2ZSIyUI(dgtG{mH&On zXm-T7vw1@={T*G^ulAwe`MQN?=-LFSv!f(gOX{Tl@s> zL@IB?>$ldo-^MGb+4={!dC31YYX%LbM$wzPYp(eJWoq4N&EO%F5WVR=Ex|flZ1&#t zr`C%L^=_;=|Ic!B=AvBf3f2yJL=~Z=x~@jZZw}ct6wDC8}_x ztjktGiy$QH2Xib1b8Lye*GEhCUn)h98*}WKe$hw69MiphwOL%H&-c|Da;dKSYKf@& z6<>_>GF|gSSC{JPep*xeaumi=4KOOQx>o2j{j@g8rO38o*~tfTvh0i|AQQ{ZTP-`u zv3o=QxS!S>Z!!M#(+2S>y`R69Zd(IE>_w&eVt*|a!P-7##z@eT+6CRNf|kpx5wrwI zRtmCu)C6b+*m-9MX!vMS-;8(O@RhI0W3B#OfR^0A*w+k0JX|YKfsfUqXWrx_eQ2O& z{r|m9Dk;Uvt(_gHRdeJz6e5K8@SrJW2W0p(rw7K*wO(&%*B(Sb@`_#i4y$cfu$B>U z*GGs5koD`q+BOcTT^*toc}V2I;o1#Y`eV2@1|RoiMrbV?$pi`}*ZrtQ-NyS^OV%Qs z!?Y`Q_(}}hTz@nI?W@+`j?mhAiMSQ-cdU_`%c^GbCcPw5OW+#);Ye*9*VII5ga5D9 zo|li+uFs6p+Ow|jh{8w(#cK`3<#F zj@<$?%ifY+Fy`}7N#2>yTlJ7QEj>uwi230+6-2lm&@1A!$baXC|F5|Y*8{ar#-TBI z?Q=3-dy;?F7dFx&qqoZ#s881LjiW~i-Z~iHt>K)#UEc=@-mbsX2rYV0_h_swL+RCx zwI2MCezLJP4_C!~6SNv+o=ZRz9??f7YJGzr6_pOTaPUQMCr1`-(+?zSFQ+{w4GcpT zPTM8&bUiLP;Yew*f0qT}+5RbUTw00bxt`D;Ny6~&&{sFnp1@3Q<+D`r>3PB$vKBSzCl)JT*n@3-?i+f)%h^e=J3F-$Av*Q#E|+vrR8KyTGYi*@%uUJXWeR|I}S|jr_ZT-GBS{(1wS0l^*&#N=JI~B=S z+h{5Ek~i9DO|@q|^t85GC|-ZGY^yc!cn&J{!%Ntqk86vr*{fH!)l!i?=a^**gA~g z8Q`;EtHsOJSija$i}Rk3PQpk0t|xUzCydaOdZ$iW%Px<9O4Jx1rU!jS^cQYa8;>Y1 zoHlC;E^dhY<}qEmA9>j$=x4kEkZ_`L-|YUq@bvJ}C~my|WGAf)F2XN&(puoHKtyNl z&F}#7XuUPfO26b>8EU0%qb~bf>B*6o{cC^itep+enhnuU4br0BX+v@20 zib37+3x=fALvzYdRGly0b=DX>vB=zEEhUZdztMGwbq9%7~Dq1%VJt@M}UoYhL_LWMRCSrLO1 zXZRCf?^g6biar%}4j)^D#yky0-w#{>Zt;-kkY3SbE$EjjXZDbnk=~&y{uCxMokl)W zb7jO;Rq-BB>BTx|*pKE}-4s7kZ24ONEke7~Xjkzu2tAMPwUcwmX{4W6y0l3eRW1B{ zNIW&2mK+;T&rMB^wbBh#W~G7aq_VFXyFhKVF_e7P~ z`t=(+tfCx}b{gr9kZE;&&N;04&t2I=)9J6uu@HSCZUt0ti=T>fS<a6 ze=T)SLtyuw%4)Y@DYE`hKdQ+Ylw70*s?AwmTPNspX)T^kN zDFfVix)r?zl3oqB4~?gfqNFDtPk0nL<64F`BW!6CD8tGq1r(Udx-D*yjm9X96b{`_mqwV z^;tbpxLb-rUum`gbd+8Wnz-7%C^M(xZ69l-gHEp6n&_Y(Z7ab@nVuZ$pv_+EkbW2= z?VwJ{8#B}BIH6O4N+5L2dI^nskOUB<#boh^=nL@G|DZnMVA^?ia)SYZ97rD zIz^V;>+NL5G*YGN@;Ae{#GJ#Z=6R$sG-_hzVP*`gI2<68Iy&tH2E9Y$k22kM`l8X7 z0EZiWn}ls9_&cQEj`$h$F|1KLz1kSnSZ}~vYMTbA>uewrAGof4O-laxyE0 zzO-!TUHOk9=crxiY(-z}@@QrV^`C7S7D8$MSV3<38h*`6X>+}XS!uCq%|nAvVJdYV z=7*exs~h0gE(Zrkg8Hh(^RA-O;&^(dAYoWMrK^=)UeFxrXA9e-)U(Pr48(3}rJC?= z$SDnzjqTX7{=?GfRBC6e7fCa@KUZt?MWwW>q7S1m)8%#I*M_O|7?posEvKhd+7p`= zQ;4FYhYo?FTt)jT+EmenLq{P0ug)?w$6Lsp_#Rst)2jBeYHl=>H8t7YU9!HOBA|V- z(C9ABF>)oHg)Zrm2NgRzHOFwQo-G5ksb~yxvecH-4m&+ldh}G}7+zASmG&zC_%s?| zrOQaC(NgS|X|zf9OmiqBoHK{zRJ`Tyo;ghR<3e=Z;2HBkgJzZ@=V=wCT#6Ph&2OHW zPKOX9!K}8^vB7v^N?K^Vq6a|j^w6pnmU`9eT2(^z4_k#EXd?9KnL;}?6*^{6CCm*? zr~>^UW~CcleLYD!Bxb=XRR7fcRbb4Xyfu-jGaN9}q{&jCsq%)+Rn8*C9k24A#yqgl z@7Rj$)DYW@ow}&a=0fZyjQaXT4}l&=d|;(I)gP~HkYQbfVYSes>oV9KPan^F92I|7 z@GPpCk0lpR?~@LTv2CQdHWX|!P0YoJ;4-vP}TDcsR2;!DF$QNKYO z191s^BPN=nC75Sc`VM~fUovhogzi)9-ipTE5k-~jK14OY-}edHaaQeVC`s?Hj zj;B6trH77BzW~#>)O-QDOwrh>l8(OT3zYq<`DM_4S>MCZ%;cYtKg1>ebW`C}2jZW8 zb7YH*cHKlDv{m%z6b-+r`Lv(ca0lH+#SW4j2bJCHH{4FIz^mJ7BFwVW$$Ra{=@Vy- z452oG5{P;yiqBY-AT$h~Bb`?DvOsb`E6GVfhl8peWSfeA{!E=OkzHti$M7_Y-O>oO zP5;)Qy|#3PYRfPg(X$x)G_o)1tXJk~joq2U>vtHx($1Oj^hb%%lyM&p8&>fw+?$oY z++>ZkQlz3Smx-IqOB0%j#g;wC@+-s`Y97YUz;)+eb68A zJi1iTUa*~M^hOo2q+uA-s61$@1CiIg_YDsr+mwRgm@F>Ym&Tx)wiGj0)JeD#Ps`(k z&P7;gr9;6Pa0qWFowK6D8_EiPu**Dr9$8#EXLve|D4v6MKObL#4)57~Ddp(kB z)j_wmdt|uVK`j*Hg?^79t2S9^w?4Z;>v~JtHAd*Rmd}DNUoH7#oT8{VDAs!XAyo57 z;D2DW^1$>?)w?jXLHq}xt7gg;d@k-Xrb+vZH1y?e)r;r!V*Dn3w@^2^F&WX4%)CHTla^)~6+5B7Xc&=9x4`+LkJ>v<3#cex+|W(hu_BDRUR}VoxVzq9FasD zJIh?X7gH~ZdbgDE!#)GE{!;3Abs|hTyGpj4cc*-hvfT@kk&_hHdW4n4xO#)cT*R-4 zQ?2x4N1Y(x*PghNGAyBjixt>S}725yL8m1#C?mR`E2pP8_N+|FI*D z>W|9i!W5(b;%RTWAB=cm){qehz2~4AJi{+<1pJ5Jm=O-zZ=scmDdJA1}uh7yNLfe!IZ8t&a_@;A5 z)N9x_`d*w)0yFQ$ZAgq?2`c`@QUUs&wp`3|``r%^Ymw`M^Tj$ktyqoR+I!@#;UD8n zuDO~!&UqS2lV=D$H1lbU^yF0Om9VxCsJ1=?oz3ZS&`R11ooCgwJzu;9k=h)1+j`@+ z=DTZQ?^{tqXGGL0t6xSs)W6HnoQiFug0+7GpDbp?5_E9F& zKJPOqd)ixqg>61xApIGRA55!#<+OXZwhfuvF>SwG_9$r2ezK*BPTbfG!TGda^#`6( z_$MzZJl9*&#}zeH->vR^@h|^X!TI6~sNQLnTMSZ-xz}5o^p&CueOg$ghc2Oq4%2ou z8?KFTxB-4dv45++4HfOJMuERkAXn3}{#&O19p8Q}+dnI(!bj0DBP2b%nSU03aMxC- z+~?qK2hp&VPK*skP7MNTX|S9T++j+{05cF{3&S7Nq(|}A#QOBy?h-Wq+eCkK{=aid zA!D(IWl1ZevK+Kpi~BF5&tyxFMq9;Ucd%WBD_iCEmd9_PQkfs`R88!CFfxDaKta7!ZnG_Ma-pCJudhgAgd(yUTt*COQSYRj@R z<8UoY)wYkD-jANhRcM3lVpAPxyuqVsW47zL6Sb!9N3t|}#uVu>b_dW43f0)=j!TZh z&6J6*ZQhe*p|b{}{Y!TM?TIJ++d$ivZpQ}&g!fUXmcD8ysD(l`^q<~|_`EE`M7Me* zMtM?C6D^;f=#D~AXu_wrKAYu5OBC9Gg3o4olOO){j8w6G-1aPA`dOhG${%zPs3bx0 z!W+-np5;%g6{@j4Fyk;#wZXIPolyt0&Ey>oIgu4Wr%d!UkUJ1BZbVHDU8(#aD~Pi0 zpii@cX}m%k=#3d)WrfgZCa+D`x~x$8*+ieB`UaGmBwDIz#ww?XH}aXd z)cKEO|J0jV|Dc;a?naBI3vxSEg*BKgoE=Fm6xxW%Vg+h%@*eK(mmNhjO!OpBG(Duy zMQ^D-hIX1rs*j<)CK5wq=%9(D5ixW|q4VA;FfE3DbDQuJ*cLM-i+~+ zvYSwuSuXkhXnZie(M0X;-{j$>3r0D51C3}(r||JS>Ni^0l>SOH+Up!NJ-aD+x2i{l z*~t`bqJn`X*(ucBM1frwWv9}xJ7{Hga~iEsH3fFvklm7&o4heow`aAY3cTwRU&5h+ zn-z|wzZOCcD z%8Vzo+fuEG1~lEC)t=r`XagM^Dd?(+@)a)uzpW&ClX@*g@ImVps-rhn2zs@f@Qj7m zo{lP1XOkwir;{dH=0 z%=OBkTPDid5a*de*6xIVm9~i+4rgajph8tP0P@}ybEx{M*PHe!WK6c+bXXzT)GlTBrneN5 z2xgn@Bpi5B;T3jcrWdLQ5Zt z8!4vM*g7r|)Jq{_Ui6_%6Un^jLmS-+8WW>0`Hhl-Mhp8=o3RS1CDWHWnMh3QOI=MQ z#`L8=CK6-%(f|{Q*?noSiDc~iQl>%|y-%$a$`kZ=$rplrxaVPe3u# zUks+R6X5^r+dG&l?iHpH`wXV96uRi$*Zs0(FnwpDO!w*R!Ss`ff>uqk452?w6t$|m z-w^VcELtvlyO+4Vhmx;}4urL!p%iW)p4p6nngF5xi@Zj`_9nAtMPAHMvP}~;M$crD zT_I!PWm2e#WZ`8}l!;_0GO3Y?WGFK6s$8@f?l}{ePX-eAoJlPNxxtii%A{5%Q^qNi z+9*^-xupy=T%k%@SKyVCN%iVL2lxXu7IUIpl1*q>wS! zvMKXE;kk_#X5+8kC{Z=pvT3}DWU^(`JtmSCX47;NNei=Swu!{-Y$`U9G%1_rD^x}E zf;@qOW=IW{G!7_-<||a^R_-#F_8E}&29|LyT~+7^y%-ooxio*K6g2G4qZg#Bpo-AG-)KAG?81{G?LDkP}(#Sp8<$cV_-(omnM=H zj-;;@y68Q%A}MDiT{Kbf;;!IbHqn|krO-=OmxB}=(A#}qRQ50V8@)XbU~p?Tlaz8 zfUcRmrU*X9(H|xnJn&`9IQ#~~D3?3%boMy%GttCueR9TAFB8q_*2kSQfl5udw0obN ziFCk3H9+^!WfR>Dc-b5K)wo9+V1V$f+kal ziRScf02FPaK``4rg`7q~Y_Y@fyMiMIBFh%0>13NHN-Hr*$L36@_ywv8dbT^$4C-Z~ zClz|!L?sFxRj88wgTKZ!gEp2JS|S6#@Si~kOmrxHYR*hI4JtL1zSwPc&MX>IW{6(J z7gsJSP^gNWxM*~d+eCXH>7rdGdaN6MOGc|J3@zOhx};Dw?LwekK>I3%S4~+M-U2$J zP>szu;slWUrU~N#XH)7T5v{T9nsWkkYrKix04k!52BInD+p~)4-NhnlEHyRoKz07I zxc))nAOAtJ(*8lR(u(PVTdAq@mc>;}-6(eec^183)9ZHf8wbBc+VDAR27C%ALwkhemMZA&IB0SZ>A&L%s@T#8(x_M4HMWcI~D=Ov!RjT#%FZTBF=KFF|o@Wt)c@A4>zkRK=_&|6VI| zD(IkzzV5jpr;_%q6Ul12*>h#iVhUexpcCLNp?4HAcJ?ZI-$XK!RrHC8BnD7TN5MMJ zXV9c&bYVRz756GT`!Wiy7Ntv6NWGk*6sofQe$SSi<0qz29XYG$tU{G^ ztXxDhHwmwj9#-gO6CF~>StC575v%CPRzb${TTLevs-({ux7hTV!K2|(PvxwpGY>$} zjS9aCXIe|PZK@!>-@a5^OG6Z@Bk8EMG|b?so>@zyP08U=2XfZZ;RlU!qGdgWKUA-! zE6~)31yxf22EyBHB77+Tk37 zO55ihkJ;DLYbNiAUzWCk-Zs$_%U;jfK<_EE*tT!kTR@+fycYekwEO8RgXgwo^z)?q z>59oLz%E=(KbZyHD?Ksg{xW&uwKkH+<6`Jy+u{~Mw2}N3syu)D)fEt>- z#+$OV8cH&GtvBJ1Z&C}B=l;mv0)M=;mjThiCvtS!XdrAZALl$k`As^;jB2kI-_3jA{8Ot=Oxys2TJa z-LH@wHr!d-W3<&^+Pr(VpvUM*6K$JZ#*fhf6FoCI2)wv`^=i)NJWdM@q;B_i&?*z% z#`~NdbihP6#t4dgR+Xa*_M167D9c2>GLO0KJ1OirVOCPxk$>mxq9!JyR+ik|)J>r( zIvVJk`y{M&z`x5>9j(X^!fm%*XX8+j$lAvLzr>U5WO~Kd)8}oOrc5& zgI|A*J~Pph(NeJeA(5=2=cFKgrcfP;?|hB^_>bbL@qL{vuPU7?sC=D56{?{RyY$O_ zo$?GG)osnpJwopFCXC9+&3%)i537QdGB!8&En5DXAfxqfQ~2u!lGY!mg9=qr<`hBm z-w<9UO;YF=6RpA~e4OZr!Mlz<^#nCHQNrk>K;7K+Ow8vK)bdTE3Te{`n)S9I!zH~- z^As|C{=4Khku0@$X}O8yXnB&>D^x>k7EQ=KNk1!8$1;TPlk*)_15TOv>Xy2_<2ImN z4Sh%l6tj{xqk})BpG{FQ=0hqx`HwMYs6-*T$C#CSh88PioM+C^N)t)Qb%xfMNP?_0 zwBAG#WSybvlWPAnPN8S0#$-y6b%wT>NW!W!v`wKJ+glThQQ>0>ZLobZaUsxCCNCqm zGWR2T*+6u=*D|293K@NPmU^F(M$}N==!LmwX*>|xUqzEgug(3K9#+gM+A?ob?kAM+ zo*`N~d|B?Nl=;4aE>B*T`xzCR=wz#9xu4T!g*H%TZhH1PI;)UzsqzKoejw%KeEdl6 z7c|yHS8DbEO%mh=Qx3@IX|>6e1M*i?aasy4rcV)iU7)FF1Xa@cIf9Ous6&LHK_3av zIEG!IJqp#~TlCY}7pU7=;TcELZ>Z}hf{eK68ycmM+t@n3p-Bo>*<|bZhBlh$;|2$E zFVb-nT?hJ>_)}3+Wvgvns$C*)6CG*oOuR(F3SIPW)nu;MWr{RWZgva&L53KG&U>F3 zE-20@=f;XXoO_v;8<1ucFs>7ZbV5K62;&Mtx1#y|4w{q@gAnQrG|}Pa&gcf2Z*#lAisY?or6-+23ihQBHO2 z?^JvTeUbYoT{RHd3z=@y@h`1);KK?T@82BU{)&{Vrtm&}@*KR`ZNiZ?W3nUoq(Vl) zNd8ixD%%swhUG=_B?F;_IY1FtMU8Q8jN*8Os^D)%=S6XD7XJ^OAUE+S{(Y9R8d7^GLPAlIQ(xxm4x4&5&p`miN*%I@|^6vW$^rfn(`4nC7CEj3tMoIx1dUDgRQ+K$C)Sr z>!&5(Fwv{HK1t&lK8EDrv4SWNNH&6|IEALMw?LpiIIyLcs zs%_g>z8TSxkD9#Xv}j95zHK14?Tsb^t#(nm!FImMCXbFBpiqtNR#~*A6E`qh~bBDfytAIa|rJ> z(M((~58*=!;TmyqcemdVzG*VWLk;Ei4W+_LnvQiplmlZ8w6$PF{!nhIP!%PYiDa)v z25&VS)KIQ4k#ATKWimAuo^ebV#svw6*jW}?mE4S+_Qs2sCp1kYEDhZ6{@68b4B#PFr#3z>ZkGx_+@{?&QP+0HAODi})pn2a^$>9oB(T=GNsFDi|p1Lqy z#BD~3q_KV%a~Fk-xxSbS6_OL`d-?c-!v+s;+CKuSGkTg9K5NRGW#{Dq0+*jvS4nMjVkRs4;K z$WjQYokcmnpJhzG&A1CH_w;m_R zI8CnLZ4(3;-MxZ$DP+8TT*3Pks2^tK6Gg z&?Ksd9NVjLSO^Wovf-Sj|NN|xWYvDPY!YeuD=5vBk$*j z@1U5G)m)65B~h9mo;Y$7?=jI=^YQ-~6aT4rFDZ0DA-U{pHd5zW6QvDqJ#sUjR%kJG z#G>EI?WY^%l7ZY?d9?{k)^r-Vl`ok{_Jar5<315J_P7W5@!3YfW!2sNw(;3w1ATWt zu6_COxdz&i*K_29j6X%MOqLHfgk5R3gLDh-tuvM*jgPHoVh0~qsE!`1#8oPvGm%W~9emY9wTkChXw+s$1ipiv3f0m2%A=MYJflQ-8>n*C z_N<*es7z2DEk?PWJW2UL!>*mUlvdD~+B^Aig^cQV@~0+}>UZ)56G`O(f zz(nFWpX3oH5*Pmzk5s6VUcpRzif0)-^?}J#Ty7${Z-0u{n@Bc;r?}H%wHFz-?cv^w z#csp4Jv`h*a;LwCN18}X+r#&mNKAX0?=z8@_B0opNKAW%OBAXkoR{etUT2~Vg&qUK zUR3%2TKf{Ptg7zcz1KPC9T;DbK_=xDWFFO=2go^b#!LnUr4nZxN)kOFh?1J3B4S!l zHdr=TnWRjX?TAG$nG+2J0Sz2jkcdd1f!~cHIcc1$__xi~1UBA87UTe?iy!$WMEgDA2fX1|!s$?Vm~NJmGQ$r-Q7gUrfp zBS+*R`sfjW7r~x*e5qs8m!$SDfY_)CM!WV`=xDzq5Evu9=|tbj>-Dr>G50Av5|BXVR6O* z>0`3wk$T44@+`A*T}(pLcV*Nj!;Q-b+|!pSCi|#Av6l_T=gtlC-^?~+?N??r$lpzN zY3&+h_}Cb3r{xnq2xyRYW|g)r6S_`lkY1+l#+qQIQMNaAy5HI=wNZwe%F*S)3O%CDJi7NhY}vJd5tw^)_>p+S3bPvn3CQIA$d~C*%&3ttlrqW`|*#lK5)I3Hb@L&3K2_ z_Vkl-*E5FG3jtjxoRpWD8Po7{`Tet`Gxjh)m;W*u?O}c{e_>|qVd|gD-wY-1`F<`P z&rwGF6>Po~U&vQqAXXw$2F(foLbiXAbvzJH%eMc)Y%j6S*0d=dPD=-~65AJ>G;vx6 zn7ViH*U>Mf)6^ZS(!`g#j4_oHD)wZYk;6^4U>UKQCVS$sL~%wgFGEMj+ncOz zvxcmv$=<*JlZ-aGkXZ@d^?=V_k%vrO=lj3N_(A%-MqWxpS@PEz=jA?=y?p=o85iWn z*Es^VT4Cfb@({D{Woi$+y;T09Gc6I%dtJ=9B$Mh5H<>Z{k-y12W|iW{%0DtL%LY^D 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 G*8c^Ov1c^^ delta 55706 zcmaI92V9l)`~QDk_kqJ<2?y}76%g>qK?V2TxJ6W^TQj#F0-Oj39JmLO+|IJ4mSsbY zY!4$dOB$}}YqGS%K0!oQat77}TRL%Q%^=JC5W{D_2LGa;i3*)THSbwka8S)(mUbSB zPSfZmB!`6U!LZL2v)h+AeGW_g9B`-?FE%z zJ4B$OFikR(ko1Kkkc#?%eVqv9XT+y3s1LaYAV6^k@sy~BtC2*qhC4g{PdX8yUPeN8 zFEgc@Pc0v$2yus|S!feV>n*jixI0PmQVSH+&zc%w`Xs?8nKXB2JpCO3 zt~ejtwm@Hty9?OY-4#-`fV&%9WDCy^u=#A5(dHAx=nkJyFGr}i%W3zrdk@(bY9))^ zs^YkNh|`pJ}JEz%h(HH0hTrpsZvYBIf=wOxv)(o_X4 zrZEd*veAz%5ZLNAyh07Hl-sWyt#eN$?55Vw}y(;uh9$#N7p3HxQBylo|`cmc{H9m z-PoLc#(hR4Y@S5@_n zRo{zB*UZ=&GeAn~ej4>j_9^-&nhHb6c^S0s5XPhG$_8anj8gvme<|Hv4jkWlH=~LZ zw#Or%%I)9y0jBLv25i_p)CZ4GAO9l=Wvuz|#m~H?h&8U4o7BAj(gCQdULNj+$LZIH zYnb54_0K_`ukVHGCA^s&DJ}j$Qe=@c5%o%n3i7_;7>>fZyVOj2GXh~2znPIPVbq9n zN8YTwn!^}67=u1EMk5N8F<4ZBWME7#znOzv`X7A(((+b4{lc4K#xDZSHnK#TD>Ix%e8}EXqi1XQn+o+`#1K7N`t$%p^-={ z9m?c|k$IrzpPlS2CTF{jYR=&_{Xynyti%(^&yypV#I?93bom7shTUv zH#|R3D;^|;$p>uzNLP!8#yKkyDg$KBT$Zm!4u)>;n!+0F9iPq2V*ZFa23SX@> z6S3W2XykW;MdfezPxT28=(L{5Lj*@IAu&PZg0 zBytvsw2rbja-W04@bh(_Z%En2;i19yV53x_QgX5fqGW;gKzjg6cAu?fC{oIjl)hAv znxH%`c7)pP_EarAfJl`+#2%9B-RU^CXi!4EcuH!|b8R_Zc(KGe&4tlaIxXnuj|=Bam{qJz`sEB-tZx z);!7{g_~{$9*(*MOh|g8iXP@}YMK)#E z^r3c6Yx*Y?WJxN`mYUqKJ|_CV;OFd(Kqbrd?RHM@d0hgbZDj?7KW$NEFZ~MOiKGe>B}cgj*!t3T^d*r)+4PsEaGW7IwoD=$mS@S=^)- zgm7%noA$=+Os3Xp)I=;+H0JmqlmPSJj#}SV1eKFYl=VX)+#CZ#)-?Tc2zzxkb|l_Z zi-zC+KZSQ|7S!)nsZOBk0p)pU5u4khw+>|oTlD^++zgMIq1-c6=BLAbRQkzMIuhYZ zz4RACd7zgU5~@kh2&>uujkPWzj9=2&TR-pMj(9|db3%X>0kqQbh~oCv2ZVD|w(8Tu zc^~`ep%KWyNADQHNo>={MQ~iI4WY~2(le!#MLM5E_qfH^y#__VQra@Y^z_vqK@9fQ zk411)urGpy289IOa4bfnxx46BBKW>&Klq}dgDn>KC#Yh0f!iNG!EA8`==&qNCLmCv z1-SA;0-TNXVNo0#E>S|oOoiAR!7w#M(<`GmAutHamb<cBl11;obbvyJCO;84h zUettLi4hXK@y+0&UUn}PVcM+-5&EkVAwvJM37_Oh{XkQ0&r$k!O?fqnP#nke{9=%R zzsuL^j?jOJ<9+_IU~>6cecVxXd*eC25jUwj)|%s)o9I8Lak0HA0=VNKLYuncLz+6{ z^}=+H3rv7d%hPDUrZ*gG^quKEiJR&Fq;t>ML})7JqfjTM1D)g0UCt!}2- zOz_YkcDAmI>%~uK67ju0sB)VAYajj<0cl|j=Ki8kJw-k3`N>`|HU}?Pv>e1W++Kfm5QlNky3>P@a%e9^!MKqvlpMtx}fMMw$~7(&})y zd+7HK;S|o$j}77E)SF59xq{JDeI-%N$B98@m8Mf^{>Ny#n!1>wJl}`=*VT;T0p2L| zr}>0@}7jE_@exHV_$-ebAD zZ8!oXS=?Fr;IW**BlJ0AIlSvgc!qlUT2YcwaFX52osFmChNjvl50=}@og;yKT&+WV zoVnt(QHaf%r@uUw9npF4a34~p5$b$U%cE!*pBs)^{qk5Ih~Dcwj_2|@eeXE_%unoi zYLq>|U7&9m&&?W*Mg%H<2E~To82#n(oWo=F#uH$s$LZ}Su*+X8q@ODet=>qV1%HpS zfgc%-zw%ax8mYL)BY3D6Mx2*(f;e#mb+}b7@R zCk|B0s}tKRs~h_QE4e0>A4VvP^K&sA(-F(h8p1Fgi~BiefRZtOXX2@LZ^~pg*2JrB z$s~@k@hpAo433SOExCPwbWUQ0HB45~3w^M!pQE3g!C~ohC8hGW5TNKMc)M@oxW519 zY{h!xnb^Cz_3bk`)>DYs>nz-Gkh@C~vle|Q0S&jsd={O#>8CQYsw29YTd0PXEkaxw zQeyl4i#|i};$nC$E|E{CUnGU%DyFC(?h{JiMh?z$DC~aD<1jopcrTuf zy==68|7=cVk6u3;Q=~%weKyC%R3MzYH->1@_6+lQWE@~E?n=GQ9Byq@N1>(qv^m@* z&}@AFYneX4DS`+-%IE zv$wgM4V0q4BOUiNoa&s`(Ac-fxz+F*8ePA`&AIKCNh4_CWycU3cTi}Eqe#MP-W;jB z6dWsWZu7z;$PukybmQ2vT#qc|CU|r*9(j1gEmz4o%;eNnlywjl-n@!3t}#}w!X1?U zcp>-T75a~b=#nZu=`L>XT8ZdbMm|Dethf5Yy-KC(#ALOWVpa7Dcetzc6?efzuGZTW z@oZkB-&dqIHy;#nT8p(tDjy>iw{nxUX*c&e_y#xvU43l6+i*n&L$zK{E#|nO4MuPr zEHU8R8}u>7oX#8d^~Ky`a+T;(xqn zmiVrbvZ+>F1NL_{$2`AB--pN!RSyDhhNk67V-4G>e^J7bsLs_A)M|yEGLM~6Qba#X z>5J0L&eZ@nmJjS)oaJ@1=kXX0sD)pdL1MK2U*t_EZ|ADEl`Bru&&T~1c&mL zx+@E?)N)(hcMB5vNWGxRLt#(}cECwiFYglOpa`xl|FX6dIE@nqhn zcUlayAEZ|<=Hnh6$u}G~a0m(u^|FO{xwpd?{UsNAKIkFYSBark&4l(>OHWwQ1A}jk zGgT6of6;09HQcX8;DVtjYzPAR{Cjj$C#(xZ<)5>Dyi{#QPL*<(fE|)+xnYp>=p`KK zP)5iiIR@ARV402}F=voIcnQZwnkS-&&>&JF!*cAD@6-EucqQ-Bk9oL1->=&%c(wHbWbb}Z-&Mhhtsa8AX)y9dty6<+ z^Hz!Bdl;Trx&m$UP<(dpR)~qVNB^aQo5lS5hUex4#w{OuAia`9Q}-eUm0v_JW2`kU zza-u5egvKli~CX0xdO|75>JbJpI%tWN#Tzf%EwJ5?(RgnUw^EU`>2g+B`@u=3tG27 zY-eZyjwyj~6a>os%2;y3j#=IJiT())d!YMCJVF~;8@COzH!6Kfe{3m7*q#zqqtd7K z<4d`jM}lhYGF}vUtK{JgdUZ%Uq)%LqjYt>$ndR6~KcoM$obQOP zLqf(an2~xd3g*PhW_91I7p~xE(fKW^cp?wd*Hq#7*ua@Cj0a7X({^~Y*-)GH?G8FdQm^Kk~i>6`m|LXZ+#g7 zDlX|yuHqPeMc)T6epP>G6`xEz1da1Gi9bp!{Zl&Ai3w#wfn7FHvq zet9)_iWGOKj}ZZva<5B#U(Bi3^xkW@4v=`kA%-Bk$1PSjPjAhX>cSrIC{dNKfIoYb^WhGnCX^Tu|d&_4du;(nR%7@ z7)rh62A-F89HkF*weoep0|yoyt<)E4*e_`@F(NXV8{PDMTYrB87h$MnY(x(o(x+|2 z;pvdxaT8XDL;CzpJQI)en|LE0cU7YyyXYIM`K55x{*hj|iZHsek+(SC)u-Hzdl2bd zoV)$3El+9A2hq3arDyKu<__sZT<`3GS4+EADg{SZ>c8I2Z}aQ=%QYA)uj`-H@T6o3 zi5FZFQr#GJMH=wJIbL%`8ZoVidB;6C@;#&9e-DpVi3iwJ6t#!bT$IeH(kisTC6nhi$*IAK_T5As8GgDS2~6j z=DQuDp34|eyEmLStY>WDRJBPr{AG(fPqw(Q&Vg3b=bb**AR;h5H8xoYi~aWd5T#t+t|6h z5x6b{yKlH}CIt6S;vXs}gf!SfW2cPRm*CyjdGODA;C9?t{j6th=V*RSpShh|ahJNS+tFIMk$vcXjK*K)82RyEcN3Q1l6VH}D^02zRo!9Y@;D3oWS+j@- z=5QOsXPqRO(nYg8tkO1g7c}P-^e%R>mNF@d=J6_%qG;Y_l8WZ7VwFjLS|hJADIB)Z z=r(oFVIf>S8QbvN@@Q$Zs932jZu3ly)Rst!hU$hx%HaMR9>zT+CY9#uk3x78(5-$Us76e!AqB*_vE_<-=^VTc(aAbmv{qmy?BD~m&fNmcMD#ztMhOJG1 zVGqy3MY3}*H}Uapn!<^=)JRKz1n(YyszSX2Yya1;lMZ-V%iEQ0Sg z2>3P<-)7?5dog?`LBKaid{e}?PJAyJz5)8Bz1%olCErSvzm`H7xr7SC5k-%Fgfk6g zk|-Z3gYqi~Nl&kU5_|mm?;o)8QRlP94s1_XkHV|RS|NMcBsav zNQEY)yx11_ zGu%t>{t~wio;Zo@a?oj2G-esDEF$!S`*B4Wsh>rZ?oo)+vMoB^DH%nBkh}pg0Njih zr=Zi5{L4C^B0hK_~jd+B@_Z&q69%@1=wPSIz}W1argVIJv` zgyn+GX1!s3Usg01l5yUF8C71|u-+|J>)kt|Z3%5sg=oasxZJJ5c)9G0*dP2m_L6_c ze)m>v(KN&!uAs3_Ht+%NbT}j;-dCr# zAbUW#yNy2a1+1$$R=mJbzH-70a9N87>QBFb(a~1__yx}JRR>?Y9b2B}FJj{wtq*z; z^Tngjd67FO+&;r5$iQEZG+=r|FcB2D(~nB<_4Fthi^1nRpJiQUYX=C`nsgfUJ$#seZ$<>d9J+Q$ak!ku@ZFHqNI$1pLv z)_rgch8u;8I?faPyCHu!?q~em7xd-FdBjL*P)usshxWy4@Ev+WE1iZJ>4!o zuo>+V?(UATj%{ua+NZ$~NXY*-1kK;!c6jYE_8so#SSW4j3N=#Doc)nbn0ukV{~dH$ zwEp=!+``t7s@~{bZr-UU@*r2(?GY?tZsiL@5=g!`KRPqNBe7HNGzy5;=e*0|+*x1o zE^g|2=`X#@<=nfj`w9Na!hP!EKj1Gc&H75(TInK`8CLvqZ+E|cc@ViX>JmQU!~Y%f z=>Hk=#wYxohIb@~Kj(Mll~>*B^W4FU`{>BbS@-QX?B|m?02!36Lw;K621v)Y5Lz-2 ze$GJ<4d0)LCR{Wy^Z%=f5X}&!(R*FwFzZmmJ^CWXfJ-mCh=chs{by+W!nbKlB(o)% z21hjTaN$7+-SsDaE_N6aaHSYQEoGTPF%2|a54pr660+bKpp|Y!VqV*9v)s|>MzT3a zz&q|A43pxK`ie`kSm}>m;uil}#J;$MceZ#Fdl~D>AidvZ?)@+IrpvgDi>`b4GJh`b z8<$<-DUDJjb-TA(S@CM|w=4W;*eGNL8;rRwTeVsg#GS1l_zf4*Ir?Y6al78R2w=Po z%!BLydK;Jz|Ax1LFWh=HVy0H0kNBO3@@W0u-*H2nt-ts?4113L)$eH5F}n2++;V5@ z?f&58jIl@u78>99NHJ{gao|9FBy*1xY8gf};U(^Pc!ql8r~s4U=kD;|z7zHP{=mz_ zY$$DbYk*}Ubt;CUQ7?Fg7lhhe8K#dNdFU7az!aIJ$6V#XX_FBGjp6T;+K7stUnNHk zx%K`cS1a9&LRh@qcOZlr+Z&NTBF4a2h;X9x?81Ue=FZL(}xD`{5d2vP4Z+8Tz`>X|A#z zlAz{1j|AN_^ecbkE_SBAwbxSOV@zz%>-Gk6pccK1^RZC-cT{9nTJU1FFW7^R9;#JBK{&65qX?nim<4$0@vTiu$8CF*ua=%CaeUmx(%MvxPjRrhR>_pWC)C$P zc3)U;X)ujCQSJtEV0O}Cyf8()GO34FJP$$3q>!332}?Vrv?`vjKj5oPh* z0!m{=mdW-M2sSzvhZ;IZ;OW@xy*^b;k*;Hy}GTFlQlYUxs za5+M{J(7&eg`rlV|K+Ep1XfD?PJL-7sKzQ^>s5~6i(blWG6*j?*g zL$w_oTz4i^EB2DD#IOkMG78fpQX7Xal6FLDX$dm0Ldd-V6;v00e%4aFukpeNEphnE zE;vR1DH2uKs5g$%I`~L%t9z3^GD>qBW4l^^GfGS3yY(NVvFaRob-%}{-?E8hsS+s+MqDCwZf;XQma;Gt?I6)q4dZps*RTD`zVsf zHL$z6KA??u7|C#3t&M2gwbSmwgLlpc5MzL~#OOedVjauWqs_IL^$8^5ezNY) zj@ma;$041yR;His>8x$$r}V~Mv}gPdAXutzki~gWKh;Hh*7uNbn8p2!UfWgck9qNV zS1lTkYhAUNM70UYly@o_iRJ9pFKeC3|j-^c3StxxWTF59iI z>ZYajSpF$dvvTZ&@w~nb?olO0Gv-b!mL=pzd^h&(-SEp9MIYj&0P><{19ArS!}DwK zj}!FYyJef4;O2hc3P1T0C{HE;LRy(~L zV~77!8IAGz?4neQ*oN4kN{X$jCH{gXT|ZUxi9)Gwj^P(^O4X`L;65lk|`gGuWp_P zc~1G;m_1c72-#g@newEiW`x_0aVZGq4?2KmcIpPDe9e0drN8% z=n$G0zaPrn3HQS*GMlGU)#BZm@zi3*uTA3V>FK{VvC?H^W~Ct;C9^M^b%OjkQL_AG z($kO~GGBuB{FI}R|75%aIV#vEDxQ9KzmIedF8B=6Gq&&oGWZXA#X*w?_Q?#TS$#5_ zhtdb`%kW>8mf4)?k*3#>+}%wjgC)KGhTPd(Hlku}BcCYT*f$lQ zH{1FQXG&N&Jq)tFxC=Z1!{h1VK>P3!73BzNr_r8B8CI9(owc^5&)rRix25Zq%@OqB zxRFSDM|}ElFG^n92PdP4R!hx{S`NclVY0_$Huoam+3km0=<1*rnHG8i-GP@lcXmb! zMoWxJ=yB8ipGAEU@)fi+(||>T;Q#v)Pn#ANdQW+ET$Bl~zuSz0^d6HBd0)Fxh%n>M zad2 zA_vBHW=IsBX-2Y-2VQ@MXEwJ|QiL0`b&!&$9Sh-ZmnD&ndPu#kbR=&ibK14sS-w=0AX1|389cQRvTTFYY`T)CD`aSYGHD+Cm!sJ+@=+jGQ<`a9O&|GbN~RhbyCJQ#QqA41 z%BQz7u3usJq*GpbMOH(WVh^lT*HMyQ=aMP+T1Oc%2`W~7!6bA+QtoPGa|mv9jT)Hw z7#SlfUTGwQIwrj~%T8UI?aK1l>1@IyfL9WpOvW-3asckPB431j5OdT{FE>Lr*2}O~ zxfNq7r=qp=JduvlsaXyF=e88WC#zEA^D7H)^PdHuqjr&ZDfwKFSy`bp=&s|C>4BI* z9{LJ)%}VL>Pi9$ZnX1iw!?t4hbRTgFK8x3VfqFbU>?=rrHF@4uQfeGe`wK6kRobeV zU0(PH+)owp2rE6MY{L+&mR72b@P*Hka9P-ntqd8FPA5~XNLk!Wp3l`BeNH9XQ^{S3 z%=Fzxv1=ogdz|t=ucp)E%I%Fsiz!sevBSfWP@a+llx(5o;^8syzusNC=6Guv6F*@| zV_MruX3gc6GN-0`dW+Xr(*!z|h>Yp+2eL2iE^>K~cqFl>+aH*s>+X^c+FYCrpKP_{ zbi_)})HWs^K8BSPX{9HWeS91hu+n#Mr_&0omg%%v)=aZ2Bb^;a9ok}n@y3v}&_pEwlSZ3_hLoGI6Hyw{&-?Vf(7PqWRg^&k8Poq4u^DsL3k_qtQ8I3L}u{4J$gCY zQpu7YBiqubk{+n{q4+@~9n`l~Cgex8`H)?wPlVjoapp*mgIX)aGXrPBt1d-kul_}l z^%>%Jj}y5gZ87Akb>ctHDG6mjVy?$8MK<>btwf=f1*W&FbQH94{0_*qb7TqrBJOF7 zfKHv$(Uy;>R{TQmj-Pu!BGN-1^oN!1QnDCZA1iIal5V9FXd)~9fISS(7E1nr$S`Pbv`}Xw?;n|4@msFQ(^(>8$BVpU zVn2Djth{2f#r?omkts_>x@L;}HtK%#->8J$kgb#VLHeks-mbP7uc?mM-0A+2R@&EA zYTTsBlL)g=X(z>G>chuq;hsYyvn!5ak+M@WwbgAMUx#K1v8SUp>9OxNwbCB73;PQu z&`QVEti2xw#7YV9aZoA@h=UHHW=8nieXR7?1hLh2#A>kK=hR-v*x^r49PYt1FH{+P ztd_`H<^C2$u~LM}GGwr1mZID_O1`HSzC+5?J*0|qLKW*LCEKb6u|Ua|@JS{g6fv2u z%ECa^KGLn{RdK(-CKINyfB9hyiljv^qj7p7S~~T>(ya_PcARtCkAlomG8lWScjNva+zrqZ@r@M^IJ2B9bDI-k=8den)>$*yg*ZqW|oLMUi%)8U- z5Vv>XukcBZ`x|{Pg=;8~6c@Wy>`JZlOIMK|DTS4cM)Om&u{4cqf2ld&(G2ivL&=fRG1TR{cN`)0Jr*^w2h)GOc)3-lSDTd`xT$gh`) zysBhSmblL=_isv`R`NSYsoyGOIfd8%t6in&a=yR4GTVmLj>6RlN`#&ZvTj3!RyNtl z-5zK;PLbGOjumOc5NinkwYLnn7~3w)lqY@fL);I2Woxj*Z!g@R;jqE9&R@>9x2IN} zH5J45+{#&yeFvfqJZ7SqIE^+W{eibc{?$h!&-WGgaV3qUZ%^)g$xHv0!TFNMk-gI@ zcNU~7bEmIV=}RRS`=wc=g`PqSy+Ttl8a%N9&nS2v(f*zEQ6$mHYDB0*|UH442>`|iIAeL6>4G{!0hyNeC> zA8VJd$Uh(@vs1`^Wvv*QhRm)Yi5_+-`}q>tHeFGD-`6GyJ?Wc>xNTH_Z}PjQGQNR~ zudpRshT(TNC*k_^M%lR)PY!I9EnN@_?G=vjD2NA)v&_YEQsX^W&Cz7|Bze0a`}vA2 z@Dn-9-<55pjYVx*q|@-k4sc&oR{hr=GJ39V6#0*GUr=&qPw{y~$+=24QSy9ASH#W6 zoyZU=OD`mSn%+jQyrS0o=jUdqVhw?Ro|cuJ6^Bb$s>Y&_qK= zGsaETADpbU@XXBCXulbx&v-ZJ8AY|W`4e1tum7G&7q`sIw$K@a=)em3(d1+Cgn!kv zW5rawxhA~pMYi;1N1-%D)wFYhP((A))l$LG#h`;Gy_AvciMG;9Cf?|i9PL9#O7|UN+5WWNponI(r)CGzy^3mW+h?x^J#6S~Pt4v3deYP# z4Xw>?L|>cq7044r5%>c^Qnnu|cVq|C^qcfhb_kUys;1Xx@5>IQ%cib<&yCq(WJ@;U zeTwWGQ!hm|G<&YlE=AR}cJ`B?Rm~-24UL`sTsHnfiPIoyr$`UIV&cB&_TG_{)AV$kQ0lAMx9Do0+iB@cAx}4zVJ!yBF<@Us z_h7J`01Y*DyE0B?M^lAKkAh<8fT9b&l6@>aZ<1smORt+G1&yWSCP^h?>3c=zeO)M8 zEctuzdYb6G?1!aq+VTx+$R}?Lla&OXk(8QbcQ+5;jQqeLDOQtxy(Umlh z@ahRdLljj-#LgDVR#a>IXLEgI9F1||&!?cdZI0UO*>QA-sk~OpIk>hlq8x0LjJY34W6i+B${Og-Rb$!H;IbPpnd1YqH5AlybWR%W zFm>amPt9&a_q3H9s)@sd+Tjf?@~@`;4#6G@tEo0*GSZ)DQuvB4er@R~lg1!qJ8X@O zWGW+szQ(&mNp#6Xp>-V$dTE@{k*K(wI&{O-$0N zgyI#|lE;5*GX9cMHxny67w2@Kw@n({Vrq6L`czRh9UCn~_$jE=w?OGSDSCtYEym`9 z9#T|Kudf#RpqGR+CSE7{Op#HgPV|*YD?O-hC%Ryw)UXp>G)ZdMiLNNBvURy*2|`|1 zRB0P}$5N1YZ^FMS+t2G4_;jWald`Mhy*pEsqDtH3>eV@&shO!G=(>>0)P+=gR_An~ zcBZm^Q@nRq>SiiG-n2TWD`l9vuL?HhbfaOW?n*%|DBmDD5E6`Lc}P(`hBLMwbkL+F zy>{mGpyP^+cIrv}`be==J9+S<+=L;5l{9wTQBXTYRrJbwoKNThgOv5^N&6HTqogP8 zH%UfGPda3hv|&$r!6a$Jp7gp&()T^7UQw0pUe`l8o}Tos!b;nI*P}T-=_6A)9?jj0 z&YHUUXzpJ0t*Hy!xWK13{bo`jnzT3lZH8Qq=I%|_p;DzPTOxFQsF9*dTQ}(XP`E)f z5AWdmdMM2ZN=5C0@rmhBlWI|zess~Kn5j$|q<#ryG#dyXhv1*lq#1NXkulgZ=tD)a zs6CaFL7ys;9ndqNuWk$3pFCF-8soA*{biC&!~S%`B$+_{iAPI@^)_kX{$w*r8n{0N zE2_1P8&GWNPwhH7gRMbQP{lWQbo;dr(F8O=6;UNM4FdC$fO z8Zkk#ucTk```3Z=t)g0NykVz3Hd6rlB4yUFj9Smq2WLQk6Xj$7z*iDXe_Yd^#*cRXEHRB7uy z#23W)FjjOeFuEsDBa?;=dC@X~946%r*_kte;!K*{D=2p&<(o9GSCA)n5^XYZMem^8 z$#m4DTF@Qzw@FtUy=a+2-t&zNeS>!9Orb_54e8UG?j(mvWBN1(HC0q;yECITO{L~0 z&C6&EN;7FFitU+3-HeD>Vx#d>finh?Wh>K6idi5TR$`Dg&z(u_7pd&&soqSpDc__= z6+LTGsiMymRnkkT5^`^;kxEq1xxm?U)TG00({tx|XyOth(dT+~$(>7+%Z#8uE?{!g zaz$0-#6_cH(XNe}kIpX#Mu6-Fw(6kS(TLwm8&E~F!sqN|~7bZ;S@QB-U5 zkE{iG0+x!h))o)Ei+Y)~cV2CF5tW$qI;fcT8bs5|r)HPXm&+ucG1b(d0M!S|lLqF_qgYe7e9|ybvZ8vMtQ_;H)pE5SRoP^bnNJ;*veG7t%zWx; zCiBp^J1q-nfT??GT%Ujilw~BtvWhRH(I)Ney)$PKO)*HVqKm18?q8xsdwQ;r(pOO& z?0G2-HR)_mq1Q}0g!`FNI;p6Z4rTx7TS{ZAR6JWrP-|L3Q%qVN)EHD~5PcYg%V^r9 zsFL37CiIx1dKP&x6$Sb1LW*MMprv2x|PR_m*9IIbBh@DjYP0&aD@1C3S3b z6m&^ZJ#>8n%IT^iW4ZQFqYXyLa(t`rp;(i?@DXaaL6&(W<7a6M?4^`76xeT6ZUr4T z>8rk@b1Uh{MhRI%SNo32T}G*!40;E;<#blj1z%a&tLTDB(vwy6lS#4%P*q37dhh+H z(n`9z37N_|FDv^>a@9zp%hi^86}3}TWxICA7Wcn#x`R$4KqoySWUSm zNnzH|L?a$u%$%OPhK`y8hclk*$y52BqEiYjfNcYWKw zi9R=VM*?!RYWl{chgYu6t)`2Lmf4o|gsBs&bq~dvx@E0{=^kof>SPkenj|LdUfOLC&+%Y~dmp`MqU?9?qYo8T(WarBa_^&EdsWL&Azqg6 zqMuE=7iY9x6!3`XDrtWhZZ^qjQlAyUbU!_$$QYIn(8EutRMZH1koGH*!-gkEdyt+n zls4bKt?5CkH)+Sz2lzocY100w!O(SkvLTsAb04BwgVgQbZrWqgKh5!BE1fjy@;ISx zPpNqHwf)uH-Bf5&zpS@C_C3`0X;D^Ehtc)9d#SHU)aH2ZBQ#b~6&(%wF!xdV!qk0{ z{#ovR(heB$=5+if_bKXR(x5HB<~~Dv6QdEx_%Xu$S;xnSFCovzd&~inURIpU&s!0#@7aCY6 zA*<=dz5#i!&}BuH^cw!Y@T(N|tmt4-(V?$;Xu3j7mT6P7U!@DCG8}gORk~`@^05*z z`>;f;qNgPyT~$<1Vmn_Y$ID8m`u8oOYUZXTcwREb7J?}LtF?3YFEi&&2c^)${ zx^rCK8`S9)Nv4`y;@G30v7QDc#`8Ng^bI2msna{O<}D$^B)v;DiVU0oE^RkSrrNvo zkV#_mPtaqEYH9t_l)MuZd`zXu(uMC+zqbvNN}QsxZ+i@stD#eLQYkBG3mW(o1s^wb zQkYY;;e?P;nA4;yl6#Dfd8g?4_6+{j0ah zM(Q*@Z7OAxb(#*DB-^Uf^sJ&<+nbZSBg2;!Rogz9+!yqwsq36KIPW7mV-Wq*FAH=< zkx}e3H0h*NqL%W<_RTv(OF*c96-^zRm-jKfpp;d#b;0<&PpH>>M$jcAv+_Qr+3y?l z-PEkS&uEiLC)#A?eNG1zRZ~{p_3SU`iX!8(?JO04Ao1jUJTvbsEjHO2lRKDYjl;)AG|om2`fd&^eR3L<&v+NOZ}xuzsGem1_ce_@ zBRbyDx713}1>ZK!7x;Wf9Zbs0X^kIfcUE-X_w-1iZbm#0X6)*`@8}@| zX?8Kw5A>{}N@}z5ey<bfBE^19zX_iTuMU6ovij0=MMoUbRmc2$EMMleBqoqbX)v(uS(@ol&_ZQjDse+Qd zi0L2tR*})Lo`0y{c~Kf|N&Kuy(w58>Um7}B-p`2|H~LD*XiE#n{EOBpsrUi(bL!WUN|o)c;Um+$J>1#E_lKX!v+_Vi)f7}YBge+)6xGs- zm0#r9*y|gKSW6>2eg(R!sG4q!nVN0q3E!$j)k0wB>5A%UY#Dw5!DWgnDKh%6JUg$v zEo2ybHYqe-dBGT~fA!uHF^sPp$@o6E&XOO-Uf+qbmPYmK;uprVzc=Vglr6t8A5moN z;T`;rBBPxg{Fx%-{hNcce~@_C-SrR3ckn@viKAzyPCW9%OgDRv0F&nT*-Y54JOG%x?jBg#tJ z3XI|Pm^?xipjh5wQgm1_HQ~<`Rgu`Kro8Kt5mIbeJpacexd2Sy9~Bv=vP2&ImxMH` zl*GA;j4CDZ#J|)+VALszUsOt?PRaa+qDp$XuvLCCA2%YZS|oGWbxE{}7P|167N?ms zF6(W3GPnC%bd`i(nNf4zWzzVNPWevmcf-&HfLibZ5b9q^FGTjtPvPaJ^1gze`7WOQ zj}i2@4Z)PkpPBSS+K~K~Jdk9d7&UCoslGy$)E-NF8h0}(5%VXF1N;o#%eX#C=T#;R z8!r?S1f47dEpQ4==OjT;e;ioba0ioi`v?s%=^XyoLTz}2qFUS4w4D65oUf?H=9fMZ zblTJ{ES;U-jz3paZQEEnAM}l>d-ATz{Pz5#B2TsL)w|XKub9fbySC(a;J?g>Gw!+{ z2+HRD^TDoz%sS7Kw_3Fmm6dBX0I|qkIGR8+9-Fdj0 z!Ny?g&V>fin^TYGcjpfk)zF_A@8|dAv~VMy=ckOX^84~t6HkNsaR64>hB2GL^A#;4 z3r;B+e2+=IRcMz<&#n+Ut;pDQWbj#oZ1UAX247HAOTN9PW@m65KK(%sl<%4RLQV!R zQFw&p3xNT=OOcVx0DeSKy*h0S;8#p?^pTKXn)F%K#ry&MjY-|QU&|lJmrZKf-KStM z+oC1IDhkEj>4ddk|#UqPh_>)O0qB5+*INc!IhfD9Y z4C5Y(>T%0Zn>LKg6jf3Y_VAg!&eX|{Gn3yoX%4QJGx?MvTq7>);|a**uqH&UZ9@B6n|7Oybh{hm0Mt~Hi9HV6vrz$eC z7{&Wq-AXi@58kBa1=;M?TIom*g}EG~sFE(!_A1EraGb(=>Ki?@Ea zgT{w@(-=NuQf)+D!C3B>W)x-#bmRFklR6{b1kP+DI%6J8;?asKRi{njX^LcYjVqYM zo+?90>rto4yv0yb;h4XCC-cD$Mi%X$o5I299;yBH<-wq5I~nxG%D3%z@_^0;ori8J zPc&%`T5TFHG3gR?)A^)Ht+9`r!R+Z`MC=S}J%eLR$^y;gbtWxA_Op1eNg=q@nZ?Hy zRnhR`#-LreW0az$te8?To1g4%(9@x_3+D2-imGTgjBX*%?rG?nj1jtLxJR&>w%&!S zX#RS*L8XdjXBk1e&6l9lM;O$yrlg>d3-L*xWO#UdML{t?n{7~Q{9%g){JKd~yn|^W zziZMFpI}az7M&bNw-qeomWt%H`Yup= zQ}-NRH!bIGCcV|K)@wQUGwH9CJq0Ux$Y?bPYHePw$AQ^Oi7uLRu%L=pD>BZwRlLb0 zIpbDwjY)FGt>Rjf zuukjH#0xsLBPgEAUw9p9&@+O`v4 zyshKiCOtXediFZrZ_?|~t>;4~eFWWleo+zLqGTQ|*uZZnsBIARDjr^%1 z+y=|Y-^lpm>8P)#~o3jn_(A`rn6x6U2*GQ6mLBvl5n|Y#1UoK?Q`QUUz_q?L%Glb-3 z@Am?oXPJ~f?C*jtyh_nB>WUe@jek@G)2OJ|Oe2-j_1>em@eY&5i1FXf&nh$)wC$XK zml1SjO`m`ryspHc@9)MPFXzuUXm@_V=zDqW0)ytZa*V#8KSKc6x`ibcTi4%_WNJ>A_0emGa#t$#CAyyG*K6x?_qe$&M}dZvM>FZK{0BvYX>d zCCzH8Tst*;4_-A1)zdP>+rts4bVFJ8;4l3uG=}pY&R1k)zlS%PB-!ubEhb6!dw8!& zlHnd6tIWkRx?IsGU@wf{4F(4(=)<}ou?k1cYYp%csSTksayWU_aWZI#JOjR@0_ZIg?b=`>+GWNw$sn9^zb zZkZp-k;@FzkZ0Y*PT8;AV4lz7UDXbL|}-#gq2(s>u%YA~v>yb-drNlWUk&V(o`! z*2#BFcID*^WFMMrUdGx6mFgb(JG14s<9H)LgH%^gL5&kP4RT}^v2sy> zUK-?Blf_}YFYsw@hVD5X-R#8|+8FewC!b2+hfjSn+zi2M#rEOzj_$Hbb)QUHX|Mu3 zyc}&hU zS?eW%%5gbojS;ZAxVyt~d6HSV`1+}*^z;+5+giiTzp$hy2?5{VBQfUDDlUyEihkHB@B4DcQiR$o6f8 zCQivOP2H#X^XF;#wW&M2LKCNT`Ms&kDAO~~$lE5H@glLd?-@>CUlK3Q$as^DPbAi# zS*3VBaZ%VAInvOHiG7MQ&&p>uaXxWp>XOVKBtB1=3MyV$s)qd_-!R#V`FI1r)IT!m zya7ZHnXI-_Lw3nzd!DS$Y>^Qkkeed$MkGE;Mb2SXD%w9;llimUzuC~0B(BfAASZ1x z*!xdz%Dg1|Z{_efeIE}0P0nFPe0 z$7H`2h528TrQ7+aMmM&sOaDtQHI-u*O;E1m>nqu*crSao`wdxRGP)T2Z@Ix_CEdnn z+>{@fY+mY9={F@lGMNe^Ce0>h`_N!-O(%wr=t7+_W^T&b9en(2u(g>m$97ZhW+iU! z%D&3HDQE7yZ+c74WoB63k}H`Rmbc{MUH2_-%azQGd2m}se@42!_TLM>&b&<`{%dfi zc(-LI)Zy{3)Yd0ujl8Set5NvdatdcO_C^25SzEmZxg&k+ z?iWTt5VO5D3NN4oGsBC3p~UdwPOh(jH|pb`S~|dHX3g>{=5vHPW~HK4&+f>+Z>V~` z8hir(HPR8Nr?KZXI`!sskKw7es-xAo@BM=_?v-?c%@wXOGkV({8)5A-q_ot^Z76q8XC`9iA6=5Crv8S$ZIRVVK%l@JGHtIBPNuucirvb0(wkf$)RLC}1G` z#Egm^pA`t#?y)POZNPTWs9{`Q=d8AHh*^U;+_kp|hMYsBYY=^VRVD=MFo|iYP0viu zY6ml!7296U?1yYFv%Orj5O~RCRJ0ISX)-EI2wXN96*L5XXGTTqmlXo)m-h=33U17d z!i0g2&&a-4nlPv_Ou4zkVXeuixx?WtlTpBM*vhO_49**r6%PAN_OGhSgh+ViDWXMM$IR%882CYFYV>_9{A!qT_*nS2$tZj*TrnAij|J@rIV}~>=VfHY zLMvu_1qF_^le9q{sj?mTAy@A*1 zb%NxhayW)Bv2B}E^LQs1Xez&)_+-{YFwD$&X5s{7nWpaD)OgVuW;5F>X?S&p>jo3? z__et!Bvt+TI<(g-6S_jlF{6==b;U=uL50b}1`*rCY%focZtyj;1~I7Xw5;yXVltX8 zNlua)SU)h%R2n=FYY@7FrmiY)gX6laj=q(IPxP5pe!&Rli#3tY0=$8z0-3l@5QIInF$G z2pL`kiY>cW_Q#rLKr55c@Oumfo9r~U-eZtwvV*VSUESXL(NZX#A9hCi}KW|>m0bqjD~e{Ru0^{ zh)>O&%Q(g3o}wYWV(r%)?IOL1kvF#uLEVV75=AZ)QyZZ)Qcd{n0Xe0<8%(_qWr_Y0a2A2Tyf-{r&SCZn@y`8pghDVwsxhLGiE?Llf{?TkD39|CR>OlStc8Rmd`?|$>_xKv#{D^biMVnaD-W@xHFO% z4>{4GQTsj%Ik%{wd-=5Ab5O10lX>sXm056-8C`c-KWY{{?LfM{xDl^Rm<=`w4{5kN?@WV(1xPaRyjC4y98#K88-~>fNYMDk=tTEtT34~ z*0&ViHY`P(F2n+O*KV{^DXeBzB!*0@OjrP_4_8TiSk)_gA*^ObX9)XdFM>CaVSG9X znU=j6b{nQPoRzQynwaesAHIy&;lnmxa#JMeSA!)G(TeNDSKuy%0RbF>XUsClHkeqw zB0YNlB5Uj036yPMFMjCb7l%9xBqU z7(i?_Gh_auCB9*cbVobk<7eSgsKIXI5o84n2qU&!%$YGZdj)g~CuVeSC5&LE8~s}e zW9}&@W>>;2W=3yUgKjeF?P^%e%;@cEs9#{_4aCT!}obn4XL+RLkTmZV^%{@BCOf2i;e(T*fvFL2 z1KfJ(e!zFYtuwJo@od-Ev)_TW%#7cZ--UNgMr-H0u+3!jQ^ZF2nAu*w*>NN6XI5&< z%DbGg5snx-yfj*?AGHx|RXyLqC%IK7yazE|DB500!~T5|iSe)H??XK6jN|$y=*p~8 zPx%#4EWfS;Ke zMcV>WDTlkeAXCwMb6GVX*n%!)-X1t0VZ;r~OIVCt$JN%x4! zE;GwB*+Er9oo=#Ji?`SXt4ub*<}E$~eY;63?B3#IIASs%hudzu;k3!#L-q-@nCx!{ zDL#cjd|SQIO&YRTW=0!+1_>skHv9~V490Ev8I+kiYQxW9nQkhn5kG^K%&7M7XMYA8 zm>Er458LnQ@O}vRlvy!8-(q`qJ?u5vBH=AQhZ7H2?t$-29o2phTzWv)0Dq?FREuJf zu1e7W4iDe&iU#muW^_dZ1TiZXQ{?XK26*(IP7`|}iJ~(6Q zsP_Bdhllx4*lefT?}Ll1q<|W-zfDsbmiytB$;jz`*wBXxY7EQ$u-RZdEce4sQ%64c zLme~2=YBY1T9VI3a7*PwVY4Ksjc~OeIV}>ytfX}Be?LScv^E%rXoMhBM#CPEN5o;JP2!<=|-;|g160#~Lgxo`C!x2gdm1P6Nl5=6y3wYt zyXuX)8TWKL{&oh%OpO|zhJ_}h8lHyl48}D)4L_MWs^Mw4Wa_Afr{O9yqti}?| z#98=)nNg+hV86*IJTg2xad-95zk?$N<T;MFZE+4JF*AyG4xVLJEWF?j=9_D>GTD^f1PdR?*9;X8;jPCt;Z1%5Ow<21|Y7Wma%a9&`3W18BO{pT)n5npFiQY>E}1o-S_mb(n21{C3-A^xtrG6m&qRr6Q(R zuhF+5B$GlIPVYcGGsEc}=*kSkLu%EPZP41bF^XQMrWaRPwnJQ1!*=l4F?>6`V2lIbRzMTcn{QG2?2i`*vcvC*=T^N!M9NjxHRwG}aEnQw|EM_5$zU@Lq;LeHPMH}h2_tpyu&>j z3o#$RN89DA9pl9=@$%4OXq5XFl)()QFU4-roct-5OGid}tSC|yPtIB5?)8YI%KQ7Mx9 z=X&EMhH2=(T+%6|M(uPj9WPJOUUR;t>=LsV{2?x3Bm3a3M4e`|QLkb@J*3{keo8~6 z4pQZ_1(~W7I`x%alDcD;NE`M%UbC~WCmzW(y-T2SRIBV#sqT`a7rd&T(q^^BZqnMs z&QO}Q*wk7~uU_hgQ5uK5rRL*_gLqx!13kYfSUHZj$_L2EUiE6VEF0E{rM6ZOE=oVH zZjf(OCZJrC-l$x{V*R0p%8W7xEk+*ik%lrAZnNBh&qHh0^18%nyR?|thqO}~wcIIf zCtgZ=N?X1lSSyq6-3B6FuNtV?)x-%yG`$RK^O&|7%R5@@gmSbj!zP`iZPwl%@SL_w z*q+hw;yhdSTCG}+T-1n7TG3&x)+k@Y-!SX7PxOCjNt`Q{v0fWA+Ga_^Vs#g3lAhC^ zj_JO#UK0x@S?aZ+;jdf9YYy|@wq$d9o-V%__qioSJH4u#q$XN}rs~KqEt_S{fOD3O zJbWgx=_MY3`C4A5s}{TbXUI)UkwQ~3Mf29dDlJ}}Y}RTy>3Mf+KG502U-CezVrg{T>$E91dK< zMXcAB$NAX`Yb#hAY}w-GEvn^|m?5@CZO}_kpylY7@@(~5Zumso zDXsJPIkqyH;+CMySyj$IUM3gX6ziRt=-k za~&sSwe+qyjstMnQlriO!S&+&Dz$=FuWna9Ss9yUj`wM$(ZFR|6d%gBOHh6=ir7YL- zdzVZ0L+tsG?AY(7eVF>gEA9^CE!hbkx-#A}t)GVysrlvmIuvL#76&?Uop5Vf>=wjjQx zy2F=4y~S!CNtf7L10vod%&51ZBOkR)9$QWmLuow_$9%_?@p#u6tp}&H-W~lMugd+d z_!<%}y9!h%6)3=XsC~STW3ci_!WvxR_w^g-=!Am~*9OJ_#;X`+x#KOaeJJOOVQkbE zkH=M0*FMCL4LtHwv>%6Eb4<}@&zDXG+MGo;rw!WEUA*zcH$A~66llST;qWmmhhhLJ zVi-GddMB2XfL4f9pcNtwXocv+_NhSYL^_^H7-{c>HldIWRjEhtRfnNfV~*fCo&e`O zpaV!A0Pc75;F(3?&I7fgQ9}{`e0-?$9Ckkko%yJF>@rwUs((Vuisx!E7aevYQGVZ< zX4H1XgCq7iH_BES$DL#N_!tR)ET_@*aU~&5%{ln>!$+lDO*#gk9&40~adBysPmQ>P zuMVK)sQ?`ED{+0FF+y|MAfr~r;X5j5MeJsbY|GarU0tdzjU~Mi{~6W~@#~V|F4gh{ z9R1bu#`5E8tz}BeD3>z1XaKgh<>L4uhH7nuTR0B=} zL5I&e7dn*Ixhw`ciY>-w?JhQ3p6*g0TWcG6#4mc(-!*_oQw$&P^5KwgoNEdD4B)}G z%R)1!-jdO|t1Im_dLdRkH^Q|UyLqH*unttGV4&F=40I3;hAYbx@Cf+v@=DhVpyT;! z##5GKGf%m$2HF=?Fxq7$-aAceVXE5(4C#g^4!cD>>eh@!9F8g7B1XGiu(&5oaH|D3 z-a$m9#0$IJi*hX(>!|Ln=eu384D3?iW|y0W#)~VK_$7syAp@^Nss*~L=!zw;%L=zs zya_oau12qsH!QA?7h*1D>3X*^88U337OZq$)r3Xqyy~LcW?0t$Hp;&bStH${^Sqn( zMtO8WG3=5Rg->F|4wTbk6rh9q1+BK~$}xQNWKflM9A8l~(%uL(t#<>h7@M`o4$IxQ z@i^Ot{Zk8#I8-*cH}bG=zzX}y-7s&(hwjaA1iv0N!&qEGYAudkF1l@G?K;M7+^e)@ zI_OTjv19Hxz->UG{Ra4VJm-E0PDTC;v1`tgx+0aYr&v9xE%9x1%H`)X0C75D;}pVX zL>irYa11GrRVr8Dy=*B`H2(qZJT~*{yO}F#$K`U0N3gZJ$8#PxAS6EnFywQDzqyuq zbhFxLEc3XaOvk`l+I8ZxZ^$ad{-w*ZnYT?GeC8^oR16@>q zN~_DD*>nvjd^en@sa~hF4<-)wN>skbS(d2mC`k9Z%HE391bnMsqwIw{xm(;dDz=la zyoB;{#}?r84NjOuP5NE(A6_Zi)YR*YDn3M)4&E(1K2o$O9A{1njTI+_)*&Z_#)p@( zuZob?DldhWl@^}YUg%R37cBdeJ9`JP{|lDk(}#J7DkT%2@{Unx(d?ug*KyUfOWOPw z;1n%IQ*s)k&K1 zcM9&(ZP(FAyjAs74b)dRB#egVVrA&1KtMwCe4X#-#_Tsg(~$e}kCjde&zHrn}*el}a>7Ls7l_pqC~#a`=rLcpbWnmg^K+fLC*Y>g8L#aQh+G(;i5{ zC8etTTRfVD!Zz-lay~w<<}z;Mj@o7YcS1m`GWqvV>>TatVw=-$beE=H(Du4*YSqA{ z#tXdh0C|W#1Zxh%J(NS7H@-beXu#x+0mvt-NI-guh-t0;RBrKLY>6f}m51p@ECk*j zr8wfos!aC&ER{7;?PfxG)JAotcQ*oAy*usS_&;mOD;djBZ{BdW0 zz0pd~Gh<4 zv-Q!QYvfg~_YL`UmuLOyNHy1gm$G-&tNv+FTh(2hvi`le7A==2t&#bbRk$51z|H&) zf3>RpDG1g*1H4pPz;}rrbHf5|aX&h#G??m@i})SPNu|N0a>^}kDOIKU;KbM{&*DP8 zS(~^ZDWG2a=#{wv0V<7RFO~K%x44Z|Ou?zoI3AYZCGVlCJ=RBUp;p%Ac%Yw)#`9N# z@!ZVmcywOw7{iXz#e%dBft^hG*UJ8Z>Gt4G=a)fgmm3L%GDz7Ihtuw*Ohy?uRD~_hncAMHM6ns=;jmawUHPEbZMR1G_cT(_CaT%u zG3<{vsp|JHUT>48mP~YMo6aHAIpk*T+xQ)=Q@Js3$Tw$nZ+ij9#(t5C-QlCwYt>JD z-u8-e3}0<@Mfs@bZMQ2*Ir`65X(N)Y(gvkoj#>P$(*-;l?QLBk^-1y11?6$?=3%f< zn8d**aj-m<7VR6>yiur{MRtFK(lgJmYyz;2_#GG6;({LprDICCD?btdB+Mimyv zJl@V7j)_~N{sv*=7n3Z@@uooJhpITsSuC6(7g64kkk9?y{MGVWRk?fLG6 zlqq!e)duBvykf6R*;|khnxf5#>=K%&`uFRJ7~C%{RBtgFioZHF^4AI{g}x>=%z;C;q-!~rnI!_tbfWS( zc0`%l4`0-jqRpJGhNWoFEV3h>?5%ox;gtJBjnQ~3g4^QmB1WV2pg?of`-XMW=uoBN zZen!URjl{uumF~w7|Sgsk&D8TaL-Z;)vC8Xt12uN6~4GzqNclGDV+KNh6%;Rr`b|a z(M=|yR*EEzwl`@S9Z=FSFdm#O&&*#GR*eBd!-wIl!E-p)V)y9qdTRw@txEUIY*wGb z^M=)G!O9Nd8_@FM@OtiudNpqNK$I_J>Vxs)MK{9P#lsN0q*?vy)p7XJvR!EUSonC` zrOuPXop2?e5uVKjZB*|}TpC`j&cky-)#{|#Yh<2AlWh_gZYCG5S^Y8oaCni8-d1)> zePj05;d4+M3MH&9vwicz@8Qkrmou*G;U(O3ja;sB%R^5u3LCF2tZ<4bxA;G?C~Pr@ ztkCEkgB2RRW3WP_cMMi&^mf4tjovO;q0xO96&k%`5H0b>hkB9m>_C+1&WZ|+wqENr z+L2ahbXP`&MmIoIX!Lzauh8i0;zo@&ql@wIqepDSruI=c;+S|#y`+%qOMD(H2}d}l z8HOm!@Nqhj?$X#~I+Bvlr_o$Dh)AzU^@FHltJkw!sM6KBv~r)al;BH`E?5Glza43pAv!rc z_xu)=znbIb5B6o936=+*4n<5)bd1IwhR31;s6mTn3g7Pv{vygr+wZt&{RY@P)_vij7e+V2vZQtr1KPZNsc70Z(JX~`Jq~PCuQN?lZD2c6UsiSlSQYYred9No5XlUrJ8wJC|iJqYUX93 z=@V+9nICGQ#m37*H4Cs%;bK_ZiM5?rd%<$;p(Ak@EJYKq#CdT@FAnczq3YS?^r=1F z=;sWNc)R?!zA7yK3NDmg;sY#HrvMAp$%~7UWT7+OsVMu(Brb0fI(kb@V|Qs>#54|& zX4-Q#aBt_M4&;ORB|ejDhZk`XU(G);Y|#2<4o|qC#SVKMadweDCZPd$=iNm**5gx= z&Gl%8->01RXv8xL10x#otUzT#BcAViHQ@@poV^C|SS8*Q2s;xB?N`77pGt0*>v6k! zN*jo$j&|A34EY3I=NHje-XuJd)Z50m?@6e)MY(6dQEh8frFubWPCk{;N#fTXe4;X+ z5Vy-;JCLL4>2twF*n~)Q5l+G%(M^OQdWl5D0FjgEfiKKBo(N);7(U2Dj7HfeYUEPH z-Le9;ejKFFqvGV4iHtUv;ynv%o^)@xY06V{uEC#~;xauH{(o?To-ll9=k_{uM9 z_&^tN%Q`hp5ni^1c*#Y38|8Jkr(@n2I~6FwP6g^@r$ThKQ$dsLRFq`kjw0=P!^6qrMU>z@gmA;j^uQxBRNfXB&Q=C$!WGDIn8k- zr+JR#^chETI?0iIPIDxmvpMe^&iet%AT~QvLAPNFi0wL)o#@m<>|*sNj#Qg^#xEEf z8NXyaiiq9BPFvXNFPPU+{N^YJIf|=}4v5zsJrQp?1|SNj_K2!e9HPys3!;-#GNPN) zK=k9}tW(Y0oT+AB&Q!Bj&Q!BQ&Xj%x(}VC?)+ZB#OAF!m8|p!_JOkKmLn#&M!rN5w?(4&n@PVoWlJsbj1+kwP}H zEF~31N=gZ0ImJXusb#sAwe>95v)s&bGt0R^9&+({(GG)ZSk~79)uWC{6QfYbDA+_Y zO<_4jAvu@jT$YPiE@HWs>*F~J)9(I{6A%ef{}N+HWdy79qAH7wVfNJe!m z*PBQw%`7*wy|hvQX=QgT7h4ZvN)5}wHV$tiZ3@dNEa$SE%W{!TC!-=J$##-+7z-I| z7@HV{18IX8lNnP?qyRZA=bFd`V!6nX{X0@huoKC_PFx_CQ=FFTsK{lK%ZehFi&(B@ zxt8U6mg`v#a%M*+lDlMk4%fTj6N(##dsCdOtH$^J*zgIGj?&yL4}66*NDt~n{#L`n%^IhnB! zV-Dju#zMwo#u~=8jCG8A7@HV>WEAccQeg~Y3}Mv!@W(jD9~l)7G7Vu&F_8+?hvi%o zDPrJGTJuEjdHtWWR2PuAJS$J~em`Ldg%R!96CQ^C`%gKx> zCQ|x1mJ1n+8EY8VGS)HfVQli`@h`nNq!$NcIoL!F!}2)BCPv{+_D!t_MQg$!#$?7? zKT4_fqrCMj*Rxz3!07>;&T@SKkN;*S&8(1Z$Vj#!qhOYUSx#X&h2>n9b6Kuuxt?Va z#6@9jViduYlFXRHSjbqzScj;eOsr>8A50;eSQhQr5o0oA4r3u>4P$U9*#w7DF43Ot z8Iu`v80$?Wn`V}q+mkHA$X-J3d<=h=dzs3auLf#EZ4Ez#3;f!Fk=p5 zA!7|=9ixb38^*#Yl4}_281<$oM@$mYgh7nSjD^u`$`}+wax!BMV zz%19Z+{|(_%Q?L%Zy{q1V;y4?V^Io^|DqIjhXm`va`M9@=P(vB)-cvFHZeAvNO?sc zvX>@ON)XGzCQ?c=%ef{}N)gF=Vo@I=GL>DVlHA;vVuViEZ3VzDNQVk zK^(wDN)KW=nK6g4kg^lU&Ex#3)8{F2-a;T>qQKP?E@D1!FQ}4r3u>6Qjsw8^&bD z9L7S%raaO%J4WXWxJcSjEg^V?fb&O4nVk*01l+#F-)2OwY zW{@mqvX(K~kmpcJGGh*74PzZ+6Js)Wy`IA#g^V?fb;ay-K09SBTu5>aV^A5pX3SwM zWUOJVV{BT)9$sb-jLD2SjD?IfjCDGHG%<=LoPjZ!F^92`v4*jZv58SEWqZbC#vH~% z#u~<;Wn`1gSn~?Wb&O3FB#RYXV^PVD7z?XNu3>Cq6e}quhp~{c=2c3mV+>kNax$Z+ zAvuV#kg8lxrB9-r7U!zgSO6L5w*YNG@coV{Bp+?{Kzv3F{ceM$W~U z%$UPi$XLhN#3llN!v6iurv4*jZv58S^XB);G#zIE%A*BZ~ z<}emA)-Z}4q}7A?BZsk&v4*jZvB{7>qW-f9i+F4ho+rc$tk;Pqyy7)WPL<2#PPtG1 zTRK8d7z5?76?Vb__zkYYKk$h1nzBYYt1MLCQ@5xG)KhA>)?IrIFKN4EX>EPk`i1Q) z-8R!+VwVmJ9M(Df%b};^Fvoq4zdGJ_^m7{EG}dXQ(@iH==Q!sK=LOE6I-hd>+4+jI zlgl`le3w^U-gDXR@}h-JF zZ7&D!0PmIFKY3sEcJ@j0$@iJ%bKOVr_3(Yy_oVN?eE;(GZWY>UU#rut+PCi3dQ9u; z*6UjzZ5`p4;5XH;-mk5HynmAaB>#E-@A!Z2-!Y(nz|sH__;ld>!0NyafqMd*0{z%iF%uoHlb~!+xBVuOxriwo^5-vtyfTBP`jX*pofBb2R#~88uWJ14?$Og zZU=P6{@R4ApT|~RF?RK_PLy|(C2&oORg!Ty?7dk$)DD>6Pb)lbx?hQQ_+7fy_ zG^l;Y_QTpAYVR866V^TK$*`Sar^0T8-41gK_YLnBo)caX{!h4PgdQD{8}U@c%MrB^ zA4Qys_$A_U#I=aq5lW;rGBC1hWL(tKQFEgfL{&!Zj5;25HtOF|GTI*9Iyy8uD|$)v zis<@ii1Ci;7SlUsL`-JPf|$mbrkHCnk+B_PN5;MyyD@fa>?g5DW1Zpx+v$-p@gRriW4>@>_})#IG*rh!sUb=**EZt5B<^6 zLKHqR6!Gmb8HiU_jzYXT=?TP$5qXH$;t4+Pz@}=Vgd(7gZwG>aQZE zPpL(mmqRH%ULl)j%hn?<>hvyR-vlb?g8rKkpDrP6mAoCXhacgXu7s9SLbAl0%#Cah zW+)uD3)PP<{S5Kd@-GnkF@Cp<^bTSy_f~Wo)x+79 zaLmJ$p`b6}P}csp+B{ge2P+miN_|3z6}b+GM%x(ew0*Qr4fV1sxi*^1P#5L7-ZM4Q z7e{+z%F14Th~GF-Qy*9mgmTXTBo}kz8|`5<_{bHMe%bxLXCwW=@Yn`4{!{yq(UzxZ z+&YVdX8G?240D9YmDg!fZ${Cka{ zBqPJ2S!{T0O^UaX{h@UP_Lp-ox7@|>u2W6K;eEY3f z{z5L|7x@zrC+9zhSo;!AcwNLLQs4g+PT1;2LSyMTIgh%=z$bfCQH(+Kyqk`hA8e-w z<)o`?CUEjyfJPyUPiX@l68hLXK)n;Fvhdd zivMjA{%3lU9<>HDN2k4g&qZ|FdniA;bPM9@3|bTYUZz%grj#&m7U8$NRNwE#yIpgp zf(G4j9(vD~?L-f=UL;(zgeovOk+4rOt(BKw*p2D!Cg}D2L3piT-#s}!g$8503IBWg zgDFOndOl8;vj>vvMxNhoRvtk=6MFrLDgW^CVr8$dG3B2gM#^cFUl`kjh#qMC|EG(E zNn~ocFx>6tbvtk_g)utf@vQUc;ujvUcAjR2jiD{iy!5|mjda82zBe5I4=NrEV7N}` zL-q5Bq5>IV44a_2zhi)(=Fm*JGw}xErc^528=3#y3v76Puy93r>KHs`zT$wml3GX? zkMJCA9z>ZB^>9N)8Q1Au9%#LnQTV)97+Jnw_Pa$t_m~gna^d6QXIcIz8%6)m@c+3O z>xR*f(ZQH)SY9|e;zOsAGB+<4Q<6(*HGFV=d~lriE2R~FF;CH}I?1c&QEUC@YX9Eg zj`#eVmim7&JwCV>nm#zQje?HJqX69&Qh-^E|8H{c|1U@P{rtROAQs&yoKxwL9Z##u zQ5U^V`a>K{hUcN9(noPrqtq02nEJFjMct|1QGK*=+I8)YmT4Jh*=G6J@}p(0)yd{* z>tTD?_NHy4ZHRrMeYgEb`ycj>4!s?!9nL!hJH|LZ`b@vkYMegsr|KxtlW3}hMJa2i9@p{v1t5=Jc zm-hhgZ13sbbG$$F{>=NZx5dZLC)%frPleA9KL7T4$+yz?4c{+(TYQ~bt!?#DtK+RU z`R(+(;Md9j3ID(Sl>n!Jz<`SZ*8?H~lL9^4bZDct^=o^)?cAUhK_3V03px^XDkvbh zeQ;c`UeRt-yWiX0Y!?;MG301SX6Uxi+3lCMU)lbh_8+zXy#3AgQDGgzmW90$b};N% z*o)!Y!aoV$8{QOtAv`3aLqzw8^oVH@-jUx#Le!Y39Wiw=-^K*R_KO`7>lHU4Zf4xv zxQe(B;&#OyivK45a{P>h7ZR2=sQAnSwNMCESOq@Tsp=Ci#nzY=x~_Er{4{etWz?%-`a+&VfBbZXW(Rz(n8g+9 z9ak_v<1}APb6z2iyRH!5xq9mIMfbJJXST!2Dfd3Y#iNh#@;I#ghJSB*ZWBLy_JnJm zE5tR=`QntOBl(p`mIrtq` zLhx_ApRRr9`lc4|kc^dlR}1lbR~zrw6UO^}jGrHCu>tyF6kMSt;II-KuuZgY6KM(Y zOUBli2zL}$SR8yy zg!P3D__r{;KNfC<_$@@&ehYb5tMJzGPuNl;&RbI>e!;&M>%vYEyKTE8N7-&hj<$tI z?Y1q9mSx~jFpL$N_SFP`l zuk|XZ`mw(nI?`^{TmU>KdrVe^1Q$)kuhHjk{S0AruCisQx%e?5L+vjo@7R)|PM6-3Apq!~6Fx`S#iMY(TY#I#L2J)v;zN{ zfofK?!iIkof|5{fHf1B76RT>+s=aJh1>*I|C6g`=c&(m zPFAhbBUN=kuv)>r=mIL_lWGSnNv9{(;Tjff!31?Ve)vyRU$Rcd*2ltEZJek^I8Sy7 zL<%1BdSaNW=85W1%++C%+LKym+El#vc5>Bst&x0 zF90am@ycqoH{j>7*VPvQV-2oV)1-AWjz5W|uU(`5fXb4!>XWFfy7;Dgx~l#y)zc#z v7stE*o+CM^JlF@GY1r}4TdJF^8oFMs+2QiG`Zqq{y3-E#jp}7to?!i7jm`!c diff --git a/src/CSConsole/CSAutoCompleter.cs b/src/CSConsole/CSAutoCompleter.cs index d896263..5b37799 100644 --- a/src/CSConsole/CSAutoCompleter.cs +++ b/src/CSConsole/CSAutoCompleter.cs @@ -2,12 +2,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using UnityEngine; using UnityExplorer.CSConsole.Lexers; -using UnityExplorer.UI; using UnityExplorer.UI.Widgets.AutoComplete; using UniverseLib; -using UniverseLib.UI; using UniverseLib.UI.Models; using UniverseLib.Utility; @@ -29,10 +26,23 @@ namespace UnityExplorer.CSConsole private readonly HashSet delimiters = new() { - '{', '}', ',', ';', '<', '>', '(', ')', '[', ']', '=', '|', '&', '?' + '{', + '}', + ',', + ';', + '<', + '>', + '(', + ')', + '[', + ']', + '=', + '|', + '&', + '?' }; - private readonly List suggestions = new List(); + private readonly List suggestions = new(); public void CheckAutocompletes() { @@ -83,7 +93,7 @@ namespace UnityExplorer.CSConsole // Get manual namespace completions - foreach (var ns in ReflectionUtility.AllNamespaces) + foreach (string ns in ReflectionUtility.AllNamespaces) { if (ns.StartsWith(input)) { @@ -97,7 +107,7 @@ namespace UnityExplorer.CSConsole // Get manual keyword completions - foreach (var kw in KeywordLexer.keywords) + foreach (string kw in KeywordLexer.keywords) { if (kw.StartsWith(input))// && kw.Length > input.Length) { @@ -121,11 +131,11 @@ namespace UnityExplorer.CSConsole } - private readonly Dictionary namespaceHighlights = new Dictionary(); + private readonly Dictionary namespaceHighlights = new(); - private readonly Dictionary keywordHighlights = new Dictionary(); + private readonly Dictionary keywordHighlights = new(); - private readonly StringBuilder highlightBuilder = new StringBuilder(); + private readonly StringBuilder highlightBuilder = new(); private const string OPEN_HIGHLIGHT = ""; private string GetHighlightString(string prefix, string completion) diff --git a/src/CSConsole/ConsoleController.cs b/src/CSConsole/ConsoleController.cs index 4741e29..d9aa36f 100644 --- a/src/CSConsole/ConsoleController.cs +++ b/src/CSConsole/ConsoleController.cs @@ -1,4 +1,6 @@ -using System; +using HarmonyLib; +using Mono.CSharp; +using System; using System.Collections; using System.Collections.Generic; using System.IO; @@ -8,18 +10,14 @@ using System.Text; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; -using UniverseLib.Input; -using UnityExplorer.CSConsole; using UnityExplorer.UI; using UnityExplorer.UI.Panels; using UnityExplorer.UI.Widgets.AutoComplete; -using UniverseLib.UI; using UniverseLib; +using UniverseLib.Input; +using UniverseLib.Runtime; using UniverseLib.UI.Models; using UniverseLib.Utility; -using HarmonyLib; -using UniverseLib.Runtime; -using Mono.CSharp; namespace UnityExplorer.CSConsole { @@ -99,11 +97,11 @@ namespace UnityExplorer.CSConsole if (!Directory.Exists(ScriptsFolder)) Directory.CreateDirectory(ScriptsFolder); - var startupPath = Path.Combine(ScriptsFolder, "startup.cs"); + string startupPath = Path.Combine(ScriptsFolder, "startup.cs"); if (File.Exists(startupPath)) { ExplorerCore.Log($"Executing startup script from '{startupPath}'..."); - var text = File.ReadAllText(startupPath); + string text = File.ReadAllText(startupPath); Input.Text = text; Evaluate(); } @@ -153,7 +151,7 @@ namespace UnityExplorer.CSConsole if (Evaluator != null) Evaluator.Dispose(); - + GenerateTextWriter(); Evaluator = new ScriptEvaluator(evaluatorStringWriter) { @@ -161,7 +159,7 @@ namespace UnityExplorer.CSConsole }; usingDirectives = new HashSet(); - foreach (var use in DefaultUsing) + foreach (string use in DefaultUsing) AddUsing(use); if (logSuccess) @@ -200,7 +198,7 @@ namespace UnityExplorer.CSConsole { // Compile the code. If it returned a CompiledMethod, it is REPL. CompiledMethod repl = Evaluator.Compile(input); - + if (repl != null) { // Valid REPL, we have a delegate to the evaluation. @@ -208,7 +206,7 @@ namespace UnityExplorer.CSConsole { object ret = null; repl.Invoke(ref ret); - var result = ret?.ToString(); + string result = ret?.ToString(); if (!string.IsNullOrEmpty(result)) ExplorerCore.Log($"Invoked REPL, result: {ret}"); else @@ -222,13 +220,13 @@ namespace UnityExplorer.CSConsole else { // The compiled code was not REPL, so it was a using directive or it defined classes. - + string output = Evaluator._textWriter.ToString(); - var outputSplit = output.Split('\n'); + string[] outputSplit = output.Split('\n'); if (outputSplit.Length >= 2) output = outputSplit[outputSplit.Length - 2]; evaluatorOutput.Clear(); - + if (ScriptEvaluator._reportPrinter.ErrorsCount > 0) throw new FormatException($"Unable to compile the code. Evaluator's last output was:\r\n{output}"); else if (!supressLog) @@ -286,7 +284,7 @@ namespace UnityExplorer.CSConsole DoAutoIndent(); } - var inStringOrComment = HighlightVisibleInput(); + bool inStringOrComment = HighlightVisibleInput(); if (!settingCaretCoroutine) { @@ -359,12 +357,12 @@ namespace UnityExplorer.CSConsole // If caret moved, ensure caret is visible in the viewport if (caretMoved) { - var charInfo = Input.TextGenerator.characters[LastCaretPosition]; - var charTop = charInfo.cursorPos.y; - var charBot = charTop - CSCONSOLE_LINEHEIGHT; + UICharInfo charInfo = Input.TextGenerator.characters[LastCaretPosition]; + float charTop = charInfo.cursorPos.y; + float charBot = charTop - CSCONSOLE_LINEHEIGHT; - var viewportMin = Input.Transform.rect.height - Input.Transform.anchoredPosition.y - (Input.Transform.rect.height * 0.5f); - var viewportMax = viewportMin - Panel.InputScroller.ViewportRect.rect.height; + float viewportMin = Input.Transform.rect.height - Input.Transform.anchoredPosition.y - (Input.Transform.rect.height * 0.5f); + float viewportMax = viewportMin - Panel.InputScroller.ViewportRect.rect.height; float diff = 0f; if (charTop > viewportMin) @@ -374,7 +372,7 @@ namespace UnityExplorer.CSConsole if (Math.Abs(diff) > 1) { - var rect = Input.Transform; + RectTransform rect = Input.Transform; rect.anchoredPosition = new Vector2(rect.anchoredPosition.x, rect.anchoredPosition.y - diff); } } @@ -391,7 +389,7 @@ namespace UnityExplorer.CSConsole { try { - foreach (var member in typeof(EventSystem).GetMembers(AccessTools.all)) + foreach (MemberInfo member in typeof(EventSystem).GetMembers(AccessTools.all)) { if (member.Name == "m_CurrentSelected") { @@ -414,14 +412,14 @@ namespace UnityExplorer.CSConsole static bool usingEventSystemDictionaryMembers; - static readonly AmbiguousMemberHandler m_CurrentSelected_Handler_Normal + static readonly AmbiguousMemberHandler m_CurrentSelected_Handler_Normal = new(true, true, "m_CurrentSelected", "m_currentSelected"); - static readonly AmbiguousMemberHandler> m_CurrentSelected_Handler_Dictionary + static readonly AmbiguousMemberHandler> m_CurrentSelected_Handler_Dictionary = new(true, true, "m_CurrentSelected", "m_currentSelected"); - static readonly AmbiguousMemberHandler m_SelectionGuard_Handler_Normal + static readonly AmbiguousMemberHandler m_SelectionGuard_Handler_Normal = new(true, true, "m_SelectionGuard", "m_selectionGuard"); - static readonly AmbiguousMemberHandler> m_SelectionGuard_Handler_Dictionary + static readonly AmbiguousMemberHandler> m_SelectionGuard_Handler_Dictionary = new(true, true, "m_SelectionGuard", "m_selectionGuard"); static void SetCurrentSelectedGameObject(EventSystem instance, GameObject value) @@ -444,11 +442,11 @@ namespace UnityExplorer.CSConsole private static IEnumerator SetCaretCoroutine(int caretPosition) { - var color = Input.Component.selectionColor; + Color color = Input.Component.selectionColor; color.a = 0f; Input.Component.selectionColor = color; - try { SetCurrentSelectedGameObject(CursorUnlocker.CurrentEventSystem, null); } + try { SetCurrentSelectedGameObject(CursorUnlocker.CurrentEventSystem, null); } catch (Exception ex) { ExplorerCore.Log($"Failed removing selected object: {ex}"); } yield return null; // ~~~~~~~ YIELD FRAME ~~~~~~~~~ @@ -456,7 +454,7 @@ namespace UnityExplorer.CSConsole try { SetSelectionGuard(CursorUnlocker.CurrentEventSystem, false); } catch (Exception ex) { ExplorerCore.Log($"Failed setting selection guard: {ex}"); } - try { SetCurrentSelectedGameObject(CursorUnlocker.CurrentEventSystem, Input.GameObject); } + try { SetCurrentSelectedGameObject(CursorUnlocker.CurrentEventSystem, Input.GameObject); } catch (Exception ex) { ExplorerCore.Log($"Failed setting selected gameobject: {ex}"); } yield return null; // ~~~~~~~ YIELD FRAME ~~~~~~~~~ @@ -495,12 +493,12 @@ namespace UnityExplorer.CSConsole // the top and bottom position of the viewport in relation to the text height // they need the half-height adjustment to normalize against the 'line.topY' value. - var viewportMin = Input.Transform.rect.height - Input.Transform.anchoredPosition.y - (Input.Transform.rect.height * 0.5f); - var viewportMax = viewportMin - Panel.InputScroller.ViewportRect.rect.height; + float viewportMin = Input.Transform.rect.height - Input.Transform.anchoredPosition.y - (Input.Transform.rect.height * 0.5f); + float viewportMax = viewportMin - Panel.InputScroller.ViewportRect.rect.height; for (int i = 0; i < Input.TextGenerator.lineCount; i++) { - var line = Input.TextGenerator.lines[i]; + UILineInfo line = Input.TextGenerator.lines[i]; // if not set the top line yet, and top of line is below the viewport top if (topLine == -1 && line.topY <= viewportMin) topLine = i; @@ -534,7 +532,7 @@ namespace UnityExplorer.CSConsole realStartLine++; char lastPrev = '\n'; - var sb = new StringBuilder(); + StringBuilder sb = new(); // append leading new lines for spacing (no point rendering line numbers we cant see) for (int i = 0; i < topLine; i++) @@ -676,7 +674,7 @@ Doorstop example: public static void SetupHelpInteraction() { - var drop = Panel.HelpDropdown; + Dropdown drop = Panel.HelpDropdown; helpDict.Add("Help", ""); helpDict.Add("Usings", HELP_USINGS); @@ -684,7 +682,7 @@ Doorstop example: helpDict.Add("Classes", HELP_CLASSES); helpDict.Add("Coroutines", HELP_COROUTINES); - foreach (var opt in helpDict) + foreach (KeyValuePair opt in helpDict) drop.options.Add(new Dropdown.OptionData(opt.Key)); } @@ -693,7 +691,7 @@ Doorstop example: if (index == 0) return; - var helpText = helpDict.ElementAt(index); + KeyValuePair helpText = helpDict.ElementAt(index); Input.Text = helpText.Value; diff --git a/src/CSConsole/LexerBuilder.cs b/src/CSConsole/LexerBuilder.cs index c9963bb..2d8db1e 100644 --- a/src/CSConsole/LexerBuilder.cs +++ b/src/CSConsole/LexerBuilder.cs @@ -1,12 +1,7 @@ -using Mono.CSharp; -using System; +using System; using System.Collections.Generic; -using System.Linq; using System.Text; -using UnityEngine; -using UnityEngine.UI; using UnityExplorer.CSConsole.Lexers; -using UniverseLib; using UniverseLib.Utility; namespace UnityExplorer.CSConsole @@ -25,14 +20,14 @@ namespace UnityExplorer.CSConsole #region Core and initialization public const char WHITESPACE = ' '; - public readonly HashSet IndentOpenChars = new HashSet { '{', '(' }; - public readonly HashSet IndentCloseChars = new HashSet { '}', ')' }; + public readonly HashSet IndentOpenChars = new() { '{', '(' }; + public readonly HashSet IndentCloseChars = new() { '}', ')' }; private readonly Lexer[] lexers; - private readonly HashSet delimiters = new HashSet(); + private readonly HashSet delimiters = new(); - private readonly StringLexer stringLexer = new StringLexer(); - private readonly CommentLexer commentLexer = new CommentLexer(); + private readonly StringLexer stringLexer = new(); + private readonly CommentLexer commentLexer = new(); public LexerBuilder() { @@ -45,7 +40,7 @@ namespace UnityExplorer.CSConsole new KeywordLexer(), }; - foreach (var matcher in lexers) + foreach (Lexer matcher in lexers) { foreach (char c in matcher.Delimiters) { @@ -97,13 +92,13 @@ namespace UnityExplorer.CSConsole currentStartIdx = startIdx; currentEndIdx = endIdx; - var sb = new StringBuilder(); + StringBuilder sb = new(); for (int i = 0; i < leadingLines; i++) sb.Append('\n'); int lastUnhighlighted = startIdx; - foreach (var match in GetMatches()) + foreach (MatchInfo match in GetMatches()) { // append non-highlighted text between last match and this for (int i = lastUnhighlighted; i < match.startIndex; i++) @@ -130,7 +125,7 @@ namespace UnityExplorer.CSConsole } // check caretIdx to determine inStringOrComment state - if (caretIdx >= match.startIndex && (caretIdx <= (matchEndIdx+1) || (caretIdx >= input.Length && matchEndIdx >= input.Length - 1))) + if (caretIdx >= match.startIndex && (caretIdx <= (matchEndIdx + 1) || (caretIdx >= input.Length && matchEndIdx >= input.Length - 1))) caretInStringOrComment = match.isStringOrComment; } @@ -158,7 +153,7 @@ namespace UnityExplorer.CSConsole bool anyMatch = false; int startIndex = CommittedIndex + 1; - foreach (var lexer in lexers) + foreach (Lexer lexer in lexers) { if (lexer.TryMatchCurrent(this)) { diff --git a/src/CSConsole/Lexers/CommentLexer.cs b/src/CSConsole/Lexers/CommentLexer.cs index afa605d..1da7777 100644 --- a/src/CSConsole/Lexers/CommentLexer.cs +++ b/src/CSConsole/Lexers/CommentLexer.cs @@ -1,6 +1,4 @@ -using System.Collections.Generic; -using System.Linq; -using UnityEngine; +using UnityEngine; namespace UnityExplorer.CSConsole.Lexers { @@ -13,7 +11,7 @@ namespace UnityExplorer.CSConsole.Lexers } // forest green - protected override Color HighlightColor => new Color(0.34f, 0.65f, 0.29f, 1.0f); + protected override Color HighlightColor => new(0.34f, 0.65f, 0.29f, 1.0f); public override bool TryMatchCurrent(LexerBuilder lexer) { diff --git a/src/CSConsole/Lexers/KeywordLexer.cs b/src/CSConsole/Lexers/KeywordLexer.cs index 34f4e81..54888ea 100644 --- a/src/CSConsole/Lexers/KeywordLexer.cs +++ b/src/CSConsole/Lexers/KeywordLexer.cs @@ -7,9 +7,9 @@ namespace UnityExplorer.CSConsole.Lexers public class KeywordLexer : Lexer { // system blue - protected override Color HighlightColor => new Color(0.33f, 0.61f, 0.83f, 1.0f); + protected override Color HighlightColor => new(0.33f, 0.61f, 0.83f, 1.0f); - public static readonly HashSet keywords = new HashSet + public static readonly HashSet keywords = new() { // reserved keywords "abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", "checked", "class", "const", "continue", @@ -28,15 +28,15 @@ namespace UnityExplorer.CSConsole.Lexers public override bool TryMatchCurrent(LexerBuilder lexer) { - var prev = lexer.Previous; - var first = lexer.Current; + char prev = lexer.Previous; + char first = lexer.Current; // check for keywords if (lexer.IsDelimiter(prev, true) && char.IsLetter(first)) { // can be a keyword... - var sb = new StringBuilder(); + StringBuilder sb = new(); sb.Append(lexer.Current); while (!lexer.EndOfInput && char.IsLetter(lexer.PeekNext())) sb.Append(lexer.Current); diff --git a/src/CSConsole/Lexers/Lexer.cs b/src/CSConsole/Lexers/Lexer.cs index 17e83f7..91b021d 100644 --- a/src/CSConsole/Lexers/Lexer.cs +++ b/src/CSConsole/Lexers/Lexer.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using System.Linq; using UnityEngine; -using UniverseLib; using UniverseLib.Utility; namespace UnityExplorer.CSConsole.Lexers diff --git a/src/CSConsole/Lexers/NumberLexer.cs b/src/CSConsole/Lexers/NumberLexer.cs index c1a4920..2226901 100644 --- a/src/CSConsole/Lexers/NumberLexer.cs +++ b/src/CSConsole/Lexers/NumberLexer.cs @@ -5,7 +5,7 @@ namespace UnityExplorer.CSConsole.Lexers public class NumberLexer : Lexer { // Maroon - protected override Color HighlightColor => new Color(0.58f, 0.33f, 0.33f, 1.0f); + protected override Color HighlightColor => new(0.58f, 0.33f, 0.33f, 1.0f); private bool IsNumeric(char c) => char.IsNumber(c) || c == '.'; diff --git a/src/CSConsole/Lexers/StringLexer.cs b/src/CSConsole/Lexers/StringLexer.cs index 776ed2b..28a7f8c 100644 --- a/src/CSConsole/Lexers/StringLexer.cs +++ b/src/CSConsole/Lexers/StringLexer.cs @@ -8,7 +8,7 @@ namespace UnityExplorer.CSConsole.Lexers public override IEnumerable Delimiters => new[] { '"', '\'', }; // orange - protected override Color HighlightColor => new Color(0.79f, 0.52f, 0.32f, 1.0f); + protected override Color HighlightColor => new(0.79f, 0.52f, 0.32f, 1.0f); public override bool TryMatchCurrent(LexerBuilder lexer) { diff --git a/src/CSConsole/Lexers/SymbolLexer.cs b/src/CSConsole/Lexers/SymbolLexer.cs index c6e7e9a..6c6cf93 100644 --- a/src/CSConsole/Lexers/SymbolLexer.cs +++ b/src/CSConsole/Lexers/SymbolLexer.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; namespace UnityExplorer.CSConsole.Lexers @@ -8,14 +7,14 @@ namespace UnityExplorer.CSConsole.Lexers public class SymbolLexer : Lexer { // silver - protected override Color HighlightColor => new Color(0.6f, 0.6f, 0.6f); + protected override Color HighlightColor => new(0.6f, 0.6f, 0.6f); // all symbols are delimiters public override IEnumerable Delimiters => symbols.Where(it => it != '.'); // '.' is not a delimiter, only a separator. public static bool IsSymbol(char c) => symbols.Contains(c); - public static readonly HashSet symbols = new HashSet + public static readonly HashSet symbols = new() { '[', '{', '(', // open ']', '}', ')', // close diff --git a/src/CSConsole/ScriptEvaluator.cs b/src/CSConsole/ScriptEvaluator.cs index 21b9377..7680542 100644 --- a/src/CSConsole/ScriptEvaluator.cs +++ b/src/CSConsole/ScriptEvaluator.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; using System.IO; using System.Reflection; -using System.Text; // Thanks to ManlyMarco for this @@ -13,7 +12,10 @@ namespace UnityExplorer.CSConsole { private static readonly HashSet StdLib = new(StringComparer.InvariantCultureIgnoreCase) { - "mscorlib", "System.Core", "System", "System.Xml" + "mscorlib", + "System.Core", + "System", + "System.Xml" }; internal TextWriter _textWriter; @@ -45,7 +47,7 @@ namespace UnityExplorer.CSConsole private void Reference(Assembly asm) { - var name = asm.GetName().Name; + string name = asm.GetName().Name; if (name == "completions") return; ReferenceAssembly(asm); @@ -55,7 +57,7 @@ namespace UnityExplorer.CSConsole { _reportPrinter = new StreamReportPrinter(tw); - var settings = new CompilerSettings + CompilerSettings settings = new() { Version = LanguageVersion.Experimental, GenerateDebugInfo = false, diff --git a/src/CSConsole/ScriptInteraction.cs b/src/CSConsole/ScriptInteraction.cs index b13cc24..dc0bb04 100644 --- a/src/CSConsole/ScriptInteraction.cs +++ b/src/CSConsole/ScriptInteraction.cs @@ -2,11 +2,9 @@ using Mono.CSharp; using System; using System.Collections; -using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine; -using UnityExplorer.Runtime; using UnityExplorer.UI.Panels; using UniverseLib; @@ -29,16 +27,16 @@ namespace UnityExplorer.CSConsole public static void Inspect(Type type) => InspectorManager.Inspect(type); - public static Coroutine Start(IEnumerator ienumerator) + public static Coroutine Start(IEnumerator ienumerator) => RuntimeHelper.StartCoroutine(ienumerator); public static void Stop(Coroutine coro) => RuntimeHelper.StopCoroutine(coro); - public static void Copy(object obj) + public static void Copy(object obj) => ClipboardPanel.Copy(obj); - public static object Paste() + public static object Paste() => ClipboardPanel.Current; public static void GetUsing() @@ -46,7 +44,7 @@ namespace UnityExplorer.CSConsole public static void GetVars() { - var vars = Evaluator.GetVars()?.Trim(); + string vars = Evaluator.GetVars()?.Trim(); if (string.IsNullOrEmpty(vars)) ExplorerCore.LogWarning("No variables seem to be defined!"); else @@ -59,12 +57,12 @@ namespace UnityExplorer.CSConsole .GetValue(Evaluator) is CompilationSourceFile sourceFile && sourceFile.Containers.Any()) { - var sb = new StringBuilder(); + StringBuilder sb = new(); sb.Append($"There are {sourceFile.Containers.Count} defined classes:"); foreach (TypeDefinition type in sourceFile.Containers.Where(it => it is TypeDefinition)) { sb.Append($"\n\n{type.MemberName.Name}:"); - foreach (var member in type.Members) + foreach (MemberCore member in type.Members) sb.Append($"\n\t- {member.AttributeTargets}: \"{member.MemberName.Name}\" ({member.ModFlags})"); } Log(sb.ToString()); diff --git a/src/CacheObject/CacheConfigEntry.cs b/src/CacheObject/CacheConfigEntry.cs index a5a93cf..6c8d663 100644 --- a/src/CacheObject/CacheConfigEntry.cs +++ b/src/CacheObject/CacheConfigEntry.cs @@ -1,9 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using UnityExplorer.CacheObject.Views; using UnityExplorer.Config; -using UnityExplorer.CacheObject.Views; namespace UnityExplorer.CacheObject { diff --git a/src/CacheObject/CacheConstructor.cs b/src/CacheObject/CacheConstructor.cs index 3a2e973..3298444 100644 --- a/src/CacheObject/CacheConstructor.cs +++ b/src/CacheObject/CacheConstructor.cs @@ -1,8 +1,5 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Reflection; -using System.Text; using UnityExplorer.Inspectors; using UniverseLib.Utility; @@ -52,7 +49,7 @@ namespace UnityExplorer.CacheObject Arguments = CtorInfo.GetParameters(); ctorReturnType = CtorInfo.DeclaringType; } - + if (ctorReturnType.IsGenericTypeDefinition) GenericArguments = ctorReturnType.GetGenericArguments(); } diff --git a/src/CacheObject/CacheField.cs b/src/CacheObject/CacheField.cs index 65ee59a..c804404 100644 --- a/src/CacheObject/CacheField.cs +++ b/src/CacheObject/CacheField.cs @@ -1,8 +1,5 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Reflection; -using System.Text; using UnityExplorer.Inspectors; namespace UnityExplorer.CacheObject @@ -31,7 +28,7 @@ namespace UnityExplorer.CacheObject { try { - var ret = FieldInfo.GetValue(DeclaringInstance); + object ret = FieldInfo.GetValue(DeclaringInstance); LastException = null; return ret; } diff --git a/src/CacheObject/CacheKeyValuePair.cs b/src/CacheObject/CacheKeyValuePair.cs index ffafba0..2fdd6ed 100644 --- a/src/CacheObject/CacheKeyValuePair.cs +++ b/src/CacheObject/CacheKeyValuePair.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityExplorer.CacheObject.IValues; using UnityExplorer.CacheObject.Views; using UniverseLib; @@ -41,7 +38,7 @@ namespace UnityExplorer.CacheObject this.DictKey = key; this.DisplayedKey = key.TryCast(); - var type = DisplayedKey.GetType(); + Type type = DisplayedKey.GetType(); if (ParseUtility.CanParse(type)) { KeyInputWanted = true; @@ -60,7 +57,7 @@ namespace UnityExplorer.CacheObject { base.SetDataToCell(cell); - var kvpCell = cell as CacheKeyValuePairCell; + CacheKeyValuePairCell kvpCell = cell as CacheKeyValuePairCell; kvpCell.NameLabel.text = $"{DictIndex}:"; kvpCell.HiddenNameLabel.Text = ""; diff --git a/src/CacheObject/CacheListEntry.cs b/src/CacheObject/CacheListEntry.cs index 5f5eefe..a0ef493 100644 --- a/src/CacheObject/CacheListEntry.cs +++ b/src/CacheObject/CacheListEntry.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityExplorer.CacheObject.IValues; +using UnityExplorer.CacheObject.IValues; using UnityExplorer.CacheObject.Views; namespace UnityExplorer.CacheObject @@ -25,7 +21,7 @@ namespace UnityExplorer.CacheObject { base.SetDataToCell(cell); - var listCell = cell as CacheListEntryCell; + CacheListEntryCell listCell = cell as CacheListEntryCell; listCell.NameLabel.text = $"{ListIndex}:"; listCell.HiddenNameLabel.Text = ""; diff --git a/src/CacheObject/CacheMember.cs b/src/CacheObject/CacheMember.cs index 850b787..52215c1 100644 --- a/src/CacheObject/CacheMember.cs +++ b/src/CacheObject/CacheMember.cs @@ -1,21 +1,12 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Reflection; -using System.Text; using UnityEngine; -using UnityExplorer.Runtime; using UnityExplorer.CacheObject.Views; using UnityExplorer.Inspectors; -using UniverseLib.UI.Models; -using UnityExplorer.UI; -using UniverseLib; -using UniverseLib.UI; using UnityExplorer.UI.Widgets; -using UniverseLib.Utility; +using UniverseLib; using UniverseLib.UI.ObjectPool; -using System.Collections; -using HarmonyLib; +using UniverseLib.Utility; namespace UnityExplorer.CacheObject { @@ -105,7 +96,7 @@ namespace UnityExplorer.CacheObject protected override bool TryAutoEvaluateIfUnitialized(CacheObjectCell objectcell) { - var cell = objectcell as CacheMemberCell; + CacheMemberCell cell = objectcell as CacheMemberCell; cell.EvaluateHolder.SetActive(!ShouldAutoEvaluate); if (!ShouldAutoEvaluate) diff --git a/src/CacheObject/CacheMemberFactory.cs b/src/CacheObject/CacheMemberFactory.cs index fd1acc9..b3103f7 100644 --- a/src/CacheObject/CacheMemberFactory.cs +++ b/src/CacheObject/CacheMemberFactory.cs @@ -1,14 +1,11 @@ -using System; -using System.Collections; +using HarmonyLib; +using System; using System.Collections.Generic; using System.Linq; using System.Reflection; -using System.Text; using UnityExplorer.Inspectors; using UnityExplorer.Runtime; using UniverseLib; -using HarmonyLib; -using HarmonyLib.Tools; namespace UnityExplorer.CacheObject { @@ -75,8 +72,8 @@ namespace UnityExplorer.CacheObject return sorted; } - static void TryCacheMember(MemberInfo member, List list, HashSet cachedSigs, - Type declaringType, ReflectionInspector inspector, bool ignorePropertyMethodInfos = true) + static void TryCacheMember(MemberInfo member, List list, HashSet cachedSigs, + Type declaringType, ReflectionInspector inspector, bool ignorePropertyMethodInfos = true) where T : CacheMember { try diff --git a/src/CacheObject/CacheMethod.cs b/src/CacheObject/CacheMethod.cs index decae29..d13daf6 100644 --- a/src/CacheObject/CacheMethod.cs +++ b/src/CacheObject/CacheMethod.cs @@ -1,10 +1,6 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Reflection; -using System.Text; using UnityExplorer.Inspectors; -using UniverseLib; using UniverseLib.Utility; namespace UnityExplorer.CacheObject @@ -18,7 +14,7 @@ namespace UnityExplorer.CacheObject public override bool ShouldAutoEvaluate => false; - public CacheMethod (MethodInfo mi) + public CacheMethod(MethodInfo mi) { this.MethodInfo = mi; } @@ -36,14 +32,14 @@ namespace UnityExplorer.CacheObject { try { - var methodInfo = MethodInfo; + MethodInfo methodInfo = MethodInfo; if (methodInfo.IsGenericMethod) methodInfo = MethodInfo.MakeGenericMethod(Evaluator.TryParseGenericArguments()); object ret; if (HasArguments) ret = methodInfo.Invoke(DeclaringInstance, Evaluator.TryParseArguments()); - else + else ret = methodInfo.Invoke(DeclaringInstance, ArgumentUtility.EmptyArgs); LastException = null; return ret; diff --git a/src/CacheObject/CacheObjectBase.cs b/src/CacheObject/CacheObjectBase.cs index c24c43c..1dfd24b 100644 --- a/src/CacheObject/CacheObjectBase.cs +++ b/src/CacheObject/CacheObjectBase.cs @@ -1,20 +1,12 @@ using System; using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Runtime; using UnityExplorer.CacheObject.IValues; using UnityExplorer.CacheObject.Views; -using UniverseLib.UI.Models; -using UnityExplorer.UI; using UniverseLib; using UniverseLib.UI; -using UniverseLib.Utility; using UniverseLib.UI.ObjectPool; +using UniverseLib.Utility; namespace UnityExplorer.CacheObject { @@ -134,7 +126,7 @@ namespace UnityExplorer.CacheObject protected virtual void ProcessOnEvaluate() { - var prevState = State; + ValueState prevState = State; if (LastException != null) { @@ -319,7 +311,7 @@ namespace UnityExplorer.CacheObject SetValueState(cell, new(true, inspectActive: !LastValueWasNull, subContentButtonActive: !LastValueWasNull)); break; case ValueState.Unsupported: - SetValueState(cell, new (true, inspectActive: !LastValueWasNull)); + SetValueState(cell, new(true, inspectActive: !LastValueWasNull)); break; } @@ -369,7 +361,7 @@ namespace UnityExplorer.CacheObject // set subcontent button if needed, and for null strings and exceptions cell.SubContentButton.Component.gameObject.SetActive( - args.subContentButtonActive + args.subContentButtonActive && (!LastValueWasNull || State == ValueState.String || State == ValueState.Exception)); } @@ -474,12 +466,12 @@ namespace UnityExplorer.CacheObject public Color valueColor; public bool valueActive, valueRichText, typeLabelActive, toggleActive, inputActive, applyActive, inspectActive, subContentButtonActive; - public ValueStateArgs(bool valueActive = true, - bool valueRichText = true, + public ValueStateArgs(bool valueActive = true, + bool valueRichText = true, Color? valueColor = null, - bool typeLabelActive = false, - bool toggleActive = false, - bool inputActive = false, + bool typeLabelActive = false, + bool toggleActive = false, + bool inputActive = false, bool applyActive = false, bool inspectActive = false, bool subContentButtonActive = false) diff --git a/src/CacheObject/CacheProperty.cs b/src/CacheObject/CacheProperty.cs index b15f12d..fb10445 100644 --- a/src/CacheObject/CacheProperty.cs +++ b/src/CacheObject/CacheProperty.cs @@ -1,11 +1,6 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Reflection; -using System.Text; -using UnityEngine; using UnityExplorer.Inspectors; -using UnityExplorer.Runtime; namespace UnityExplorer.CacheObject { diff --git a/src/CacheObject/ICacheObjectController.cs b/src/CacheObject/ICacheObjectController.cs index 941e37d..d4c9234 100644 --- a/src/CacheObject/ICacheObjectController.cs +++ b/src/CacheObject/ICacheObjectController.cs @@ -1,9 +1,5 @@ using System; using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityExplorer.CacheObject; using UnityExplorer.CacheObject.Views; namespace UnityExplorer.CacheObject @@ -33,7 +29,7 @@ namespace UnityExplorer.CacheObject return; } - var entry = (CacheObjectBase)cachedEntries[index]; + CacheObjectBase entry = (CacheObjectBase)cachedEntries[index]; if (entry.CellView != null && entry.CellView != cell) entry.UnlinkFromView(); diff --git a/src/CacheObject/IValues/InteractiveColor.cs b/src/CacheObject/IValues/InteractiveColor.cs index 2727fcc..32150d2 100644 --- a/src/CacheObject/IValues/InteractiveColor.cs +++ b/src/CacheObject/IValues/InteractiveColor.cs @@ -1,11 +1,6 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityEngine; using UnityEngine.UI; -using UnityExplorer.CacheObject; -using UnityExplorer.UI; using UniverseLib.UI; using UniverseLib.UI.Models; using UniverseLib; @@ -32,9 +27,9 @@ namespace UnityExplorer.CacheObject.IValues applyButton.Component.gameObject.SetActive(owner.CanWrite); - foreach (var slider in sliders) + foreach (Slider slider in sliders) slider.interactable = owner.CanWrite; - foreach (var input in inputs) + foreach (InputFieldRef input in inputs) input.Component.readOnly = !owner.CanWrite; } @@ -54,7 +49,7 @@ namespace UnityExplorer.CacheObject.IValues inputs[1].Text = c32.g.ToString(); inputs[2].Text = c32.b.ToString(); inputs[3].Text = c32.a.ToString(); - foreach (var slider in sliders) + foreach (Slider slider in sliders) slider.maxValue = 255; } else @@ -65,7 +60,7 @@ namespace UnityExplorer.CacheObject.IValues inputs[1].Text = EditedColor.g.ToString(); inputs[2].Text = EditedColor.b.ToString(); inputs[3].Text = EditedColor.a.ToString(); - foreach (var slider in sliders) + foreach (Slider slider in sliders) slider.maxValue = 1; } @@ -156,12 +151,12 @@ namespace UnityExplorer.CacheObject.IValues // hori group - var horiGroup = UIFactory.CreateHorizontalGroup(UIRoot, "ColorEditor", false, false, true, true, 5, + GameObject horiGroup = UIFactory.CreateHorizontalGroup(UIRoot, "ColorEditor", false, false, true, true, 5, default, new Color(1, 1, 1, 0), TextAnchor.MiddleLeft); // sliders / inputs - var grid = UIFactory.CreateGridGroup(horiGroup, "Grid", new Vector2(140, 25), new Vector2(2, 2), new Color(1, 1, 1, 0)); + GameObject grid = UIFactory.CreateGridGroup(horiGroup, "Grid", new Vector2(140, 25), new Vector2(2, 2), new Color(1, 1, 1, 0)); UIFactory.SetLayoutElement(grid, minWidth: 580, minHeight: 25, flexibleWidth: 0); for (int i = 0; i < 4; i++) @@ -175,7 +170,7 @@ namespace UnityExplorer.CacheObject.IValues // image of color - var imgObj = UIFactory.CreateUIObject("ColorImageHelper", horiGroup); + GameObject imgObj = UIFactory.CreateUIObject("ColorImageHelper", horiGroup); UIFactory.SetLayoutElement(imgObj, minHeight: 25, minWidth: 50, flexibleWidth: 50); colorImage = imgObj.AddComponent(); @@ -184,18 +179,18 @@ namespace UnityExplorer.CacheObject.IValues internal void AddEditorRow(int index, GameObject groupObj) { - var row = UIFactory.CreateHorizontalGroup(groupObj, "EditorRow_" + fieldNames[index], + GameObject row = UIFactory.CreateHorizontalGroup(groupObj, "EditorRow_" + fieldNames[index], false, true, true, true, 5, default, new Color(1, 1, 1, 0)); - var label = UIFactory.CreateLabel(row, "RowLabel", $"{fieldNames[index]}:", TextAnchor.MiddleRight, Color.cyan); + Text label = UIFactory.CreateLabel(row, "RowLabel", $"{fieldNames[index]}:", TextAnchor.MiddleRight, Color.cyan); UIFactory.SetLayoutElement(label.gameObject, minWidth: 17, flexibleWidth: 0, minHeight: 25); - var input = UIFactory.CreateInputField(row, "Input", "..."); + InputFieldRef input = UIFactory.CreateInputField(row, "Input", "..."); UIFactory.SetLayoutElement(input.UIRoot, minWidth: 40, minHeight: 25, flexibleHeight: 0); inputs[index] = input; input.OnValueChanged += (string val) => { OnInputChanged(val, index); }; - var sliderObj = UIFactory.CreateSlider(row, "Slider", out Slider slider); + GameObject sliderObj = UIFactory.CreateSlider(row, "Slider", out Slider slider); sliders[index] = slider; UIFactory.SetLayoutElement(sliderObj, minHeight: 25, minWidth: 70, flexibleWidth: 999, flexibleHeight: 0); slider.minValue = 0; diff --git a/src/CacheObject/IValues/InteractiveDictionary.cs b/src/CacheObject/IValues/InteractiveDictionary.cs index 77b87d6..23c97b4 100644 --- a/src/CacheObject/IValues/InteractiveDictionary.cs +++ b/src/CacheObject/IValues/InteractiveDictionary.cs @@ -1,19 +1,12 @@ using System; using System.Collections; using System.Collections.Generic; -using System.Linq; -using System.Reflection; using UnityEngine; using UnityEngine.UI; -using UnityExplorer.CacheObject; using UnityExplorer.CacheObject.Views; -using UnityExplorer.Inspectors; -using UnityExplorer.UI; using UnityExplorer.UI.Panels; -using UnityExplorer.UI.Widgets; using UniverseLib; using UniverseLib.UI; -using UniverseLib.UI.Widgets; using UniverseLib.UI.Widgets.ScrollView; using UniverseLib.Utility; @@ -32,7 +25,7 @@ namespace UnityExplorer.CacheObject.IValues public IDictionary RefIDictionary; public int ItemCount => cachedEntries.Count; - private readonly List cachedEntries = new List(); + private readonly List cachedEntries = new(); public ScrollPool DictScrollPool { get; private set; } @@ -61,7 +54,7 @@ namespace UnityExplorer.CacheObject.IValues { RefIDictionary = null; - foreach (var entry in cachedEntries) + foreach (CacheKeyValuePair entry in cachedEntries) { entry.UnlinkFromView(); entry.ReleasePooledObjects(); @@ -80,7 +73,7 @@ namespace UnityExplorer.CacheObject.IValues } else { - var type = value.GetActualType(); + Type type = value.GetActualType(); ReflectionUtility.TryGetEntryTypes(type, out KeysType, out ValuesType); CacheEntries(value); @@ -124,7 +117,7 @@ namespace UnityExplorer.CacheObject.IValues { for (int i = cachedEntries.Count - 1; i >= idx; i--) { - var cache = cachedEntries[i]; + CacheKeyValuePair cache = cachedEntries[i]; if (cache.CellView != null) cache.UnlinkFromView(); @@ -153,7 +146,7 @@ namespace UnityExplorer.CacheObject.IValues RefIDictionary[key] = value; - var entry = cachedEntries[keyIndex]; + CacheKeyValuePair entry = cachedEntries[keyIndex]; entry.SetValueFromSource(value); if (entry.CellView != null) entry.SetDataToCell(entry.CellView); @@ -177,12 +170,12 @@ namespace UnityExplorer.CacheObject.IValues public override void SetLayout() { - var minHeight = 5f; + float minHeight = 5f; KeyTitleLayout.minWidth = AdjustedWidth * 0.44f; ValueTitleLayout.minWidth = AdjustedWidth * 0.55f; - foreach (var cell in DictScrollPool.CellPool) + foreach (CacheKeyValuePairCell cell in DictScrollPool.CellPool) { SetCellLayout(cell); if (cell.Enabled) @@ -194,7 +187,7 @@ namespace UnityExplorer.CacheObject.IValues private void SetCellLayout(CacheObjectCell objcell) { - var cell = objcell as CacheKeyValuePairCell; + CacheKeyValuePairCell cell = objcell as CacheKeyValuePairCell; cell.KeyGroupLayout.minWidth = cell.AdjustedWidth * 0.44f; cell.RightGroupLayout.minWidth = cell.AdjustedWidth * 0.55f; @@ -221,15 +214,15 @@ namespace UnityExplorer.CacheObject.IValues // key / value titles - var titleGroup = UIFactory.CreateUIObject("TitleGroup", UIRoot); + GameObject titleGroup = UIFactory.CreateUIObject("TitleGroup", UIRoot); UIFactory.SetLayoutElement(titleGroup, minHeight: 25, flexibleWidth: 9999, flexibleHeight: 0); UIFactory.SetLayoutGroup(titleGroup, false, true, true, true, padLeft: 65, padRight: 0, childAlignment: TextAnchor.LowerLeft); - var keyTitle = UIFactory.CreateLabel(titleGroup, "KeyTitle", "Keys", TextAnchor.MiddleLeft); + Text keyTitle = UIFactory.CreateLabel(titleGroup, "KeyTitle", "Keys", TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(keyTitle.gameObject, minWidth: 100, flexibleWidth: 0); KeyTitleLayout = keyTitle.GetComponent(); - var valueTitle = UIFactory.CreateLabel(titleGroup, "ValueTitle", "Values", TextAnchor.MiddleLeft); + Text valueTitle = UIFactory.CreateLabel(titleGroup, "ValueTitle", "Values", TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(valueTitle.gameObject, minWidth: 100, flexibleWidth: 0); ValueTitleLayout = valueTitle.GetComponent(); diff --git a/src/CacheObject/IValues/InteractiveEnum.cs b/src/CacheObject/IValues/InteractiveEnum.cs index 0eb6d31..f54e30e 100644 --- a/src/CacheObject/IValues/InteractiveEnum.cs +++ b/src/CacheObject/IValues/InteractiveEnum.cs @@ -2,13 +2,9 @@ using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; -using System.Text; using UnityEngine; using UnityEngine.UI; -using UnityExplorer.CacheObject; -using UnityExplorer.UI; using UnityExplorer.UI.Widgets.AutoComplete; -using UniverseLib; using UniverseLib.UI; using UniverseLib.UI.Models; using UniverseLib.Utility; @@ -110,7 +106,7 @@ namespace UnityExplorer.CacheObject.IValues { try { - List values = new List(); + List values = new(); for (int i = 0; i < CurrentValues.Count; i++) { if (flagToggles[i].isOn) @@ -138,11 +134,11 @@ namespace UnityExplorer.CacheObject.IValues new Color(0.06f, 0.06f, 0.06f)); UIFactory.SetLayoutElement(UIRoot, minHeight: 25, flexibleHeight: 9999, flexibleWidth: 9999); - var hori = UIFactory.CreateUIObject("Hori", UIRoot); + GameObject hori = UIFactory.CreateUIObject("Hori", UIRoot); UIFactory.SetLayoutElement(hori, minHeight: 25, flexibleWidth: 9999); UIFactory.SetLayoutGroup(hori, false, false, true, true, 2); - var applyButton = UIFactory.CreateButton(hori, "ApplyButton", "Apply", new Color(0.2f, 0.27f, 0.2f)); + ButtonRef applyButton = UIFactory.CreateButton(hori, "ApplyButton", "Apply", new Color(0.2f, 0.27f, 0.2f)); UIFactory.SetLayoutElement(applyButton.Component.gameObject, minHeight: 25, minWidth: 100); applyButton.OnClick += OnApplyClicked; @@ -192,11 +188,11 @@ namespace UnityExplorer.CacheObject.IValues private void AddToggleRow() { - var row = UIFactory.CreateUIObject("ToggleRow", toggleHolder); + GameObject row = UIFactory.CreateUIObject("ToggleRow", toggleHolder); UIFactory.SetLayoutGroup(row, false, false, true, true, 2); UIFactory.SetLayoutElement(row, minHeight: 25, flexibleWidth: 9999); - var toggleObj = UIFactory.CreateToggle(row, "ToggleObj", out Toggle toggle, out Text toggleText); + GameObject toggleObj = UIFactory.CreateToggle(row, "ToggleObj", out Toggle toggle, out Text toggleText); UIFactory.SetLayoutElement(toggleObj, minHeight: 25, flexibleWidth: 9999); flagToggles.Add(toggle); @@ -205,7 +201,7 @@ namespace UnityExplorer.CacheObject.IValues #region Enum cache - internal static readonly Dictionary enumCache = new Dictionary(); + internal static readonly Dictionary enumCache = new(); internal static OrderedDictionary GetEnumValues(Type enumType) { @@ -213,13 +209,13 @@ namespace UnityExplorer.CacheObject.IValues if (!enumCache.ContainsKey(enumType.AssemblyQualifiedName)) { - var dict = new OrderedDictionary(); - var addedNames = new HashSet(); + OrderedDictionary dict = new(); + HashSet addedNames = new(); int i = 0; - foreach (var value in Enum.GetValues(enumType)) + foreach (object value in Enum.GetValues(enumType)) { - var name = value.ToString(); + string name = value.ToString(); if (addedNames.Contains(name)) continue; addedNames.Add(name); diff --git a/src/CacheObject/IValues/InteractiveList.cs b/src/CacheObject/IValues/InteractiveList.cs index b0b6629..45183c2 100644 --- a/src/CacheObject/IValues/InteractiveList.cs +++ b/src/CacheObject/IValues/InteractiveList.cs @@ -5,15 +5,10 @@ using System.Linq; using System.Reflection; using UnityEngine; using UnityEngine.UI; -using UnityExplorer.CacheObject; using UnityExplorer.CacheObject.Views; -using UnityExplorer.Inspectors; -using UnityExplorer.UI; using UnityExplorer.UI.Panels; -using UnityExplorer.UI.Widgets; using UniverseLib; using UniverseLib.UI; -using UniverseLib.UI.Widgets; using UniverseLib.UI.Widgets.ScrollView; using UniverseLib.Utility; @@ -60,7 +55,7 @@ namespace UnityExplorer.CacheObject.IValues { RefIList = null; - foreach (var entry in cachedEntries) + foreach (CacheListEntry entry in cachedEntries) { entry.UnlinkFromView(); entry.ReleasePooledObjects(); @@ -73,9 +68,9 @@ namespace UnityExplorer.CacheObject.IValues public override void SetLayout() { - var minHeight = 5f; + float minHeight = 5f; - foreach (var cell in ListScrollPool.CellPool) + foreach (CacheListEntryCell cell in ListScrollPool.CellPool) { if (cell.Enabled) minHeight += cell.Rect.rect.height; @@ -102,7 +97,7 @@ namespace UnityExplorer.CacheObject.IValues } else { - var type = value.GetActualType(); + Type type = value.GetActualType(); ReflectionUtility.TryGetEntryType(type, out EntryType); CacheEntries(value); @@ -132,7 +127,7 @@ namespace UnityExplorer.CacheObject.IValues while (enumerator.MoveNext()) { - var entry = enumerator.Current; + object entry = enumerator.Current; // If list count increased, create new cache entries CacheListEntry cache; @@ -155,7 +150,7 @@ namespace UnityExplorer.CacheObject.IValues { for (int i = cachedEntries.Count - 1; i >= idx; i--) { - var cache = cachedEntries[i]; + CacheListEntry cache = cachedEntries[i]; if (cache.CellView != null) cache.UnlinkFromView(); @@ -174,7 +169,7 @@ namespace UnityExplorer.CacheObject.IValues { try { - var type = value.GetType(); + Type type = value.GetType(); if (type.GetInterfaces().Any(it => it.IsGenericType && it.GetGenericTypeDefinition() == typeof(IList<>))) IsWritableGenericIList = !(bool)type.GetProperty("IsReadOnly").GetValue(value, null); else @@ -184,7 +179,7 @@ namespace UnityExplorer.CacheObject.IValues { // Find the "this[int index]" property. // It might be a private implementation. - foreach (var prop in type.GetProperties(ReflectionUtility.FLAGS)) + foreach (PropertyInfo prop in type.GetProperties(ReflectionUtility.FLAGS)) { if ((prop.Name == "Item" || (prop.Name.StartsWith("System.Collections.Generic.IList<") && prop.Name.EndsWith(">.Item"))) @@ -226,7 +221,7 @@ namespace UnityExplorer.CacheObject.IValues genericIndexer.SetValue(CurrentOwner.Value, value, new object[] { index }); } - var entry = cachedEntries[index]; + CacheListEntry entry = cachedEntries[index]; entry.SetValueFromSource(value); if (entry.CellView != null) diff --git a/src/CacheObject/IValues/InteractiveString.cs b/src/CacheObject/IValues/InteractiveString.cs index 7f3f817..f5c184e 100644 --- a/src/CacheObject/IValues/InteractiveString.cs +++ b/src/CacheObject/IValues/InteractiveString.cs @@ -1,16 +1,8 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; +using System.IO; using UnityEngine; using UnityEngine.UI; using UnityExplorer.Config; -using UnityExplorer.CacheObject; -using UnityExplorer.UI.Widgets; -using UnityExplorer.UI; using UniverseLib.UI; -using UniverseLib; using UniverseLib.UI.Models; using UniverseLib.Utility; @@ -88,7 +80,7 @@ namespace UnityExplorer.CacheObject.IValues return; } - var path = IOUtility.EnsureValidFilePath(SaveFilePath.Text); + string path = IOUtility.EnsureValidFilePath(SaveFilePath.Text); if (File.Exists(path)) File.Delete(path); @@ -110,10 +102,10 @@ namespace UnityExplorer.CacheObject.IValues UIFactory.CreateLabel(SaveFileRow, "Info", "String is too long! Save to file if you want to see the full string.", TextAnchor.MiddleLeft); - var horizRow = UIFactory.CreateUIObject("Horiz", SaveFileRow); + GameObject horizRow = UIFactory.CreateUIObject("Horiz", SaveFileRow); UIFactory.SetLayoutGroup(horizRow, false, false, true, true, 4); - var saveButton = UIFactory.CreateButton(horizRow, "SaveButton", "Save file"); + ButtonRef saveButton = UIFactory.CreateButton(horizRow, "SaveButton", "Save file"); UIFactory.SetLayoutElement(saveButton.Component.gameObject, minHeight: 25, minWidth: 100, flexibleWidth: 0); saveButton.OnClick += OnSaveFileClicked; diff --git a/src/CacheObject/IValues/InteractiveValue.cs b/src/CacheObject/IValues/InteractiveValue.cs index 334cec1..598a833 100644 --- a/src/CacheObject/IValues/InteractiveValue.cs +++ b/src/CacheObject/IValues/InteractiveValue.cs @@ -1,13 +1,5 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.CacheObject; -using UnityExplorer.UI; -using UniverseLib.UI; -using UniverseLib.UI.Models; using UniverseLib.UI.ObjectPool; namespace UnityExplorer.CacheObject.IValues diff --git a/src/CacheObject/IValues/InteractiveValueStruct.cs b/src/CacheObject/IValues/InteractiveValueStruct.cs index 5de1d43..8e6c200 100644 --- a/src/CacheObject/IValues/InteractiveValueStruct.cs +++ b/src/CacheObject/IValues/InteractiveValueStruct.cs @@ -2,11 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; -using System.Text; using UnityEngine; using UnityEngine.UI; -using UnityExplorer.CacheObject; -using UnityExplorer.UI; using UniverseLib; using UniverseLib.UI; using UniverseLib.UI.Models; @@ -31,7 +28,7 @@ namespace UnityExplorer.CacheObject.IValues public void SetValue(object instance, string input, int fieldIndex) { - var field = Fields[fieldIndex]; + FieldInfo field = Fields[fieldIndex]; object val; if (field.FieldType == typeof(string)) @@ -51,8 +48,8 @@ namespace UnityExplorer.CacheObject.IValues public string GetValue(object instance, int fieldIndex) { - var field = Fields[fieldIndex]; - var value = field.GetValue(instance); + FieldInfo field = Fields[fieldIndex]; + object value = field.GetValue(instance); return ParseUtility.ToStringForInput(value, field.FieldType); } } @@ -67,12 +64,12 @@ namespace UnityExplorer.CacheObject.IValues if (!type.IsValueType || string.IsNullOrEmpty(type.AssemblyQualifiedName) || type.FullName == SYSTEM_VOID) return false; - if (typeSupportCache.TryGetValue(type.AssemblyQualifiedName, out var info)) + if (typeSupportCache.TryGetValue(type.AssemblyQualifiedName, out StructInfo info)) return info.IsSupported; - var supported = false; + bool supported = false; - var fields = type.GetFields(INSTANCE_FLAGS); + FieldInfo[] fields = type.GetFields(INSTANCE_FLAGS); if (fields.Length > 0) { if (fields.Any(it => !ParseUtility.CanParse(it.FieldType))) @@ -100,9 +97,9 @@ namespace UnityExplorer.CacheObject.IValues private Type lastStructType; private ButtonRef applyButton; - private readonly List fieldRows = new List(); - private readonly List inputFields = new List(); - private readonly List labels = new List(); + private readonly List fieldRows = new(); + private readonly List inputFields = new(); + private readonly List labels = new(); public override void OnBorrowed(CacheObjectBase owner) { @@ -117,7 +114,7 @@ namespace UnityExplorer.CacheObject.IValues { RefInstance = value; - var type = RefInstance.GetType(); + Type type = RefInstance.GetType(); if (type != lastStructType) { @@ -177,21 +174,21 @@ namespace UnityExplorer.CacheObject.IValues private void AddEditorRow() { - var row = UIFactory.CreateUIObject("HoriGroup", UIRoot); + GameObject row = UIFactory.CreateUIObject("HoriGroup", UIRoot); //row.AddComponent().horizontalFit = ContentSizeFitter.FitMode.PreferredSize; UIFactory.SetLayoutElement(row, minHeight: 25, flexibleWidth: 9999); UIFactory.SetLayoutGroup(row, false, false, true, true, 8, childAlignment: TextAnchor.MiddleLeft); fieldRows.Add(row); - var label = UIFactory.CreateLabel(row, "Label", "notset", TextAnchor.MiddleLeft); + Text label = UIFactory.CreateLabel(row, "Label", "notset", TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(label.gameObject, minHeight: 25, minWidth: 50, flexibleWidth: 0); label.horizontalOverflow = HorizontalWrapMode.Wrap; labels.Add(label); - var input = UIFactory.CreateInputField(row, "InputField", "..."); + InputFieldRef input = UIFactory.CreateInputField(row, "InputField", "..."); UIFactory.SetLayoutElement(input.UIRoot, minHeight: 25, minWidth: 200); - var fitter = input.UIRoot.AddComponent(); + ContentSizeFitter fitter = input.UIRoot.AddComponent(); fitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; fitter.horizontalFit = ContentSizeFitter.FitMode.PreferredSize; input.Component.lineType = InputField.LineType.MultiLineNewline; diff --git a/src/CacheObject/Views/CacheConfigCell.cs b/src/CacheObject/Views/CacheConfigCell.cs index 75dae2e..f391af2 100644 --- a/src/CacheObject/Views/CacheConfigCell.cs +++ b/src/CacheObject/Views/CacheConfigCell.cs @@ -1,13 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; using UnityEngine.UI; -using UnityExplorer.UI; -using UniverseLib; using UniverseLib.UI; using UniverseLib.Utility; +using UniverseLib; namespace UnityExplorer.CacheObject.Views { @@ -32,7 +27,7 @@ namespace UnityExplorer.CacheObject.Views // horizontal group - var horiGroup = UIFactory.CreateUIObject("RightHoriGroup", UIRoot); + GameObject horiGroup = UIFactory.CreateUIObject("RightHoriGroup", UIRoot); UIFactory.SetLayoutGroup(horiGroup, false, false, true, true, 4, childAlignment: TextAnchor.UpperLeft); UIFactory.SetLayoutElement(horiGroup, minHeight: 25, minWidth: 200, flexibleWidth: 9999, flexibleHeight: 800); @@ -48,7 +43,7 @@ namespace UnityExplorer.CacheObject.Views // Bool and number value interaction - var toggleObj = UIFactory.CreateToggle(horiGroup, "Toggle", out Toggle, out ToggleText); + GameObject toggleObj = UIFactory.CreateToggle(horiGroup, "Toggle", out Toggle, out ToggleText); UIFactory.SetLayoutElement(toggleObj, minWidth: 70, minHeight: 25, flexibleWidth: 0, flexibleHeight: 0); ToggleText.color = SignatureHighlighter.KeywordBlue; Toggle.onValueChanged.AddListener(ToggleClicked); @@ -77,7 +72,7 @@ namespace UnityExplorer.CacheObject.Views SubContentHolder.SetActive(false); // Bottom separator - var separator = UIFactory.CreateUIObject("BottomSeperator", UIRoot); + GameObject separator = UIFactory.CreateUIObject("BottomSeperator", UIRoot); UIFactory.SetLayoutElement(separator, minHeight: 1, flexibleHeight: 0, flexibleWidth: 9999); separator.AddComponent().color = Color.black; diff --git a/src/CacheObject/Views/CacheKeyValuePairCell.cs b/src/CacheObject/Views/CacheKeyValuePairCell.cs index 3607e51..37d712c 100644 --- a/src/CacheObject/Views/CacheKeyValuePairCell.cs +++ b/src/CacheObject/Views/CacheKeyValuePairCell.cs @@ -1,13 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; using UnityEngine.UI; using UnityExplorer.CacheObject.IValues; -using UnityExplorer.Inspectors; -using UnityExplorer.UI; -using UnityExplorer.UI.Widgets; using UniverseLib.UI; using UniverseLib.UI.Models; @@ -24,8 +17,8 @@ namespace UnityExplorer.CacheObject.Views public InputFieldRef KeyInputField; public Text KeyInputTypeLabel; - public static Color EvenColor = new Color(0.07f, 0.07f, 0.07f); - public static Color OddColor = new Color(0.063f, 0.063f, 0.063f); + public static Color EvenColor = new(0.07f, 0.07f, 0.07f); + public static Color OddColor = new(0.063f, 0.063f, 0.063f); public int AdjustedWidth => (int)Rect.rect.width - 70; @@ -40,7 +33,7 @@ namespace UnityExplorer.CacheObject.Views public override GameObject CreateContent(GameObject parent) { - var root = base.CreateContent(parent); + GameObject root = base.CreateContent(parent); Image = root.AddComponent(); @@ -53,7 +46,7 @@ namespace UnityExplorer.CacheObject.Views this.RightGroupLayout.minWidth = AdjustedWidth * 0.55f; // Key area - var keyGroup = UIFactory.CreateUIObject("KeyHolder", root.transform.Find("HoriGroup").gameObject); + GameObject keyGroup = UIFactory.CreateUIObject("KeyHolder", root.transform.Find("HoriGroup").gameObject); UIFactory.SetLayoutGroup(keyGroup, false, false, true, true, 2, 0, 0, 4, 4, childAlignment: TextAnchor.MiddleLeft); KeyGroupLayout = UIFactory.SetLayoutElement(keyGroup, minHeight: 30, minWidth: (int)(AdjustedWidth * 0.44f), flexibleWidth: 0); diff --git a/src/CacheObject/Views/CacheListEntryCell.cs b/src/CacheObject/Views/CacheListEntryCell.cs index 43a92af..6e685fc 100644 --- a/src/CacheObject/Views/CacheListEntryCell.cs +++ b/src/CacheObject/Views/CacheListEntryCell.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; using UnityEngine.UI; using UnityExplorer.CacheObject.IValues; @@ -13,12 +9,12 @@ namespace UnityExplorer.CacheObject.Views public Image Image { get; private set; } public InteractiveList ListOwner => Occupant.Owner as InteractiveList; - public static Color EvenColor = new Color(0.12f, 0.12f, 0.12f); - public static Color OddColor = new Color(0.1f, 0.1f, 0.1f); + public static Color EvenColor = new(0.12f, 0.12f, 0.12f); + public static Color OddColor = new(0.1f, 0.1f, 0.1f); public override GameObject CreateContent(GameObject parent) { - var root = base.CreateContent(parent); + GameObject root = base.CreateContent(parent); Image = root.AddComponent(); diff --git a/src/CacheObject/Views/CacheMemberCell.cs b/src/CacheObject/Views/CacheMemberCell.cs index 446eb3d..f200a2d 100644 --- a/src/CacheObject/Views/CacheMemberCell.cs +++ b/src/CacheObject/Views/CacheMemberCell.cs @@ -1,11 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; using UnityEngine.UI; -using UnityExplorer.UI; -using UnityExplorer.UI.Widgets; using UniverseLib.UI; using UniverseLib.UI.Models; diff --git a/src/CacheObject/Views/CacheObjectCell.cs b/src/CacheObject/Views/CacheObjectCell.cs index 4238961..a954877 100644 --- a/src/CacheObject/Views/CacheObjectCell.cs +++ b/src/CacheObject/Views/CacheObjectCell.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; using UnityEngine.UI; using UnityExplorer.UI.Panels; using UniverseLib; @@ -116,7 +112,7 @@ namespace UnityExplorer.CacheObject.Views UIFactory.SetLayoutElement(UIRoot, minWidth: 100, flexibleWidth: 9999, minHeight: 30, flexibleHeight: 600); UIRoot.AddComponent().verticalFit = ContentSizeFitter.FitMode.PreferredSize; - var horiRow = UIFactory.CreateUIObject("HoriGroup", UIRoot); + GameObject horiRow = UIFactory.CreateUIObject("HoriGroup", UIRoot); UIFactory.SetLayoutElement(horiRow, minHeight: 29, flexibleHeight: 150, flexibleWidth: 9999); UIFactory.SetLayoutGroup(horiRow, false, false, true, true, 5, 2, childAlignment: TextAnchor.UpperLeft); horiRow.AddComponent().verticalFit = ContentSizeFitter.FitMode.PreferredSize; @@ -129,7 +125,7 @@ namespace UnityExplorer.CacheObject.Views UIFactory.SetLayoutGroup(NameLabel.gameObject, true, true, true, true); HiddenNameLabel = UIFactory.CreateInputField(NameLabel.gameObject, "HiddenNameLabel", ""); - var hiddenRect = HiddenNameLabel.Component.GetComponent(); + RectTransform hiddenRect = HiddenNameLabel.Component.GetComponent(); hiddenRect.anchorMin = Vector2.zero; hiddenRect.anchorMax = Vector2.one; HiddenNameLabel.Component.readOnly = true; @@ -150,7 +146,7 @@ namespace UnityExplorer.CacheObject.Views // Right horizontal group - var rightHoriGroup = UIFactory.CreateUIObject("RightHoriGroup", RightGroupContent); + GameObject rightHoriGroup = UIFactory.CreateUIObject("RightHoriGroup", RightGroupContent); UIFactory.SetLayoutGroup(rightHoriGroup, false, false, true, true, 4, childAlignment: TextAnchor.UpperLeft); UIFactory.SetLayoutElement(rightHoriGroup, minHeight: 25, minWidth: 200, flexibleWidth: 9999, flexibleHeight: 800); @@ -166,7 +162,7 @@ namespace UnityExplorer.CacheObject.Views // Bool and number value interaction - var toggleObj = UIFactory.CreateToggle(rightHoriGroup, "Toggle", out Toggle, out ToggleText); + GameObject toggleObj = UIFactory.CreateToggle(rightHoriGroup, "Toggle", out Toggle, out ToggleText); UIFactory.SetLayoutElement(toggleObj, minWidth: 70, minHeight: 25, flexibleWidth: 0, flexibleHeight: 0); ToggleText.color = SignatureHighlighter.KeywordBlue; Toggle.onValueChanged.AddListener(ToggleClicked); @@ -194,8 +190,8 @@ namespace UnityExplorer.CacheObject.Views // Copy and Paste buttons - var buttonHolder = UIFactory.CreateHorizontalGroup(rightHoriGroup, "CopyPasteButtons", false, false, true, true, 4, - bgColor: new(1,1,1,0), childAlignment: TextAnchor.MiddleLeft); + GameObject buttonHolder = UIFactory.CreateHorizontalGroup(rightHoriGroup, "CopyPasteButtons", false, false, true, true, 4, + bgColor: new(1, 1, 1, 0), childAlignment: TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(buttonHolder, minWidth: 60, flexibleWidth: 0); CopyButton = UIFactory.CreateButton(buttonHolder, "CopyButton", "Copy", new Color(0.13f, 0.13f, 0.13f, 1f)); @@ -219,7 +215,7 @@ namespace UnityExplorer.CacheObject.Views SubContentHolder.SetActive(false); // Bottom separator - var separator = UIFactory.CreateUIObject("BottomSeperator", UIRoot); + GameObject separator = UIFactory.CreateUIObject("BottomSeperator", UIRoot); UIFactory.SetLayoutElement(separator, minHeight: 1, flexibleHeight: 0, flexibleWidth: 9999); separator.AddComponent().color = Color.black; diff --git a/src/Config/ConfigElement.cs b/src/Config/ConfigElement.cs index b843696..ad9926a 100644 --- a/src/Config/ConfigElement.cs +++ b/src/Config/ConfigElement.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace UnityExplorer.Config { diff --git a/src/Config/ConfigHandler.cs b/src/Config/ConfigHandler.cs index 5b640e4..55ba254 100644 --- a/src/Config/ConfigHandler.cs +++ b/src/Config/ConfigHandler.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace UnityExplorer.Config +namespace UnityExplorer.Config { public abstract class ConfigHandler { diff --git a/src/Config/ConfigManager.cs b/src/Config/ConfigManager.cs index 1c68a81..a6a0a02 100644 --- a/src/Config/ConfigManager.cs +++ b/src/Config/ConfigManager.cs @@ -1,9 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Globalization; +using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; using UnityEngine; using UnityExplorer.UI; @@ -98,7 +94,7 @@ namespace UnityExplorer.Config "Optional keybind to being a World-mode Mouse Inspect.", KeyCode.None); - UI_MouseInspect_Keybind = new("UI Mouse-Inspect Keybind", + UI_MouseInspect_Keybind = new("UI Mouse-Inspect Keybind", "Optional keybind to begin a UI_mode Mouse Inspect.", KeyCode.None); diff --git a/src/Config/InternalConfigHandler.cs b/src/Config/InternalConfigHandler.cs index e98fe1f..9d79da1 100644 --- a/src/Config/InternalConfigHandler.cs +++ b/src/Config/InternalConfigHandler.cs @@ -1,12 +1,9 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityExplorer.UI; using Tomlet; using Tomlet.Models; +using UnityExplorer.UI; namespace UnityExplorer.Config { @@ -49,9 +46,9 @@ namespace UnityExplorer.Config return false; TomlDocument document = TomlParser.ParseFile(CONFIG_PATH); - foreach (var key in document.Keys) + foreach (string key in document.Keys) { - var panelKey = (UIManager.Panels)Enum.Parse(typeof(UIManager.Panels), key); + UIManager.Panels panelKey = (UIManager.Panels)Enum.Parse(typeof(UIManager.Panels), key); ConfigManager.GetPanelSaveData(panelKey).Value = document.GetString(key); } @@ -69,8 +66,8 @@ namespace UnityExplorer.Config if (UIManager.Initializing) return; - var tomlDocument = TomlDocument.CreateEmpty(); - foreach (var entry in ConfigManager.InternalConfigs) + TomlDocument tomlDocument = TomlDocument.CreateEmpty(); + foreach (KeyValuePair entry in ConfigManager.InternalConfigs) tomlDocument.Put(entry.Key, entry.Value.BoxedValue as string, false); File.WriteAllText(CONFIG_PATH, tomlDocument.SerializedValue); diff --git a/src/ExplorerBehaviour.cs b/src/ExplorerBehaviour.cs index c1dacee..703e669 100644 --- a/src/ExplorerBehaviour.cs +++ b/src/ExplorerBehaviour.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; #if CPP using UnhollowerRuntimeLib; #endif @@ -14,7 +10,7 @@ namespace UnityExplorer internal static ExplorerBehaviour Instance { get; private set; } #if CPP - public ExplorerBehaviour(IntPtr ptr) : base(ptr) { } + public ExplorerBehaviour(System.IntPtr ptr) : base(ptr) { } #endif internal static void Setup() diff --git a/src/ExplorerCore.cs b/src/ExplorerCore.cs index 6fa871b..42b107a 100644 --- a/src/ExplorerCore.cs +++ b/src/ExplorerCore.cs @@ -1,7 +1,6 @@ using System; using System.IO; using UnityEngine; -using UnityExplorer.CacheObject; using UnityExplorer.Config; using UnityExplorer.ObjectExplorer; using UnityExplorer.Runtime; @@ -76,60 +75,6 @@ namespace UnityExplorer UIManager.ShowMenu = !UIManager.ShowMenu; } - // Can be removed eventually. For migration from <4.7.0 - static void CheckLegacyExplorerFolder() - { - string legacyPath = Path.Combine(Loader.ExplorerFolderDestination, "UnityExplorer"); - if (Directory.Exists(legacyPath)) - { - LogWarning($"Attempting to migrate old 'UnityExplorer/' folder to 'sinai-dev-UnityExplorer/'..."); - - // If new folder doesn't exist yet, let's just use Move(). - if (!Directory.Exists(ExplorerFolder)) - { - try - { - Directory.Move(legacyPath, ExplorerFolder); - Log("Migrated successfully."); - } - catch (Exception ex) - { - LogWarning($"Exception migrating folder: {ex}"); - } - } - else // We have to merge - { - try - { - CopyAll(new(legacyPath), new(ExplorerFolder)); - Directory.Delete(legacyPath, true); - Log("Migrated successfully."); - } - catch (Exception ex) - { - LogWarning($"Exception migrating folder: {ex}"); - } - } - } - } - - public static void CopyAll(DirectoryInfo source, DirectoryInfo target) - { - // Check if the target directory exists, if not, create it. - if (!Directory.Exists(target.FullName)) - Directory.CreateDirectory(target.FullName); - - // Copy each file into it's new directory. - foreach (FileInfo fi in source.GetFiles()) - fi.MoveTo(Path.Combine(target.ToString(), fi.Name)); - - // Copy each subdirectory using recursion. - foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) - { - DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name); - CopyAll(diSourceSubDir, nextTargetSubDir); - } - } #region LOGGING @@ -175,5 +120,63 @@ namespace UnityExplorer } #endregion + + + #region LEGACY FOLDER MIGRATION + + // Can be removed eventually. For migration from <4.7.0 + static void CheckLegacyExplorerFolder() + { + string legacyPath = Path.Combine(Loader.ExplorerFolderDestination, "UnityExplorer"); + if (Directory.Exists(legacyPath)) + { + LogWarning($"Attempting to migrate old 'UnityExplorer/' folder to 'sinai-dev-UnityExplorer/'..."); + + // If new folder doesn't exist yet, let's just use Move(). + if (!Directory.Exists(ExplorerFolder)) + { + try + { + Directory.Move(legacyPath, ExplorerFolder); + Log("Migrated successfully."); + } + catch (Exception ex) + { + LogWarning($"Exception migrating folder: {ex}"); + } + } + else // We have to merge + { + try + { + CopyAll(new(legacyPath), new(ExplorerFolder)); + Directory.Delete(legacyPath, true); + Log("Migrated successfully."); + } + catch (Exception ex) + { + LogWarning($"Exception migrating folder: {ex}"); + } + } + } + } + + public static void CopyAll(DirectoryInfo source, DirectoryInfo target) + { + Directory.CreateDirectory(target.FullName); + + // Copy each file into it's new directory. + foreach (FileInfo fi in source.GetFiles()) + fi.MoveTo(Path.Combine(target.ToString(), fi.Name)); + + // Copy each subdirectory using recursion. + foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) + { + DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name); + CopyAll(diSourceSubDir, nextTargetSubDir); + } + } + + #endregion } } diff --git a/src/Hooks/AddHookCell.cs b/src/Hooks/AddHookCell.cs index a2274bd..390bca7 100644 --- a/src/Hooks/AddHookCell.cs +++ b/src/Hooks/AddHookCell.cs @@ -1,14 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; using UnityEngine.UI; -using UnityExplorer.UI; -using UnityExplorer.UI.Widgets; using UniverseLib.UI; using UniverseLib.UI.Models; -using UniverseLib.UI.Widgets; using UniverseLib.UI.Widgets.ScrollView; namespace UnityExplorer.Hooks diff --git a/src/Hooks/HookCell.cs b/src/Hooks/HookCell.cs index 13ed343..f38d7ea 100644 --- a/src/Hooks/HookCell.cs +++ b/src/Hooks/HookCell.cs @@ -1,12 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; using UnityEngine.UI; using UniverseLib.UI; using UniverseLib.UI.Models; -using UniverseLib.UI.Widgets; using UniverseLib.UI.Widgets.ScrollView; namespace UnityExplorer.Hooks diff --git a/src/Hooks/HookInstance.cs b/src/Hooks/HookInstance.cs index 8bb34f9..11bbc9f 100644 --- a/src/Hooks/HookInstance.cs +++ b/src/Hooks/HookInstance.cs @@ -1,11 +1,10 @@ -using System; -using System.CodeDom.Compiler; +using HarmonyLib; +using Mono.CSharp; +using System; using System.IO; using System.Linq; using System.Reflection; using System.Text; -using HarmonyLib; -using Mono.CSharp; using UnityExplorer.CSConsole; using UniverseLib; @@ -66,7 +65,7 @@ namespace UnityExplorer.Hooks // Dynamically compile the patch method - var codeBuilder = new StringBuilder(); + StringBuilder codeBuilder = new(); codeBuilder.AppendLine($"public class DynamicPatch_{DateTime.Now.Ticks}"); codeBuilder.AppendLine("{"); @@ -80,11 +79,11 @@ namespace UnityExplorer.Hooks // TODO: Publicize MCS to avoid this reflection // Get the most recent Patch type in the source file - var typeContainer = ((CompilationSourceFile)fi_sourceFile.GetValue(scriptEvaluator)) + TypeContainer typeContainer = ((CompilationSourceFile)fi_sourceFile.GetValue(scriptEvaluator)) .Containers .Last(it => it.MemberName.Name.StartsWith("DynamicPatch_")); // Get the TypeSpec from the TypeDefinition, then get its "MetaInfo" (System.Type) - var patchClass = ((TypeSpec)pi_Definition.GetValue((Class)typeContainer, null)).GetMetaInfo(); + Type patchClass = ((TypeSpec)pi_Definition.GetValue((Class)typeContainer, null)).GetMetaInfo(); // Create the harmony patches as defined @@ -115,7 +114,7 @@ namespace UnityExplorer.Hooks private string GenerateDefaultPatchSourceCode(MethodInfo targetMethod) { - var codeBuilder = new StringBuilder(); + StringBuilder codeBuilder = new(); // Arguments codeBuilder.Append("public static void Postfix(System.Reflection.MethodBase __originalMethod"); @@ -126,10 +125,10 @@ namespace UnityExplorer.Hooks if (targetMethod.ReturnType != typeof(void)) codeBuilder.Append($", {targetMethod.ReturnType.FullName} __result"); - var parameters = targetMethod.GetParameters(); + ParameterInfo[] parameters = targetMethod.GetParameters(); int paramIdx = 0; - foreach (var param in parameters) + foreach (ParameterInfo param in parameters) { codeBuilder.Append($", {param.ParameterType.FullDescription().Replace("&", "")} __{paramIdx}"); paramIdx++; @@ -145,14 +144,14 @@ namespace UnityExplorer.Hooks // Log message - var logMessage = new StringBuilder(); + StringBuilder logMessage = new(); logMessage.Append($"Patch called: {shortSignature}\\n"); if (!targetMethod.IsStatic) logMessage.Append("__instance: {__instance.ToString()}\\n"); paramIdx = 0; - foreach (var param in parameters) + foreach (ParameterInfo param in parameters) { logMessage.Append($"Parameter {paramIdx} {param.Name}: "); Type pType = param.ParameterType; diff --git a/src/Hooks/HookManager.cs b/src/Hooks/HookManager.cs index c0799a1..c3f291c 100644 --- a/src/Hooks/HookManager.cs +++ b/src/Hooks/HookManager.cs @@ -1,18 +1,14 @@ -using System; +using HarmonyLib; +using System; using System.Collections.Generic; using System.Collections.Specialized; -using System.Linq; using System.Reflection; -using System.Text; -using HarmonyLib; using UnityEngine; -using UnityExplorer.Runtime; using UnityExplorer.CSConsole; +using UnityExplorer.Runtime; using UnityExplorer.UI; using UnityExplorer.UI.Panels; -using UnityExplorer.UI.Widgets; using UniverseLib; -using UniverseLib.UI.Widgets; using UniverseLib.UI.Widgets.ScrollView; using UniverseLib.Utility; @@ -32,22 +28,22 @@ namespace UnityExplorer.Hooks public int ItemCount => isAddingMethods ? filteredEligableMethods.Count : currentHooks.Count; // current hooks - private readonly HashSet hookedSignatures = new HashSet(); - private readonly OrderedDictionary currentHooks = new OrderedDictionary(); + private readonly HashSet hookedSignatures = new(); + private readonly OrderedDictionary currentHooks = new(); // adding hooks - private readonly List currentAddEligableMethods = new List(); - private readonly List filteredEligableMethods = new List(); + private readonly List currentAddEligableMethods = new(); + private readonly List filteredEligableMethods = new(); // hook editor - private readonly LexerBuilder Lexer = new LexerBuilder(); + private readonly LexerBuilder Lexer = new(); private HookInstance currentEditedHook; // ~~~~~~~~~~~ Main Current Hooks window ~~~~~~~~~~~ public void EnableOrDisableHookClicked(int index) { - var hook = (HookInstance)currentHooks[index]; + HookInstance hook = (HookInstance)currentHooks[index]; hook.TogglePatch(); Panel.HooksScrollPool.Refresh(true, false); @@ -55,7 +51,7 @@ namespace UnityExplorer.Hooks public void DeleteHookClicked(int index) { - var hook = (HookInstance)currentHooks[index]; + HookInstance hook = (HookInstance)currentHooks[index]; hook.Unpatch(); currentHooks.RemoveAt(index); hookedSignatures.Remove(hook.TargetMethod.FullDescription()); @@ -66,7 +62,7 @@ namespace UnityExplorer.Hooks public void EditPatchClicked(int index) { Panel.SetPage(HookManagerPanel.Pages.HookSourceEditor); - var hook = (HookInstance)currentHooks[index]; + HookInstance hook = (HookInstance)currentHooks[index]; currentEditedHook = hook; Panel.EditorInput.Text = hook.PatchSourceCode; } @@ -84,7 +80,7 @@ namespace UnityExplorer.Hooks } cell.CurrentDisplayedIndex = index; - var hook = (HookInstance)this.currentHooks[index]; + HookInstance hook = (HookInstance)this.currentHooks[index]; cell.MethodNameLabel.text = SignatureHighlighter.HighlightMethod(hook.TargetMethod); @@ -97,7 +93,7 @@ namespace UnityExplorer.Hooks public void OnClassSelectedForHooks(string typeFullName) { - var type = ReflectionUtility.GetTypeByName(typeFullName); + Type type = ReflectionUtility.GetTypeByName(typeFullName); if (type == null) { ExplorerCore.LogWarning($"Could not find any type by name {typeFullName}!"); @@ -109,7 +105,7 @@ namespace UnityExplorer.Hooks Panel.ResetMethodFilter(); filteredEligableMethods.Clear(); currentAddEligableMethods.Clear(); - foreach (var method in type.GetMethods(ReflectionUtility.FLAGS)) + foreach (MethodInfo method in type.GetMethods(ReflectionUtility.FLAGS)) { if (method.IsGenericMethod || UERuntimeHelper.IsBlacklisted(method)) continue; @@ -140,11 +136,11 @@ namespace UnityExplorer.Hooks public void AddHook(MethodInfo method) { - var sig = method.FullDescription(); + string sig = method.FullDescription(); if (hookedSignatures.Contains(sig)) return; - var hook = new HookInstance(method); + HookInstance hook = new(method); if (hook.Enabled) { hookedSignatures.Add(sig); @@ -160,7 +156,7 @@ namespace UnityExplorer.Hooks filteredEligableMethods.AddRange(currentAddEligableMethods); else { - foreach (var method in currentAddEligableMethods) + foreach (MethodInfo method in currentAddEligableMethods) { if (method.Name.ContainsIgnoreCase(input)) filteredEligableMethods.Add(method); @@ -183,11 +179,11 @@ namespace UnityExplorer.Hooks } cell.CurrentDisplayedIndex = index; - var method = this.filteredEligableMethods[index]; + MethodInfo method = this.filteredEligableMethods[index]; cell.MethodNameLabel.text = SignatureHighlighter.HighlightMethod(method); - var sig = method.FullDescription(); + string sig = method.FullDescription(); if (hookedSignatures.Contains(sig)) { cell.HookButton.Component.gameObject.SetActive(false); @@ -216,7 +212,7 @@ namespace UnityExplorer.Hooks public void EditorInputSave() { - var input = Panel.EditorInput.Text; + string input = Panel.EditorInput.Text; bool wasEnabled = currentEditedHook.Enabled; if (currentEditedHook.CompileAndGenerateProcessor(input)) { diff --git a/src/Inspectors/GameObjectInspector.cs b/src/Inspectors/GameObjectInspector.cs index 6c7ad63..47debba 100644 --- a/src/Inspectors/GameObjectInspector.cs +++ b/src/Inspectors/GameObjectInspector.cs @@ -2,18 +2,15 @@ using System.Collections; using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; using UnityEngine.UI; -using UniverseLib.Input; -using UnityExplorer.UI; -using UniverseLib.UI.Models; using UnityExplorer.UI.Panels; using UnityExplorer.UI.Widgets; using UnityExplorer.UI.Widgets.AutoComplete; -using UniverseLib.UI.Widgets; -using UniverseLib.UI; using UniverseLib; +using UniverseLib.UI; +using UniverseLib.UI.Models; +using UniverseLib.UI.Widgets; using UniverseLib.UI.Widgets.ScrollView; using UniverseLib.Utility; @@ -29,7 +26,7 @@ namespace UnityExplorer.Inspectors public TransformTree TransformTree; private ScrollPool transformScroll; - private readonly List cachedChildren = new List(); + private readonly List cachedChildren = new(); public ComponentList ComponentList; private ScrollPool componentScroll; @@ -127,10 +124,10 @@ namespace UnityExplorer.Inspectors return cachedChildren; } - private readonly List componentEntries = new List(); - private readonly HashSet compInstanceIDs = new HashSet(); - private readonly List behaviourEntries = new List(); - private readonly List behaviourEnabledStates = new List(); + private readonly List componentEntries = new(); + private readonly HashSet compInstanceIDs = new(); + private readonly List behaviourEntries = new(); + private readonly List behaviourEnabledStates = new(); // ComponentList.GetRootEntriesMethod private List GetComponentEntries() => GOTarget ? componentEntries : Enumerable.Empty().ToList(); @@ -149,13 +146,13 @@ namespace UnityExplorer.Inspectors } // Check if we actually need to refresh the component cells or not. - var comps = GOTarget.GetComponents(); - var behaviours = GOTarget.GetComponents(); + IEnumerable comps = GOTarget.GetComponents(); + IEnumerable behaviours = GOTarget.GetComponents(); bool needRefresh = false; int count = 0; - foreach (var comp in comps) + foreach (Component comp in comps) { if (!comp) continue; @@ -173,7 +170,7 @@ namespace UnityExplorer.Inspectors else { count = 0; - foreach (var behaviour in behaviours) + foreach (Behaviour behaviour in behaviours) { if (!behaviour) continue; @@ -194,7 +191,7 @@ namespace UnityExplorer.Inspectors componentEntries.Clear(); compInstanceIDs.Clear(); - foreach (var comp in comps) + foreach (Component comp in comps) { if (!comp) continue; componentEntries.Add(comp); @@ -203,7 +200,7 @@ namespace UnityExplorer.Inspectors behaviourEntries.Clear(); behaviourEnabledStates.Clear(); - foreach (var behaviour in behaviours) + foreach (Behaviour behaviour in behaviours) { if (!behaviour) continue; behaviourEntries.Add(behaviour); @@ -217,7 +214,7 @@ namespace UnityExplorer.Inspectors private void OnAddChildClicked(string input) { - var newObject = new GameObject(input); + GameObject newObject = new(input); newObject.transform.parent = GOTarget.transform; TransformTree.RefreshData(true, false, true, false); @@ -250,7 +247,7 @@ namespace UnityExplorer.Inspectors UIRoot = UIFactory.CreateVerticalGroup(parent, "GameObjectInspector", true, false, true, true, 5, new Vector4(4, 4, 4, 4), new Color(0.065f, 0.065f, 0.065f)); - var scrollObj = UIFactory.CreateScrollView(UIRoot, "GameObjectInspector", out Content, out var scrollbar, + GameObject scrollObj = UIFactory.CreateScrollView(UIRoot, "GameObjectInspector", out Content, out AutoSliderScrollbar scrollbar, new Color(0.065f, 0.065f, 0.065f)); UIFactory.SetLayoutElement(scrollObj, minHeight: 250, preferredHeight: 300, flexibleHeight: 0, flexibleWidth: 9999); @@ -268,27 +265,27 @@ namespace UnityExplorer.Inspectors private void ConstructLists() { - var listHolder = UIFactory.CreateUIObject("ListHolders", UIRoot); + GameObject listHolder = UIFactory.CreateUIObject("ListHolders", UIRoot); UIFactory.SetLayoutGroup(listHolder, false, true, true, true, 8, 2, 2, 2, 2); UIFactory.SetLayoutElement(listHolder, minHeight: 150, flexibleWidth: 9999, flexibleHeight: 9999); // Left group (Children) - var leftGroup = UIFactory.CreateUIObject("ChildrenGroup", listHolder); + GameObject leftGroup = UIFactory.CreateUIObject("ChildrenGroup", listHolder); UIFactory.SetLayoutElement(leftGroup, flexibleWidth: 9999, flexibleHeight: 9999); UIFactory.SetLayoutGroup(leftGroup, false, false, true, true, 2); - var childrenLabel = UIFactory.CreateLabel(leftGroup, "ChildListTitle", "Children", TextAnchor.MiddleCenter, default, false, 16); + Text childrenLabel = UIFactory.CreateLabel(leftGroup, "ChildListTitle", "Children", TextAnchor.MiddleCenter, default, false, 16); UIFactory.SetLayoutElement(childrenLabel.gameObject, flexibleWidth: 9999); // Add Child - var addChildRow = UIFactory.CreateUIObject("AddChildRow", leftGroup); + GameObject addChildRow = UIFactory.CreateUIObject("AddChildRow", leftGroup); UIFactory.SetLayoutGroup(addChildRow, false, false, true, true, 2); addChildInput = UIFactory.CreateInputField(addChildRow, "AddChildInput", "Enter a name..."); UIFactory.SetLayoutElement(addChildInput.Component.gameObject, minHeight: 25, preferredWidth: 9999); - var addChildButton = UIFactory.CreateButton(addChildRow, "AddChildButton", "Add Child"); + ButtonRef addChildButton = UIFactory.CreateButton(addChildRow, "AddChildButton", "Add Child"); UIFactory.SetLayoutElement(addChildButton.Component.gameObject, minHeight: 25, minWidth: 80); addChildButton.OnClick += () => { OnAddChildClicked(addChildInput.Text); }; @@ -305,21 +302,21 @@ namespace UnityExplorer.Inspectors // Right group (Components) - var rightGroup = UIFactory.CreateUIObject("ComponentGroup", listHolder); + GameObject rightGroup = UIFactory.CreateUIObject("ComponentGroup", listHolder); UIFactory.SetLayoutElement(rightGroup, flexibleWidth: 9999, flexibleHeight: 9999); UIFactory.SetLayoutGroup(rightGroup, false, false, true, true, 2); - var compLabel = UIFactory.CreateLabel(rightGroup, "CompListTitle", "Components", TextAnchor.MiddleCenter, default, false, 16); + Text compLabel = UIFactory.CreateLabel(rightGroup, "CompListTitle", "Components", TextAnchor.MiddleCenter, default, false, 16); UIFactory.SetLayoutElement(compLabel.gameObject, flexibleWidth: 9999); // Add Comp - var addCompRow = UIFactory.CreateUIObject("AddCompRow", rightGroup); + GameObject addCompRow = UIFactory.CreateUIObject("AddCompRow", rightGroup); UIFactory.SetLayoutGroup(addCompRow, false, false, true, true, 2); addCompInput = UIFactory.CreateInputField(addCompRow, "AddCompInput", "Enter a Component type..."); UIFactory.SetLayoutElement(addCompInput.Component.gameObject, minHeight: 25, preferredWidth: 9999); - var addCompButton = UIFactory.CreateButton(addCompRow, "AddCompButton", "Add Comp"); + ButtonRef addCompButton = UIFactory.CreateButton(addCompRow, "AddCompButton", "Add Comp"); UIFactory.SetLayoutElement(addCompButton.Component.gameObject, minHeight: 25, minWidth: 80); addCompButton.OnClick += () => { OnAddComponentClicked(addCompInput.Text); }; @@ -333,8 +330,10 @@ namespace UnityExplorer.Inspectors UIFactory.SetLayoutElement(compObj, flexibleHeight: 9999); UIFactory.SetLayoutElement(compContent, flexibleHeight: 9999); - ComponentList = new ComponentList(componentScroll, GetComponentEntries); - ComponentList.Parent = this; + ComponentList = new ComponentList(componentScroll, GetComponentEntries) + { + Parent = this + }; componentScroll.Initialize(ComponentList); } diff --git a/src/Inspectors/GameObjectWidgets/ComponentCell.cs b/src/Inspectors/GameObjectWidgets/ComponentCell.cs index 1df6c5c..ed5dd11 100644 --- a/src/Inspectors/GameObjectWidgets/ComponentCell.cs +++ b/src/Inspectors/GameObjectWidgets/ComponentCell.cs @@ -1,13 +1,10 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityEngine; using UnityEngine.UI; -using UniverseLib; using UniverseLib.UI; using UniverseLib.UI.Models; using UniverseLib.UI.Widgets.ButtonList; +using UniverseLib; namespace UnityExplorer.Inspectors { @@ -31,7 +28,7 @@ namespace UnityExplorer.Inspectors public override GameObject CreateContent(GameObject parent) { - var root = base.CreateContent(parent); + GameObject root = base.CreateContent(parent); // Add mask to button so text doesnt overlap on Close button //this.Button.Component.gameObject.AddComponent().showMaskGraphic = true; @@ -39,7 +36,7 @@ namespace UnityExplorer.Inspectors // Behaviour toggle - var toggleObj = UIFactory.CreateToggle(UIRoot, "BehaviourToggle", out BehaviourToggle, out var behavText); + GameObject toggleObj = UIFactory.CreateToggle(UIRoot, "BehaviourToggle", out BehaviourToggle, out Text behavText); UIFactory.SetLayoutElement(toggleObj, minHeight: 25, minWidth: 25); BehaviourToggle.onValueChanged.AddListener(BehaviourToggled); // put at first object diff --git a/src/Inspectors/GameObjectWidgets/ComponentList.cs b/src/Inspectors/GameObjectWidgets/ComponentList.cs index 5cf1e41..83dc86f 100644 --- a/src/Inspectors/GameObjectWidgets/ComponentList.cs +++ b/src/Inspectors/GameObjectWidgets/ComponentList.cs @@ -1,7 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityEngine; using UniverseLib; using UniverseLib.UI.Widgets.ButtonList; @@ -45,12 +43,12 @@ namespace UnityExplorer.Inspectors private void OnComponentClicked(int index) { - var entries = GetEntries(); + List entries = GetEntries(); if (index < 0 || index >= entries.Count) return; - var comp = entries[index]; + Component comp = entries[index]; if (comp) InspectorManager.Inspect(comp); } @@ -59,8 +57,8 @@ namespace UnityExplorer.Inspectors { try { - var entries = GetEntries(); - var comp = entries[index]; + List entries = GetEntries(); + Component comp = entries[index]; if (comp.TryCast() is Behaviour behaviour) behaviour.enabled = value; @@ -75,8 +73,8 @@ namespace UnityExplorer.Inspectors { try { - var entries = GetEntries(); - var comp = entries[index]; + List entries = GetEntries(); + Component comp = entries[index]; GameObject.DestroyImmediate(comp); @@ -88,16 +86,16 @@ namespace UnityExplorer.Inspectors } } - private static readonly Dictionary compToStringCache = new Dictionary(); + private static readonly Dictionary compToStringCache = new(); // Called from ButtonListHandler.SetCell, will be valid private void SetComponentCell(ComponentCell cell, int index) { - var entries = GetEntries(); + List entries = GetEntries(); cell.Enable(); - var comp = entries[index]; - var type = comp.GetActualType(); + Component comp = entries[index]; + Type type = comp.GetActualType(); if (!compToStringCache.ContainsKey(type.AssemblyQualifiedName)) compToStringCache.Add(type.AssemblyQualifiedName, SignatureHighlighter.Parse(type, true)); diff --git a/src/Inspectors/GameObjectWidgets/GameObjectControls.cs b/src/Inspectors/GameObjectWidgets/GameObjectControls.cs index f88e032..3b0521a 100644 --- a/src/Inspectors/GameObjectWidgets/GameObjectControls.cs +++ b/src/Inspectors/GameObjectWidgets/GameObjectControls.cs @@ -1,14 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; using UnityEngine.UI; -using UniverseLib.Input; using UnityExplorer.UI; -using UniverseLib.UI; -using UniverseLib; using UnityExplorer.UI.Panels; +using UniverseLib; +using UniverseLib.Input; +using UniverseLib.UI; using UniverseLib.UI.Models; using UniverseLib.Utility; @@ -176,14 +175,14 @@ namespace UnityExplorer.Inspectors else { // look for inactive objects - var name = input.Split('/').Last(); - var allObjects = RuntimeHelper.FindObjectsOfTypeAll(typeof(GameObject)); - var shortList = new List(); - foreach (var obj in allObjects) + string name = input.Split('/').Last(); + UnityEngine.Object[] allObjects = RuntimeHelper.FindObjectsOfTypeAll(typeof(GameObject)); + List shortList = new(); + foreach (UnityEngine.Object obj in allObjects) if (obj.name == name) shortList.Add(obj.TryCast()); - foreach (var go in shortList) + foreach (GameObject go in shortList) { - var path = go.transform.GetTransformPath(true); + string path = go.transform.GetTransformPath(true); if (path.EndsWith("/")) path = path.Remove(path.Length - 1); if (path == input) @@ -245,7 +244,7 @@ namespace UnityExplorer.Inspectors private void OnExploreButtonClicked() { - var panel = UIManager.GetPanel(UIManager.Panels.ObjectExplorer); + ObjectExplorerPanel panel = UIManager.GetPanel(UIManager.Panels.ObjectExplorer); panel.SceneExplorer.JumpToTransform(this.Parent.GOTarget.transform); } @@ -259,7 +258,7 @@ namespace UnityExplorer.Inspectors { try { - var enumVal = hideFlagsValues[FlagsDropdown.options[value].text]; + HideFlags enumVal = hideFlagsValues[FlagsDropdown.options[value].text]; GOTarget.hideFlags = enumVal; UpdateGameObjectInfo(false, true); @@ -278,7 +277,7 @@ namespace UnityExplorer.Inspectors private void OnInstantiateClicked() { - var clone = GameObject.Instantiate(this.GOTarget); + GameObject clone = GameObject.Instantiate(this.GOTarget); InspectorManager.Inspect(clone); } @@ -322,7 +321,7 @@ namespace UnityExplorer.Inspectors public void UpdateTransformControlValues(bool force) { - var transform = GOTarget.transform; + Transform transform = GOTarget.transform; if (force || (!PositionControl.Input.Component.isFocused && lastPosValue != transform.position)) { PositionControl.Input.Text = ParseUtility.ToStringForInput(transform.position, typeof(Vector3)); @@ -404,7 +403,7 @@ namespace UnityExplorer.Inspectors return; } - var transform = GOTarget.transform; + Transform transform = GOTarget.transform; Vector3 vector = Vector2.zero; switch (currentSlidingVectorControl.parentControl.Type) @@ -453,14 +452,14 @@ namespace UnityExplorer.Inspectors private void ConstructTopInfo() { - var topInfoHolder = UIFactory.CreateVerticalGroup(Parent.Content, "TopInfoHolder", false, false, true, true, 3, + GameObject topInfoHolder = UIFactory.CreateVerticalGroup(Parent.Content, "TopInfoHolder", false, false, true, true, 3, new Vector4(3, 3, 3, 3), new Color(0.1f, 0.1f, 0.1f), TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(topInfoHolder, minHeight: 100, flexibleWidth: 9999); topInfoHolder.AddComponent().verticalFit = ContentSizeFitter.FitMode.PreferredSize; // first row (parent, path) - var firstRow = UIFactory.CreateUIObject("ParentRow", topInfoHolder); + GameObject firstRow = UIFactory.CreateUIObject("ParentRow", topInfoHolder); UIFactory.SetLayoutGroup(firstRow, false, false, true, true, 5, 0, 0, 0, 0, default); UIFactory.SetLayoutElement(firstRow, minHeight: 25, flexibleWidth: 9999); @@ -475,7 +474,7 @@ namespace UnityExplorer.Inspectors UIFactory.SetLayoutElement(PathInput.UIRoot, minHeight: 25, minWidth: 100, flexibleWidth: 9999); PathInput.Component.lineType = InputField.LineType.MultiLineSubmit; - var copyButton = UIFactory.CreateButton(firstRow, "CopyButton", "Copy to Clipboard", new Color(0.2f, 0.2f, 0.2f, 1)); + ButtonRef copyButton = UIFactory.CreateButton(firstRow, "CopyButton", "Copy to Clipboard", new Color(0.2f, 0.2f, 0.2f, 1)); copyButton.ButtonText.color = Color.yellow; UIFactory.SetLayoutElement(copyButton.Component.gameObject, minHeight: 25, minWidth: 120); copyButton.OnClick += OnCopyClicked; @@ -488,10 +487,10 @@ namespace UnityExplorer.Inspectors // Title and update row - var titleRow = UIFactory.CreateUIObject("TitleRow", topInfoHolder); + GameObject titleRow = UIFactory.CreateUIObject("TitleRow", topInfoHolder); UIFactory.SetLayoutGroup(titleRow, false, false, true, true, 5); - var titleLabel = UIFactory.CreateLabel(titleRow, "Title", SignatureHighlighter.Parse(typeof(GameObject), false), + Text titleLabel = UIFactory.CreateLabel(titleRow, "Title", SignatureHighlighter.Parse(typeof(GameObject), false), TextAnchor.MiddleLeft, fontSize: 17); UIFactory.SetLayoutElement(titleLabel.gameObject, minHeight: 30, minWidth: 100); @@ -504,25 +503,25 @@ namespace UnityExplorer.Inspectors // second row (toggles, instanceID, tag, buttons) - var secondRow = UIFactory.CreateUIObject("ParentRow", topInfoHolder); + GameObject secondRow = UIFactory.CreateUIObject("ParentRow", topInfoHolder); UIFactory.SetLayoutGroup(secondRow, false, false, true, true, 5, 0, 0, 0, 0, default); UIFactory.SetLayoutElement(secondRow, minHeight: 25, flexibleWidth: 9999); // activeSelf - var activeToggleObj = UIFactory.CreateToggle(secondRow, "ActiveSelf", out ActiveSelfToggle, out ActiveSelfText); + GameObject activeToggleObj = UIFactory.CreateToggle(secondRow, "ActiveSelf", out ActiveSelfToggle, out ActiveSelfText); UIFactory.SetLayoutElement(activeToggleObj, minHeight: 25, minWidth: 100); ActiveSelfText.text = "ActiveSelf"; ActiveSelfToggle.onValueChanged.AddListener(OnActiveSelfToggled); // isStatic - var isStaticObj = UIFactory.CreateToggle(secondRow, "IsStatic", out IsStaticToggle, out Text staticText); + GameObject isStaticObj = UIFactory.CreateToggle(secondRow, "IsStatic", out IsStaticToggle, out Text staticText); UIFactory.SetLayoutElement(isStaticObj, minHeight: 25, minWidth: 80); staticText.text = "IsStatic"; staticText.color = Color.grey; IsStaticToggle.interactable = false; // InstanceID - var instanceIdLabel = UIFactory.CreateLabel(secondRow, "InstanceIDLabel", "Instance ID:", TextAnchor.MiddleRight, Color.grey); + Text instanceIdLabel = UIFactory.CreateLabel(secondRow, "InstanceIDLabel", "Instance ID:", TextAnchor.MiddleRight, Color.grey); UIFactory.SetLayoutElement(instanceIdLabel.gameObject, minHeight: 25, minWidth: 90); InstanceIDInput = UIFactory.CreateInputField(secondRow, "InstanceIDInput", "error"); @@ -531,7 +530,7 @@ namespace UnityExplorer.Inspectors InstanceIDInput.Component.readOnly = true; //Tag - var tagLabel = UIFactory.CreateLabel(secondRow, "TagLabel", "Tag:", TextAnchor.MiddleRight, Color.grey); + Text tagLabel = UIFactory.CreateLabel(secondRow, "TagLabel", "Tag:", TextAnchor.MiddleRight, Color.grey); UIFactory.SetLayoutElement(tagLabel.gameObject, minHeight: 25, minWidth: 40); TagInput = UIFactory.CreateInputField(secondRow, "TagInput", "none"); @@ -540,29 +539,29 @@ namespace UnityExplorer.Inspectors TagInput.Component.GetOnEndEdit().AddListener((string val) => { OnTagEndEdit(val); }); // Instantiate - var instantiateBtn = UIFactory.CreateButton(secondRow, "InstantiateBtn", "Instantiate", new Color(0.2f, 0.2f, 0.2f)); + ButtonRef instantiateBtn = UIFactory.CreateButton(secondRow, "InstantiateBtn", "Instantiate", new Color(0.2f, 0.2f, 0.2f)); UIFactory.SetLayoutElement(instantiateBtn.Component.gameObject, minHeight: 25, minWidth: 120); instantiateBtn.OnClick += OnInstantiateClicked; // Destroy - var destroyBtn = UIFactory.CreateButton(secondRow, "DestroyBtn", "Destroy", new Color(0.3f, 0.2f, 0.2f)); + ButtonRef destroyBtn = UIFactory.CreateButton(secondRow, "DestroyBtn", "Destroy", new Color(0.3f, 0.2f, 0.2f)); UIFactory.SetLayoutElement(destroyBtn.Component.gameObject, minHeight: 25, minWidth: 80); destroyBtn.OnClick += OnDestroyClicked; // third row (scene, layer, flags) - var thirdrow = UIFactory.CreateUIObject("ParentRow", topInfoHolder); + GameObject thirdrow = UIFactory.CreateUIObject("ParentRow", topInfoHolder); UIFactory.SetLayoutGroup(thirdrow, false, false, true, true, 5, 0, 0, 0, 0, default); UIFactory.SetLayoutElement(thirdrow, minHeight: 25, flexibleWidth: 9999); // Inspect in Explorer button - var explorerBtn = UIFactory.CreateButton(thirdrow, "ExploreBtn", "Show in Explorer", new Color(0.15f, 0.15f, 0.15f)); + ButtonRef explorerBtn = UIFactory.CreateButton(thirdrow, "ExploreBtn", "Show in Explorer", new Color(0.15f, 0.15f, 0.15f)); UIFactory.SetLayoutElement(explorerBtn.Component.gameObject, minHeight: 25, minWidth: 100); explorerBtn.ButtonText.fontSize = 12; explorerBtn.OnClick += OnExploreButtonClicked; // Scene - var sceneLabel = UIFactory.CreateLabel(thirdrow, "SceneLabel", "Scene:", TextAnchor.MiddleLeft, Color.grey); + Text sceneLabel = UIFactory.CreateLabel(thirdrow, "SceneLabel", "Scene:", TextAnchor.MiddleLeft, Color.grey); UIFactory.SetLayoutElement(sceneLabel.gameObject, minHeight: 25, minWidth: 50); SceneInput = UIFactory.CreateInputField(thirdrow, "SceneInput", "untitled"); @@ -571,29 +570,29 @@ namespace UnityExplorer.Inspectors SceneInput.Component.textComponent.color = new Color(0.7f, 0.7f, 0.7f); // Layer - var layerLabel = UIFactory.CreateLabel(thirdrow, "LayerLabel", "Layer:", TextAnchor.MiddleLeft, Color.grey); + Text layerLabel = UIFactory.CreateLabel(thirdrow, "LayerLabel", "Layer:", TextAnchor.MiddleLeft, Color.grey); UIFactory.SetLayoutElement(layerLabel.gameObject, minHeight: 25, minWidth: 50); - var layerDrop = UIFactory.CreateDropdown(thirdrow, "LayerDropdown", out LayerDropdown, "0", 14, OnLayerDropdownChanged); + GameObject layerDrop = UIFactory.CreateDropdown(thirdrow, "LayerDropdown", out LayerDropdown, "0", 14, OnLayerDropdownChanged); UIFactory.SetLayoutElement(layerDrop, minHeight: 25, minWidth: 110, flexibleWidth: 999); LayerDropdown.captionText.color = SignatureHighlighter.EnumGreen; if (layerToNames == null) GetLayerNames(); - foreach (var name in layerToNames) + foreach (string name in layerToNames) LayerDropdown.options.Add(new Dropdown.OptionData(name)); LayerDropdown.value = 0; LayerDropdown.RefreshShownValue(); // Flags - var flagsLabel = UIFactory.CreateLabel(thirdrow, "FlagsLabel", "Flags:", TextAnchor.MiddleRight, Color.grey); + Text flagsLabel = UIFactory.CreateLabel(thirdrow, "FlagsLabel", "Flags:", TextAnchor.MiddleRight, Color.grey); UIFactory.SetLayoutElement(flagsLabel.gameObject, minHeight: 25, minWidth: 50); - var flagsDrop = UIFactory.CreateDropdown(thirdrow, "FlagsDropdown", out FlagsDropdown, "None", 14, OnFlagsDropdownChanged); + GameObject flagsDrop = UIFactory.CreateDropdown(thirdrow, "FlagsDropdown", out FlagsDropdown, "None", 14, OnFlagsDropdownChanged); FlagsDropdown.captionText.color = SignatureHighlighter.EnumGreen; UIFactory.SetLayoutElement(flagsDrop, minHeight: 25, minWidth: 135, flexibleWidth: 999); if (hideFlagsValues == null) GetHideFlagNames(); - foreach (var name in hideFlagsValues.Keys) + foreach (string name in hideFlagsValues.Keys) FlagsDropdown.options.Add(new Dropdown.OptionData(name)); FlagsDropdown.value = 0; FlagsDropdown.RefreshShownValue(); @@ -606,7 +605,7 @@ namespace UnityExplorer.Inspectors layerToNames = new List(); for (int i = 0; i < 32; i++) { - var name = RuntimeHelper.LayerToName(i); + string name = RuntimeHelper.LayerToName(i); if (string.IsNullOrEmpty(name)) name = i.ToString(); layerToNames.Add(name); @@ -619,7 +618,7 @@ namespace UnityExplorer.Inspectors { hideFlagsValues = new Dictionary(); - var names = Enum.GetValues(typeof(HideFlags)); + Array names = Enum.GetValues(typeof(HideFlags)); foreach (HideFlags value in names) { hideFlagsValues.Add(value.ToString(), value); @@ -633,7 +632,7 @@ namespace UnityExplorer.Inspectors private void ConstructTransformControls() { - var transformGroup = UIFactory.CreateVerticalGroup(Parent.Content, "TransformControls", false, false, true, true, 2, + GameObject transformGroup = UIFactory.CreateVerticalGroup(Parent.Content, "TransformControls", false, false, true, true, 2, new Vector4(2, 2, 0, 0), new Color(0.1f, 0.1f, 0.1f)); UIFactory.SetLayoutElement(transformGroup, minHeight: 100, flexibleWidth: 9999); //transformGroup.SetActive(false); @@ -650,19 +649,19 @@ namespace UnityExplorer.Inspectors private TransformControl AddTransformRow(GameObject transformGroup, string title, TransformType type) { - var rowObj = UIFactory.CreateUIObject("Row_" + title, transformGroup); + GameObject rowObj = UIFactory.CreateUIObject("Row_" + title, transformGroup); UIFactory.SetLayoutGroup(rowObj, false, false, true, true, 5, 0, 0, 0, 0, default); UIFactory.SetLayoutElement(rowObj, minHeight: 25, flexibleWidth: 9999); - var titleLabel = UIFactory.CreateLabel(rowObj, "PositionLabel", title, TextAnchor.MiddleRight, Color.grey); + Text titleLabel = UIFactory.CreateLabel(rowObj, "PositionLabel", title, TextAnchor.MiddleRight, Color.grey); UIFactory.SetLayoutElement(titleLabel.gameObject, minHeight: 25, minWidth: 110); - var inputField = UIFactory.CreateInputField(rowObj, "InputField", "..."); + InputFieldRef inputField = UIFactory.CreateInputField(rowObj, "InputField", "..."); UIFactory.SetLayoutElement(inputField.Component.gameObject, minHeight: 25, minWidth: 100, flexibleWidth: 999); inputField.Component.GetOnEndEdit().AddListener((string value) => { OnTransformInputEndEdit(type, value); }); - var control = new TransformControl(type, inputField); + TransformControl control = new(type, inputField); AddVectorAxisSlider(rowObj, "X", 0, control); AddVectorAxisSlider(rowObj, "Y", 1, control); @@ -673,16 +672,16 @@ namespace UnityExplorer.Inspectors private VectorSlider AddVectorAxisSlider(GameObject parent, string title, int axis, TransformControl control) { - var label = UIFactory.CreateLabel(parent, "Label_" + title, title + ":", TextAnchor.MiddleRight, Color.grey); + Text label = UIFactory.CreateLabel(parent, "Label_" + title, title + ":", TextAnchor.MiddleRight, Color.grey); UIFactory.SetLayoutElement(label.gameObject, minHeight: 25, minWidth: 30); - var sliderObj = UIFactory.CreateSlider(parent, "Slider_" + title, out var slider); + GameObject sliderObj = UIFactory.CreateSlider(parent, "Slider_" + title, out Slider slider); UIFactory.SetLayoutElement(sliderObj, minHeight: 25, minWidth: 120, flexibleWidth: 0); slider.m_FillImage.color = Color.clear; slider.minValue = -1; slider.maxValue = 1; - var sliderControl = new VectorSlider(axis, slider, control); + VectorSlider sliderControl = new(axis, slider, control); slider.onValueChanged.AddListener((float val) => { diff --git a/src/Inspectors/InspectorBase.cs b/src/Inspectors/InspectorBase.cs index 630962b..9744595 100644 --- a/src/Inspectors/InspectorBase.cs +++ b/src/Inspectors/InspectorBase.cs @@ -1,13 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; using UnityEngine.UI; -using UnityExplorer.UI; -using UniverseLib.UI.Models; using UnityExplorer.UI.Panels; -using UniverseLib.UI; using UniverseLib.UI.ObjectPool; namespace UnityExplorer.Inspectors diff --git a/src/Inspectors/InspectorManager.cs b/src/Inspectors/InspectorManager.cs index 3eacacf..bd374d5 100644 --- a/src/Inspectors/InspectorManager.cs +++ b/src/Inspectors/InspectorManager.cs @@ -1,16 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.UI; using UnityExplorer.CacheObject; using UnityExplorer.Inspectors; -using UniverseLib.UI.Models; +using UnityExplorer.UI; using UnityExplorer.UI.Panels; using UniverseLib; -using UniverseLib.UI; using UniverseLib.UI.ObjectPool; using UniverseLib.Utility; @@ -50,7 +46,7 @@ namespace UnityExplorer private static bool TryFocusActiveInspector(object target) { - foreach (var inspector in Inspectors) + foreach (InspectorBase inspector in Inspectors) { if (inspector.Target.ReferenceEqual(target)) { @@ -96,7 +92,7 @@ namespace UnityExplorer private static void CreateInspector(object target, bool staticReflection = false, CacheObjectBase parentObject = null) where T : InspectorBase { - var inspector = Pool.Borrow(); + T inspector = Pool.Borrow(); Inspectors.Add(inspector); inspector.Target = target; @@ -164,7 +160,7 @@ namespace UnityExplorer { PanelWidth = width; - foreach (var obj in Inspectors) + foreach (InspectorBase obj in Inspectors) { if (obj is ReflectionInspector inspector) { diff --git a/src/Inspectors/InspectorTab.cs b/src/Inspectors/InspectorTab.cs index fb5b965..15de8da 100644 --- a/src/Inspectors/InspectorTab.cs +++ b/src/Inspectors/InspectorTab.cs @@ -1,15 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; using UnityEngine.UI; -using UnityExplorer.UI; -using UniverseLib.UI.Models; -using UnityExplorer.UI.Widgets; -using UniverseLib.UI; using UniverseLib; -using UnityExplorer.UI.Panels; +using UniverseLib.UI; +using UniverseLib.UI.Models; using UniverseLib.UI.ObjectPool; namespace UnityExplorer.Inspectors diff --git a/src/Inspectors/MouseInspector.cs b/src/Inspectors/MouseInspector.cs index 5eacd46..4d9721e 100644 --- a/src/Inspectors/MouseInspector.cs +++ b/src/Inspectors/MouseInspector.cs @@ -1,19 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.EventSystems; +using UnityEngine; using UnityEngine.UI; -using UniverseLib.Input; -using UnityExplorer.Runtime; +using UnityExplorer.Config; using UnityExplorer.Inspectors.MouseInspectors; using UnityExplorer.UI; using UnityExplorer.UI.Panels; -using UniverseLib; +using UniverseLib.Input; using UniverseLib.UI; using UniverseLib.Utility; -using UnityExplorer.Config; namespace UnityExplorer.Inspectors { @@ -59,7 +52,7 @@ namespace UnityExplorer.Inspectors internal Text objPathLabel; internal Text mousePosLabel; - public MouseInspector() + public MouseInspector() { Instance = this; worldInspector = new WorldInspector(); @@ -108,7 +101,7 @@ namespace UnityExplorer.Inspectors UIManager.NavBarRect.gameObject.SetActive(true); UIManager.PanelHolder.SetActive(true); - var drop = InspectorPanel.Instance.MouseInspectDropdown; + Dropdown drop = InspectorPanel.Instance.MouseInspectDropdown; if (drop.transform.Find("Dropdown List") is Transform list) drop.DestroyDropdownList(list.gameObject); @@ -130,7 +123,7 @@ namespace UnityExplorer.Inspectors if (InputManager.GetKeyDown(ConfigManager.World_MouseInspect_Keybind.Value)) Instance.StartInspect(MouseInspectMode.World); } - + if (Inspecting) UpdateInspect(); @@ -152,7 +145,7 @@ namespace UnityExplorer.Inspectors return; } - var mousePos = InputManager.MousePosition; + Vector3 mousePos = InputManager.MousePosition; if (mousePos != lastMousePos) UpdatePosition(mousePos); @@ -181,7 +174,7 @@ namespace UnityExplorer.Inspectors mousePos.y -= 10; // calculate and set our UI position - var inversePos = inspectorUIBase.RootObject.transform.InverseTransformPoint(mousePos); + Vector3 inversePos = inspectorUIBase.RootObject.transform.InverseTransformPoint(mousePos); UIRoot.transform.localPosition = new Vector3(inversePos.x, inversePos.y, 0); } @@ -201,14 +194,14 @@ namespace UnityExplorer.Inspectors this.TitleBar.SetActive(false); this.UIRoot.transform.SetParent(UIManager.UIRoot.transform, false); - var inspectContent = UIFactory.CreateVerticalGroup(this.uiContent, "InspectContent", true, true, true, true, 3, new Vector4(2, 2, 2, 2)); + GameObject inspectContent = UIFactory.CreateVerticalGroup(this.uiContent, "InspectContent", true, true, true, true, 3, new Vector4(2, 2, 2, 2)); UIFactory.SetLayoutElement(inspectContent, flexibleWidth: 9999, flexibleHeight: 9999); // Title text - var title = UIFactory.CreateLabel(inspectContent, + Text title = UIFactory.CreateLabel(inspectContent, "InspectLabel", - "Mouse Inspector (press ESC to cancel)", + "Mouse Inspector (press ESC to cancel)", TextAnchor.MiddleCenter); UIFactory.SetLayoutElement(title.gameObject, flexibleWidth: 9999); diff --git a/src/Inspectors/MouseInspectors/MouseInspectorBase.cs b/src/Inspectors/MouseInspectors/MouseInspectorBase.cs index 0314d79..260fd10 100644 --- a/src/Inspectors/MouseInspectors/MouseInspectorBase.cs +++ b/src/Inspectors/MouseInspectors/MouseInspectorBase.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; namespace UnityExplorer.Inspectors.MouseInspectors { diff --git a/src/Inspectors/MouseInspectors/UiInspector.cs b/src/Inspectors/MouseInspectors/UiInspector.cs index e36c348..e5d0e4b 100644 --- a/src/Inspectors/MouseInspectors/UiInspector.cs +++ b/src/Inspectors/MouseInspectors/UiInspector.cs @@ -1,29 +1,26 @@ -using System; -using System.Collections; +using System.Collections; using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using UnityExplorer.UI; using UnityExplorer.UI.Panels; using UniverseLib; -using UniverseLib.Input; namespace UnityExplorer.Inspectors.MouseInspectors { public class UiInspector : MouseInspectorBase { - public static readonly List LastHitObjects = new List(); + public static readonly List LastHitObjects = new(); private static GraphicRaycaster[] graphicRaycasters; - private static readonly List currentHitObjects = new List(); + private static readonly List currentHitObjects = new(); - private static readonly List wasDisabledGraphics = new List(); - private static readonly List wasDisabledCanvasGroups = new List(); - private static readonly List objectsAddedCastersTo = new List(); + private static readonly List wasDisabledGraphics = new(); + private static readonly List wasDisabledCanvasGroups = new(); + private static readonly List objectsAddedCastersTo = new(); public override void OnBeginMouseInspect() { @@ -46,7 +43,7 @@ namespace UnityExplorer.Inspectors.MouseInspectors IEnumerator SetPanelActiveCoro() { yield return null; - var panel = UIManager.GetPanel(UIManager.Panels.UIInspectorResults); + MouseInspectorResultsPanel panel = UIManager.GetPanel(UIManager.Panels.UIInspectorResults); panel.SetActive(true); panel.ShowResults(); } @@ -55,28 +52,28 @@ namespace UnityExplorer.Inspectors.MouseInspectors { currentHitObjects.Clear(); - var ped = new PointerEventData(null) + PointerEventData ped = new(null) { position = mousePos }; - foreach (var gr in graphicRaycasters) + foreach (GraphicRaycaster gr in graphicRaycasters) { if (!gr || !gr.canvas) continue; - - var list = new List(); + + List list = new(); RuntimeHelper.GraphicRaycast(gr, ped, list); if (list.Count > 0) { - foreach (var hit in list) + foreach (RaycastResult hit in list) { if (hit.gameObject) currentHitObjects.Add(hit.gameObject); } } } - + if (currentHitObjects.Any()) MouseInspector.Instance.objNameLabel.text = $"Click to view UI Objects under mouse: {currentHitObjects.Count}"; else @@ -85,9 +82,9 @@ namespace UnityExplorer.Inspectors.MouseInspectors private static void SetupUIRaycast() { - foreach (var obj in RuntimeHelper.FindObjectsOfTypeAll(typeof(Canvas))) + foreach (UnityEngine.Object obj in RuntimeHelper.FindObjectsOfTypeAll(typeof(Canvas))) { - var canvas = obj.TryCast(); + Canvas canvas = obj.TryCast(); if (!canvas || !canvas.enabled || !canvas.gameObject.activeInHierarchy) continue; if (!canvas.GetComponent()) @@ -99,7 +96,7 @@ namespace UnityExplorer.Inspectors.MouseInspectors } // recache Graphic Raycasters each time we start - var casters = RuntimeHelper.FindObjectsOfTypeAll(typeof(GraphicRaycaster)); + UnityEngine.Object[] casters = RuntimeHelper.FindObjectsOfTypeAll(typeof(GraphicRaycaster)); graphicRaycasters = new GraphicRaycaster[casters.Length]; for (int i = 0; i < casters.Length; i++) { @@ -107,9 +104,9 @@ namespace UnityExplorer.Inspectors.MouseInspectors } // enable raycastTarget on Graphics - foreach (var obj in RuntimeHelper.FindObjectsOfTypeAll(typeof(Graphic))) + foreach (UnityEngine.Object obj in RuntimeHelper.FindObjectsOfTypeAll(typeof(Graphic))) { - var graphic = obj.TryCast(); + Graphic graphic = obj.TryCast(); if (!graphic || !graphic.enabled || graphic.raycastTarget || !graphic.gameObject.activeInHierarchy) continue; graphic.raycastTarget = true; @@ -118,9 +115,9 @@ namespace UnityExplorer.Inspectors.MouseInspectors } // enable blocksRaycasts on CanvasGroups - foreach (var obj in RuntimeHelper.FindObjectsOfTypeAll(typeof(CanvasGroup))) + foreach (UnityEngine.Object obj in RuntimeHelper.FindObjectsOfTypeAll(typeof(CanvasGroup))) { - var canvas = obj.TryCast(); + CanvasGroup canvas = obj.TryCast(); if (!canvas || !canvas.gameObject.activeInHierarchy || canvas.blocksRaycasts) continue; canvas.blocksRaycasts = true; @@ -131,16 +128,16 @@ namespace UnityExplorer.Inspectors.MouseInspectors public override void OnEndInspect() { - foreach (var obj in objectsAddedCastersTo) + foreach (GameObject obj in objectsAddedCastersTo) { if (obj.GetComponent() is GraphicRaycaster raycaster) GameObject.Destroy(raycaster); } - foreach (var graphic in wasDisabledGraphics) + foreach (Graphic graphic in wasDisabledGraphics) graphic.raycastTarget = false; - foreach (var canvas in wasDisabledCanvasGroups) + foreach (CanvasGroup canvas in wasDisabledCanvasGroups) canvas.blocksRaycasts = false; objectsAddedCastersTo.Clear(); diff --git a/src/Inspectors/MouseInspectors/WorldInspector.cs b/src/Inspectors/MouseInspectors/WorldInspector.cs index 339d48c..b2df02e 100644 --- a/src/Inspectors/MouseInspectors/WorldInspector.cs +++ b/src/Inspectors/MouseInspectors/WorldInspector.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UniverseLib; +using UnityEngine; using UniverseLib.Utility; namespace UnityExplorer.Inspectors.MouseInspectors @@ -45,7 +40,7 @@ namespace UnityExplorer.Inspectors.MouseInspectors return; } - var ray = MainCamera.ScreenPointToRay(mousePos); + Ray ray = MainCamera.ScreenPointToRay(mousePos); Physics.Raycast(ray, out RaycastHit hit, 1000f); if (hit.transform) diff --git a/src/Inspectors/ReflectionInspector.cs b/src/Inspectors/ReflectionInspector.cs index 7e958fe..0d961e5 100644 --- a/src/Inspectors/ReflectionInspector.cs +++ b/src/Inspectors/ReflectionInspector.cs @@ -107,7 +107,7 @@ namespace UnityExplorer.Inspectors public override void OnReturnToPool() { - foreach (var member in members) + foreach (CacheMember member in members) { member.UnlinkFromView(); member.ReleasePooledObjects(); @@ -175,7 +175,7 @@ namespace UnityExplorer.Inspectors scopeFilterButtons[BindingFlags.Default].Component.gameObject.SetActive(!StaticOnly); scopeFilterButtons[BindingFlags.Instance].Component.gameObject.SetActive(!StaticOnly); - foreach (var toggle in memberTypeToggles) + foreach (Toggle toggle in memberTypeToggles) toggle.isOn = true; refreshWanted = true; @@ -236,7 +236,7 @@ namespace UnityExplorer.Inspectors if (flags != scopeFlagsFilter) { - var btn = scopeFilterButtons[scopeFlagsFilter].Component; + Button btn = scopeFilterButtons[scopeFlagsFilter].Component; RuntimeHelper.SetColorBlock(btn, disabledButtonColor, disabledButtonColor * 1.3f); this.scopeFlagsFilter = flags; @@ -259,7 +259,7 @@ namespace UnityExplorer.Inspectors for (int i = 0; i < members.Count; i++) { - var member = members[i]; + CacheMember member = members[i]; if (scopeFlagsFilter != BindingFlags.Default) { @@ -284,11 +284,11 @@ namespace UnityExplorer.Inspectors private void UpdateDisplayedMembers() { bool shouldRefresh = false; - foreach (var cell in MemberScrollPool.CellPool) + foreach (CacheMemberCell cell in MemberScrollPool.CellPool) { if (!cell.Enabled || cell.Occupant == null) continue; - var member = cell.MemberOccupant; + CacheMember member = cell.MemberOccupant; if (member.ShouldAutoEvaluate) { shouldRefresh = true; @@ -316,7 +316,7 @@ namespace UnityExplorer.Inspectors { CalculateLayouts(); - foreach (var cell in MemberScrollPool.CellPool) + foreach (CacheMemberCell cell in MemberScrollPool.CellPool) SetCellLayout(cell); } @@ -349,21 +349,21 @@ namespace UnityExplorer.Inspectors // Class name, assembly - var topRow = UIFactory.CreateHorizontalGroup(UIRoot, "TopRow", false, false, true, true, 4, default, new(1, 1, 1, 0), TextAnchor.MiddleLeft); + GameObject topRow = UIFactory.CreateHorizontalGroup(UIRoot, "TopRow", false, false, true, true, 4, default, new(1, 1, 1, 0), TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(topRow, minHeight: 25, flexibleWidth: 9999); - var titleHolder = UIFactory.CreateUIObject("TitleHolder", topRow); + GameObject titleHolder = UIFactory.CreateUIObject("TitleHolder", topRow); UIFactory.SetLayoutElement(titleHolder, minHeight: 35, flexibleHeight: 0, flexibleWidth: 9999); NameText = UIFactory.CreateLabel(titleHolder, "VisibleTitle", "NotSet", TextAnchor.MiddleLeft); - var namerect = NameText.GetComponent(); + RectTransform namerect = NameText.GetComponent(); namerect.anchorMin = new Vector2(0, 0); namerect.anchorMax = new Vector2(1, 1); NameText.fontSize = 17; UIFactory.SetLayoutElement(NameText.gameObject, minHeight: 35, flexibleHeight: 0, minWidth: 300, flexibleWidth: 9999); HiddenNameText = UIFactory.CreateInputField(titleHolder, "Title", "not set"); - var hiddenrect = HiddenNameText.Component.gameObject.GetComponent(); + RectTransform hiddenrect = HiddenNameText.Component.gameObject.GetComponent(); hiddenrect.anchorMin = new Vector2(0, 0); hiddenrect.anchorMax = new Vector2(1, 1); HiddenNameText.Component.readOnly = true; @@ -374,7 +374,7 @@ namespace UnityExplorer.Inspectors HiddenNameText.Component.textComponent.color = Color.clear; UIFactory.SetLayoutElement(HiddenNameText.Component.gameObject, minHeight: 35, flexibleHeight: 0, flexibleWidth: 9999); - var copyButton = UIFactory.CreateButton(topRow, "CopyButton", "Copy to Clipboard", new Color(0.2f, 0.2f, 0.2f, 1)); + ButtonRef copyButton = UIFactory.CreateButton(topRow, "CopyButton", "Copy to Clipboard", new Color(0.2f, 0.2f, 0.2f, 1)); copyButton.ButtonText.color = Color.yellow; UIFactory.SetLayoutElement(copyButton.Component.gameObject, minHeight: 25, minWidth: 120, flexibleWidth: 0); copyButton.OnClick += OnCopyClicked; @@ -392,7 +392,7 @@ namespace UnityExplorer.Inspectors // Member scroll pool - var memberBorder = UIFactory.CreateVerticalGroup(mainContentHolder, "ScrollPoolHolder", false, false, true, true, padding: new Vector4(2, 2, 2, 2), + GameObject memberBorder = UIFactory.CreateVerticalGroup(mainContentHolder, "ScrollPoolHolder", false, false, true, true, padding: new Vector4(2, 2, 2, 2), bgColor: new Color(0.05f, 0.05f, 0.05f)); UIFactory.SetLayoutElement(memberBorder, flexibleWidth: 9999, flexibleHeight: 9999); @@ -413,27 +413,27 @@ namespace UnityExplorer.Inspectors private void ConstructFirstRow(GameObject parent) { - var rowObj = UIFactory.CreateUIObject("FirstRow", parent); + GameObject rowObj = UIFactory.CreateUIObject("FirstRow", parent); UIFactory.SetLayoutGroup(rowObj, true, true, true, true, 5, 2, 2, 2, 2); UIFactory.SetLayoutElement(rowObj, minHeight: 25, flexibleHeight: 0, flexibleWidth: 9999); - var nameLabel = UIFactory.CreateLabel(rowObj, "NameFilterLabel", "Filter names:", TextAnchor.MiddleLeft, Color.grey); + Text nameLabel = UIFactory.CreateLabel(rowObj, "NameFilterLabel", "Filter names:", TextAnchor.MiddleLeft, Color.grey); UIFactory.SetLayoutElement(nameLabel.gameObject, minHeight: 25, minWidth: 90, flexibleWidth: 0); filterInputField = UIFactory.CreateInputField(rowObj, "NameFilterInput", "..."); UIFactory.SetLayoutElement(filterInputField.UIRoot, minHeight: 25, flexibleWidth: 300); filterInputField.OnValueChanged += (string val) => { SetFilter(val); }; - var spacer = UIFactory.CreateUIObject("Spacer", rowObj); + GameObject spacer = UIFactory.CreateUIObject("Spacer", rowObj); UIFactory.SetLayoutElement(spacer, minWidth: 25); // Update button and toggle - var updateButton = UIFactory.CreateButton(rowObj, "UpdateButton", "Update displayed values", new Color(0.22f, 0.28f, 0.22f)); + ButtonRef updateButton = UIFactory.CreateButton(rowObj, "UpdateButton", "Update displayed values", new Color(0.22f, 0.28f, 0.22f)); UIFactory.SetLayoutElement(updateButton.Component.gameObject, minHeight: 25, minWidth: 175, flexibleWidth: 0); updateButton.OnClick += UpdateClicked; - var toggleObj = UIFactory.CreateToggle(rowObj, "AutoUpdateToggle", out autoUpdateToggle, out Text toggleText); + GameObject toggleObj = UIFactory.CreateToggle(rowObj, "AutoUpdateToggle", out autoUpdateToggle, out Text toggleText); UIFactory.SetLayoutElement(toggleObj, minWidth: 125, minHeight: 25); autoUpdateToggle.isOn = false; toggleText.text = "Auto-update"; @@ -443,19 +443,19 @@ namespace UnityExplorer.Inspectors private void ConstructSecondRow(GameObject parent) { - var rowObj = UIFactory.CreateUIObject("SecondRow", parent); + GameObject rowObj = UIFactory.CreateUIObject("SecondRow", parent); UIFactory.SetLayoutGroup(rowObj, false, false, true, true, 5, 2, 2, 2, 2); UIFactory.SetLayoutElement(rowObj, minHeight: 25, flexibleHeight: 0, flexibleWidth: 9999); // Scope buttons - var scopeLabel = UIFactory.CreateLabel(rowObj, "ScopeLabel", "Scope:", TextAnchor.MiddleLeft, Color.grey); + Text scopeLabel = UIFactory.CreateLabel(rowObj, "ScopeLabel", "Scope:", TextAnchor.MiddleLeft, Color.grey); UIFactory.SetLayoutElement(scopeLabel.gameObject, minHeight: 25, minWidth: 60, flexibleWidth: 0); AddScopeFilterButton(rowObj, BindingFlags.Default, true); AddScopeFilterButton(rowObj, BindingFlags.Instance); AddScopeFilterButton(rowObj, BindingFlags.Static); - var spacer = UIFactory.CreateUIObject("Spacer", rowObj); + GameObject spacer = UIFactory.CreateUIObject("Spacer", rowObj); UIFactory.SetLayoutElement(spacer, minWidth: 15); // Member type toggles @@ -469,9 +469,9 @@ namespace UnityExplorer.Inspectors private void AddScopeFilterButton(GameObject parent, BindingFlags flags, bool setAsActive = false) { string lbl = flags == BindingFlags.Default ? "All" : flags.ToString(); - var color = setAsActive ? enabledButtonColor : disabledButtonColor; + Color color = setAsActive ? enabledButtonColor : disabledButtonColor; - var button = UIFactory.CreateButton(parent, "Filter_" + flags, lbl, color); + ButtonRef button = UIFactory.CreateButton(parent, "Filter_" + flags, lbl, color); UIFactory.SetLayoutElement(button.Component.gameObject, minHeight: 25, flexibleHeight: 0, minWidth: 70, flexibleWidth: 0); scopeFilterButtons.Add(flags, button); @@ -480,7 +480,7 @@ namespace UnityExplorer.Inspectors private void AddMemberTypeToggle(GameObject parent, MemberTypes type, int width) { - var toggleObj = UIFactory.CreateToggle(parent, "Toggle_" + type, out Toggle toggle, out Text toggleText); + GameObject toggleObj = UIFactory.CreateToggle(parent, "Toggle_" + type, out Toggle toggle, out Text toggleText); UIFactory.SetLayoutElement(toggleObj, minHeight: 25, minWidth: width); string color = type switch { diff --git a/src/Loader/BepInEx/BepInExConfigHandler.cs b/src/Loader/BepInEx/BepInExConfigHandler.cs index 360de84..a8a4f9f 100644 --- a/src/Loader/BepInEx/BepInExConfigHandler.cs +++ b/src/Loader/BepInEx/BepInExConfigHandler.cs @@ -2,8 +2,6 @@ using BepInEx.Configuration; using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityExplorer.Config; namespace UnityExplorer.Loader.BIE @@ -21,7 +19,7 @@ namespace UnityExplorer.Loader.BIE public override void RegisterConfigElement(ConfigElement config) { - var entry = Config.Bind(CTG_NAME, config.Name, config.Value, config.Description); + ConfigEntry entry = Config.Bind(CTG_NAME, config.Name, config.Value, config.Description); entry.SettingChanged += (object o, EventArgs e) => { @@ -47,13 +45,13 @@ namespace UnityExplorer.Loader.BIE public override void LoadConfig() { - foreach (var entry in ConfigManager.ConfigElements) + foreach (KeyValuePair entry in ConfigManager.ConfigElements) { - var key = entry.Key; - var def = new ConfigDefinition(CTG_NAME, key); + string key = entry.Key; + ConfigDefinition def = new(CTG_NAME, key); if (Config.ContainsKey(def) && Config[def] is ConfigEntryBase configEntry) { - var config = entry.Value; + IConfigElement config = entry.Value; config.BoxedValue = configEntry.BoxedValue; } } diff --git a/src/Loader/BepInEx/ExplorerBepInPlugin.cs b/src/Loader/BepInEx/ExplorerBepInPlugin.cs index 2cc1b26..f83975b 100644 --- a/src/Loader/BepInEx/ExplorerBepInPlugin.cs +++ b/src/Loader/BepInEx/ExplorerBepInPlugin.cs @@ -3,14 +3,8 @@ using BepInEx; using BepInEx.Logging; using HarmonyLib; using System; -using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.EventSystems; using UnityExplorer.Config; -using UniverseLib.Input; using UnityExplorer.Loader.BIE; #if CPP using BepInEx.IL2CPP; @@ -45,7 +39,7 @@ namespace UnityExplorer public Harmony HarmonyInstance => s_harmony; private static readonly Harmony s_harmony = new(ExplorerCore.GUID); - + public string ExplorerFolderName => ExplorerCore.DEFAULT_EXPLORER_FOLDER_NAME; public string ExplorerFolderDestination => Paths.PluginPath; diff --git a/src/Loader/IExplorerLoader.cs b/src/Loader/IExplorerLoader.cs index 12fd357..09d8c97 100644 --- a/src/Loader/IExplorerLoader.cs +++ b/src/Loader/IExplorerLoader.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityExplorer.Config; namespace UnityExplorer diff --git a/src/ObjectExplorer/ObjectSearch.cs b/src/ObjectExplorer/ObjectSearch.cs index ca29039..6d070f3 100644 --- a/src/ObjectExplorer/ObjectSearch.cs +++ b/src/ObjectExplorer/ObjectSearch.cs @@ -1,14 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; using UnityEngine.UI; -using UniverseLib.UI.Models; using UnityExplorer.UI.Panels; using UnityExplorer.UI.Widgets.AutoComplete; -using UniverseLib.UI; using UniverseLib; +using UniverseLib.UI; +using UniverseLib.UI.Models; using UniverseLib.UI.Widgets.ButtonList; using UniverseLib.UI.Widgets.ScrollView; using UniverseLib.Utility; @@ -73,7 +72,7 @@ namespace UnityExplorer.ObjectExplorer //var type = ReflectionUtility.GetTypeByName(desiredTypeInput); if (ReflectionUtility.GetTypeByName(desiredTypeInput) is Type cachedType) { - var type = cachedType; + Type type = cachedType; lastTypeCanHaveGameObject = typeof(Component).IsAssignableFrom(type) || type == typeof(GameObject); sceneFilterRow.SetActive(lastTypeCanHaveGameObject); childFilterRow.SetActive(lastTypeCanHaveGameObject); @@ -135,7 +134,7 @@ namespace UnityExplorer.ObjectExplorer string text; if (context == SearchContext.Class) { - var type = currentResults[index] as Type; + Type type = currentResults[index] as Type; text = $"{SignatureHighlighter.Parse(type, true)} ({type.Assembly.GetName().Name})"; } else @@ -164,14 +163,14 @@ namespace UnityExplorer.ObjectExplorer // Search context row - var contextGroup = UIFactory.CreateHorizontalGroup(uiRoot, "SearchContextRow", false, true, true, true, 2, new Vector4(2, 2, 2, 2)); + GameObject contextGroup = UIFactory.CreateHorizontalGroup(uiRoot, "SearchContextRow", false, true, true, true, 2, new Vector4(2, 2, 2, 2)); UIFactory.SetLayoutElement(contextGroup, minHeight: 25, flexibleHeight: 0); - var contextLbl = UIFactory.CreateLabel(contextGroup, "SearchContextLabel", "Searching for:", TextAnchor.MiddleLeft); + Text contextLbl = UIFactory.CreateLabel(contextGroup, "SearchContextLabel", "Searching for:", TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(contextLbl.gameObject, minWidth: 110, flexibleWidth: 0); - var contextDropObj = UIFactory.CreateDropdown(contextGroup, "ContextDropdown", out Dropdown contextDrop, null, 14, OnContextDropdownChanged); - foreach (var name in Enum.GetNames(typeof(SearchContext))) + GameObject contextDropObj = UIFactory.CreateDropdown(contextGroup, "ContextDropdown", out Dropdown contextDrop, null, 14, OnContextDropdownChanged); + foreach (string name in Enum.GetNames(typeof(SearchContext))) contextDrop.options.Add(new Dropdown.OptionData(name)); UIFactory.SetLayoutElement(contextDropObj, minHeight: 25, flexibleHeight: 0, flexibleWidth: 9999); @@ -180,10 +179,10 @@ namespace UnityExplorer.ObjectExplorer classInputRow = UIFactory.CreateHorizontalGroup(uiRoot, "ClassRow", false, true, true, true, 2, new Vector4(2, 2, 2, 2)); UIFactory.SetLayoutElement(classInputRow, minHeight: 25, flexibleHeight: 0); - var unityClassLbl = UIFactory.CreateLabel(classInputRow, "ClassLabel", "Class filter:", TextAnchor.MiddleLeft); + Text unityClassLbl = UIFactory.CreateLabel(classInputRow, "ClassLabel", "Class filter:", TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(unityClassLbl.gameObject, minWidth: 110, flexibleWidth: 0); - var classInputField = UIFactory.CreateInputField(classInputRow, "ClassInput", "..."); + InputFieldRef classInputField = UIFactory.CreateInputField(classInputRow, "ClassInput", "..."); UIFactory.SetLayoutElement(classInputField.UIRoot, minHeight: 25, flexibleHeight: 0, flexibleWidth: 9999); typeAutocompleter = new TypeCompleter(typeof(UnityEngine.Object), classInputField); @@ -196,11 +195,11 @@ namespace UnityExplorer.ObjectExplorer childFilterRow = UIFactory.CreateHorizontalGroup(uiRoot, "ChildFilterRow", false, true, true, true, 2, new Vector4(2, 2, 2, 2)); UIFactory.SetLayoutElement(childFilterRow, minHeight: 25, flexibleHeight: 0); - var childLbl = UIFactory.CreateLabel(childFilterRow, "ChildLabel", "Child filter:", TextAnchor.MiddleLeft); + Text childLbl = UIFactory.CreateLabel(childFilterRow, "ChildLabel", "Child filter:", TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(childLbl.gameObject, minWidth: 110, flexibleWidth: 0); - var childDropObj = UIFactory.CreateDropdown(childFilterRow, "ChildFilterDropdown", out Dropdown childDrop, null, 14, OnChildFilterDropChanged); - foreach (var name in Enum.GetNames(typeof(ChildFilter))) + GameObject childDropObj = UIFactory.CreateDropdown(childFilterRow, "ChildFilterDropdown", out Dropdown childDrop, null, 14, OnChildFilterDropChanged); + foreach (string name in Enum.GetNames(typeof(ChildFilter))) childDrop.options.Add(new Dropdown.OptionData(name)); UIFactory.SetLayoutElement(childDropObj, minHeight: 25, flexibleHeight: 0, flexibleWidth: 9999); @@ -211,11 +210,11 @@ namespace UnityExplorer.ObjectExplorer sceneFilterRow = UIFactory.CreateHorizontalGroup(uiRoot, "SceneFilterRow", false, true, true, true, 2, new Vector4(2, 2, 2, 2)); UIFactory.SetLayoutElement(sceneFilterRow, minHeight: 25, flexibleHeight: 0); - var sceneLbl = UIFactory.CreateLabel(sceneFilterRow, "SceneLabel", "Scene filter:", TextAnchor.MiddleLeft); + Text sceneLbl = UIFactory.CreateLabel(sceneFilterRow, "SceneLabel", "Scene filter:", TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(sceneLbl.gameObject, minWidth: 110, flexibleWidth: 0); - var sceneDropObj = UIFactory.CreateDropdown(sceneFilterRow, "SceneFilterDropdown", out Dropdown sceneDrop, null, 14, OnSceneFilterDropChanged); - foreach (var name in Enum.GetNames(typeof(SceneFilter))) + GameObject sceneDropObj = UIFactory.CreateDropdown(sceneFilterRow, "SceneFilterDropdown", out Dropdown sceneDrop, null, 14, OnSceneFilterDropChanged); + foreach (string name in Enum.GetNames(typeof(SceneFilter))) { if (!SceneHandler.DontDestroyExists && name == "DontDestroyOnLoad") continue; @@ -230,7 +229,7 @@ namespace UnityExplorer.ObjectExplorer nameInputRow = UIFactory.CreateHorizontalGroup(uiRoot, "NameRow", true, true, true, true, 2, new Vector4(2, 2, 2, 2)); UIFactory.SetLayoutElement(nameInputRow, minHeight: 25, flexibleHeight: 0); - var nameLbl = UIFactory.CreateLabel(nameInputRow, "NameFilterLabel", "Name contains:", TextAnchor.MiddleLeft); + Text nameLbl = UIFactory.CreateLabel(nameInputRow, "NameFilterLabel", "Name contains:", TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(nameLbl.gameObject, minWidth: 110, flexibleWidth: 0); nameInputField = UIFactory.CreateInputField(nameInputRow, "NameFilterInput", "..."); @@ -238,13 +237,13 @@ namespace UnityExplorer.ObjectExplorer // Search button - var searchButton = UIFactory.CreateButton(uiRoot, "SearchButton", "Search"); + ButtonRef searchButton = UIFactory.CreateButton(uiRoot, "SearchButton", "Search"); UIFactory.SetLayoutElement(searchButton.Component.gameObject, minHeight: 25, flexibleHeight: 0); searchButton.OnClick += DoSearch; // Results count label - var resultsCountRow = UIFactory.CreateHorizontalGroup(uiRoot, "ResultsCountRow", true, true, true, true); + GameObject resultsCountRow = UIFactory.CreateHorizontalGroup(uiRoot, "ResultsCountRow", true, true, true, true); UIFactory.SetLayoutElement(resultsCountRow, minHeight: 25, flexibleHeight: 0); resultsLabel = UIFactory.CreateLabel(resultsCountRow, "ResultsLabel", "0 results", TextAnchor.MiddleCenter); diff --git a/src/ObjectExplorer/SceneExplorer.cs b/src/ObjectExplorer/SceneExplorer.cs index cceefd1..32a12d6 100644 --- a/src/ObjectExplorer/SceneExplorer.cs +++ b/src/ObjectExplorer/SceneExplorer.cs @@ -1,19 +1,17 @@ using System; +using System.Collections; using System.Collections.Generic; -using System.Collections.ObjectModel; using System.IO; using System.Linq; -using System.Text; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; using UnityExplorer.UI; -using UniverseLib.UI.Models; using UnityExplorer.UI.Panels; using UnityExplorer.UI.Widgets; -using UniverseLib.UI; using UniverseLib; -using System.Collections; +using UniverseLib.UI; +using UniverseLib.UI.Models; using UniverseLib.Utility; namespace UnityExplorer.ObjectExplorer @@ -76,7 +74,7 @@ namespace UnityExplorer.ObjectExplorer this.Parent.SetTab(0); // select the transform's scene - var go = transform.gameObject; + GameObject go = transform.gameObject; if (SceneHandler.SelectedScene != go.scene) { int idx; @@ -109,7 +107,7 @@ namespace UnityExplorer.ObjectExplorer if (sceneToDropdownOption.ContainsKey(scene)) { - var opt = sceneToDropdownOption[scene]; + Dropdown.OptionData opt = sceneToDropdownOption[scene]; int idx = sceneDropdown.options.IndexOf(opt); if (sceneDropdown.value != idx) sceneDropdown.value = idx; @@ -136,7 +134,7 @@ namespace UnityExplorer.ObjectExplorer sceneToDropdownOption.Clear(); sceneDropdown.options.Clear(); - foreach (var scene in loadedScenes) + foreach (Scene scene in loadedScenes) { if (sceneToDropdownOption.ContainsKey(scene)) continue; @@ -148,7 +146,7 @@ namespace UnityExplorer.ObjectExplorer else if (string.IsNullOrEmpty(name)) name = ""; - var option = new Dropdown.OptionData(name); + Dropdown.OptionData option = new(name); sceneDropdown.options.Add(option); sceneToDropdownOption.Add(scene, option); } @@ -167,7 +165,7 @@ namespace UnityExplorer.ObjectExplorer private void TryLoadScene(LoadSceneMode mode, Dropdown allSceneDrop) { - var text = allSceneDrop.captionText.text; + string text = allSceneDrop.captionText.text; if (text == DEFAULT_LOAD_TEXT) return; @@ -191,18 +189,18 @@ namespace UnityExplorer.ObjectExplorer // Tool bar (top area) - var toolbar = UIFactory.CreateVerticalGroup(uiRoot, "Toolbar", true, true, true, true, 2, new Vector4(2, 2, 2, 2), + GameObject toolbar = UIFactory.CreateVerticalGroup(uiRoot, "Toolbar", true, true, true, true, 2, new Vector4(2, 2, 2, 2), new Color(0.15f, 0.15f, 0.15f)); // Scene selector dropdown - var dropRow = UIFactory.CreateHorizontalGroup(toolbar, "DropdownRow", true, true, true, true, 5, default, new Color(1, 1, 1, 0)); + GameObject dropRow = UIFactory.CreateHorizontalGroup(toolbar, "DropdownRow", true, true, true, true, 5, default, new Color(1, 1, 1, 0)); UIFactory.SetLayoutElement(dropRow, minHeight: 25, flexibleWidth: 9999); - var dropLabel = UIFactory.CreateLabel(dropRow, "SelectorLabel", "Scene:", TextAnchor.MiddleLeft, Color.cyan, false, 15); + Text dropLabel = UIFactory.CreateLabel(dropRow, "SelectorLabel", "Scene:", TextAnchor.MiddleLeft, Color.cyan, false, 15); UIFactory.SetLayoutElement(dropLabel.gameObject, minHeight: 25, minWidth: 60, flexibleWidth: 0); - var dropdownObj = UIFactory.CreateDropdown(dropRow, "SceneDropdown", out sceneDropdown, "", 13, OnSceneSelectionDropdownChanged); + GameObject dropdownObj = UIFactory.CreateDropdown(dropRow, "SceneDropdown", out sceneDropdown, "", 13, OnSceneSelectionDropdownChanged); UIFactory.SetLayoutElement(dropdownObj, minHeight: 25, flexibleHeight: 0, flexibleWidth: 9999); SceneHandler.Update(); @@ -211,11 +209,11 @@ namespace UnityExplorer.ObjectExplorer // Filter row - var filterRow = UIFactory.CreateHorizontalGroup(toolbar, "FilterGroup", true, true, true, true, 2, new Vector4(2, 2, 2, 2)); + GameObject filterRow = UIFactory.CreateHorizontalGroup(toolbar, "FilterGroup", true, true, true, true, 2, new Vector4(2, 2, 2, 2)); UIFactory.SetLayoutElement(filterRow, minHeight: 25, flexibleHeight: 0); //Filter input field - var inputField = UIFactory.CreateInputField(filterRow, "FilterInput", "Search and press enter..."); + InputFieldRef inputField = UIFactory.CreateInputField(filterRow, "FilterInput", "Search and press enter..."); inputField.Component.targetGraphic.color = new Color(0.2f, 0.2f, 0.2f); RuntimeHelper.SetColorBlock(inputField.Component, new Color(0.4f, 0.4f, 0.4f), new Color(0.2f, 0.2f, 0.2f), new Color(0.08f, 0.08f, 0.08f)); @@ -228,11 +226,11 @@ namespace UnityExplorer.ObjectExplorer refreshRow = UIFactory.CreateHorizontalGroup(toolbar, "RefreshGroup", true, true, true, true, 2, new Vector4(2, 2, 2, 2)); UIFactory.SetLayoutElement(refreshRow, minHeight: 30, flexibleHeight: 0); - var refreshButton = UIFactory.CreateButton(refreshRow, "RefreshButton", "Update"); + ButtonRef refreshButton = UIFactory.CreateButton(refreshRow, "RefreshButton", "Update"); UIFactory.SetLayoutElement(refreshButton.Component.gameObject, minWidth: 65, flexibleWidth: 0); refreshButton.OnClick += UpdateTree; - var refreshToggle = UIFactory.CreateToggle(refreshRow, "RefreshToggle", out Toggle toggle, out Text text); + GameObject refreshToggle = UIFactory.CreateToggle(refreshRow, "RefreshToggle", out Toggle toggle, out Text text); UIFactory.SetLayoutElement(refreshToggle, flexibleWidth: 9999); text.text = "Auto-update (1 second)"; text.alignment = TextAnchor.MiddleLeft; @@ -245,18 +243,18 @@ namespace UnityExplorer.ObjectExplorer // tree labels row - var labelsRow = UIFactory.CreateHorizontalGroup(toolbar, "LabelsRow", true, true, true, true, 2, new Vector4(2, 2, 2, 2)); + GameObject labelsRow = UIFactory.CreateHorizontalGroup(toolbar, "LabelsRow", true, true, true, true, 2, new Vector4(2, 2, 2, 2)); UIFactory.SetLayoutElement(labelsRow, minHeight: 30, flexibleHeight: 0); - var nameLabel = UIFactory.CreateLabel(labelsRow, "NameLabel", "Name", TextAnchor.MiddleLeft, color: Color.grey); + Text nameLabel = UIFactory.CreateLabel(labelsRow, "NameLabel", "Name", TextAnchor.MiddleLeft, color: Color.grey); UIFactory.SetLayoutElement(nameLabel.gameObject, flexibleWidth: 9999, minHeight: 25); - var indexLabel = UIFactory.CreateLabel(labelsRow, "IndexLabel", "Sibling Index", TextAnchor.MiddleLeft, fontSize: 12, color: Color.grey); + Text indexLabel = UIFactory.CreateLabel(labelsRow, "IndexLabel", "Sibling Index", TextAnchor.MiddleLeft, fontSize: 12, color: Color.grey); UIFactory.SetLayoutElement(indexLabel.gameObject, minWidth: 100, flexibleWidth: 0, minHeight: 25); // Transform Tree - var scrollPool = UIFactory.CreateScrollPool(uiRoot, "TransformTree", out GameObject scrollObj, + UniverseLib.UI.Widgets.ScrollView.ScrollPool scrollPool = UIFactory.CreateScrollPool(uiRoot, "TransformTree", out GameObject scrollObj, out GameObject scrollContent, new Color(0.11f, 0.11f, 0.11f)); UIFactory.SetLayoutElement(scrollObj, flexibleHeight: 9999); UIFactory.SetLayoutElement(scrollContent, flexibleHeight: 9999); @@ -294,7 +292,7 @@ namespace UnityExplorer.ObjectExplorer allSceneDropdown.options.Clear(); allSceneDropdown.options.Add(new Dropdown.OptionData(DEFAULT_LOAD_TEXT)); - foreach (var scene in SceneHandler.AllSceneNames) + foreach (string scene in SceneHandler.AllSceneNames) { if (string.IsNullOrEmpty(filter) || scene.ContainsIgnoreCase(filter)) allSceneDropdown.options.Add(new Dropdown.OptionData(Path.GetFileNameWithoutExtension(scene))); @@ -308,7 +306,7 @@ namespace UnityExplorer.ObjectExplorer private void RefreshSceneLoaderButtons() { - var text = allSceneDropdown.captionText.text; + string text = allSceneDropdown.captionText.text; if (text == DEFAULT_LOAD_TEXT) { loadButton.Component.interactable = false; @@ -328,30 +326,30 @@ namespace UnityExplorer.ObjectExplorer { if (SceneHandler.WasAbleToGetScenesInBuild) { - var sceneLoaderObj = UIFactory.CreateVerticalGroup(uiRoot, "SceneLoader", true, true, true, true); + GameObject sceneLoaderObj = UIFactory.CreateVerticalGroup(uiRoot, "SceneLoader", true, true, true, true); UIFactory.SetLayoutElement(sceneLoaderObj, minHeight: 25); // Title - var loaderTitle = UIFactory.CreateLabel(sceneLoaderObj, "SceneLoaderLabel", "Scene Loader", TextAnchor.MiddleLeft, Color.white, true, 14); + Text loaderTitle = UIFactory.CreateLabel(sceneLoaderObj, "SceneLoaderLabel", "Scene Loader", TextAnchor.MiddleLeft, Color.white, true, 14); UIFactory.SetLayoutElement(loaderTitle.gameObject, minHeight: 25, flexibleHeight: 0); // Search filter - var searchFilterObj = UIFactory.CreateInputField(sceneLoaderObj, "SearchFilterInput", "Filter scene names..."); + InputFieldRef searchFilterObj = UIFactory.CreateInputField(sceneLoaderObj, "SearchFilterInput", "Filter scene names..."); UIFactory.SetLayoutElement(searchFilterObj.UIRoot, minHeight: 25, flexibleHeight: 0); searchFilterObj.OnValueChanged += RefreshSceneLoaderOptions; // Dropdown - var allSceneDropObj = UIFactory.CreateDropdown(sceneLoaderObj, "SceneLoaderDropdown", out allSceneDropdown, "", 14, null); + GameObject allSceneDropObj = UIFactory.CreateDropdown(sceneLoaderObj, "SceneLoaderDropdown", out allSceneDropdown, "", 14, null); UIFactory.SetLayoutElement(allSceneDropObj, minHeight: 25, minWidth: 150, flexibleWidth: 0, flexibleHeight: 0); RefreshSceneLoaderOptions(string.Empty); // Button row - var buttonRow = UIFactory.CreateHorizontalGroup(sceneLoaderObj, "LoadButtons", true, true, true, true, 4); + GameObject buttonRow = UIFactory.CreateHorizontalGroup(sceneLoaderObj, "LoadButtons", true, true, true, true, 4); loadButton = UIFactory.CreateButton(buttonRow, "LoadSceneButton", "Load (Single)", new Color(0.1f, 0.3f, 0.3f)); UIFactory.SetLayoutElement(loadButton.Component.gameObject, minHeight: 25, minWidth: 150); @@ -367,7 +365,7 @@ namespace UnityExplorer.ObjectExplorer TryLoadScene(LoadSceneMode.Additive, allSceneDropdown); }; - var disabledColor = new Color(0.24f, 0.24f, 0.24f); + Color disabledColor = new(0.24f, 0.24f, 0.24f); RuntimeHelper.SetColorBlock(loadButton.Component, disabled: disabledColor); RuntimeHelper.SetColorBlock(loadAdditiveButton.Component, disabled: disabledColor); diff --git a/src/ObjectExplorer/SceneHandler.cs b/src/ObjectExplorer/SceneHandler.cs index 982971c..5f67c4d 100644 --- a/src/ObjectExplorer/SceneHandler.cs +++ b/src/ObjectExplorer/SceneHandler.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Collections.ObjectModel; using System.Linq; -using System.Text; using UnityEngine; using UnityEngine.SceneManagement; using UniverseLib; @@ -65,11 +63,11 @@ namespace UnityExplorer.ObjectExplorer if (sceneUtil == null) throw new Exception("This version of Unity does not ship with the 'SceneUtility' class, or it was not unstripped."); - var method = sceneUtil.GetMethod("GetScenePathByBuildIndex", ReflectionUtility.FLAGS); + System.Reflection.MethodInfo method = sceneUtil.GetMethod("GetScenePathByBuildIndex", ReflectionUtility.FLAGS); int sceneCount = SceneManager.sceneCountInBuildSettings; for (int i = 0; i < sceneCount; i++) { - var scenePath = (string)method.Invoke(null, new object[] { i }); + string scenePath = (string)method.Invoke(null, new object[] { i }); AllSceneNames.Add(scenePath); } @@ -85,9 +83,9 @@ namespace UnityExplorer.ObjectExplorer internal static void Update() { // Inspected scene will exist if it's DontDestroyOnLoad or HideAndDontSave - bool inspectedExists = - SelectedScene.HasValue - && ((DontDestroyExists && SelectedScene.Value.handle == -12) + bool inspectedExists = + SelectedScene.HasValue + && ((DontDestroyExists && SelectedScene.Value.handle == -12) || SelectedScene.Value.handle == -1); LoadedScenes.Clear(); @@ -121,11 +119,11 @@ namespace UnityExplorer.ObjectExplorer CurrentRootObjects = RuntimeHelper.GetRootGameObjects((Scene)SelectedScene); else { - var allObjects = RuntimeHelper.FindObjectsOfTypeAll(typeof(GameObject)); - var objects = new List(); - foreach (var obj in allObjects) + UnityEngine.Object[] allObjects = RuntimeHelper.FindObjectsOfTypeAll(typeof(GameObject)); + List objects = new(); + foreach (UnityEngine.Object obj in allObjects) { - var go = obj.TryCast(); + GameObject go = obj.TryCast(); if (go.transform.parent == null && !go.scene.IsValid()) objects.Add(go); } diff --git a/src/ObjectExplorer/SearchProvider.cs b/src/ObjectExplorer/SearchProvider.cs index ecbd83c..511b421 100644 --- a/src/ObjectExplorer/SearchProvider.cs +++ b/src/ObjectExplorer/SearchProvider.cs @@ -2,12 +2,9 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; -using System.Text; using UnityEngine; using UnityEngine.SceneManagement; -using UnityExplorer.Runtime; using UniverseLib; -using UniverseLib.Input; using UniverseLib.Utility; namespace UnityExplorer.ObjectExplorer @@ -50,7 +47,7 @@ namespace UnityExplorer.ObjectExplorer internal static List UnityObjectSearch(string input, string customTypeInput, ChildFilter childFilter, SceneFilter sceneFilter) { - var results = new List(); + List results = new(); Type searchType = null; if (!string.IsNullOrEmpty(customTypeInput)) @@ -69,7 +66,7 @@ namespace UnityExplorer.ObjectExplorer if (searchType == null) searchType = typeof(UnityEngine.Object); - var allObjects = RuntimeHelper.FindObjectsOfTypeAll(searchType); + UnityEngine.Object[] allObjects = RuntimeHelper.FindObjectsOfTypeAll(searchType); // perform filter comparers @@ -79,14 +76,14 @@ namespace UnityExplorer.ObjectExplorer bool shouldFilterGOs = searchType == typeof(GameObject) || typeof(Component).IsAssignableFrom(searchType); - foreach (var obj in allObjects) + foreach (UnityEngine.Object obj in allObjects) { // name check if (!string.IsNullOrEmpty(nameFilter) && !obj.name.ContainsIgnoreCase(nameFilter)) continue; GameObject go = null; - var type = obj.GetActualType(); + Type type = obj.GetActualType(); if (type == typeof(GameObject)) go = obj.TryCast(); @@ -130,15 +127,15 @@ namespace UnityExplorer.ObjectExplorer internal static List ClassSearch(string input) { - var list = new List(); + List list = new(); - var nameFilter = ""; + string nameFilter = ""; if (!string.IsNullOrEmpty(input)) nameFilter = input; - foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) + foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) { - foreach (var type in asm.TryGetTypes()) + foreach (Type type in asm.TryGetTypes()) { if (!string.IsNullOrEmpty(nameFilter) && !type.FullName.ContainsIgnoreCase(nameFilter)) continue; @@ -165,30 +162,30 @@ namespace UnityExplorer.ObjectExplorer internal static List InstanceSearch(string input) { - var instances = new List(); + List instances = new(); - var nameFilter = ""; + string nameFilter = ""; if (!string.IsNullOrEmpty(input)) nameFilter = input; - var flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static; - - foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) + BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static; + + foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) { // Search all non-static, non-enum classes. - foreach (var type in asm.TryGetTypes().Where(it => !(it.IsSealed && it.IsAbstract) && !it.IsEnum)) + foreach (Type type in asm.TryGetTypes().Where(it => !(it.IsSealed && it.IsAbstract) && !it.IsEnum)) { try { if (!string.IsNullOrEmpty(nameFilter) && !type.FullName.ContainsIgnoreCase(nameFilter)) continue; - + ReflectionUtility.FindSingleton(instanceNames, type, flags, instances); } catch { } } } - + return instances; } diff --git a/src/Runtime/UERuntimeHelper.cs b/src/Runtime/UERuntimeHelper.cs index f642f1b..0872150 100644 --- a/src/Runtime/UERuntimeHelper.cs +++ b/src/Runtime/UERuntimeHelper.cs @@ -1,13 +1,7 @@ using System; -using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; -using System.Text; -using UnityEngine; -using UnityEngine.EventSystems; -using UnityEngine.SceneManagement; -using UnityEngine.UI; using UnityExplorer.Config; using UniverseLib; @@ -20,7 +14,7 @@ namespace UnityExplorer.Runtime public static UERuntimeHelper Instance; public static void Init() - { + { #if CPP Instance = new Il2CppHelper(); #else @@ -50,10 +44,10 @@ namespace UnityExplorer.Runtime try { - var sigs = blacklist.Split(';'); - foreach (var sig in sigs) + string[] sigs = blacklist.Split(';'); + foreach (string sig in sigs) { - var s = sig.Trim(); + string s = sig.Trim(); if (string.IsNullOrEmpty(s)) continue; if (!currentBlacklist.Contains(s)) @@ -65,7 +59,7 @@ namespace UnityExplorer.Runtime ExplorerCore.LogWarning($"Exception parsing blacklist string: {ex.ReflectionExToString()}"); } - foreach (var sig in Instance.DefaultReflectionBlacklist) + foreach (string sig in Instance.DefaultReflectionBlacklist) { if (!currentBlacklist.Contains(sig)) currentBlacklist.Add(sig); @@ -84,7 +78,7 @@ namespace UnityExplorer.Runtime if (string.IsNullOrEmpty(member.DeclaringType?.Namespace)) return false; - var sig = $"{member.DeclaringType.FullName}.{member.Name}"; + string sig = $"{member.DeclaringType.FullName}.{member.Name}"; return currentBlacklist.Contains(sig); } diff --git a/src/Runtime/UnityCrashPrevention.cs b/src/Runtime/UnityCrashPrevention.cs index 6f33ffb..dbcd350 100644 --- a/src/Runtime/UnityCrashPrevention.cs +++ b/src/Runtime/UnityCrashPrevention.cs @@ -2,15 +2,13 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; -using System.Text; using UnityEngine; -using UnityExplorer.CacheObject; namespace UnityExplorer.Runtime { internal static class UnityCrashPrevention { - static readonly HarmonyLib.Harmony harmony = new ($"{ExplorerCore.GUID}.crashprevention"); + static readonly HarmonyLib.Harmony harmony = new($"{ExplorerCore.GUID}.crashprevention"); internal static void Init() { @@ -27,7 +25,7 @@ namespace UnityExplorer.Runtime try { harmony.Patch( - HarmonyLib.AccessTools.Method(typeof(T), orig, argTypes), + HarmonyLib.AccessTools.Method(typeof(T), orig, argTypes), new HarmonyLib.HarmonyMethod(HarmonyLib.AccessTools.Method(typeof(UnityCrashPrevention), prefix))); } catch //(Exception ex) diff --git a/src/Tests/TestClass.cs b/src/Tests/TestClass.cs index 0589320..df839d5 100644 --- a/src/Tests/TestClass.cs +++ b/src/Tests/TestClass.cs @@ -1,12 +1,8 @@ using System; using System.Collections; using System.Collections.Generic; -using System.Linq; using System.Reflection; -using System.Text; using UnityEngine; -using UnityExplorer.UI; -using UnityExplorer.CacheObject.IValues; #if CPP using UnhollowerRuntimeLib; using UnhollowerBaseLib; @@ -74,7 +70,7 @@ namespace UnityExplorer.Tests { get { - var list = new List(); + List list = new(); int count = UnityEngine.Random.Range(0, 100); for (int i = 0; i < count; i++) list.Add(GetRandomObject()); @@ -209,12 +205,12 @@ namespace UnityExplorer.Tests IL2CPP_HashTable.Add("key3", "value3"); ExplorerCore.Log($"IL2CPP 3: Il2Cpp IDictionary"); - var dict2 = new Il2CppSystem.Collections.Generic.Dictionary(); + Il2CppSystem.Collections.Generic.Dictionary dict2 = new Il2CppSystem.Collections.Generic.Dictionary(); dict2.Add("key1", "value1"); IL2CPP_IDict = dict2.TryCast(); ExplorerCore.Log($"IL2CPP 4: Il2Cpp List of Il2Cpp Object"); - var list = new Il2CppSystem.Collections.Generic.List(5); + Il2CppSystem.Collections.Generic.List list = new Il2CppSystem.Collections.Generic.List(5); list.Add("one"); list.Add("two"); IL2CPP_IList = list.TryCast(); @@ -240,14 +236,14 @@ namespace UnityExplorer.Tests // boxed enum test try { - var cppType = Il2CppType.Of(); + Il2CppSystem.Type cppType = Il2CppType.Of(); if (cppType != null) { - var boxedEnum = Il2CppSystem.Enum.Parse(cppType, "Color"); + Il2CppSystem.Object boxedEnum = Il2CppSystem.Enum.Parse(cppType, "Color"); IL2CPP_listOfBoxedObjects.Add(boxedEnum); } - var structBox = Vector3.one.BoxIl2CppObject(); + Il2CppSystem.Object structBox = Vector3.one.BoxIl2CppObject(); IL2CPP_listOfBoxedObjects.Add(structBox); } diff --git a/src/UI/DisplayManager.cs b/src/UI/DisplayManager.cs index a3795da..1c9e22c 100644 --- a/src/UI/DisplayManager.cs +++ b/src/UI/DisplayManager.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections; using UnityEngine; using UnityExplorer.Config; using UniverseLib; @@ -45,7 +41,7 @@ namespace UnityExplorer.UI ConfigManager.Target_Display.Value = 0; return; - } + } ActiveDisplayIndex = display; ActiveDisplay.Activate(); @@ -72,7 +68,7 @@ namespace UnityExplorer.UI yield return null; yield return null; - foreach (var panel in UIManager.UIPanels.Values) + foreach (Panels.UIPanel panel in UIManager.UIPanels.Values) { panel.EnsureValidSize(); panel.EnsureValidPosition(); diff --git a/src/UI/Notification.cs b/src/UI/Notification.cs index 554c8cc..e57da58 100644 --- a/src/UI/Notification.cs +++ b/src/UI/Notification.cs @@ -1,10 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; using UnityEngine.UI; -using UniverseLib.Input; using UniverseLib.UI; namespace UnityExplorer.UI @@ -48,7 +43,7 @@ namespace UnityExplorer.UI popupLabel = UIFactory.CreateLabel(UIManager.UIRoot, "ClipboardNotification", "", TextAnchor.MiddleCenter); popupLabel.rectTransform.sizeDelta = new(500, 100); popupLabel.gameObject.AddComponent(); - var popupGroup = popupLabel.gameObject.AddComponent(); + CanvasGroup popupGroup = popupLabel.gameObject.AddComponent(); popupGroup.blocksRaycasts = false; } } diff --git a/src/UI/Panels/AutoCompleteModal.cs b/src/UI/Panels/AutoCompleteModal.cs index d1f5ca5..3acfa82 100644 --- a/src/UI/Panels/AutoCompleteModal.cs +++ b/src/UI/Panels/AutoCompleteModal.cs @@ -2,19 +2,15 @@ using System.Collections.Generic; using System.Linq; using UnityEngine; -using UnityEngine.EventSystems; using UnityEngine.UI; -using UniverseLib.Input; -using UnityExplorer.Runtime; -using UnityExplorer.UI; using UnityExplorer.UI.Panels; -using UniverseLib.UI.Widgets; using UniverseLib; +using UniverseLib.Input; using UniverseLib.UI; +using UniverseLib.UI.Models; using UniverseLib.UI.Widgets.ButtonList; using UniverseLib.UI.Widgets.ScrollView; using UniverseLib.Utility; -using UniverseLib.UI.Models; namespace UnityExplorer.UI.Widgets.AutoComplete { @@ -184,7 +180,7 @@ namespace UnityExplorer.UI.Widgets.AutoComplete private void OnCellClicked(int dataIndex) { - var suggestion = Suggestions[dataIndex]; + Suggestion suggestion = Suggestions[dataIndex]; CurrentHandler.OnSuggestionClicked(suggestion); } @@ -198,7 +194,7 @@ namespace UnityExplorer.UI.Widgets.AutoComplete return; } - var suggestion = Suggestions[index]; + Suggestion suggestion = Suggestions[index]; cell.Button.ButtonText.text = suggestion.DisplayText; if (CurrentHandler.AllowNavigation && index == SelectedIndex && setFirstCell) @@ -230,7 +226,7 @@ namespace UnityExplorer.UI.Widgets.AutoComplete if (CurrentHandler.AnchorToCaretPosition) { - var textGen = input.Component.cachedInputTextGenerator; + TextGenerator textGen = input.Component.cachedInputTextGenerator; int caretIdx = Math.Max(0, Math.Min(textGen.characterCount - 1, input.Component.caretPosition)); // normalize the caret horizontal position diff --git a/src/UI/Panels/CSConsolePanel.cs b/src/UI/Panels/CSConsolePanel.cs index 4585536..1eed941 100644 --- a/src/UI/Panels/CSConsolePanel.cs +++ b/src/UI/Panels/CSConsolePanel.cs @@ -1,14 +1,8 @@ using System; using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityEngine; -using UnityEngine.EventSystems; using UnityEngine.UI; -using UnityExplorer.Config; using UnityExplorer.CSConsole; -using UnityExplorer.UI.Widgets; using UniverseLib; using UniverseLib.UI; using UniverseLib.UI.Models; @@ -75,32 +69,32 @@ namespace UnityExplorer.UI.Panels { // Tools Row - var toolsRow = UIFactory.CreateHorizontalGroup(this.uiContent, "ToggleRow", false, false, true, true, 5, new Vector4(8, 8, 10, 5), + GameObject toolsRow = UIFactory.CreateHorizontalGroup(this.uiContent, "ToggleRow", false, false, true, true, 5, new Vector4(8, 8, 10, 5), default, TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(toolsRow, minHeight: 25, flexibleHeight: 0, flexibleWidth: 9999); // Buttons - var compileButton = UIFactory.CreateButton(toolsRow, "CompileButton", "Compile", new Color(0.33f, 0.5f, 0.33f)); + ButtonRef compileButton = UIFactory.CreateButton(toolsRow, "CompileButton", "Compile", new Color(0.33f, 0.5f, 0.33f)); UIFactory.SetLayoutElement(compileButton.Component.gameObject, minHeight: 28, minWidth: 130, flexibleHeight: 0); compileButton.ButtonText.fontSize = 15; compileButton.OnClick += () => { OnCompileClicked?.Invoke(); }; - var resetButton = UIFactory.CreateButton(toolsRow, "ResetButton", "Reset", new Color(0.33f, 0.33f, 0.33f)); + ButtonRef resetButton = UIFactory.CreateButton(toolsRow, "ResetButton", "Reset", new Color(0.33f, 0.33f, 0.33f)); UIFactory.SetLayoutElement(resetButton.Component.gameObject, minHeight: 28, minWidth: 80, flexibleHeight: 0); resetButton.ButtonText.fontSize = 15; resetButton.OnClick += () => { OnResetClicked?.Invoke(); }; // Help dropdown - var helpDrop = UIFactory.CreateDropdown(toolsRow, "HelpDropdown", out var dropdown, "Help", 14, null); + GameObject helpDrop = UIFactory.CreateDropdown(toolsRow, "HelpDropdown", out Dropdown dropdown, "Help", 14, null); UIFactory.SetLayoutElement(helpDrop, minHeight: 25, minWidth: 100); HelpDropdown = dropdown; HelpDropdown.onValueChanged.AddListener((int val) => { this.OnHelpDropdownChanged?.Invoke(val); }); // Enable Ctrl+R toggle - var ctrlRToggleObj = UIFactory.CreateToggle(toolsRow, "CtrlRToggle", out var CtrlRToggle, out Text ctrlRToggleText); + GameObject ctrlRToggleObj = UIFactory.CreateToggle(toolsRow, "CtrlRToggle", out Toggle CtrlRToggle, out Text ctrlRToggleText); UIFactory.SetLayoutElement(ctrlRToggleObj, minWidth: 150, flexibleWidth: 0, minHeight: 25); ctrlRToggleText.alignment = TextAnchor.UpperLeft; ctrlRToggleText.text = "Compile on Ctrl+R"; @@ -108,7 +102,7 @@ namespace UnityExplorer.UI.Panels // Enable Suggestions toggle - var suggestToggleObj = UIFactory.CreateToggle(toolsRow, "SuggestionToggle", out var SuggestionsToggle, out Text suggestToggleText); + GameObject suggestToggleObj = UIFactory.CreateToggle(toolsRow, "SuggestionToggle", out Toggle SuggestionsToggle, out Text suggestToggleText); UIFactory.SetLayoutElement(suggestToggleObj, minWidth: 120, flexibleWidth: 0, minHeight: 25); suggestToggleText.alignment = TextAnchor.UpperLeft; suggestToggleText.text = "Suggestions"; @@ -116,7 +110,7 @@ namespace UnityExplorer.UI.Panels // Enable Auto-indent toggle - var autoIndentToggleObj = UIFactory.CreateToggle(toolsRow, "IndentToggle", out var AutoIndentToggle, out Text autoIndentToggleText); + GameObject autoIndentToggleObj = UIFactory.CreateToggle(toolsRow, "IndentToggle", out Toggle AutoIndentToggle, out Text autoIndentToggleText); UIFactory.SetLayoutElement(autoIndentToggleObj, minWidth: 120, flexibleWidth: 0, minHeight: 25); autoIndentToggleText.alignment = TextAnchor.UpperLeft; autoIndentToggleText.text = "Auto-indent"; @@ -124,7 +118,7 @@ namespace UnityExplorer.UI.Panels // Console Input - var inputArea = UIFactory.CreateUIObject("InputGroup", uiContent); + GameObject inputArea = UIFactory.CreateUIObject("InputGroup", uiContent); UIFactory.SetLayoutElement(inputArea, flexibleWidth: 9999, flexibleHeight: 9999); UIFactory.SetLayoutGroup(inputArea, false, true, true, true); inputArea.AddComponent().color = Color.white; @@ -132,8 +126,8 @@ namespace UnityExplorer.UI.Panels // line numbers - var linesHolder = UIFactory.CreateUIObject("LinesHolder", inputArea); - var linesRect = linesHolder.GetComponent(); + GameObject linesHolder = UIFactory.CreateUIObject("LinesHolder", inputArea); + RectTransform linesRect = linesHolder.GetComponent(); linesRect.pivot = new Vector2(0, 1); linesRect.anchorMin = new Vector2(0, 0); linesRect.anchorMax = new Vector2(0, 1); @@ -149,8 +143,8 @@ namespace UnityExplorer.UI.Panels int fontSize = 16; - var inputObj = UIFactory.CreateScrollInputField(inputArea, "ConsoleInput", ConsoleController.STARTUP_TEXT, - out var inputScroller, fontSize); + GameObject inputObj = UIFactory.CreateScrollInputField(inputArea, "ConsoleInput", ConsoleController.STARTUP_TEXT, + out InputFieldScroller inputScroller, fontSize); InputScroller = inputScroller; ConsoleController.defaultInputFieldAlpha = Input.Component.selectionColor.a; Input.OnValueChanged += InvokeOnValueChanged; @@ -173,8 +167,8 @@ namespace UnityExplorer.UI.Panels Input.PlaceholderText.fontSize = fontSize; // Lexer highlight text overlay - var highlightTextObj = UIFactory.CreateUIObject("HighlightText", InputText.gameObject); - var highlightTextRect = highlightTextObj.GetComponent(); + GameObject highlightTextObj = UIFactory.CreateUIObject("HighlightText", InputText.gameObject); + RectTransform highlightTextRect = highlightTextObj.GetComponent(); highlightTextRect.pivot = new Vector2(0, 1); highlightTextRect.anchorMin = Vector2.zero; highlightTextRect.anchorMax = Vector2.one; diff --git a/src/UI/Panels/ClipboardPanel.cs b/src/UI/Panels/ClipboardPanel.cs index 28f81bf..f5ee7a1 100644 --- a/src/UI/Panels/ClipboardPanel.cs +++ b/src/UI/Panels/ClipboardPanel.cs @@ -1,17 +1,8 @@ using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityEngine; using UnityEngine.UI; -using UnityExplorer.CacheObject; -using UnityExplorer.CacheObject.Views; -using UnityExplorer.Config; using UniverseLib; -using UniverseLib.Input; using UniverseLib.UI; -using UniverseLib.UI.Widgets; using UniverseLib.Utility; namespace UnityExplorer.UI.Panels @@ -41,14 +32,14 @@ namespace UnityExplorer.UI.Panels public static bool TryPaste(Type targetType, out object paste) { paste = Current; - var pasteType = Current?.GetActualType(); + Type pasteType = Current?.GetActualType(); if (Current != null && !targetType.IsAssignableFrom(pasteType)) { Notification.ShowMessage($"Cannot assign '{pasteType.Name}' to '{targetType.Name}'!"); return false; } - + Notification.ShowMessage("Pasted!"); return true; } @@ -74,7 +65,7 @@ namespace UnityExplorer.UI.Panels InspectorManager.Inspect(Current); } - + protected internal override void DoSetDefaultPosAndAnchors() { this.Rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, MinWidth); @@ -89,20 +80,20 @@ namespace UnityExplorer.UI.Panels // Actual panel content - var firstRow = UIFactory.CreateHorizontalGroup(uiContent, "FirstRow", false, false, true, true, 5, new(2,2,2,2), new(1,1,1,0)); + GameObject firstRow = UIFactory.CreateHorizontalGroup(uiContent, "FirstRow", false, false, true, true, 5, new(2, 2, 2, 2), new(1, 1, 1, 0)); UIFactory.SetLayoutElement(firstRow, minHeight: 25, flexibleWidth: 999); // Title for "Current Paste:" - var currentPasteTitle = UIFactory.CreateLabel(firstRow, "CurrentPasteTitle", "Current paste:", TextAnchor.MiddleLeft, color: Color.grey); + Text currentPasteTitle = UIFactory.CreateLabel(firstRow, "CurrentPasteTitle", "Current paste:", TextAnchor.MiddleLeft, color: Color.grey); UIFactory.SetLayoutElement(currentPasteTitle.gameObject, minHeight: 25, minWidth: 100, flexibleWidth: 999); // Clear clipboard button - var clearButton = UIFactory.CreateButton(firstRow, "ClearPasteButton", "Clear Clipboard"); + UniverseLib.UI.Models.ButtonRef clearButton = UIFactory.CreateButton(firstRow, "ClearPasteButton", "Clear Clipboard"); UIFactory.SetLayoutElement(clearButton.Component.gameObject, minWidth: 120, minHeight: 25, flexibleWidth: 0); clearButton.OnClick += () => Copy(null); // Current Paste info row - var currentPasteHolder = UIFactory.CreateHorizontalGroup(uiContent, "SecondRow", false, false, true, true, 0, + GameObject currentPasteHolder = UIFactory.CreateHorizontalGroup(uiContent, "SecondRow", false, false, true, true, 0, new(2, 2, 2, 2), childAlignment: TextAnchor.UpperCenter); // Actual current paste info label @@ -111,7 +102,7 @@ namespace UnityExplorer.UI.Panels UpdateCurrentPasteInfo(); // Inspect button - var inspectButton = UIFactory.CreateButton(currentPasteHolder, "InspectButton", "Inspect"); + UniverseLib.UI.Models.ButtonRef inspectButton = UIFactory.CreateButton(currentPasteHolder, "InspectButton", "Inspect"); UIFactory.SetLayoutElement(inspectButton.Component.gameObject, minHeight: 25, flexibleHeight: 0, minWidth: 80, flexibleWidth: 0); inspectButton.OnClick += InspectClipboard; } diff --git a/src/UI/Panels/HookManagerPanel.cs b/src/UI/Panels/HookManagerPanel.cs index 3bb492e..ecc28c4 100644 --- a/src/UI/Panels/HookManagerPanel.cs +++ b/src/UI/Panels/HookManagerPanel.cs @@ -1,12 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; using UnityEngine.UI; -using UnityExplorer.Config; using UnityExplorer.Hooks; -using UnityExplorer.UI.Widgets; using UnityExplorer.UI.Widgets.AutoComplete; using UniverseLib.UI; using UniverseLib.UI.Models; @@ -87,7 +81,7 @@ namespace UnityExplorer.UI.Panels UIFactory.SetLayoutElement(currentHooksPanel, flexibleHeight: 9999, flexibleWidth: 9999); UIFactory.SetLayoutGroup(currentHooksPanel, true, true, true, true); - var addRow = UIFactory.CreateHorizontalGroup(currentHooksPanel, "AddRow", false, true, true, true, 4, + GameObject addRow = UIFactory.CreateHorizontalGroup(currentHooksPanel, "AddRow", false, true, true, true, 4, new Vector4(2, 2, 2, 2), new Color(0.2f, 0.2f, 0.2f)); UIFactory.SetLayoutElement(addRow, minHeight: 30, flexibleWidth: 9999); @@ -95,14 +89,14 @@ namespace UnityExplorer.UI.Panels UIFactory.SetLayoutElement(classSelectorInputField.Component.gameObject, flexibleWidth: 9999); new TypeCompleter(typeof(object), classSelectorInputField, true, false); - var addButton = UIFactory.CreateButton(addRow, "AddButton", "Add Hooks"); + ButtonRef addButton = UIFactory.CreateButton(addRow, "AddButton", "Add Hooks"); UIFactory.SetLayoutElement(addButton.Component.gameObject, minWidth: 100, minHeight: 25); addButton.OnClick += OnClassInputAddClicked; - var hooksLabel = UIFactory.CreateLabel(currentHooksPanel, "HooksLabel", "Current Hooks", TextAnchor.MiddleCenter); + Text hooksLabel = UIFactory.CreateLabel(currentHooksPanel, "HooksLabel", "Current Hooks", TextAnchor.MiddleCenter); UIFactory.SetLayoutElement(hooksLabel.gameObject, minHeight: 30, flexibleWidth: 9999); - HooksScrollPool = UIFactory.CreateScrollPool(currentHooksPanel, "HooksScrollPool", + HooksScrollPool = UIFactory.CreateScrollPool(currentHooksPanel, "HooksScrollPool", out GameObject hooksScroll, out GameObject hooksContent); UIFactory.SetLayoutElement(hooksScroll, flexibleHeight: 9999); HooksScrollPool.Initialize(HookManager.Instance); @@ -116,10 +110,10 @@ namespace UnityExplorer.UI.Panels addHooksLabel = UIFactory.CreateLabel(addHooksPanel, "AddLabel", "NOT SET", TextAnchor.MiddleCenter); UIFactory.SetLayoutElement(addHooksLabel.gameObject, minHeight: 30, minWidth: 100, flexibleWidth: 9999); - var buttonRow = UIFactory.CreateHorizontalGroup(addHooksPanel, "ButtonRow", false, false, true, true, 5); + GameObject buttonRow = UIFactory.CreateHorizontalGroup(addHooksPanel, "ButtonRow", false, false, true, true, 5); UIFactory.SetLayoutElement(buttonRow, minHeight: 25, flexibleWidth: 9999); - var doneButton = UIFactory.CreateButton(buttonRow, "DoneButton", "Done", new Color(0.2f, 0.3f, 0.2f)); + ButtonRef doneButton = UIFactory.CreateButton(buttonRow, "DoneButton", "Done", new Color(0.2f, 0.3f, 0.2f)); UIFactory.SetLayoutElement(doneButton.Component.gameObject, minHeight: 25, flexibleWidth: 9999); doneButton.OnClick += HookManager.Instance.DoneAddingHooks; @@ -140,26 +134,26 @@ namespace UnityExplorer.UI.Panels UIFactory.SetLayoutElement(editorPanel, flexibleHeight: 9999, flexibleWidth: 9999); UIFactory.SetLayoutGroup(editorPanel, true, true, true, true); - var editorLabel = UIFactory.CreateLabel(editorPanel, - "EditorLabel", + Text editorLabel = UIFactory.CreateLabel(editorPanel, + "EditorLabel", "Edit Harmony patch source as desired. Accepted method names are Prefix, Postfix, Finalizer and Transpiler (can define multiple).\n\n" + - "Hooks are temporary! Please copy the source into your IDE to avoid losing work if you wish to keep it!", + "Hooks are temporary! Please copy the source into your IDE to avoid losing work if you wish to keep it!", TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(editorLabel.gameObject, minHeight: 25, flexibleWidth: 9999); - var editorButtonRow = UIFactory.CreateHorizontalGroup(editorPanel, "ButtonRow", false, false, true, true, 5); + GameObject editorButtonRow = UIFactory.CreateHorizontalGroup(editorPanel, "ButtonRow", false, false, true, true, 5); UIFactory.SetLayoutElement(editorButtonRow, minHeight: 25, flexibleWidth: 9999); - var editorSaveButton = UIFactory.CreateButton(editorButtonRow, "DoneButton", "Save and Return", new Color(0.2f, 0.3f, 0.2f)); + ButtonRef editorSaveButton = UIFactory.CreateButton(editorButtonRow, "DoneButton", "Save and Return", new Color(0.2f, 0.3f, 0.2f)); UIFactory.SetLayoutElement(editorSaveButton.Component.gameObject, minHeight: 25, flexibleWidth: 9999); editorSaveButton.OnClick += HookManager.Instance.EditorInputSave; - var editorDoneButton = UIFactory.CreateButton(editorButtonRow, "DoneButton", "Cancel and Return", new Color(0.2f, 0.2f, 0.2f)); + ButtonRef editorDoneButton = UIFactory.CreateButton(editorButtonRow, "DoneButton", "Cancel and Return", new Color(0.2f, 0.2f, 0.2f)); UIFactory.SetLayoutElement(editorDoneButton.Component.gameObject, minHeight: 25, flexibleWidth: 9999); editorDoneButton.OnClick += HookManager.Instance.EditorInputCancel; int fontSize = 16; - var inputObj = UIFactory.CreateScrollInputField(editorPanel, "EditorInput", "", out var inputScroller, fontSize); + GameObject inputObj = UIFactory.CreateScrollInputField(editorPanel, "EditorInput", "", out InputFieldScroller inputScroller, fontSize); EditorInputScroller = inputScroller; EditorInput.OnValueChanged += HookManager.Instance.OnEditorInputChanged; @@ -171,8 +165,8 @@ namespace UnityExplorer.UI.Panels EditorInput.PlaceholderText.fontSize = fontSize; // Lexer highlight text overlay - var highlightTextObj = UIFactory.CreateUIObject("HighlightText", EditorInputText.gameObject); - var highlightTextRect = highlightTextObj.GetComponent(); + GameObject highlightTextObj = UIFactory.CreateUIObject("HighlightText", EditorInputText.gameObject); + RectTransform highlightTextRect = highlightTextObj.GetComponent(); highlightTextRect.pivot = new Vector2(0, 1); highlightTextRect.anchorMin = Vector2.zero; highlightTextRect.anchorMax = Vector2.one; diff --git a/src/UI/Panels/InspectorPanel.cs b/src/UI/Panels/InspectorPanel.cs index cac4965..30ab264 100644 --- a/src/UI/Panels/InspectorPanel.cs +++ b/src/UI/Panels/InspectorPanel.cs @@ -1,11 +1,5 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; using UnityEngine.UI; -using UnityExplorer.Config; using UnityExplorer.Inspectors; using UniverseLib.UI; @@ -54,11 +48,11 @@ namespace UnityExplorer.UI.Panels public override void ConstructPanelContent() { - var closeHolder = this.TitleBar.transform.Find("CloseHolder").gameObject; + GameObject closeHolder = this.TitleBar.transform.Find("CloseHolder").gameObject; // Inspect under mouse dropdown on title bar - var mouseDropdown = UIFactory.CreateDropdown(closeHolder, "MouseInspectDropdown", out MouseInspectDropdown, "Mouse Inspect", 14, + GameObject mouseDropdown = UIFactory.CreateDropdown(closeHolder, "MouseInspectDropdown", out MouseInspectDropdown, "Mouse Inspect", 14, MouseInspector.OnDropdownSelect); UIFactory.SetLayoutElement(mouseDropdown, minHeight: 25, minWidth: 140); MouseInspectDropdown.options.Add(new Dropdown.OptionData("Mouse Inspect")); @@ -68,7 +62,7 @@ namespace UnityExplorer.UI.Panels // add close all button to titlebar - var closeAllBtn = UIFactory.CreateButton(closeHolder.gameObject, "CloseAllBtn", "Close All", + UniverseLib.UI.Models.ButtonRef closeAllBtn = UIFactory.CreateButton(closeHolder.gameObject, "CloseAllBtn", "Close All", new Color(0.3f, 0.2f, 0.2f)); UIFactory.SetLayoutElement(closeAllBtn.Component.gameObject, minHeight: 25, minWidth: 80); closeAllBtn.Component.transform.SetSiblingIndex(closeAllBtn.Component.transform.GetSiblingIndex() - 1); diff --git a/src/UI/Panels/LogPanel.cs b/src/UI/Panels/LogPanel.cs index e11bfe5..7ede88c 100644 --- a/src/UI/Panels/LogPanel.cs +++ b/src/UI/Panels/LogPanel.cs @@ -3,15 +3,12 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; -using System.Text; using UnityEngine; using UnityEngine.UI; using UnityExplorer.Config; -using UnityExplorer.UI.Widgets; using UniverseLib; using UniverseLib.UI; using UniverseLib.UI.Models; -using UniverseLib.UI.Widgets; using UniverseLib.UI.Widgets.ScrollView; using UniverseLib.Utility; @@ -29,7 +26,7 @@ namespace UnityExplorer.UI.Panels public LogInfo(string message, LogType type) { this.message = message; this.type = type; } } - private static readonly List Logs = new List(); + private static readonly List Logs = new(); private static string CurrentStreamPath; public override string Name => "Log"; @@ -67,16 +64,16 @@ namespace UnityExplorer.UI.Panels private void SetupIO() { - var fileName = $"UnityExplorer {DateTime.Now:u}.txt"; + string fileName = $"UnityExplorer {DateTime.Now:u}.txt"; fileName = IOUtility.EnsureValidFilename(fileName); - var path = Path.Combine(ExplorerCore.ExplorerFolder, "Logs"); + string path = Path.Combine(ExplorerCore.ExplorerFolder, "Logs"); CurrentStreamPath = IOUtility.EnsureValidFilePath(Path.Combine(path, fileName)); // clean old log(s) - var files = Directory.GetFiles(path); + string[] files = Directory.GetFiles(path); if (files.Length >= 10) { - var sorted = files.ToList(); + List sorted = files.ToList(); // sort by 'datetime.ToString("u")' will put the oldest ones first sorted.Sort(); for (int i = 0; i < files.Length - 9; i++) @@ -113,7 +110,7 @@ namespace UnityExplorer.UI.Panels // Cell pool - private static readonly Dictionary logColors = new Dictionary + private static readonly Dictionary logColors = new() { { LogType.Log, Color.white }, { LogType.Warning, Color.yellow }, @@ -122,8 +119,8 @@ namespace UnityExplorer.UI.Panels { LogType.Exception, Color.red }, }; - private readonly Color logEvenColor = new Color(0.34f, 0.34f, 0.34f); - private readonly Color logOddColor = new Color(0.28f, 0.28f, 0.28f); + private readonly Color logEvenColor = new(0.34f, 0.34f, 0.34f); + private readonly Color logOddColor = new(0.28f, 0.28f, 0.28f); public void OnCellBorrowed(ConsoleLogCell cell) { } @@ -138,12 +135,12 @@ namespace UnityExplorer.UI.Panels // Logs are displayed in reverse order (newest at top) index = Logs.Count - index - 1; - var log = Logs[index]; + LogInfo log = Logs[index]; cell.IndexLabel.text = $"{index}:"; cell.Input.Text = log.message; cell.Input.Component.textComponent.color = logColors[log.type]; - var color = index % 2 == 0 ? logEvenColor : logOddColor; + Color color = index % 2 == 0 ? logEvenColor : logOddColor; RuntimeHelper.SetColorBlock(cell.Input.Component, color); } @@ -167,21 +164,21 @@ namespace UnityExplorer.UI.Panels // Buttons and toggles - var optionsRow = UIFactory.CreateUIObject("OptionsRow", this.uiContent); + GameObject optionsRow = UIFactory.CreateUIObject("OptionsRow", this.uiContent); UIFactory.SetLayoutElement(optionsRow, minHeight: 25, flexibleWidth: 9999); UIFactory.SetLayoutGroup(optionsRow, false, false, true, true, 5, 2, 2, 2, 2); - var clearButton = UIFactory.CreateButton(optionsRow, "ClearButton", "Clear", new Color(0.2f, 0.2f, 0.2f)); + ButtonRef clearButton = UIFactory.CreateButton(optionsRow, "ClearButton", "Clear", new Color(0.2f, 0.2f, 0.2f)); UIFactory.SetLayoutElement(clearButton.Component.gameObject, minHeight: 23, flexibleHeight: 0, minWidth: 60); clearButton.OnClick += ClearLogs; clearButton.Component.transform.SetSiblingIndex(1); - var fileButton = UIFactory.CreateButton(optionsRow, "FileButton", "Open Log File", new Color(0.2f, 0.2f, 0.2f)); + ButtonRef fileButton = UIFactory.CreateButton(optionsRow, "FileButton", "Open Log File", new Color(0.2f, 0.2f, 0.2f)); UIFactory.SetLayoutElement(fileButton.Component.gameObject, minHeight: 23, flexibleHeight: 0, minWidth: 100); fileButton.OnClick += OpenLogFile; fileButton.Component.transform.SetSiblingIndex(2); - var unityToggle = UIFactory.CreateToggle(optionsRow, "UnityLogToggle", out var toggle, out var toggleText); + GameObject unityToggle = UIFactory.CreateToggle(optionsRow, "UnityLogToggle", out Toggle toggle, out Text toggleText); UIFactory.SetLayoutElement(unityToggle, minHeight: 25, minWidth: 150); toggleText.text = "Log Unity Debug?"; toggle.isOn = ConfigManager.Log_Unity_Debug.Value; diff --git a/src/UI/Panels/MouseInspectorResultsPanel.cs b/src/UI/Panels/MouseInspectorResultsPanel.cs index 9bdede4..c4aceed 100644 --- a/src/UI/Panels/MouseInspectorResultsPanel.cs +++ b/src/UI/Panels/MouseInspectorResultsPanel.cs @@ -1,13 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; using UnityEngine; using UnityExplorer.Inspectors.MouseInspectors; -using UnityExplorer.UI.Widgets; -using UniverseLib; using UniverseLib.UI; -using UniverseLib.UI.Widgets; using UniverseLib.UI.Widgets.ButtonList; using UniverseLib.UI.Widgets.ScrollView; using UniverseLib.Utility; @@ -53,7 +47,7 @@ namespace UnityExplorer.UI.Panels if (index >= UiInspector.LastHitObjects.Count) return; - var obj = UiInspector.LastHitObjects[index]; + GameObject obj = UiInspector.LastHitObjects[index]; cell.Button.ButtonText.text = $"{obj.name} ({obj.transform.GetTransformPath(true)})"; } diff --git a/src/UI/Panels/ObjectExplorerPanel.cs b/src/UI/Panels/ObjectExplorerPanel.cs index 1e0762f..08995e9 100644 --- a/src/UI/Panels/ObjectExplorerPanel.cs +++ b/src/UI/Panels/ObjectExplorerPanel.cs @@ -1,19 +1,11 @@ using System; -using System.Collections; using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.IO; using System.Linq; -using System.Text; using UnityEngine; -using UnityEngine.SceneManagement; -using UnityEngine.UI; -using UnityExplorer.Config; -using UniverseLib.UI.Models; using UnityExplorer.ObjectExplorer; -using UnityExplorer.UI.Widgets; -using UniverseLib.UI; using UniverseLib; +using UniverseLib.UI; +using UniverseLib.UI.Models; namespace UnityExplorer.UI.Panels { @@ -31,18 +23,18 @@ namespace UnityExplorer.UI.Panels public override bool ShouldSaveActiveState => true; public int SelectedTab = 0; - private readonly List tabPages = new List(); - private readonly List tabButtons = new List(); + private readonly List tabPages = new(); + private readonly List tabButtons = new(); public void SetTab(int tabIndex) { if (SelectedTab != -1) DisableTab(SelectedTab); - var content = tabPages[tabIndex]; + UIModel content = tabPages[tabIndex]; content.SetActive(true); - var button = tabButtons[tabIndex]; + ButtonRef button = tabButtons[tabIndex]; RuntimeHelper.SetColorBlock(button.Component, UniversalUI.EnabledButtonColor, UniversalUI.EnabledButtonColor * 1.2f); SelectedTab = tabIndex; @@ -99,7 +91,7 @@ namespace UnityExplorer.UI.Panels public override void ConstructPanelContent() { // Tab bar - var tabGroup = UIFactory.CreateHorizontalGroup(uiContent, "TabBar", true, true, true, true, 2, new Vector4(2, 2, 2, 2)); + GameObject tabGroup = UIFactory.CreateHorizontalGroup(uiContent, "TabBar", true, true, true, true, 2, new Vector4(2, 2, 2, 2)); UIFactory.SetLayoutElement(tabGroup, minHeight: 25, flexibleHeight: 0); // Scene Explorer @@ -122,7 +114,7 @@ namespace UnityExplorer.UI.Panels private void AddTabButton(GameObject tabGroup, string label) { - var button = UIFactory.CreateButton(tabGroup, $"Button_{label}", label); + ButtonRef button = UIFactory.CreateButton(tabGroup, $"Button_{label}", label); int idx = tabButtons.Count; //button.onClick.AddListener(() => { SetTab(idx); }); diff --git a/src/UI/Panels/OptionsPanel.cs b/src/UI/Panels/OptionsPanel.cs index 7d0ae0a..20de9a9 100644 --- a/src/UI/Panels/OptionsPanel.cs +++ b/src/UI/Panels/OptionsPanel.cs @@ -1,14 +1,9 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Config; using UnityExplorer.CacheObject; using UnityExplorer.CacheObject.Views; -using UnityExplorer.UI.Widgets; -using UniverseLib.UI.Widgets; +using UnityExplorer.Config; using UniverseLib.UI; using UniverseLib.UI.Widgets.ScrollView; @@ -26,7 +21,7 @@ namespace UnityExplorer.UI.Panels public override bool ShowByDefault => false; // Entry holders - private readonly List configEntries = new List(); + private readonly List configEntries = new(); // ICacheObjectController public CacheObjectBase ParentCacheObject => null; @@ -39,10 +34,12 @@ namespace UnityExplorer.UI.Panels public OptionsPanel() { - foreach (var entry in ConfigManager.ConfigElements) + foreach (KeyValuePair entry in ConfigManager.ConfigElements) { - var cache = new CacheConfigEntry(entry.Value); - cache.Owner = this; + CacheConfigEntry cache = new(entry.Value) + { + Owner = this + }; configEntries.Add(cache); } } @@ -71,18 +68,18 @@ namespace UnityExplorer.UI.Panels { // Save button - var saveBtn = UIFactory.CreateButton(this.uiContent, "Save", "Save Options", new Color(0.2f, 0.3f, 0.2f)); + UniverseLib.UI.Models.ButtonRef saveBtn = UIFactory.CreateButton(this.uiContent, "Save", "Save Options", new Color(0.2f, 0.3f, 0.2f)); UIFactory.SetLayoutElement(saveBtn.Component.gameObject, flexibleWidth: 9999, minHeight: 30, flexibleHeight: 0); saveBtn.OnClick += ConfigManager.Handler.SaveConfig; // Config entries - var scrollPool = UIFactory.CreateScrollPool(this.uiContent, "ConfigEntries", out GameObject scrollObj, + ScrollPool scrollPool = UIFactory.CreateScrollPool(this.uiContent, "ConfigEntries", out GameObject scrollObj, out GameObject scrollContent); scrollPool.Initialize(this); - foreach (var config in configEntries) + foreach (CacheConfigEntry config in configEntries) config.UpdateValueFromSource(); } } diff --git a/src/UI/Panels/PanelDragger.cs b/src/UI/Panels/PanelDragger.cs index 4a2e9e9..2b65845 100644 --- a/src/UI/Panels/PanelDragger.cs +++ b/src/UI/Panels/PanelDragger.cs @@ -1,15 +1,10 @@ using System; using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; using UnityEngine; using UnityEngine.UI; -using UniverseLib.Input; -using UniverseLib.UI.Models; using UnityExplorer.UI.Widgets.AutoComplete; +using UniverseLib.Input; using UniverseLib.UI; -using UniverseLib; using UniverseLib.Utility; namespace UnityExplorer.UI.Panels @@ -46,7 +41,7 @@ namespace UnityExplorer.UI.Panels wasAnyDragging = false; Resizing = false; - foreach (var instance in Instances) + foreach (PanelDragger instance in Instances) { instance.WasDragging = false; instance.WasResizing = false; @@ -60,7 +55,7 @@ namespace UnityExplorer.UI.Panels // move AutoCompleter to bottom if (AutoCompleteModal.Instance != null) { - var idx = Instances.IndexOf(AutoCompleteModal.Instance.Dragger); + int idx = Instances.IndexOf(AutoCompleteModal.Instance.Dragger); Instances.RemoveAt(idx); Instances.Insert(0, AutoCompleteModal.Instance.Dragger); } @@ -82,10 +77,10 @@ namespace UnityExplorer.UI.Panels else state = MouseState.NotPressed; - var mousePos = DisplayManager.MousePosition; + Vector3 mousePos = DisplayManager.MousePosition; handledInstanceThisFrame = false; - foreach (var instance in Instances) + foreach (PanelDragger instance in Instances) { if (!instance.Panel.gameObject.activeSelf) continue; @@ -97,7 +92,7 @@ namespace UnityExplorer.UI.Panels if (wasAnyDragging && state == MouseState.NotPressed) { - foreach (var instance in Instances) + foreach (PanelDragger instance in Instances) instance.WasDragging = false; wasAnyDragging = false; } @@ -243,7 +238,7 @@ namespace UnityExplorer.UI.Panels public void OnDrag() { - var mousePos = DisplayManager.MousePosition; + Vector3 mousePos = DisplayManager.MousePosition; Vector2 diff = (Vector2)mousePos - lastDragPosition; lastDragPosition = mousePos; @@ -266,10 +261,10 @@ namespace UnityExplorer.UI.Panels private readonly Dictionary m_resizeMask = new() { - { ResizeTypes.Top, default }, - { ResizeTypes.Left, default }, - { ResizeTypes.Right, default }, - { ResizeTypes.Bottom, default }, + { ResizeTypes.Top, default }, + { ResizeTypes.Left, default }, + { ResizeTypes.Right, default }, + { ResizeTypes.Bottom, default }, }; [Flags] @@ -438,8 +433,8 @@ namespace UnityExplorer.UI.Panels else if (currentResizeType.HasFlag(ResizeTypes.Bottom)) anchorMin.y -= diffY; - var prevMin = Panel.anchorMin; - var prevMax = Panel.anchorMax; + Vector2 prevMin = Panel.anchorMin; + Vector2 prevMax = Panel.anchorMax; Panel.anchorMin = new Vector2(anchorMin.x, anchorMin.y); Panel.anchorMax = new Vector2(anchorMax.x, anchorMax.y); @@ -469,9 +464,9 @@ namespace UnityExplorer.UI.Panels { try { - var text = UIFactory.CreateLabel(UIManager.UIRoot, "ResizeCursor", "↔", TextAnchor.MiddleCenter, Color.white, true, 35); + Text text = UIFactory.CreateLabel(UIManager.UIRoot, "ResizeCursor", "↔", TextAnchor.MiddleCenter, Color.white, true, 35); resizeCursorObj = text.gameObject; - var outline = text.gameObject.AddComponent(); + Outline outline = text.gameObject.AddComponent(); outline.effectColor = Color.black; outline.effectDistance = new(1, 1); diff --git a/src/UI/Panels/UIPanel.cs b/src/UI/Panels/UIPanel.cs index b140f40..7892002 100644 --- a/src/UI/Panels/UIPanel.cs +++ b/src/UI/Panels/UIPanel.cs @@ -1,17 +1,14 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Globalization; -using System.Linq; -using System.Text; using UnityEngine; using UnityEngine.UI; using UnityExplorer.Config; -using UniverseLib.Input; -using UnityExplorer.UI.Widgets; -using UniverseLib.UI.Models; -using UniverseLib.UI; using UniverseLib; -using System.Collections; +using UniverseLib.Input; +using UniverseLib.UI; +using UniverseLib.UI.Models; namespace UnityExplorer.UI.Panels { @@ -33,7 +30,7 @@ namespace UnityExplorer.UI.Panels return; // if the user is clicking - if (DisplayManager.MouseInTargetDisplay + if (DisplayManager.MouseInTargetDisplay && (InputManager.GetMouseButtonDown(0) || InputManager.GetMouseButtonDown(1))) { int count = UIManager.PanelHolder.transform.childCount; @@ -117,7 +114,7 @@ namespace UnityExplorer.UI.Panels if (NavButtonWanted) { - var color = active ? UniversalUI.EnabledButtonColor : UniversalUI.DisabledButtonColor; + Color color = active ? UniversalUI.EnabledButtonColor : UniversalUI.DisabledButtonColor; RuntimeHelper.SetColorBlock(NavButton.Component, color, color * 1.2f); } } @@ -156,11 +153,11 @@ namespace UnityExplorer.UI.Panels public static void EnsureValidPosition(RectTransform panel) { - var pos = panel.localPosition; + Vector3 pos = panel.localPosition; // Prevent panel going oustide screen bounds - var halfW = DisplayManager.Width * 0.5f; - var halfH = DisplayManager.Height * 0.5f; + float halfW = DisplayManager.Width * 0.5f; + float halfH = DisplayManager.Height * 0.5f; pos.x = Math.Max(-halfW - panel.rect.width + 50, Math.Min(pos.x, halfW - 50)); pos.y = Math.Max(-halfH + 50, Math.Min(pos.y, halfH)); @@ -186,11 +183,11 @@ namespace UnityExplorer.UI.Panels { try { - return string.Join("|", new string[] - { - $"{ShouldSaveActiveState && Enabled}", - Rect.RectAnchorsToString(), - Rect.RectPositionToString() + return string.Join("|", new string[] + { + $"{ShouldSaveActiveState && Enabled}", + Rect.RectAnchorsToString(), + Rect.RectPositionToString() }); } catch (Exception ex) @@ -211,7 +208,7 @@ namespace UnityExplorer.UI.Panels if (string.IsNullOrEmpty(data)) return; - var split = data.Split('|'); + string[] split = data.Split('|'); try { @@ -240,7 +237,7 @@ namespace UnityExplorer.UI.Panels // create navbar button NavButton = UIFactory.CreateButton(UIManager.NavbarTabButtonHolder, $"Button_{PanelType}", Name); - var navBtn = NavButton.Component.gameObject; + GameObject navBtn = NavButton.Component.gameObject; navBtn.AddComponent().horizontalFit = ContentSizeFitter.FitMode.PreferredSize; UIFactory.SetLayoutGroup(navBtn, false, true, true, true, 0, 0, 0, 5, 5, TextAnchor.MiddleCenter); UIFactory.SetLayoutElement(navBtn, minWidth: 80); @@ -248,7 +245,7 @@ namespace UnityExplorer.UI.Panels RuntimeHelper.SetColorBlock(NavButton.Component, UniversalUI.DisabledButtonColor, UniversalUI.DisabledButtonColor * 1.2f); NavButton.OnClick += () => { UIManager.TogglePanel(PanelType); }; - var txtObj = navBtn.transform.Find("Text").gameObject; + GameObject txtObj = navBtn.transform.Find("Text").gameObject; txtObj.AddComponent().horizontalFit = ContentSizeFitter.FitMode.PreferredSize; } @@ -269,15 +266,15 @@ namespace UnityExplorer.UI.Panels // Title text - var titleTxt = UIFactory.CreateLabel(TitleBar, "TitleBar", Name, TextAnchor.MiddleLeft); + Text titleTxt = UIFactory.CreateLabel(TitleBar, "TitleBar", Name, TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(titleTxt.gameObject, minWidth: 250, minHeight: 25, flexibleHeight: 0); // close button - var closeHolder = UIFactory.CreateUIObject("CloseHolder", TitleBar); + GameObject closeHolder = UIFactory.CreateUIObject("CloseHolder", TitleBar); UIFactory.SetLayoutElement(closeHolder, minHeight: 25, flexibleHeight: 0, minWidth: 30, flexibleWidth: 9999); UIFactory.SetLayoutGroup(closeHolder, false, false, true, true, 3, childAlignment: TextAnchor.MiddleRight); - var closeBtn = UIFactory.CreateButton(closeHolder, "CloseButton", "—"); + ButtonRef closeBtn = UIFactory.CreateButton(closeHolder, "CloseButton", "—"); UIFactory.SetLayoutElement(closeBtn.Component.gameObject, minHeight: 25, minWidth: 25, flexibleWidth: 0); RuntimeHelper.SetColorBlock(closeBtn.Component, new Color(0.33f, 0.32f, 0.31f)); @@ -372,7 +369,7 @@ namespace UnityExplorer.UI.Panels // outdated save data, not worth recovering just reset it. throw new Exception("invalid save data, resetting."); - var split = stringAnchors.Split(','); + string[] split = stringAnchors.Split(','); if (split.Length != 4) throw new Exception($"stringAnchors split is unexpected length: {split.Length}"); @@ -407,7 +404,7 @@ namespace UnityExplorer.UI.Panels // outdated save data, not worth recovering just reset it. throw new Exception("invalid save data, resetting."); - var split = stringPosition.Split(','); + string[] split = stringPosition.Split(','); if (split.Length != 2) throw new Exception($"stringPosition split is unexpected length: {split.Length}"); diff --git a/src/UI/UIManager.cs b/src/UI/UIManager.cs index 2138dc1..6c82ba4 100644 --- a/src/UI/UIManager.cs +++ b/src/UI/UIManager.cs @@ -10,8 +10,6 @@ using UniverseLib; using UniverseLib.Input; using UniverseLib.UI; using UniverseLib.UI.Models; -using UniverseLib.UI.ObjectPool; -using UniverseLib.UI.Widgets; using UniverseLib.UI.Widgets.ScrollView; using UniverseLib.Utility; @@ -108,7 +106,7 @@ namespace UnityExplorer.UI UIPanels.Add(Panels.UIInspectorResults, new MouseInspectorResultsPanel()); UIPanels.Add(Panels.MouseInspector, new MouseInspector()); - foreach (var panel in UIPanels.Values) + foreach (UIPanel panel in UIPanels.Values) panel.ConstructUI(); // Call some initialize methods @@ -122,7 +120,7 @@ namespace UnityExplorer.UI ShowMenu = !ConfigManager.Hide_On_Startup.Value; // Failsafe fix, in some games all dropdowns displayed values are blank on startup for some reason. - foreach (var dropdown in UIRoot.GetComponentsInChildren(true)) + foreach (Dropdown dropdown in UIRoot.GetComponentsInChildren(true)) dropdown.RefreshShownValue(); Initializing = false; @@ -167,7 +165,7 @@ namespace UnityExplorer.UI } // check screen dimension change - var display = DisplayManager.ActiveDisplay; + Display display = DisplayManager.ActiveDisplay; if (display.renderingWidth != lastScreenWidth || display.renderingHeight != lastScreenHeight) OnScreenDimensionsChanged(); } @@ -180,7 +178,7 @@ namespace UnityExplorer.UI public static void TogglePanel(Panels panel) { - var uiPanel = GetPanel(panel); + UIPanel uiPanel = GetPanel(panel); SetPanelActive(panel, !uiPanel.Enabled); } @@ -227,11 +225,11 @@ namespace UnityExplorer.UI private static void OnScreenDimensionsChanged() { - var display = DisplayManager.ActiveDisplay; + Display display = DisplayManager.ActiveDisplay; lastScreenWidth = display.renderingWidth; lastScreenHeight = display.renderingHeight; - foreach (var panel in UIPanels) + foreach (KeyValuePair panel in UIPanels) { panel.Value.EnsureValidSize(); UIPanel.EnsureValidPosition(panel.Value.Rect); @@ -292,7 +290,7 @@ namespace UnityExplorer.UI PanelHolder = new GameObject("PanelHolder"); PanelHolder.transform.SetParent(UIRoot.transform, false); PanelHolder.layer = 5; - var rect = PanelHolder.AddComponent(); + RectTransform rect = PanelHolder.AddComponent(); rect.sizeDelta = Vector2.zero; rect.anchoredPosition = Vector2.zero; rect.pivot = new Vector2(0.5f, 0.5f); @@ -303,7 +301,7 @@ namespace UnityExplorer.UI private static void CreateTopNavBar() { - var navbarPanel = UIFactory.CreateUIObject("MainNavbar", UIRoot); + GameObject navbarPanel = UIFactory.CreateUIObject("MainNavbar", UIRoot); UIFactory.SetLayoutGroup(navbarPanel, false, false, true, true, 5, 4, 4, 4, 4, TextAnchor.MiddleCenter); navbarPanel.AddComponent().color = new Color(0.1f, 0.1f, 0.1f); NavBarRect = navbarPanel.GetComponent(); @@ -320,7 +318,7 @@ namespace UnityExplorer.UI // UnityExplorer title string titleTxt = $"{ExplorerCore.NAME} {ExplorerCore.VERSION}"; - var title = UIFactory.CreateLabel(navbarPanel, "Title", titleTxt, TextAnchor.MiddleLeft, default, true, 17); + Text title = UIFactory.CreateLabel(navbarPanel, "Title", titleTxt, TextAnchor.MiddleLeft, default, true, 17); UIFactory.SetLayoutElement(title.gameObject, minWidth: 170, flexibleWidth: 0); // panel tabs @@ -331,7 +329,7 @@ namespace UnityExplorer.UI // Time controls - var timeLabel = UIFactory.CreateLabel(navbarPanel, "TimeLabel", "Time:", TextAnchor.MiddleRight, Color.grey); + Text timeLabel = UIFactory.CreateLabel(navbarPanel, "TimeLabel", "Time:", TextAnchor.MiddleRight, Color.grey); UIFactory.SetLayoutElement(timeLabel.gameObject, minHeight: 25, minWidth: 50); timeInput = UIFactory.CreateInputField(navbarPanel, "TimeInput", "timeScale"); diff --git a/src/UI/Widgets/AutoComplete/EnumCompleter.cs b/src/UI/Widgets/AutoComplete/EnumCompleter.cs index 6b7b7b6..9ef51ca 100644 --- a/src/UI/Widgets/AutoComplete/EnumCompleter.cs +++ b/src/UI/Widgets/AutoComplete/EnumCompleter.cs @@ -2,8 +2,6 @@ using System.Collections.Generic; using System.Collections.Specialized; using UnityExplorer.CacheObject.IValues; -using UniverseLib; -using UniverseLib.UI; using UniverseLib.UI.Models; using UniverseLib.Utility; @@ -30,8 +28,8 @@ namespace UnityExplorer.UI.Widgets.AutoComplete public InputFieldRef InputField { get; } public bool AnchorToCaretPosition => false; - private readonly List suggestions = new List(); - private readonly HashSet suggestedValues = new HashSet(); + private readonly List suggestions = new(); + private readonly HashSet suggestedValues = new(); private OrderedDictionary enumValues; @@ -58,7 +56,7 @@ namespace UnityExplorer.UI.Widgets.AutoComplete private string GetLastSplitInput(string fullInput) { string ret = fullInput; - + int lastSplit = fullInput.LastIndexOf(','); if (lastSplit >= 0) { @@ -139,13 +137,13 @@ namespace UnityExplorer.UI.Widgets.AutoComplete for (int i = 0; i < this.enumValues.Count; i++) { - var enumValue = (CachedEnumValue)enumValues[i]; + CachedEnumValue enumValue = (CachedEnumValue)enumValues[i]; if (enumValue.Name.ContainsIgnoreCase(value)) AddSuggestion(enumValue.Name); } } - internal static readonly Dictionary sharedValueToLabel = new Dictionary(4096); + internal static readonly Dictionary sharedValueToLabel = new(4096); void AddSuggestion(string value) { diff --git a/src/UI/Widgets/AutoComplete/ISuggestionProvider.cs b/src/UI/Widgets/AutoComplete/ISuggestionProvider.cs index 397e6c7..87959e2 100644 --- a/src/UI/Widgets/AutoComplete/ISuggestionProvider.cs +++ b/src/UI/Widgets/AutoComplete/ISuggestionProvider.cs @@ -1,11 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.UI; -using UniverseLib.UI; -using UniverseLib.UI.Models; +using UniverseLib.UI.Models; namespace UnityExplorer.UI.Widgets.AutoComplete { diff --git a/src/UI/Widgets/AutoComplete/Suggestion.cs b/src/UI/Widgets/AutoComplete/Suggestion.cs index 07055d3..e81fba0 100644 --- a/src/UI/Widgets/AutoComplete/Suggestion.cs +++ b/src/UI/Widgets/AutoComplete/Suggestion.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using UnityEngine; - -namespace UnityExplorer.UI.Widgets.AutoComplete +namespace UnityExplorer.UI.Widgets.AutoComplete { public struct Suggestion { diff --git a/src/UI/Widgets/AutoComplete/TypeCompleter.cs b/src/UI/Widgets/AutoComplete/TypeCompleter.cs index 782b68a..e005ae2 100644 --- a/src/UI/Widgets/AutoComplete/TypeCompleter.cs +++ b/src/UI/Widgets/AutoComplete/TypeCompleter.cs @@ -1,9 +1,7 @@ -using HarmonyLib; -using System; +using System; using System.Collections.Generic; using System.Linq; using UniverseLib; -using UniverseLib.UI; using UniverseLib.UI.Models; using UniverseLib.Utility; @@ -67,10 +65,10 @@ namespace UnityExplorer.UI.Widgets.AutoComplete else { allowedTypes = new(); - foreach (var entry in ReflectionUtility.AllTypes) + foreach (KeyValuePair entry in ReflectionUtility.AllTypes) { // skip and classes - var type = entry.Value; + Type type = entry.Value; if (type.FullName.Contains("PrivateImplementationDetails") || type.FullName.Contains("DisplayClass") || type.FullName.Contains('<')) @@ -126,7 +124,7 @@ namespace UnityExplorer.UI.Widgets.AutoComplete if (ReflectionUtility.GetTypeByName(value) is Type t && allowedTypes.Contains(t)) AddSuggestion(t); - foreach (var entry in allowedTypes) + foreach (Type entry in allowedTypes) { if (entry.FullName.ContainsIgnoreCase(value)) AddSuggestion(entry); diff --git a/src/UI/Widgets/EvaluateWidget/BaseArgumentHandler.cs b/src/UI/Widgets/EvaluateWidget/BaseArgumentHandler.cs index 092d337..6cf7df2 100644 --- a/src/UI/Widgets/EvaluateWidget/BaseArgumentHandler.cs +++ b/src/UI/Widgets/EvaluateWidget/BaseArgumentHandler.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; using UnityEngine.UI; using UnityExplorer.UI.Widgets.AutoComplete; using UniverseLib.UI; @@ -41,8 +37,10 @@ namespace UnityExplorer.UI.Widgets inputField.Component.lineType = InputField.LineType.MultiLineNewline; inputField.UIRoot.AddComponent().verticalFit = ContentSizeFitter.FitMode.PreferredSize; - typeCompleter = new TypeCompleter(typeof(object), this.inputField); - typeCompleter.Enabled = false; + typeCompleter = new TypeCompleter(typeof(object), this.inputField) + { + Enabled = false + }; CreateSpecialContent(); diff --git a/src/UI/Widgets/EvaluateWidget/EvaluateWidget.cs b/src/UI/Widgets/EvaluateWidget/EvaluateWidget.cs index 201ba22..cb23e49 100644 --- a/src/UI/Widgets/EvaluateWidget/EvaluateWidget.cs +++ b/src/UI/Widgets/EvaluateWidget/EvaluateWidget.cs @@ -1,16 +1,11 @@ using System; -using System.Collections.Generic; using System.Linq; using System.Reflection; -using System.Text; using UnityEngine; using UnityEngine.UI; -using UnityExplorer.UI; -using UniverseLib.UI.Models; -using UnityExplorer.UI.Widgets.AutoComplete; -using UniverseLib.UI; -using UniverseLib; using UnityExplorer.CacheObject; +using UniverseLib.UI; +using UniverseLib.UI.Models; using UniverseLib.UI.ObjectPool; using UniverseLib.Utility; @@ -48,14 +43,14 @@ namespace UnityExplorer.UI.Widgets public void OnReturnToPool() { - foreach (var widget in paramHandlers) + foreach (ParameterHandler widget in paramHandlers) { widget.OnReturned(); Pool.Return(widget); } paramHandlers = null; - foreach (var widget in genericHandlers) + foreach (GenericArgumentHandler widget in genericHandlers) { widget.OnReturned(); Pool.Return(widget); @@ -111,9 +106,9 @@ namespace UnityExplorer.UI.Widgets { for (int i = 0; i < genericArguments.Length; i++) { - var type = genericArguments[i]; + Type type = genericArguments[i]; - var holder = genericHandlers[i] = Pool.Borrow(); + GenericArgumentHandler holder = genericHandlers[i] = Pool.Borrow(); holder.UIRoot.transform.SetParent(this.genericArgumentsHolder.transform, false); holder.OnBorrowed(this, type); } @@ -123,9 +118,9 @@ namespace UnityExplorer.UI.Widgets { for (int i = 0; i < parameters.Length; i++) { - var param = parameters[i]; + ParameterInfo param = parameters[i]; - var holder = paramHandlers[i] = Pool.Borrow(); + ParameterHandler holder = paramHandlers[i] = Pool.Borrow(); holder.UIRoot.transform.SetParent(this.parametersHolder.transform, false); holder.OnBorrowed(this, param); } @@ -142,7 +137,7 @@ namespace UnityExplorer.UI.Widgets // generic args this.genericArgumentsHolder = UIFactory.CreateUIObject("GenericHolder", UIRoot); UIFactory.SetLayoutElement(genericArgumentsHolder, flexibleWidth: 1000); - var genericsTitle = UIFactory.CreateLabel(genericArgumentsHolder, "GenericsTitle", "Generic Arguments", TextAnchor.MiddleLeft); + Text genericsTitle = UIFactory.CreateLabel(genericArgumentsHolder, "GenericsTitle", "Generic Arguments", TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(genericsTitle.gameObject, minHeight: 25, flexibleWidth: 1000); UIFactory.SetLayoutGroup(genericArgumentsHolder, false, false, true, true, 3); UIFactory.SetLayoutElement(genericArgumentsHolder, minHeight: 25, flexibleHeight: 750, minWidth: 50, flexibleWidth: 9999); @@ -151,14 +146,14 @@ namespace UnityExplorer.UI.Widgets // args this.parametersHolder = UIFactory.CreateUIObject("ArgHolder", UIRoot); UIFactory.SetLayoutElement(parametersHolder, flexibleWidth: 1000); - var argsTitle = UIFactory.CreateLabel(parametersHolder, "ArgsTitle", "Arguments", TextAnchor.MiddleLeft); + Text argsTitle = UIFactory.CreateLabel(parametersHolder, "ArgsTitle", "Arguments", TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(argsTitle.gameObject, minHeight: 25, flexibleWidth: 1000); UIFactory.SetLayoutGroup(parametersHolder, false, false, true, true, 3); UIFactory.SetLayoutElement(parametersHolder, minHeight: 25, flexibleHeight: 750, minWidth: 50, flexibleWidth: 9999); //argHolder.AddComponent().verticalFit = ContentSizeFitter.FitMode.PreferredSize; // evaluate button - var evalButton = UIFactory.CreateButton(UIRoot, "EvaluateButton", "Evaluate", new Color(0.2f, 0.2f, 0.2f)); + ButtonRef evalButton = UIFactory.CreateButton(UIRoot, "EvaluateButton", "Evaluate", new Color(0.2f, 0.2f, 0.2f)); UIFactory.SetLayoutElement(evalButton.Component.gameObject, minHeight: 25, minWidth: 150, flexibleWidth: 0); evalButton.OnClick += () => { diff --git a/src/UI/Widgets/EvaluateWidget/GenericArgumentHandler.cs b/src/UI/Widgets/EvaluateWidget/GenericArgumentHandler.cs index 0c91a22..599f81f 100644 --- a/src/UI/Widgets/EvaluateWidget/GenericArgumentHandler.cs +++ b/src/UI/Widgets/EvaluateWidget/GenericArgumentHandler.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Text; using UniverseLib; using UniverseLib.Utility; @@ -20,10 +18,10 @@ namespace UnityExplorer.UI.Widgets typeCompleter.BaseType = genericType; typeCompleter.CacheTypes(); - var constraints = genericType.GetGenericParameterConstraints(); + Type[] constraints = genericType.GetGenericParameterConstraints(); typeCompleter.GenericConstraints = constraints; - var sb = new StringBuilder($"{genericType.Name}"); + StringBuilder sb = new($"{genericType.Name}"); for (int j = 0; j < constraints.Length; j++) { diff --git a/src/UI/Widgets/EvaluateWidget/ParameterHandler.cs b/src/UI/Widgets/EvaluateWidget/ParameterHandler.cs index 676ee37..b2411c0 100644 --- a/src/UI/Widgets/EvaluateWidget/ParameterHandler.cs +++ b/src/UI/Widgets/EvaluateWidget/ParameterHandler.cs @@ -1,11 +1,8 @@ using HarmonyLib; using System; -using System.Collections.Generic; -using System.Collections.Specialized; using System.Reflection; using UnityEngine; using UnityEngine.UI; -using UnityExplorer.CacheObject.IValues; using UnityExplorer.UI.Panels; using UnityExplorer.UI.Widgets.AutoComplete; using UniverseLib; @@ -38,7 +35,7 @@ namespace UnityExplorer.UI.Widgets if (paramType.IsByRef) paramType = paramType.GetElementType(); - this.argNameLabel.text = + this.argNameLabel.text = $"{SignatureHighlighter.Parse(paramType, false)} {paramInfo.Name}"; if (ParseUtility.CanParse(paramType) || typeof(Type).IsAssignableFrom(paramType)) @@ -105,7 +102,7 @@ namespace UnityExplorer.UI.Widgets if (usingBasicLabel) return basicValue; - var input = this.inputField.Text; + string input = this.inputField.Text; if (typeof(Type).IsAssignableFrom(paramType)) return ReflectionUtility.GetTypeByName(input); diff --git a/src/UI/Widgets/TransformTree/CachedTransform.cs b/src/UI/Widgets/TransformTree/CachedTransform.cs index 7735f6b..7b2b88e 100644 --- a/src/UI/Widgets/TransformTree/CachedTransform.cs +++ b/src/UI/Widgets/TransformTree/CachedTransform.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; +using UnityEngine; namespace UnityExplorer.UI.Widgets { diff --git a/src/UI/Widgets/TransformTree/TransformCell.cs b/src/UI/Widgets/TransformTree/TransformCell.cs index a87bfc3..c300976 100644 --- a/src/UI/Widgets/TransformTree/TransformCell.cs +++ b/src/UI/Widgets/TransformTree/TransformCell.cs @@ -1,17 +1,9 @@ -using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; +using System; using UnityEngine; using UnityEngine.UI; -using UnityExplorer.Inspectors; -using UnityExplorer.UI.Widgets; using UniverseLib; using UniverseLib.UI; using UniverseLib.UI.Models; -using UniverseLib.UI.Widgets; using UniverseLib.UI.Widgets.ScrollView; using UniverseLib.Utility; @@ -136,7 +128,7 @@ namespace UnityExplorer.UI.Widgets if (int.TryParse(input.Trim(), out int index)) this.cachedTransform.Value.SetSiblingIndex(index); - + this.SiblingIndex.Text = this.cachedTransform.Value.GetSiblingIndex().ToString(); } @@ -168,7 +160,7 @@ namespace UnityExplorer.UI.Widgets // Name button - GameObject nameBtnHolder = UIFactory.CreateHorizontalGroup(this.UIRoot, "NameButtonHolder", + GameObject nameBtnHolder = UIFactory.CreateHorizontalGroup(this.UIRoot, "NameButtonHolder", false, false, true, true, childAlignment: TextAnchor.MiddleLeft); UIFactory.SetLayoutElement(nameBtnHolder, flexibleWidth: 9999, minHeight: 25, flexibleHeight: 0); nameBtnHolder.AddComponent().showMaskGraphic = false; diff --git a/src/UI/Widgets/TransformTree/TransformTree.cs b/src/UI/Widgets/TransformTree/TransformTree.cs index bfe5d86..6e4a29f 100644 --- a/src/UI/Widgets/TransformTree/TransformTree.cs +++ b/src/UI/Widgets/TransformTree/TransformTree.cs @@ -116,7 +116,7 @@ namespace UnityExplorer.UI.Widgets public void JumpAndExpandToTransform(Transform transform) { // make sure all parents of the object are expanded - var parent = transform.parent; + Transform parent = transform.parent; while (parent) { int pid = parent.GetInstanceID(); @@ -136,7 +136,7 @@ namespace UnityExplorer.UI.Widgets int idx; for (idx = 0; idx < cachedTransforms.Count; idx++) { - var cache = (CachedTransform)cachedTransforms[idx]; + CachedTransform cache = (CachedTransform)cachedTransforms[idx]; if (cache.InstanceID == transformID) break; } @@ -151,7 +151,7 @@ namespace UnityExplorer.UI.Widgets private IEnumerator HighlightCellCoroutine(TransformCell cell) { - var button = cell.NameButton.Component; + UnityEngine.UI.Button button = cell.NameButton.Component; button.StartColorTween(new Color(0.2f, 0.3f, 0.2f), false); float start = Time.realtimeSinceStartup; @@ -191,7 +191,7 @@ namespace UnityExplorer.UI.Widgets bool filtering = Filtering; IEnumerable rootObjects = GetRootEntriesMethod(); - foreach (var gameObj in rootObjects) + foreach (GameObject gameObj in rootObjects) { if (!gameObj) continue; @@ -214,7 +214,7 @@ namespace UnityExplorer.UI.Widgets traversedThisFrame.Start(); } - var cached = (CachedTransform)cachedTransforms[i]; + CachedTransform cached = (CachedTransform)cachedTransforms[i]; if (!visited.Contains(cached.InstanceID)) { cachedTransforms.RemoveAt(i); @@ -227,7 +227,7 @@ namespace UnityExplorer.UI.Widgets prevDisplayIndex = displayIndex; refreshCoroutine = null; - } + } // Recursive method to check a Transform and its children (if expanded). // Parent and depth can be null/default. @@ -293,7 +293,7 @@ namespace UnityExplorer.UI.Widgets { for (int i = 0; i < transform.childCount; i++) { - var enumerator = Traverse(transform.GetChild(i), cached, depth + 1, oneShot, filtering); + IEnumerator enumerator = Traverse(transform.GetChild(i), cached, depth + 1, oneShot, filtering); while (enumerator.MoveNext()) { if (!oneShot) @@ -350,7 +350,7 @@ namespace UnityExplorer.UI.Widgets public void OnCellExpandToggled(CachedTransform cache) { - var instanceID = cache.InstanceID; + int instanceID = cache.InstanceID; if (expandedInstanceIDs.Contains(instanceID)) expandedInstanceIDs.Remove(instanceID); else diff --git a/src/UI/Widgets/UnityObjects/AudioClipWidget.cs b/src/UI/Widgets/UnityObjects/AudioClipWidget.cs index 39a2ccf..bb677d9 100644 --- a/src/UI/Widgets/UnityObjects/AudioClipWidget.cs +++ b/src/UI/Widgets/UnityObjects/AudioClipWidget.cs @@ -1,8 +1,6 @@ using System; using System.Collections; -using System.Collections.Generic; using System.IO; -using System.Linq; using System.Text; using UnityEngine; using UnityEngine.UI; @@ -273,7 +271,7 @@ namespace UnityExplorer.UI.Widgets } } -#region SavWav + #region SavWav // Copyright (c) 2012 Calvin Rien // http://the.darktable.com @@ -404,6 +402,6 @@ namespace UnityExplorer.UI.Widgets stream.Seek(0, SeekOrigin.Begin); } -#endregion + #endregion } } \ No newline at end of file diff --git a/src/UI/Widgets/UnityObjects/Texture2DWidget.cs b/src/UI/Widgets/UnityObjects/Texture2DWidget.cs index a350c66..6aac71b 100644 --- a/src/UI/Widgets/UnityObjects/Texture2DWidget.cs +++ b/src/UI/Widgets/UnityObjects/Texture2DWidget.cs @@ -1,9 +1,6 @@ using System; using System.Collections; -using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; using UnityEngine; using UnityEngine.UI; using UnityExplorer.Config; @@ -223,15 +220,15 @@ namespace UnityExplorer.UI.Widgets // Actual texture viewer - GameObject imageViewport = UIFactory.CreateVerticalGroup(textureViewerRoot, "ImageViewport", false, false, true, true, - bgColor: new(1,1,1,0), childAlignment: TextAnchor.MiddleCenter); + GameObject imageViewport = UIFactory.CreateVerticalGroup(textureViewerRoot, "ImageViewport", false, false, true, true, + bgColor: new(1, 1, 1, 0), childAlignment: TextAnchor.MiddleCenter); UIFactory.SetLayoutElement(imageViewport, flexibleWidth: 9999, flexibleHeight: 9999); GameObject imageHolder = UIFactory.CreateUIObject("ImageHolder", imageViewport); imageLayout = UIFactory.SetLayoutElement(imageHolder, 1, 1, 0, 0); - var actualImageObj = UIFactory.CreateUIObject("ActualImage", imageHolder); - var actualRect = actualImageObj.GetComponent(); + GameObject actualImageObj = UIFactory.CreateUIObject("ActualImage", imageHolder); + RectTransform actualRect = actualImageObj.GetComponent(); actualRect.anchorMin = new(0, 0); actualRect.anchorMax = new(1, 1); image = actualImageObj.AddComponent(); diff --git a/src/UI/Widgets/UnityObjects/UnityObjectWidget.cs b/src/UI/Widgets/UnityObjects/UnityObjectWidget.cs index 546836e..087c614 100644 --- a/src/UI/Widgets/UnityObjects/UnityObjectWidget.cs +++ b/src/UI/Widgets/UnityObjects/UnityObjectWidget.cs @@ -105,7 +105,7 @@ namespace UnityExplorer.UI.Widgets UIFactory.SetLayoutGroup(UIRoot, false, false, true, true, 5); UIFactory.SetLayoutElement(UIRoot, minHeight: 25, flexibleHeight: 0, flexibleWidth: 9999); - var nameLabel = UIFactory.CreateLabel(UIRoot, "NameLabel", "Name:", TextAnchor.MiddleLeft, Color.grey); + Text nameLabel = UIFactory.CreateLabel(UIRoot, "NameLabel", "Name:", TextAnchor.MiddleLeft, Color.grey); UIFactory.SetLayoutElement(nameLabel.gameObject, minHeight: 25, minWidth: 45, flexibleWidth: 0); nameInput = UIFactory.CreateInputField(UIRoot, "NameInput", "untitled"); @@ -116,7 +116,7 @@ namespace UnityExplorer.UI.Widgets UIFactory.SetLayoutElement(gameObjectButton.Component.gameObject, minHeight: 25, minWidth: 160); gameObjectButton.OnClick += OnGameObjectButtonClicked; - var instanceLabel = UIFactory.CreateLabel(UIRoot, "InstanceLabel", "Instance ID:", TextAnchor.MiddleRight, Color.grey); + Text instanceLabel = UIFactory.CreateLabel(UIRoot, "InstanceLabel", "Instance ID:", TextAnchor.MiddleRight, Color.grey); UIFactory.SetLayoutElement(instanceLabel.gameObject, minHeight: 25, minWidth: 100, flexibleWidth: 0); instanceIdInput = UIFactory.CreateInputField(UIRoot, "InstanceIDInput", "ERROR");