From 1386b59afec816a0573c943df00e274bf7689280 Mon Sep 17 00:00:00 2001 From: Ali Sharoz Date: Mon, 20 Jan 2025 18:47:46 +0500 Subject: [PATCH] InGame Debug Console Added --- Assets/Plugins/IngameDebugConsole.meta | 8 + .../Plugins/IngameDebugConsole/Android.meta | 9 + .../Android/DebugLogLogcatListener.cs | 54 + .../Android/DebugLogLogcatListener.cs.meta | 12 + .../Android/IngameDebugConsole.aar | Bin 0 -> 3209 bytes .../Android/IngameDebugConsole.aar.meta | 33 + Assets/Plugins/IngameDebugConsole/Editor.meta | 9 + .../Editor/DebugLogManagerEditor.cs | 83 + .../Editor/DebugLogManagerEditor.cs.meta | 12 + .../Editor/IngameDebugConsole.Editor.asmdef | 17 + .../IngameDebugConsole.Editor.asmdef.meta | 7 + .../IngameDebugConsole.Runtime.asmdef | 3 + .../IngameDebugConsole.Runtime.asmdef.meta | 7 + .../IngameDebugConsole.prefab | 4005 +++++++++++++++++ .../IngameDebugConsole.prefab.meta | 8 + .../Plugins/IngameDebugConsole/Prefabs.meta | 9 + .../Prefabs/CommandSuggestion.prefab | 87 + .../Prefabs/CommandSuggestion.prefab.meta | 9 + .../Prefabs/DebugLogItem.prefab | 640 +++ .../Prefabs/DebugLogItem.prefab.meta | 8 + Assets/Plugins/IngameDebugConsole/README.txt | 10 + .../IngameDebugConsole/README.txt.meta | 8 + .../Plugins/IngameDebugConsole/Scripts.meta | 9 + .../Scripts/CircularBuffer.cs | 116 + .../Scripts/CircularBuffer.cs.meta | 12 + .../Scripts/ConsoleMethodAttribute.cs | 23 + .../Scripts/ConsoleMethodAttribute.cs.meta | 12 + .../Scripts/DebugLogConsole.cs | 1431 ++++++ .../Scripts/DebugLogConsole.cs.meta | 12 + .../Scripts/DebugLogEntry.cs | 92 + .../Scripts/DebugLogEntry.cs.meta | 12 + .../Scripts/DebugLogIndexList.cs | 35 + .../Scripts/DebugLogIndexList.cs.meta | 12 + .../Scripts/DebugLogItem.cs | 217 + .../Scripts/DebugLogItem.cs.meta | 12 + .../Scripts/DebugLogManager.cs | 1318 ++++++ .../Scripts/DebugLogManager.cs.meta | 12 + .../Scripts/DebugLogPopup.cs | 229 + .../Scripts/DebugLogPopup.cs.meta | 12 + .../Scripts/DebugLogRecycledListView.cs | 362 ++ .../Scripts/DebugLogRecycledListView.cs.meta | 12 + .../Scripts/DebugLogResizeListener.cs | 24 + .../Scripts/DebugLogResizeListener.cs.meta | 12 + .../Scripts/DebugsOnScrollListener.cs | 60 + .../Scripts/DebugsOnScrollListener.cs.meta | 12 + .../Plugins/IngameDebugConsole/Sprites.meta | 9 + .../IngameDebugConsole/Sprites/IconClear.psd | Bin 0 -> 44641 bytes .../Sprites/IconClear.psd.meta | 140 + .../Sprites/IconCollapse.psd | Bin 0 -> 40403 bytes .../Sprites/IconCollapse.psd.meta | 114 + .../IngameDebugConsole/Sprites/IconError.psd | Bin 0 -> 49243 bytes .../Sprites/IconError.psd.meta | 114 + .../IngameDebugConsole/Sprites/IconHide.psd | Bin 0 -> 36589 bytes .../Sprites/IconHide.psd.meta | 114 + .../IngameDebugConsole/Sprites/IconInfo.psd | Bin 0 -> 53469 bytes .../Sprites/IconInfo.psd.meta | 114 + .../IngameDebugConsole/Sprites/IconResize.psd | Bin 0 -> 31569 bytes .../Sprites/IconResize.psd.meta | 114 + .../Sprites/IconSnapToBottom.psd | Bin 0 -> 30022 bytes .../Sprites/IconSnapToBottom.psd.meta | 114 + .../Sprites/IconSnapToBottomBg.psd | Bin 0 -> 34684 bytes .../Sprites/IconSnapToBottomBg.psd.meta | 114 + .../Sprites/IconWarning.psd | Bin 0 -> 48956 bytes .../Sprites/IconWarning.psd.meta | 114 + .../IngameDebugConsole/Sprites/SearchIcon.psd | Bin 0 -> 34138 bytes .../Sprites/SearchIcon.psd.meta | 140 + .../Sprites/SlicedBackground.psd | Bin 0 -> 32750 bytes .../Sprites/SlicedBackground.psd.meta | 140 + .../Sprites/SlicedBackground2.psd | Bin 0 -> 30518 bytes .../Sprites/SlicedBackground2.psd.meta | 114 + .../Sprites/SlicedBackground3.psd | Bin 0 -> 34920 bytes .../Sprites/SlicedBackground3.psd.meta | 114 + .../IngameDebugConsole/Sprites/Unused.meta | 9 + .../Sprites/Unused/IconErrorHighRes.psd | Bin 0 -> 54471 bytes .../Sprites/Unused/IconErrorHighRes.psd.meta | 114 + .../Sprites/Unused/IconInfoHighRes.psd | Bin 0 -> 61819 bytes .../Sprites/Unused/IconInfoHighRes.psd.meta | 114 + .../Sprites/Unused/IconWarningHighRes.psd | Bin 0 -> 54256 bytes .../Unused/IconWarningHighRes.psd.meta | 114 + Assets/Plugins/IngameDebugConsole/iOS.meta | 9 + .../iOS/IngameDebugConsole.mm | 4 + .../iOS/IngameDebugConsole.mm.meta | 33 + Assets/Scenes/BossRoom.unity | 296 +- 83 files changed, 11343 insertions(+), 5 deletions(-) create mode 100644 Assets/Plugins/IngameDebugConsole.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Android.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs create mode 100644 Assets/Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar create mode 100644 Assets/Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Editor.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs create mode 100644 Assets/Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef create mode 100644 Assets/Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef.meta create mode 100644 Assets/Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef create mode 100644 Assets/Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef.meta create mode 100644 Assets/Plugins/IngameDebugConsole/IngameDebugConsole.prefab create mode 100644 Assets/Plugins/IngameDebugConsole/IngameDebugConsole.prefab.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Prefabs.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab create mode 100644 Assets/Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab create mode 100644 Assets/Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab.meta create mode 100644 Assets/Plugins/IngameDebugConsole/README.txt create mode 100644 Assets/Plugins/IngameDebugConsole/README.txt.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/ConsoleMethodAttribute.cs create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/ConsoleMethodAttribute.cs.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogIndexList.cs create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogIndexList.cs.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogManager.cs create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogManager.cs.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogPopup.cs create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogPopup.cs.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogRecycledListView.cs create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogRecycledListView.cs.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogResizeListener.cs create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugLogResizeListener.cs.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugsOnScrollListener.cs create mode 100644 Assets/Plugins/IngameDebugConsole/Scripts/DebugsOnScrollListener.cs.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconClear.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconClear.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconCollapse.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconCollapse.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconError.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconError.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconHide.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconHide.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconInfo.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconInfo.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconResize.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconResize.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottom.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottom.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottomBg.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottomBg.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconWarning.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/IconWarning.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/SearchIcon.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/SearchIcon.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground2.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground2.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground3.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground3.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/Unused.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconErrorHighRes.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconErrorHighRes.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconInfoHighRes.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconInfoHighRes.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconWarningHighRes.psd create mode 100644 Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconWarningHighRes.psd.meta create mode 100644 Assets/Plugins/IngameDebugConsole/iOS.meta create mode 100644 Assets/Plugins/IngameDebugConsole/iOS/IngameDebugConsole.mm create mode 100644 Assets/Plugins/IngameDebugConsole/iOS/IngameDebugConsole.mm.meta diff --git a/Assets/Plugins/IngameDebugConsole.meta b/Assets/Plugins/IngameDebugConsole.meta new file mode 100644 index 0000000..a808c79 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dae1f0c8b34622a4e939bb42ac77a097 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Android.meta b/Assets/Plugins/IngameDebugConsole/Android.meta new file mode 100644 index 0000000..fcaef24 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Android.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3d7d7a61a5341904eb3c65af025b1d86 +folderAsset: yes +timeCreated: 1510075633 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs b/Assets/Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs new file mode 100644 index 0000000..95e8df7 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs @@ -0,0 +1,54 @@ +#if !UNITY_EDITOR && UNITY_ANDROID +using System.Collections.Generic; +using UnityEngine; + +// Credit: https://stackoverflow.com/a/41018028/2373034 +namespace IngameDebugConsole +{ + public class DebugLogLogcatListener : AndroidJavaProxy + { + private Queue queuedLogs; + private AndroidJavaObject nativeObject; + + public DebugLogLogcatListener() : base( "com.yasirkula.unity.DebugConsoleLogcatLogReceiver" ) + { + queuedLogs = new Queue( 16 ); + } + + ~DebugLogLogcatListener() + { + Stop(); + + if( nativeObject != null ) + nativeObject.Dispose(); + } + + public void Start( string arguments ) + { + if( nativeObject == null ) + nativeObject = new AndroidJavaObject( "com.yasirkula.unity.DebugConsoleLogcatLogger" ); + + nativeObject.Call( "Start", this, arguments ); + } + + public void Stop() + { + if( nativeObject != null ) + nativeObject.Call( "Stop" ); + } + + public void OnLogReceived( string log ) + { + queuedLogs.Enqueue( log ); + } + + public string GetLog() + { + if( queuedLogs.Count > 0 ) + return queuedLogs.Dequeue(); + + return null; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs.meta b/Assets/Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs.meta new file mode 100644 index 0000000..8f332f6 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dd3b7385882055d4a8c2b91deb6b2470 +timeCreated: 1510076185 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar b/Assets/Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar new file mode 100644 index 0000000000000000000000000000000000000000..e8bb24f44fc37f6804149ba288c6d6b8ecca79c2 GIT binary patch literal 3209 zcmZ{mcTf{t7R3{!NfV?*TIfxr_Zn$Z0xKOt3kgJ#-pkUPqLc_iAfOa6fb?dNmLMfG zAxZ~nf`W>W2qJ=@t2?_p-^}j5JM+$*c{A_ad;j`bL(kE20RR9-KppnJ4H6rn_2Rb^ z2Lb?`zttenJ2dE)w-qAr)(uoxxO{YgzZKemxnGeboy_#}PF{CI3IlJ6sI&*I!Hc>y zwMpAI*;SlpM~=%g0tbYiqdWznJ;^<;g&9K9(}zjI@VTY$wMpt8q%ddsYXi#_8lVm7 zixe%RCZm9G;QXZ$OBwm5clS{pg{WOFbw@hn?Cw=nXP5e#q$guit>^K*75=?yy(kp%MXQDVHepq zoyE!cg_W<_gmClQN7S?p*UwPFs$;E6-<3zLis+>=6`i@mUWr_ZgSC4W&DGB{2VKRC zuHhd=)IoMBhvK^QSsD(NRb|F;Jnq_2DOrXNrlaQ_>a%-z1c~aWadLW56X0Tw&kKzf zEF!dZkG6#EN2_1392SLgM)t*g84qAN-yLa2q^ERptsYDc@FS8{uE87S9O`;HG%~h^ zv;jXx4RM72qt5jLL$uX~t5UlMMIqAk3?;VP3FR=68y|G#{T`qB#_G@p*E@buUBbKl zQ3NL;v;J#ez|7s)k})O-r&`;&((d;sh`1!t=%s4zQvM_M$JTQzttT=Mj}CqPl$

z)sSX%JK2Y{RbAgN4i5Str|6tt^_z7DNpVK9^FnAJmbXSw}4<@?LNf`?r$Q z&;GcCQxyb!!sI6F&dbBz*QA&1WZgkv#I~^)XxLEEP!4EOE4YeUvE|MaY7UeV#WC=( z^4<$&@hv*$ysYik-z`@UHRx*;`HU-GrTt7h0kgG!fVDW^??Q z$6DpL)DA|SROab?a;j{Ej^xvmn1ASKuIw|SzUNwJG6Y$^VH@=h8$o9#CR^Wj2B|V7 zKJW4j-bj=rdWL{6EnhFf1f;i@!|CE>3(MVf^5TZg)*Mg9`lthD-b@Bl;b~u(IE5^q ziNcuM4wkOih#K%bIDNiWVdIX)t#z(XEV544n)q({KGJX1vC_oIm9G<^%>$>~{*X^i zWe`ivH05K)Do*<`i3dL9v}aQ#4rn$RHe=_q3pg2k1BmnQa~>B5x9z{wjJqj$<#%JN z9|uP1>zfDUXBK7*2d7tvy}H%;HKK;?UOZ*5cpX;p6~5|W?~<_ESGQN64#%o?2Vg9A zdNd$4Po+H9Y6p!&?QR8rmJV$iVsEc{s*~-`M~4^WzA{r#cRVoM2r*+wSWh7r^74|I zqrD{i2AtT;uzk2#;zIxr&Br)g4d0jeU!SmIM{jCb-RaePJ&@_pV%43luq6`Qjd501 zx-bz&ASt*7kQGXM!xYcs)M#_|Au=kv_92+0#l$IN!cMT3^>UmND+QjL$@qQb?R`F@ z2PXIKI9znPu^ljU0G+iHp@R8M`B`~yc1}uP?4Z1xu+d53j3#=gk63@+Ll8ZG5U&0W z=IxXKF_BRKZ=@x1gObR;6L*i8v#=N~oE^qnWL6>1fK*s9V69b5PfKLF@uWkbc_hQ} zn~Qlj?Sx<53?z*o{1sI~Jum-gj&TomAroXE1Dw_LyYZ5|LLl8;h+#D)cs+S=(qZg^ zOK%H#O7s4Z5DxTGn>wGm%c#HCZLIf*pKx1i%vNkbBQ3fvVnY}EsXV-G(<(l1vD!Wx zv_vKuPX)H?ydFI)=GYxC(8zByyaAsJ-l~Iq%`-Qy_pH2ryPC@bR0z^0Amu?t&0S}c z1Hkx!>QTQ#D{ddUZU>lye(qz1asn5*!3CKxy`+bK@f>E;J^Wt0-@^qCiT7Mbh(1;v zSzR`ewQ@_VVn1pj3M6M1wYkxa@H86crF}q*8ge4Kn`@^#2}#-hV$XBT;yI^N1_$S{ zO`z6ISG;r--aK8A;AmNv+!#WUN9R$}Q;eUQpiz;B?uWZou-5@7XvqV~cs00zplpFi zqd&7tRLxS1oaAnckhwfDfosrJRQlKo2QFbU)jv!=8PpDb7ZP}u{@ZF9$JSccN^VHApbfyrE$ICGVa z7-w}(LyFE_M%5=*Y(isPw*a*u_%52_dhibT9M&TC(TnO{ppLiF*l2t;m5w)qVpdok z*aGChZ59y_HUhn$+ru_75f=x>+02Am=8NswAZ%AI`t;R_uv$Row(0Alg?88yiWcz6 z834c$W%wY|=f_cA9x8i5Ze&v6+~TN<2z%j#_OndhT^Snzn{_E`h339ws+k3MjAcrK zpfsc*_e1g1U#o+PMPZL&o~vy$lhSSyMvJ&^Xh45sq^PR*oq=2}dhI-)n4U%Zb(S?e z+DP@D2}^CS2*+x5aMzjLo}QkMN4cW6Yc7hwoRQK8oWGRfQPD53q2Q0cp1lI8m)~se42iMe8W*}k3&=xlGb$=*KvUi%pVWJ* zvTU~mIBESu&nw0Zn&L9v903tAk8$1i`M&(hwZ0#T$I^B;>_e(n`OP?xYMl1lH!i$1-nAiHH2{vWPTK3BBraNo@$T z2Jk-qVbDhj1&G>P$w_>Zrth+TOGX!DM5X0fAw?^+wBogKi}3XuGhzU`rhr|tbCG`#u7!yu}f&tr837?q%!W(gnqqTkvw*{3^)C( z8>j5)Bet1^YkCaxMyJXSbU09nPUEF_?%-ES1bJUSE3u#>%_#W>?#DiO2c$M%&xIDB55&3LEW9Be7NfbOrcIFWXYm2a_(Rlo}yl9t`*2i%wuZ-^aJa#{oyDmJS`l^n^1XKxBo*#$$;Qcu2 zGfu~GYTj%=j1Ri@ZLkM=MJp^%&h`bx$_Sg_FK3g*kU01D>2`4K z*`qn-;c}%wjl?CmNJxQzDqS)aZ6qe)IR?76>5`1mSAk2LVQgzI{mhBJ%eWM=J=GOv zxzU-<$FtRIw89+ON3+lsJ-Eo+AMtPkIzDkYyrgEW=5&8k-znaF-m#4=XY&b7?$z~O z2HVN!FqzLQ73>Fh?5=MJ>5&eQSc#ref92;0yJ{!e&6ySGud)80H!O@u>z2(Tns^P{ zd`Zu_^5$sSQ|1zxykrjA@7Ph)uOo?{yos~>t*6I;U$9ftfrI!Em1}*!f)W!_PAZWJ zXbVreQ@NR6G+)IM2@J(ZhEt0F35bt*M@Z-3t+du@#jPAjYa+lJ3ZxMN{6AzD|BaP@ zj_^P4{|WF+|9S)hE&+VU-guIx=Yap#o;6c>dgp22Uqk+zlK&dA|2ya}%>38SySJh) gi?GZA|E&zM;ebEh8cIk1r#+hA)&E;t{%|+oAJq-&KmY&$ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar.meta b/Assets/Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar.meta new file mode 100644 index 0000000..b67820b --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: bf909fab1c14af446b0a854de42289b2 +timeCreated: 1510086220 +licenseType: Store +PluginImporter: + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + data: + first: + Android: Android + second: + enabled: 1 + settings: {} + data: + first: + Any: + second: + enabled: 0 + settings: {} + data: + first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Editor.meta b/Assets/Plugins/IngameDebugConsole/Editor.meta new file mode 100644 index 0000000..89ddb4f --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 86f54622630720f4abe279acdbb8886f +folderAsset: yes +timeCreated: 1561217660 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs b/Assets/Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs new file mode 100644 index 0000000..63b2eb0 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs @@ -0,0 +1,83 @@ +using UnityEditor; + +namespace IngameDebugConsole +{ + [CustomEditor( typeof( DebugLogManager ) )] + public class DebugLogManagerEditor : Editor + { + private SerializedProperty singleton; + private SerializedProperty minimumHeight; + private SerializedProperty enablePopup; + private SerializedProperty startInPopupMode; + private SerializedProperty startMinimized; + private SerializedProperty toggleWithKey; + private SerializedProperty toggleKey; + private SerializedProperty enableSearchbar; + private SerializedProperty topSearchbarMinWidth; + private SerializedProperty clearCommandAfterExecution; + private SerializedProperty commandHistorySize; + private SerializedProperty showCommandSuggestions; + private SerializedProperty receiveLogcatLogsInAndroid; + private SerializedProperty logcatArguments; + + private void OnEnable() + { + singleton = serializedObject.FindProperty( "singleton" ); + minimumHeight = serializedObject.FindProperty( "minimumHeight" ); + enablePopup = serializedObject.FindProperty( "enablePopup" ); + startInPopupMode = serializedObject.FindProperty( "startInPopupMode" ); + startMinimized = serializedObject.FindProperty( "startMinimized" ); + toggleWithKey = serializedObject.FindProperty( "toggleWithKey" ); + toggleKey = serializedObject.FindProperty( "toggleKey" ); + enableSearchbar = serializedObject.FindProperty( "enableSearchbar" ); + topSearchbarMinWidth = serializedObject.FindProperty( "topSearchbarMinWidth" ); + clearCommandAfterExecution = serializedObject.FindProperty( "clearCommandAfterExecution" ); + commandHistorySize = serializedObject.FindProperty( "commandHistorySize" ); + showCommandSuggestions = serializedObject.FindProperty( "showCommandSuggestions" ); + receiveLogcatLogsInAndroid = serializedObject.FindProperty( "receiveLogcatLogsInAndroid" ); + logcatArguments = serializedObject.FindProperty( "logcatArguments" ); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditorGUILayout.PropertyField( singleton ); + EditorGUILayout.PropertyField( minimumHeight ); + EditorGUILayout.PropertyField( enablePopup ); + + if( enablePopup.boolValue ) + DrawSubProperty( startInPopupMode ); + else + DrawSubProperty( startMinimized ); + + EditorGUILayout.PropertyField( toggleWithKey ); + + if( toggleWithKey.boolValue ) + DrawSubProperty( toggleKey ); + + EditorGUILayout.PropertyField( enableSearchbar ); + + if( enableSearchbar.boolValue ) + DrawSubProperty( topSearchbarMinWidth ); + + EditorGUILayout.PropertyField( clearCommandAfterExecution ); + EditorGUILayout.PropertyField( commandHistorySize ); + EditorGUILayout.PropertyField( showCommandSuggestions ); + EditorGUILayout.PropertyField( receiveLogcatLogsInAndroid ); + + if( receiveLogcatLogsInAndroid.boolValue ) + DrawSubProperty( logcatArguments ); + + DrawPropertiesExcluding( serializedObject, "m_Script" ); + serializedObject.ApplyModifiedProperties(); + } + + private void DrawSubProperty( SerializedProperty property ) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField( property ); + EditorGUI.indentLevel--; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs.meta b/Assets/Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs.meta new file mode 100644 index 0000000..2fcd70e --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4c23e5c521cb0c54b9a638b2a653d1d3 +timeCreated: 1561217671 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef b/Assets/Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef new file mode 100644 index 0000000..c2ac006 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef @@ -0,0 +1,17 @@ +{ + "name": "IngameDebugConsole.Editor", + "references": [ + "IngameDebugConsole.Runtime" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef.meta b/Assets/Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef.meta new file mode 100644 index 0000000..e2378b7 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 466e67dabd1db22468246c39eddb6c3f +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef new file mode 100644 index 0000000..9f4bfcf --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef @@ -0,0 +1,3 @@ +{ + "name": "IngameDebugConsole.Runtime" +} diff --git a/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef.meta b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef.meta new file mode 100644 index 0000000..7e13cb2 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3de88c88fbbb8f944b9210d496af9762 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.prefab b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.prefab new file mode 100644 index 0000000..1a434d3 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.prefab @@ -0,0 +1,4005 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &100406 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22478474} + - component: {fileID: 22292746} + - component: {fileID: 11476740} + m_Layer: 5 + m_Name: NewInfoCount + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &109254 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 437128} + - component: {fileID: 11418932} + - component: {fileID: 11492840} + - component: {fileID: 114575087663981696} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &110786 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22460680} + - component: {fileID: 22261918} + - component: {fileID: 11431488} + - component: {fileID: 114538072837526774} + m_Layer: 5 + m_Name: DebugLogWindowResize + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &118212 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22429100} + - component: {fileID: 22207004} + - component: {fileID: 11499344} + - component: {fileID: 11414302} + - component: {fileID: 11460786} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &119972 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22485076} + - component: {fileID: 11471588} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &121708 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22456566} + - component: {fileID: 222466100300644746} + - component: {fileID: 114944715489184838} + - component: {fileID: 114777798721274074} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &123548 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22466754} + - component: {fileID: 22288586} + - component: {fileID: 11495556} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &132536 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22457152} + - component: {fileID: 22331464} + - component: {fileID: 11440770} + - component: {fileID: 11490438} + - component: {fileID: 11452418} + m_Layer: 5 + m_Name: IngameDebugConsole + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &133140 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22428984} + - component: {fileID: 22231690} + - component: {fileID: 11400378} + - component: {fileID: 11466918} + m_Layer: 5 + m_Name: FilterLogButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &133612 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22468896} + - component: {fileID: 22255062} + - component: {fileID: 11448508} + - component: {fileID: 11477250} + m_Layer: 5 + m_Name: HideButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &135210 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22496878} + - component: {fileID: 22213036} + - component: {fileID: 11450122} + m_Layer: 5 + m_Name: ErrorCount + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &142160 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22488670} + - component: {fileID: 22236784} + - component: {fileID: 11491814} + - component: {fileID: 11437802} + m_Layer: 5 + m_Name: CollapseButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &145092 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22497984} + - component: {fileID: 22209426} + - component: {fileID: 11437286} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &148506 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22435388} + - component: {fileID: 22236120} + - component: {fileID: 11430762} + m_Layer: 5 + m_Name: WarningImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &160714 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22439026} + - component: {fileID: 22209194} + - component: {fileID: 11486984} + m_Layer: 5 + m_Name: InfoImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &161086 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22420992} + - component: {fileID: 22290652} + - component: {fileID: 11419610} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &163938 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22455554} + - component: {fileID: 22258478} + - component: {fileID: 11490350} + - component: {fileID: 11472314} + m_Layer: 5 + m_Name: FilterWarningButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &164562 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22485120} + - component: {fileID: 22261724} + - component: {fileID: 114435636144975300} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &165242 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22452256} + - component: {fileID: 22278414} + - component: {fileID: 11431640} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &166206 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22412306} + - component: {fileID: 22260676} + - component: {fileID: 11421290} + m_Layer: 5 + m_Name: ErrorImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &168792 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22431144} + - component: {fileID: 22240830} + - component: {fileID: 11411602} + m_Layer: 5 + m_Name: NewErrorCount + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &170186 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22495692} + - component: {fileID: 22248262} + - component: {fileID: 11406916} + - component: {fileID: 11420596} + m_Layer: 5 + m_Name: FilterErrorButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &171206 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22482970} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &173314 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22436850} + - component: {fileID: 11405548} + - component: {fileID: 22273436} + - component: {fileID: 11410364} + - component: {fileID: 11414998} + m_Layer: 5 + m_Name: Debugs + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &176246 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22427174} + - component: {fileID: 22242412} + - component: {fileID: 11496004} + m_Layer: 5 + m_Name: WarningCount + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &176876 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22452314} + - component: {fileID: 22235120} + - component: {fileID: 11400274} + m_Layer: 5 + m_Name: LogCount + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &178532 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22414360} + - component: {fileID: 22223402} + - component: {fileID: 11410584} + - component: {fileID: 11491080} + - component: {fileID: 22505754} + m_Layer: 5 + m_Name: DebugLogPopup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &183006 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22477946} + - component: {fileID: 22230524} + - component: {fileID: 11400672} + - component: {fileID: 22509978} + m_Layer: 5 + m_Name: DebugLogWindow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &187566 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22400762} + - component: {fileID: 11453682} + m_Layer: 5 + m_Name: LogsContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &189604 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22426080} + - component: {fileID: 22270452} + - component: {fileID: 11419798} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &192924 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22436794} + - component: {fileID: 22260966} + - component: {fileID: 11414436} + m_Layer: 5 + m_Name: NewWarningCount + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &437128 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 109254} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22457152} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &11400274 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 176876} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 2 + m_MaxSize: 16 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 +--- !u!114 &11400378 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133140} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11400672 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 183006} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.21960784, g: 0.21960784, b: 0.21960784, a: 0.797} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11405548 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 173314} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 22400762} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.01 + m_ScrollSensitivity: 25 + m_Viewport: {fileID: 22485076} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 11414302} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 0 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11406916 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 170186} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11410364 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 173314} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11410584 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 178532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.30588236, g: 0.30588236, b: 0.30588236, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: b3f0d976f6d6802479d6465d11b3aa68, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11411602 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 168792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 2 + m_MaxSize: 16 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 +--- !u!114 &11414302 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 118212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 11419798} + m_HandleRect: {fileID: 22426080} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11414436 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 192924} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 2 + m_MaxSize: 16 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 +--- !u!114 &11414998 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 173314} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cb564dcb180e586429c57456166a76b5, type: 3} + m_Name: + m_EditorClassIdentifier: + debugsScrollRect: {fileID: 11405548} + debugLogManager: {fileID: 11452418} +--- !u!114 &11418932 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 109254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 0 + m_DragThreshold: 5 +--- !u!114 &11419610 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 161086} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9485294, g: 0.9485294, b: 0.9485294, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: a9fd8f6b461461f4a92eafc60921ee78, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11419798 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 189604} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11420596 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 170186} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 11406916} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11421290 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 166206} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 66305a19e3614694f868c75a982e6b68, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11430762 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 148506} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 05c7216c78d4dd34ebe2bac9c1e274d7, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11431488 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 110786} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11431640 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 165242} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 66305a19e3614694f868c75a982e6b68, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11437286 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 145092} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 5a97d5afa6254804f81b7ba956296996, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11437802 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 142160} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 11491814} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11440770 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 132536} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &11448508 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133612} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11450122 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 135210} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 2 + m_MaxSize: 16 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 +--- !u!114 &11452418 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 132536} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6a4f16ed905adcd4ab0d7c8c11f0d72c, type: 3} + m_Name: + m_EditorClassIdentifier: + singleton: 1 + minimumHeight: 200 + enablePopup: 1 + startInPopupMode: 1 + startMinimized: 0 + toggleWithKey: 1 + toggleKey: 96 + enableSearchbar: 1 + topSearchbarMinWidth: 360 + clearCommandAfterExecution: 1 + commandHistorySize: 15 + showCommandSuggestions: 1 + receiveLogcatLogsInAndroid: 0 + logcatArguments: + avoidScreenCutout: 1 + maxLogLength: 10000 + autoFocusOnCommandInputField: 1 + logItemPrefab: {fileID: 11408050, guid: 391be5df5ef62f345bb76a1051c04da7, type: 2} + commandSuggestionPrefab: {fileID: 114169395487023046, guid: 5e66896448428cf46a1854dbdc014914, + type: 2} + infoLog: {fileID: 21300000, guid: 5a97d5afa6254804f81b7ba956296996, type: 3} + warningLog: {fileID: 21300000, guid: 05c7216c78d4dd34ebe2bac9c1e274d7, type: 3} + errorLog: {fileID: 21300000, guid: 66305a19e3614694f868c75a982e6b68, type: 3} + collapseButtonNormalColor: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1} + collapseButtonSelectedColor: {r: 0.44117647, g: 0.4346886, b: 0.4346886, a: 1} + filterButtonsNormalColor: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1} + filterButtonsSelectedColor: {r: 0.44117647, g: 0.4346886, b: 0.4346886, a: 1} + commandSuggestionHighlightStart: + commandSuggestionHighlightEnd: + logWindowTR: {fileID: 22477946} + logItemsContainer: {fileID: 22400762} + commandSuggestionsContainer: {fileID: 224982529675224150} + commandInputField: {fileID: 114000010993257018} + hideButton: {fileID: 11477250} + clearButton: {fileID: 114466839828933532} + collapseButton: {fileID: 11491814} + filterInfoButton: {fileID: 11400378} + filterWarningButton: {fileID: 11490350} + filterErrorButton: {fileID: 11406916} + infoEntryCountText: {fileID: 11400274} + warningEntryCountText: {fileID: 11496004} + errorEntryCountText: {fileID: 11450122} + searchbar: {fileID: 224927884203097686} + searchbarSlotTop: {fileID: 224619367409363176} + searchbarSlotBottom: {fileID: 224755787573573022} + snapToBottomButton: {fileID: 1486651836328188} + logWindowCanvasGroup: {fileID: 22509978} + popupManager: {fileID: 11491080} + logItemsScrollRect: {fileID: 11405548} + recycledListView: {fileID: 11453682} +--- !u!114 &11453682 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 187566} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ce231987d32488f43b6fb798f7df43f6, type: 3} + m_Name: + m_EditorClassIdentifier: + transformComponent: {fileID: 22400762} + viewportTransform: {fileID: 22485076} + debugManager: {fileID: 11452418} + logItemNormalColor1: {r: 0.23529412, g: 0.23529412, b: 0.23529412, a: 0.697} + logItemNormalColor2: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.697} + logItemSelectedColor: {r: 0.32941177, g: 0.4862745, b: 0.7058824, a: 0.697} +--- !u!114 &11460786 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 118212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1862395651, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Delegates: + - eventID: 13 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 11414998} + m_MethodName: OnScrollbarDragStart + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.EventSystems.EventTrigger+TriggerEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + - eventID: 14 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 11414998} + m_MethodName: OnScrollbarDragEnd + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.EventSystems.EventTrigger+TriggerEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + delegates: [] +--- !u!114 &11466918 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133140} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 11400378} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11471588 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 119972} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -146154839, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &11472314 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 163938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 11490350} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11476740 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100406} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 2 + m_MaxSize: 16 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 +--- !u!114 &11477250 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133612} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 11448508} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11486984 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 160714} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 5a97d5afa6254804f81b7ba956296996, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11490350 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 163938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11490438 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 132536} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &11491080 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 178532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 05cc4b1999716644c9308528e38e7081, type: 3} + m_Name: + m_EditorClassIdentifier: + debugManager: {fileID: 11452418} + newInfoCountText: {fileID: 11476740} + newWarningCountText: {fileID: 11414436} + newErrorCountText: {fileID: 11411602} + alertColorInfo: {r: 0.050980393, g: 0.32941177, b: 0.5647059, a: 1} + alertColorWarning: {r: 0.59607846, g: 0.45490196, b: 0, a: 1} + alertColorError: {r: 0.5647059, g: 0.050980393, b: 0.050980393, a: 1} +--- !u!114 &11491814 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 142160} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11492840 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 109254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &11495556 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 123548} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 05c7216c78d4dd34ebe2bac9c1e274d7, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11496004 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 176246} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 2 + m_MaxSize: 16 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 +--- !u!114 &11499344 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 118212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &22207004 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 118212} +--- !u!222 &22209194 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 160714} +--- !u!222 &22209426 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 145092} +--- !u!222 &22213036 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 135210} +--- !u!222 &22223402 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 178532} +--- !u!222 &22230524 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 183006} +--- !u!222 &22231690 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133140} +--- !u!222 &22235120 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 176876} +--- !u!222 &22236120 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 148506} +--- !u!222 &22236784 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 142160} +--- !u!222 &22240830 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 168792} +--- !u!222 &22242412 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 176246} +--- !u!222 &22248262 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 170186} +--- !u!222 &22255062 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133612} +--- !u!222 &22258478 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 163938} +--- !u!222 &22260676 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 166206} +--- !u!222 &22260966 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 192924} +--- !u!222 &22261724 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 164562} +--- !u!222 &22261918 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 110786} +--- !u!222 &22270452 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 189604} +--- !u!222 &22273436 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 173314} +--- !u!222 &22278414 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 165242} +--- !u!222 &22288586 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 123548} +--- !u!222 &22290652 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 161086} +--- !u!222 &22292746 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100406} +--- !u!223 &22331464 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 132536} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 1001 + m_TargetDisplay: 0 +--- !u!224 &22400762 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 187566} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22485076} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0.00012207031} + m_SizeDelta: {x: 0, y: 50} + m_Pivot: {x: 0, y: 1} +--- !u!224 &22412306 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 166206} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22414360} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.025} + m_AnchorMax: {x: 0.45, y: 0.325} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -1, y: 0} + m_Pivot: {x: 1, y: 0.5} +--- !u!224 &22414360 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 178532} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22439026} + - {fileID: 22435388} + - {fileID: 22412306} + - {fileID: 22478474} + - {fileID: 22436794} + - {fileID: 22431144} + m_Father: {fileID: 22457152} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -36, y: 0} + m_SizeDelta: {x: 72, y: 72} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22420992 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 161086} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22460680} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.15, y: 0.12} + m_AnchorMax: {x: 0.85, y: 0.88} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22426080 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 189604} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22482970} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22427174 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 176246} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22455554} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.55, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -2, y: -2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22428984 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133140} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22497984} + - {fileID: 22452314} + m_Father: {fileID: 22456566} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22429100 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 118212} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22482970} + m_Father: {fileID: 22436850} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 28, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!224 &22431144 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 168792} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22414360} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.45, y: 0.025} + m_AnchorMax: {x: 1, y: 0.325} + m_AnchoredPosition: {x: -1, y: 0} + m_SizeDelta: {x: -2, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22435388 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 148506} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22414360} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.35} + m_AnchorMax: {x: 0.45, y: 0.65} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -1, y: 0} + m_Pivot: {x: 1, y: 0.5} +--- !u!224 &22436794 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 192924} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22414360} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.45, y: 0.35} + m_AnchorMax: {x: 1, y: 0.65} + m_AnchoredPosition: {x: -1, y: 0} + m_SizeDelta: {x: -2, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22436850 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 173314} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22485076} + - {fileID: 22429100} + m_Father: {fileID: 22477946} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: -72} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22439026 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 160714} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22414360} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.675} + m_AnchorMax: {x: 0.45, y: 0.975} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -1, y: 0} + m_Pivot: {x: 1, y: 0.5} +--- !u!224 &22452256 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 165242} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22495692} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0.55, y: 1} + m_AnchoredPosition: {x: 1, y: 0.5} + m_SizeDelta: {x: -2, y: -7} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22452314 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 176876} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22428984} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.55, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -2, y: -2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22455554 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 163938} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22466754} + - {fileID: 22427174} + m_Father: {fileID: 22456566} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22456566 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 121708} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224856348943071238} + - {fileID: 22488670} + - {fileID: 224619367409363176} + - {fileID: 22428984} + - {fileID: 22455554} + - {fileID: 22495692} + - {fileID: 22468896} + m_Father: {fileID: 22477946} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 36} + m_Pivot: {x: 1, y: 1} +--- !u!224 &22457152 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 132536} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 22477946} + - {fileID: 22414360} + - {fileID: 437128} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &22460680 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 110786} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22420992} + m_Father: {fileID: 22477946} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 64, y: 36} + m_Pivot: {x: 1, y: 0} +--- !u!224 &22466754 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 123548} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22455554} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0.55, y: 1} + m_AnchoredPosition: {x: 1, y: 0.5} + m_SizeDelta: {x: -2, y: -7} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22468896 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133612} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22485120} + m_Father: {fileID: 22456566} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22477946 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 183006} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22456566} + - {fileID: 224755787573573022} + - {fileID: 22436850} + - {fileID: 224175272648112170} + - {fileID: 224000011255372986} + - {fileID: 22460680} + m_Father: {fileID: 22457152} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!224 &22478474 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100406} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22414360} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.45, y: 0.675} + m_AnchorMax: {x: 1, y: 0.975} + m_AnchoredPosition: {x: -1, y: 0} + m_SizeDelta: {x: -2, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22482970 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 171206} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22426080} + m_Father: {fileID: 22429100} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22485076 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 119972} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22400762} + - {fileID: 224170087475393432} + m_Father: {fileID: 22436850} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -29, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!224 &22485120 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 164562} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22468896} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.15, y: 0.12} + m_AnchorMax: {x: 0.85, y: 0.88} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22488670 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 142160} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224781297716539566} + m_Father: {fileID: 22456566} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22495692 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 170186} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22452256} + - {fileID: 22496878} + m_Father: {fileID: 22456566} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22496878 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 135210} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22495692} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.55, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -2, y: -2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22497984 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 145092} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22428984} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0.55, y: 1} + m_AnchoredPosition: {x: 1, y: 0.5} + m_SizeDelta: {x: -2, y: -7} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &22505754 +CanvasGroup: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 178532} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!225 &22509978 +CanvasGroup: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 183006} + m_Enabled: 1 + m_Alpha: 0 + m_Interactable: 0 + m_BlocksRaycasts: 0 + m_IgnoreParentGroups: 0 +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 132536} + m_IsPrefabParent: 1 +--- !u!1 &1000010562689872 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000014081388310} + - component: {fileID: 222000011960742964} + - component: {fileID: 114000012764979206} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013017939458 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000014244241328} + - component: {fileID: 222000010368327546} + - component: {fileID: 114000013429243584} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013131456698 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000011255372986} + - component: {fileID: 222000010912077860} + - component: {fileID: 114000013324539428} + - component: {fileID: 114000010993257018} + m_Layer: 5 + m_Name: CommandInputField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1023677686285356 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224755787573573022} + - component: {fileID: 222554695212194500} + - component: {fileID: 114565304207243400} + m_Layer: 5 + m_Name: SearchbarSlotBottom + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1046123681008450 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224757625655964314} + - component: {fileID: 222859164510105872} + - component: {fileID: 114958054160062352} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1065080943999816 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224982529675224150} + - component: {fileID: 222691170673863110} + - component: {fileID: 114095641519247160} + - component: {fileID: 114749866180229960} + m_Layer: 5 + m_Name: CommandSuggestionsContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1164238372139318 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224669170713768380} + - component: {fileID: 222006696964694420} + - component: {fileID: 114590115059802926} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1197649202466618 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224927884203097686} + - component: {fileID: 222677458225366564} + - component: {fileID: 114677982133495580} + - component: {fileID: 114664465529608634} + m_Layer: 5 + m_Name: Searchbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1316062289193744 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224781297716539566} + - component: {fileID: 222390805710412110} + - component: {fileID: 114375211676648468} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1419055185851692 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224175272648112170} + - component: {fileID: 114201206152803294} + m_Layer: 5 + m_Name: CommandSuggestions + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1486651836328188 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224170087475393432} + - component: {fileID: 222255240242372310} + - component: {fileID: 114590956026916120} + - component: {fileID: 114786672304321734} + m_Layer: 5 + m_Name: SnapToBottom + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1608527955020594 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224619367409363176} + - component: {fileID: 222199124140025852} + - component: {fileID: 114533172895795940} + - component: {fileID: 114425215294804516} + m_Layer: 5 + m_Name: SearchbarSlotTop + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1797932393879816 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224479789572691966} + - component: {fileID: 222428315485768352} + - component: {fileID: 114704198421030094} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1828058091608518 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224856348943071238} + - component: {fileID: 222172057957339964} + - component: {fileID: 114501864645789684} + - component: {fileID: 114466839828933532} + m_Layer: 5 + m_Name: ClearButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1837270565088688 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224726770285678000} + - component: {fileID: 222974975071271426} + - component: {fileID: 114796147118253168} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1926020646996780 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224332069547574292} + - component: {fileID: 222821544406435052} + - component: {fileID: 114187932873892064} + m_Layer: 5 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114000010993257018 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013131456698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 575553740, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114000013324539428} + m_TextComponent: {fileID: 114000012764979206} + m_Placeholder: {fileID: 114000013429243584} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 2 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 +--- !u!114 &114000012764979206 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010562689872} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 2 + m_MaxSize: 16 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &114000013324539428 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013131456698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000013429243584 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013017939458} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 0.653} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 2 + m_BestFit: 1 + m_MinSize: 2 + m_MaxSize: 16 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: (type help for list of commands) +--- !u!114 &114095641519247160 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1065080943999816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.334, g: 0.3286984, b: 0.3286984, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114187932873892064 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1926020646996780} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9485294, g: 0.9485294, b: 0.9485294, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: e04e6c970b950d946a782ea08e5f971d, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114201206152803294 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1419055185851692} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 6 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114375211676648468 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1316062289193744} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9485294, g: 0.9485294, b: 0.9485294, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: d1546f8db185caf4dafcfa58efa3ba2c, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114425215294804516 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1608527955020594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 2 + m_FlexibleHeight: -1 +--- !u!114 &114435636144975300 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 164562} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: b3905a73a6672d9449647aaf036e23fc, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114466839828933532 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1828058091608518} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114501864645789684} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114501864645789684 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1828058091608518} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114533172895795940 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1608527955020594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.24264705, g: 0.24443123, b: 0.24443123, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114538072837526774 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 110786} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6565f2084f5aef44abe57c988745b9c3, type: 3} + m_Name: + m_EditorClassIdentifier: + debugManager: {fileID: 11452418} +--- !u!114 &114565304207243400 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1023677686285356} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114575087663981696 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 109254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1327945023, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114590115059802926 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164238372139318} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 0.653} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 2 + m_BestFit: 1 + m_MinSize: 2 + m_MaxSize: 16 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Search... +--- !u!114 &114590956026916120 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1486651836328188} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.30980393, g: 0.30980393, b: 0.30980393, a: 0.6862745} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: b902f763d0e47364dae25207b7e47800, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114664465529608634 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1197649202466618} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114677982133495580} + m_TextComponent: {fileID: 114958054160062352} + m_Placeholder: {fileID: 114590115059802926} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 +--- !u!114 &114677982133495580 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1197649202466618} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114704198421030094 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1797932393879816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9485294, g: 0.9485294, b: 0.9485294, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 7a9e374666ad6cc47807bb001844f3d8, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114749866180229960 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1065080943999816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 10 + m_Right: 10 + m_Top: 10 + m_Bottom: 10 + m_ChildAlignment: 6 + m_Spacing: 2 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114777798721274074 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 121708} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114786672304321734 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1486651836328188} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114590956026916120} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114796147118253168 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1837270565088688} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9485294, g: 0.9485294, b: 0.9485294, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066c0b04be98cd348abb79add91d42bf, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114944715489184838 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 121708} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114958054160062352 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1046123681008450} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.8392157, g: 0.84313726, b: 0.84313726, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &222000010368327546 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013017939458} +--- !u!222 &222000010912077860 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013131456698} +--- !u!222 &222000011960742964 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010562689872} +--- !u!222 &222006696964694420 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164238372139318} +--- !u!222 &222172057957339964 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1828058091608518} +--- !u!222 &222199124140025852 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1608527955020594} +--- !u!222 &222255240242372310 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1486651836328188} +--- !u!222 &222390805710412110 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1316062289193744} +--- !u!222 &222428315485768352 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1797932393879816} +--- !u!222 &222466100300644746 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 121708} +--- !u!222 &222554695212194500 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1023677686285356} +--- !u!222 &222677458225366564 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1197649202466618} +--- !u!222 &222691170673863110 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1065080943999816} +--- !u!222 &222821544406435052 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1926020646996780} +--- !u!222 &222859164510105872 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1046123681008450} +--- !u!222 &222974975071271426 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1837270565088688} +--- !u!224 &224000011255372986 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013131456698} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224000014244241328} + - {fileID: 224000014081388310} + m_Father: {fileID: 22477946} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -32, y: 0} + m_SizeDelta: {x: -64, y: 36} + m_Pivot: {x: 0.5, y: 0} +--- !u!224 &224000014081388310 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010562689872} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000011255372986} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -16} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000014244241328 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013017939458} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000011255372986} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -16} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224170087475393432 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1486651836328188} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224726770285678000} + m_Father: {fileID: 22485076} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 8} + m_SizeDelta: {x: 42, y: 42} + m_Pivot: {x: 0.5, y: 0} +--- !u!224 &224175272648112170 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1419055185851692} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224982529675224150} + m_Father: {fileID: 22477946} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 36} + m_SizeDelta: {x: 0, y: 5000} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224332069547574292 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1926020646996780} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224927884203097686} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 2, y: 0} + m_SizeDelta: {x: 25, y: -6} + m_Pivot: {x: 0, y: 0.5} +--- !u!224 &224479789572691966 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1797932393879816} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224856348943071238} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.15, y: 0.12} + m_AnchorMax: {x: 0.85, y: 0.88} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224619367409363176 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1608527955020594} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224927884203097686} + m_Father: {fileID: 22456566} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224669170713768380 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1164238372139318} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224927884203097686} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 15, y: -0.5} + m_SizeDelta: {x: -30, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224726770285678000 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1837270565088688} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224170087475393432} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.2, y: 0.2} + m_AnchorMax: {x: 0.8, y: 0.8} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224755787573573022 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1023677686285356} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22477946} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -36} + m_SizeDelta: {x: 0, y: 36} + m_Pivot: {x: 0.5, y: 1} +--- !u!224 &224757625655964314 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1046123681008450} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224927884203097686} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 15, y: -0.5} + m_SizeDelta: {x: -30, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224781297716539566 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1316062289193744} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22488670} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.15, y: 0.12} + m_AnchorMax: {x: 0.85, y: 0.88} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224856348943071238 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1828058091608518} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224479789572691966} + m_Father: {fileID: 22456566} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224927884203097686 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1197649202466618} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224332069547574292} + - {fileID: 224669170713768380} + - {fileID: 224757625655964314} + m_Father: {fileID: 224619367409363176} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224982529675224150 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1065080943999816} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224175272648112170} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -0.00005340576} + m_SizeDelta: {x: 24, y: 24} + m_Pivot: {x: 0, y: 0} diff --git a/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.prefab.meta b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.prefab.meta new file mode 100644 index 0000000..cb0d55b --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 67117722a812a2e46ab8cb8eafbf5f5e +timeCreated: 1466014755 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Prefabs.meta b/Assets/Plugins/IngameDebugConsole/Prefabs.meta new file mode 100644 index 0000000..5eae9ad --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7dbc36665bc0d684db9a4447e27a7a4b +folderAsset: yes +timeCreated: 1520417401 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab b/Assets/Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab new file mode 100644 index 0000000..0f8cf14 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab @@ -0,0 +1,87 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1386426139070838} + m_IsPrefabParent: 1 +--- !u!1 &1386426139070838 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224955737853170496} + - component: {fileID: 222541766812100524} + - component: {fileID: 114169395487023046} + m_Layer: 5 + m_Name: CommandSuggestion + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114169395487023046 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1386426139070838} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: help +--- !u!222 &222541766812100524 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1386426139070838} +--- !u!224 &224955737853170496 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1386426139070838} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab.meta b/Assets/Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab.meta new file mode 100644 index 0000000..4407222 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5e66896448428cf46a1854dbdc014914 +timeCreated: 1601390136 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab b/Assets/Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab new file mode 100644 index 0000000..c80442f --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab @@ -0,0 +1,640 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &104862 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22461494} + - component: {fileID: 22233942} + - component: {fileID: 11411806} + m_Layer: 5 + m_Name: LogCount + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &151462 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22420350} + - component: {fileID: 22200920} + - component: {fileID: 11432936} + m_Layer: 5 + m_Name: LogCountText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &152362 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22427300} + - component: {fileID: 22262284} + - component: {fileID: 11404142} + m_Layer: 5 + m_Name: LogType + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &166880 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22479264} + - component: {fileID: 22288988} + - component: {fileID: 11459012} + - component: {fileID: 11408050} + - component: {fileID: 11456372} + - component: {fileID: 225819852034701160} + m_Layer: 5 + m_Name: DebugLogItem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &173670 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 22457652} + - component: {fileID: 22240404} + - component: {fileID: 11465282} + m_Layer: 5 + m_Name: LogText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &11404142 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 152362} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 33b115bf5efdfa04d8e2e0b70a6643cd, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11408050 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 166880} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d2ea291be9de70a4abfec595203c96c1, type: 3} + m_Name: + m_EditorClassIdentifier: + transformComponent: {fileID: 22479264} + imageComponent: {fileID: 11459012} + canvasGroupComponent: {fileID: 225819852034701160} + logText: {fileID: 11465282} + logTypeImage: {fileID: 11404142} + logCountParent: {fileID: 104862} + logCountText: {fileID: 11432936} + copyLogButton: {fileID: 224006190298411330} +--- !u!114 &11411806 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 104862} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.42647058, g: 0.42647058, b: 0.42647058, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: b3f0d976f6d6802479d6465d11b3aa68, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11432936 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 151462} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 1 + m_MaxSize: 16 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 1 +--- !u!114 &11456372 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 166880} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 11459012} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &11459012 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 166880} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.23529412, g: 0.23529412, b: 0.23529412, a: 0.697} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 98e8e1cf8dc7dbf469617c2e40c8a944, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &11465282 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 173670} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Debug.Log summary +--- !u!222 &22200920 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 151462} +--- !u!222 &22233942 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 104862} +--- !u!222 &22240404 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 173670} +--- !u!222 &22262284 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 152362} +--- !u!222 &22288988 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 166880} +--- !u!224 &22420350 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 151462} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22461494} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -2, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22427300 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 152362} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22479264} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 25, y: 0} + m_SizeDelta: {x: 32, y: 32} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22457652 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 173670} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22479264} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 22.5, y: 0} + m_SizeDelta: {x: -55, y: -2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22461494 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 104862} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22420350} + m_Father: {fileID: 22479264} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -28, y: 0} + m_SizeDelta: {x: 38, y: 28} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &22479264 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 166880} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 22427300} + - {fileID: 22457652} + - {fileID: 22461494} + - {fileID: 224006190298411330} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 40} + m_Pivot: {x: 0, y: 1} +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 166880} + m_IsPrefabParent: 1 +--- !u!1 &1396836967994216 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224006190298411330} + - component: {fileID: 222870443111501910} + - component: {fileID: 114119781176956926} + - component: {fileID: 114694923173451186} + m_Layer: 5 + m_Name: CopyLogButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1503640463151286 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224887990600088790} + - component: {fileID: 222313182602304162} + - component: {fileID: 114549765989288124} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114119781176956926 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1396836967994216} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.42647058, g: 0.42647058, b: 0.42647058, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114549765989288124 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1503640463151286} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Copy +--- !u!114 &114694923173451186 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1396836967994216} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114119781176956926} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 11408050} + m_MethodName: CopyLog + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!222 &222313182602304162 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1503640463151286} +--- !u!222 &222870443111501910 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1396836967994216} +--- !u!224 &224006190298411330 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1396836967994216} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224887990600088790} + m_Father: {fileID: 22479264} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 2} + m_SizeDelta: {x: -100, y: 36} + m_Pivot: {x: 0.5, y: 0} +--- !u!224 &224887990600088790 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1503640463151286} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224006190298411330} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &225819852034701160 +CanvasGroup: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 166880} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 diff --git a/Assets/Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab.meta b/Assets/Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab.meta new file mode 100644 index 0000000..b2a7577 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 391be5df5ef62f345bb76a1051c04da7 +timeCreated: 1465919887 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/README.txt b/Assets/Plugins/IngameDebugConsole/README.txt new file mode 100644 index 0000000..33c0498 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/README.txt @@ -0,0 +1,10 @@ += In-game Debug Console = + +Online documentation available at: https://github.com/yasirkula/UnityIngameDebugConsole +E-mail: yasirkula@gmail.com + +1. ABOUT +This asset helps you see debug messages (logs, warnings, errors, exceptions) runtime in a build (also assertions in editor) and execute commands using its built-in console. + +2. HOW TO +You can simply place the IngameDebugConsole prefab to your scene. Hovering the cursor over its properties in the Inspector will reveal explanatory tooltips. \ No newline at end of file diff --git a/Assets/Plugins/IngameDebugConsole/README.txt.meta b/Assets/Plugins/IngameDebugConsole/README.txt.meta new file mode 100644 index 0000000..21f8dae --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/README.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: edf2ac73f7bc3064c96d53009106dc53 +timeCreated: 1563307881 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Scripts.meta b/Assets/Plugins/IngameDebugConsole/Scripts.meta new file mode 100644 index 0000000..1040eb3 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 860c08388401a6d4e858fe4910ea9337 +folderAsset: yes +timeCreated: 1465930645 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs b/Assets/Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs new file mode 100644 index 0000000..86537b1 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs @@ -0,0 +1,116 @@ +// #define RESET_REMOVED_ELEMENTS + +namespace IngameDebugConsole +{ + public class CircularBuffer + { + private T[] arr; + private int startIndex; + + public int Count { get; private set; } + public T this[int index] { get { return arr[( startIndex + index ) % arr.Length]; } } + + public CircularBuffer( int capacity ) + { + arr = new T[capacity]; + } + + // Old elements are overwritten when capacity is reached + public void Add( T value ) + { + if( Count < arr.Length ) + arr[Count++] = value; + else + { + arr[startIndex] = value; + if( ++startIndex >= arr.Length ) + startIndex = 0; + } + } + } + + public class DynamicCircularBuffer + { + private T[] arr; + private int startIndex; + + public int Count { get; private set; } + public T this[int index] + { + get { return arr[( startIndex + index ) % arr.Length]; } + set { arr[( startIndex + index ) % arr.Length] = value; } + } + + public DynamicCircularBuffer( int initialCapacity = 2 ) + { + arr = new T[initialCapacity]; + } + + public void Add( T value ) + { + if( Count >= arr.Length ) + { + int prevSize = arr.Length; + int newSize = prevSize > 0 ? prevSize * 2 : 2; // Size must be doubled (at least), or the shift operation below must consider IndexOutOfRange situations + + System.Array.Resize( ref arr, newSize ); + + if( startIndex > 0 ) + { + if( startIndex <= ( prevSize - 1 ) / 2 ) + { + // Move elements [0,startIndex) to the end + for( int i = 0; i < startIndex; i++ ) + { + arr[i + prevSize] = arr[i]; +#if RESET_REMOVED_ELEMENTS + arr[i] = default( T ); +#endif + } + } + else + { + // Move elements [startIndex,prevSize) to the end + int delta = newSize - prevSize; + for( int i = prevSize - 1; i >= startIndex; i-- ) + { + arr[i + delta] = arr[i]; +#if RESET_REMOVED_ELEMENTS + arr[i] = default( T ); +#endif + } + + startIndex += delta; + } + } + } + + this[Count++] = value; + } + + public T RemoveFirst() + { + T element = arr[startIndex]; +#if RESET_REMOVED_ELEMENTS + arr[startIndex] = default( T ); +#endif + + if( ++startIndex >= arr.Length ) + startIndex = 0; + + Count--; + return element; + } + + public T RemoveLast() + { + T element = arr[Count - 1]; +#if RESET_REMOVED_ELEMENTS + arr[Count - 1] = default( T ); +#endif + + Count--; + return element; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs.meta new file mode 100644 index 0000000..cbd5ebc --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6136cb3c00eac0149901b8e7f2fecef8 +timeCreated: 1550943949 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/ConsoleMethodAttribute.cs b/Assets/Plugins/IngameDebugConsole/Scripts/ConsoleMethodAttribute.cs new file mode 100644 index 0000000..c1259d0 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Scripts/ConsoleMethodAttribute.cs @@ -0,0 +1,23 @@ +using System; + +namespace IngameDebugConsole +{ + [AttributeUsage( AttributeTargets.Method, Inherited = false, AllowMultiple = true )] + public class ConsoleMethodAttribute : Attribute + { + private string m_command; + private string m_description; + private string[] m_parameterNames; + + public string Command { get { return m_command; } } + public string Description { get { return m_description; } } + public string[] ParameterNames { get { return m_parameterNames; } } + + public ConsoleMethodAttribute( string command, string description, params string[] parameterNames ) + { + m_command = command; + m_description = description; + m_parameterNames = parameterNames; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/ConsoleMethodAttribute.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/ConsoleMethodAttribute.cs.meta new file mode 100644 index 0000000..a55a26b --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Scripts/ConsoleMethodAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 324bb39c0bff0f74fa42f83e91f07e3a +timeCreated: 1520710946 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs new file mode 100644 index 0000000..2cbbe01 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs @@ -0,0 +1,1431 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Reflection; +using System.Text; +using Object = UnityEngine.Object; + +// Manages the console commands, parses console input and handles execution of commands +// Supported method parameter types: int, float, bool, string, Vector2, Vector3, Vector4 + +// Helper class to store important information about a command +namespace IngameDebugConsole +{ + public class ConsoleMethodInfo + { + public readonly MethodInfo method; + public readonly Type[] parameterTypes; + public readonly object instance; + + public readonly string command; + public readonly string signature; + public readonly string[] parameters; + + public ConsoleMethodInfo( MethodInfo method, Type[] parameterTypes, object instance, string command, string signature, string[] parameters ) + { + this.method = method; + this.parameterTypes = parameterTypes; + this.instance = instance; + this.command = command; + this.signature = signature; + this.parameters = parameters; + } + + public bool IsValid() + { + if( !method.IsStatic && ( instance == null || instance.Equals( null ) ) ) + return false; + + return true; + } + } + + public static class DebugLogConsole + { + public delegate bool ParseFunction( string input, out object output ); + + // All the commands + private static readonly List methods = new List(); + private static readonly List matchingMethods = new List( 4 ); + + // All the parse functions + private static readonly Dictionary parseFunctions = new Dictionary() + { + { typeof( string ), ParseString }, + { typeof( bool ), ParseBool }, + { typeof( int ), ParseInt }, + { typeof( uint ), ParseUInt }, + { typeof( long ), ParseLong }, + { typeof( ulong ), ParseULong }, + { typeof( byte ), ParseByte }, + { typeof( sbyte ), ParseSByte }, + { typeof( short ), ParseShort }, + { typeof( ushort ), ParseUShort }, + { typeof( char ), ParseChar }, + { typeof( float ), ParseFloat }, + { typeof( double ), ParseDouble }, + { typeof( decimal ), ParseDecimal }, + { typeof( Vector2 ), ParseVector2 }, + { typeof( Vector3 ), ParseVector3 }, + { typeof( Vector4 ), ParseVector4 }, + { typeof( Quaternion ), ParseQuaternion }, + { typeof( Color ), ParseColor }, + { typeof( Color32 ), ParseColor32 }, + { typeof( Rect ), ParseRect }, + { typeof( RectOffset ), ParseRectOffset }, + { typeof( Bounds ), ParseBounds }, + { typeof( GameObject ), ParseGameObject }, +#if UNITY_2017_2_OR_NEWER + { typeof( Vector2Int ), ParseVector2Int }, + { typeof( Vector3Int ), ParseVector3Int }, + { typeof( RectInt ), ParseRectInt }, + { typeof( BoundsInt ), ParseBoundsInt }, +#endif + }; + + // All the readable names of accepted types + private static readonly Dictionary typeReadableNames = new Dictionary() + { + { typeof( string ), "String" }, + { typeof( bool ), "Boolean" }, + { typeof( int ), "Integer" }, + { typeof( uint ), "Unsigned Integer" }, + { typeof( long ), "Long" }, + { typeof( ulong ), "Unsigned Long" }, + { typeof( byte ), "Byte" }, + { typeof( sbyte ), "Short Byte" }, + { typeof( short ), "Short" }, + { typeof( ushort ), "Unsigned Short" }, + { typeof( char ), "Char" }, + { typeof( float ), "Float" }, + { typeof( double ), "Double" }, + { typeof( decimal ), "Decimal" } + }; + + // Split arguments of an entered command + private static readonly List commandArguments = new List( 8 ); + + // Command parameter delimeter groups + private static readonly string[] inputDelimiters = new string[] { "\"\"", "''", "{}", "()", "[]" }; + + // CompareInfo used for case-insensitive command name comparison + private static readonly CompareInfo caseInsensitiveComparer = new CultureInfo( "en-US" ).CompareInfo; + + static DebugLogConsole() + { +#if UNITY_EDITOR || !NETFX_CORE + // Find all [ConsoleMethod] functions + // Don't search built-in assemblies for console methods since they can't have any + string[] ignoredAssemblies = new string[] + { + "Unity", + "System", + "Mono.", + "mscorlib", + "netstandard", + "TextMeshPro", + "Microsoft.GeneratedCode", + "I18N", + "Boo.", + "UnityScript.", + "ICSharpCode.", + "ExCSS.Unity", +#if UNITY_EDITOR + "Assembly-CSharp-Editor", + "Assembly-UnityScript-Editor", + "nunit.", + "SyntaxTree.", + "AssetStoreTools", +#endif + }; + + foreach( Assembly assembly in AppDomain.CurrentDomain.GetAssemblies() ) + { +#if NET_4_6 || NET_STANDARD_2_0 + if( assembly.IsDynamic ) + continue; +#endif + + string assemblyName = assembly.GetName().Name; + bool ignoreAssembly = false; + for( int i = 0; i < ignoredAssemblies.Length; i++ ) + { + if( caseInsensitiveComparer.IsPrefix( assemblyName, ignoredAssemblies[i], CompareOptions.IgnoreCase ) ) + { + ignoreAssembly = true; + break; + } + } + + if( ignoreAssembly ) + continue; + + try + { + foreach( Type type in assembly.GetExportedTypes() ) + { + foreach( MethodInfo method in type.GetMethods( BindingFlags.Static | BindingFlags.Public | BindingFlags.DeclaredOnly ) ) + { + foreach( object attribute in method.GetCustomAttributes( typeof( ConsoleMethodAttribute ), false ) ) + { + ConsoleMethodAttribute consoleMethod = attribute as ConsoleMethodAttribute; + if( consoleMethod != null ) + AddCommand( consoleMethod.Command, consoleMethod.Description, method, null, consoleMethod.ParameterNames ); + } + } + } + } + catch( NotSupportedException ) { } + catch( System.IO.FileNotFoundException ) { } + catch( Exception e ) + { + Debug.LogError( "Couldn't search assembly for [ConsoleMethod] attributes: " + assemblyName + "\n" + e.ToString() ); + } + } +#endif + + AddCommand( "help", "Prints all commands", LogAllCommands ); + AddCommand( "sysinfo", "Prints system information", LogSystemInfo ); + } + + // Logs the list of available commands + public static void LogAllCommands() + { + int length = 25; + for( int i = 0; i < methods.Count; i++ ) + { + if( methods[i].IsValid() ) + length += 3 + methods[i].signature.Length; + } + + StringBuilder stringBuilder = new StringBuilder( length ); + stringBuilder.Append( "Available commands:" ); + + for( int i = 0; i < methods.Count; i++ ) + { + if( methods[i].IsValid() ) + stringBuilder.Append( "\n- " ).Append( methods[i].signature ); + } + + Debug.Log( stringBuilder.ToString() ); + + // After typing help, the log that lists all the commands should automatically be expanded for better UX + if( DebugLogManager.Instance ) + { + DebugLogManager.Instance.ExpandLatestPendingLog(); + DebugLogManager.Instance.StripStackTraceFromLatestPendingLog(); + } + } + + // Logs system information + public static void LogSystemInfo() + { + StringBuilder stringBuilder = new StringBuilder( 1024 ); + stringBuilder.Append( "Rig: " ).AppendSysInfoIfPresent( SystemInfo.deviceModel ).AppendSysInfoIfPresent( SystemInfo.processorType ) + .AppendSysInfoIfPresent( SystemInfo.systemMemorySize, "MB RAM" ).Append( SystemInfo.processorCount ).Append( " cores\n" ); + stringBuilder.Append( "OS: " ).Append( SystemInfo.operatingSystem ).Append( "\n" ); + stringBuilder.Append( "GPU: " ).Append( SystemInfo.graphicsDeviceName ).Append( " " ).Append( SystemInfo.graphicsMemorySize ) + .Append( "MB " ).Append( SystemInfo.graphicsDeviceVersion ) + .Append( SystemInfo.graphicsMultiThreaded ? " multi-threaded\n" : "\n" ); + stringBuilder.Append( "Data Path: " ).Append( Application.dataPath ).Append( "\n" ); + stringBuilder.Append( "Persistent Data Path: " ).Append( Application.persistentDataPath ).Append( "\n" ); + stringBuilder.Append( "StreamingAssets Path: " ).Append( Application.streamingAssetsPath ).Append( "\n" ); + stringBuilder.Append( "Temporary Cache Path: " ).Append( Application.temporaryCachePath ).Append( "\n" ); + stringBuilder.Append( "Device ID: " ).Append( SystemInfo.deviceUniqueIdentifier ).Append( "\n" ); + stringBuilder.Append( "Max Texture Size: " ).Append( SystemInfo.maxTextureSize ).Append( "\n" ); +#if UNITY_5_6_OR_NEWER + stringBuilder.Append( "Max Cubemap Size: " ).Append( SystemInfo.maxCubemapSize ).Append( "\n" ); +#endif + stringBuilder.Append( "Accelerometer: " ).Append( SystemInfo.supportsAccelerometer ? "supported\n" : "not supported\n" ); + stringBuilder.Append( "Gyro: " ).Append( SystemInfo.supportsGyroscope ? "supported\n" : "not supported\n" ); + stringBuilder.Append( "Location Service: " ).Append( SystemInfo.supportsLocationService ? "supported\n" : "not supported\n" ); +#if !UNITY_2019_1_OR_NEWER + stringBuilder.Append( "Image Effects: " ).Append( SystemInfo.supportsImageEffects ? "supported\n" : "not supported\n" ); + stringBuilder.Append( "RenderToCubemap: " ).Append( SystemInfo.supportsRenderToCubemap ? "supported\n" : "not supported\n" ); +#endif + stringBuilder.Append( "Compute Shaders: " ).Append( SystemInfo.supportsComputeShaders ? "supported\n" : "not supported\n" ); + stringBuilder.Append( "Shadows: " ).Append( SystemInfo.supportsShadows ? "supported\n" : "not supported\n" ); + stringBuilder.Append( "Instancing: " ).Append( SystemInfo.supportsInstancing ? "supported\n" : "not supported\n" ); + stringBuilder.Append( "Motion Vectors: " ).Append( SystemInfo.supportsMotionVectors ? "supported\n" : "not supported\n" ); + stringBuilder.Append( "3D Textures: " ).Append( SystemInfo.supports3DTextures ? "supported\n" : "not supported\n" ); +#if UNITY_5_6_OR_NEWER + stringBuilder.Append( "3D Render Textures: " ).Append( SystemInfo.supports3DRenderTextures ? "supported\n" : "not supported\n" ); +#endif + stringBuilder.Append( "2D Array Textures: " ).Append( SystemInfo.supports2DArrayTextures ? "supported\n" : "not supported\n" ); + stringBuilder.Append( "Cubemap Array Textures: " ).Append( SystemInfo.supportsCubemapArrayTextures ? "supported" : "not supported" ); + + Debug.Log( stringBuilder.ToString() ); + + // After typing sysinfo, the log that lists system information should automatically be expanded for better UX + if( DebugLogManager.Instance ) + { + DebugLogManager.Instance.ExpandLatestPendingLog(); + DebugLogManager.Instance.StripStackTraceFromLatestPendingLog(); + } + } + + private static StringBuilder AppendSysInfoIfPresent( this StringBuilder sb, string info, string postfix = null ) + { + if( info != SystemInfo.unsupportedIdentifier ) + { + sb.Append( info ); + + if( postfix != null ) + sb.Append( postfix ); + + sb.Append( " " ); + } + + return sb; + } + + private static StringBuilder AppendSysInfoIfPresent( this StringBuilder sb, int info, string postfix = null ) + { + if( info > 0 ) + { + sb.Append( info ); + + if( postfix != null ) + sb.Append( postfix ); + + sb.Append( " " ); + } + + return sb; + } + + // Add a custom Type to the list of recognized command parameter Types + public static void AddCustomParameterType( Type type, ParseFunction parseFunction, string typeReadableName = null ) + { + if( type == null ) + { + Debug.LogError( "Parameter type can't be null!" ); + return; + } + else if( parseFunction == null ) + { + Debug.LogError( "Parameter parseFunction can't be null!" ); + return; + } + + parseFunctions[type] = parseFunction; + + if( !string.IsNullOrEmpty( typeReadableName ) ) + typeReadableNames[type] = typeReadableName; + } + + // Remove a custom Type from the list of recognized command parameter Types + public static void RemoveCustomParameterType( Type type ) + { + parseFunctions.Remove( type ); + typeReadableNames.Remove( type ); + } + + // Add a command related with an instance method (i.e. non static method) + public static void AddCommandInstance( string command, string description, string methodName, object instance, params string[] parameterNames ) + { + if( instance == null ) + { + Debug.LogError( "Instance can't be null!" ); + return; + } + + AddCommand( command, description, methodName, instance.GetType(), instance, parameterNames ); + } + + // Add a command related with a static method (i.e. no instance is required to call the method) + public static void AddCommandStatic( string command, string description, string methodName, Type ownerType, params string[] parameterNames ) + { + AddCommand( command, description, methodName, ownerType, null, parameterNames ); + } + + // Add a command that can be related to either a static or an instance method + public static void AddCommand( string command, string description, Action method ) { AddCommand( command, description, method.Method, method.Target, null ); } + public static void AddCommand( string command, string description, Action method ) { AddCommand( command, description, method.Method, method.Target, null ); } + public static void AddCommand( string command, string description, Func method ) { AddCommand( command, description, method.Method, method.Target, null ); } + public static void AddCommand( string command, string description, Action method ) { AddCommand( command, description, method.Method, method.Target, null ); } + public static void AddCommand( string command, string description, Func method ) { AddCommand( command, description, method.Method, method.Target, null ); } + public static void AddCommand( string command, string description, Action method ) { AddCommand( command, description, method.Method, method.Target, null ); } + public static void AddCommand( string command, string description, Func method ) { AddCommand( command, description, method.Method, method.Target, null ); } + public static void AddCommand( string command, string description, Action method ) { AddCommand( command, description, method.Method, method.Target, null ); } + public static void AddCommand( string command, string description, Func method ) { AddCommand( command, description, method.Method, method.Target, null ); } + public static void AddCommand( string command, string description, Func method ) { AddCommand( command, description, method.Method, method.Target, null ); } + public static void AddCommand( string command, string description, Delegate method ) { AddCommand( command, description, method.Method, method.Target, null ); } + + // Add a command with custom parameter names + public static void AddCommand( string command, string description, Action method, string parameterName ) { AddCommand( command, description, method.Method, method.Target, new string[1] { parameterName } ); } + public static void AddCommand( string command, string description, Action method, string parameterName1, string parameterName2 ) { AddCommand( command, description, method.Method, method.Target, new string[2] { parameterName1, parameterName2 } ); } + public static void AddCommand( string command, string description, Func method, string parameterName ) { AddCommand( command, description, method.Method, method.Target, new string[1] { parameterName } ); } + public static void AddCommand( string command, string description, Action method, string parameterName1, string parameterName2, string parameterName3 ) { AddCommand( command, description, method.Method, method.Target, new string[3] { parameterName1, parameterName2, parameterName3 } ); } + public static void AddCommand( string command, string description, Func method, string parameterName1, string parameterName2 ) { AddCommand( command, description, method.Method, method.Target, new string[2] { parameterName1, parameterName2 } ); } + public static void AddCommand( string command, string description, Action method, string parameterName1, string parameterName2, string parameterName3, string parameterName4 ) { AddCommand( command, description, method.Method, method.Target, new string[4] { parameterName1, parameterName2, parameterName3, parameterName4 } ); } + public static void AddCommand( string command, string description, Func method, string parameterName1, string parameterName2, string parameterName3 ) { AddCommand( command, description, method.Method, method.Target, new string[3] { parameterName1, parameterName2, parameterName3 } ); } + public static void AddCommand( string command, string description, Func method, string parameterName1, string parameterName2, string parameterName3, string parameterName4 ) { AddCommand( command, description, method.Method, method.Target, new string[4] { parameterName1, parameterName2, parameterName3, parameterName4 } ); } + public static void AddCommand( string command, string description, Delegate method, params string[] parameterNames ) { AddCommand( command, description, method.Method, method.Target, parameterNames ); } + + // Create a new command and set its properties + private static void AddCommand( string command, string description, string methodName, Type ownerType, object instance, string[] parameterNames ) + { + // Get the method from the class + MethodInfo method = ownerType.GetMethod( methodName, BindingFlags.Public | BindingFlags.NonPublic | ( instance != null ? BindingFlags.Instance : BindingFlags.Static ) ); + if( method == null ) + { + Debug.LogError( methodName + " does not exist in " + ownerType ); + return; + } + + AddCommand( command, description, method, instance, parameterNames ); + } + + private static void AddCommand( string command, string description, MethodInfo method, object instance, string[] parameterNames ) + { + if( string.IsNullOrEmpty( command ) ) + { + Debug.LogError( "Command name can't be empty!" ); + return; + } + + command = command.Trim(); + if( command.IndexOf( ' ' ) >= 0 ) + { + Debug.LogError( "Command name can't contain whitespace: " + command ); + return; + } + + // Fetch the parameters of the class + ParameterInfo[] parameters = method.GetParameters(); + if( parameters == null ) + parameters = new ParameterInfo[0]; + + // Store the parameter types in an array + Type[] parameterTypes = new Type[parameters.Length]; + for( int i = 0; i < parameters.Length; i++ ) + { + if( parameters[i].ParameterType.IsByRef ) + { + Debug.LogError( "Command can't have 'out' or 'ref' parameters" ); + return; + } + + Type parameterType = parameters[i].ParameterType; + if( parseFunctions.ContainsKey( parameterType ) || typeof( Component ).IsAssignableFrom( parameterType ) || parameterType.IsEnum || IsSupportedArrayType( parameterType ) ) + parameterTypes[i] = parameterType; + else + { + Debug.LogError( string.Concat( "Parameter ", parameters[i].Name, "'s Type ", parameterType, " isn't supported" ) ); + return; + } + } + + int commandIndex = FindCommandIndex( command ); + if( commandIndex < 0 ) + commandIndex = ~commandIndex; + else + { + int commandFirstIndex = commandIndex; + int commandLastIndex = commandIndex; + + while( commandFirstIndex > 0 && caseInsensitiveComparer.Compare( methods[commandFirstIndex - 1].command, command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 ) + commandFirstIndex--; + while( commandLastIndex < methods.Count - 1 && caseInsensitiveComparer.Compare( methods[commandLastIndex + 1].command, command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 ) + commandLastIndex++; + + commandIndex = commandFirstIndex; + for( int i = commandFirstIndex; i <= commandLastIndex; i++ ) + { + int parameterCountDiff = methods[i].parameterTypes.Length - parameterTypes.Length; + if( parameterCountDiff <= 0 ) + { + // We are sorting the commands in 2 steps: + // 1: Sorting by their 'command' names which is handled by FindCommandIndex + // 2: Sorting by their parameter counts which is handled here (parameterCountDiff <= 0) + commandIndex = i + 1; + + // Check if this command has been registered before and if it is, overwrite that command + if( parameterCountDiff == 0 ) + { + int j = 0; + while( j < parameterTypes.Length && parameterTypes[j] == methods[i].parameterTypes[j] ) + j++; + + if( j >= parameterTypes.Length ) + { + commandIndex = i; + commandLastIndex--; + methods.RemoveAt( i-- ); + + continue; + } + } + } + } + } + + // Create the command + StringBuilder methodSignature = new StringBuilder( 256 ); + string[] parameterSignatures = new string[parameterTypes.Length]; + + methodSignature.Append( command ).Append( ": " ); + + if( !string.IsNullOrEmpty( description ) ) + methodSignature.Append( description ).Append( " -> " ); + + methodSignature.Append( method.DeclaringType.ToString() ).Append( "." ).Append( method.Name ).Append( "(" ); + for( int i = 0; i < parameterTypes.Length; i++ ) + { + int parameterSignatureStartIndex = methodSignature.Length; + + methodSignature.Append( GetTypeReadableName( parameterTypes[i] ) ).Append( " " ).Append( ( parameterNames != null && i < parameterNames.Length && !string.IsNullOrEmpty( parameterNames[i] ) ) ? parameterNames[i] : parameters[i].Name ); + + if( i < parameterTypes.Length - 1 ) + methodSignature.Append( ", " ); + + parameterSignatures[i] = methodSignature.ToString( parameterSignatureStartIndex, methodSignature.Length - parameterSignatureStartIndex ); + } + + methodSignature.Append( ")" ); + + Type returnType = method.ReturnType; + if( returnType != typeof( void ) ) + methodSignature.Append( " : " ).Append( GetTypeReadableName( returnType ) ); + + methods.Insert( commandIndex, new ConsoleMethodInfo( method, parameterTypes, instance, command, methodSignature.ToString(), parameterSignatures ) ); + } + + // Remove all commands with the matching command name from the console + public static void RemoveCommand( string command ) + { + if( !string.IsNullOrEmpty( command ) ) + { + for( int i = methods.Count - 1; i >= 0; i-- ) + { + if( caseInsensitiveComparer.Compare( methods[i].command, command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 ) + methods.RemoveAt( i ); + } + } + } + + // Remove all commands with the matching method from the console + public static void RemoveCommand( Action method ) { RemoveCommand( method.Method ); } + public static void RemoveCommand( Action method ) { RemoveCommand( method.Method ); } + public static void RemoveCommand( Func method ) { RemoveCommand( method.Method ); } + public static void RemoveCommand( Action method ) { RemoveCommand( method.Method ); } + public static void RemoveCommand( Func method ) { RemoveCommand( method.Method ); } + public static void RemoveCommand( Action method ) { RemoveCommand( method.Method ); } + public static void RemoveCommand( Func method ) { RemoveCommand( method.Method ); } + public static void RemoveCommand( Action method ) { RemoveCommand( method.Method ); } + public static void RemoveCommand( Func method ) { RemoveCommand( method.Method ); } + public static void RemoveCommand( Func method ) { RemoveCommand( method.Method ); } + public static void RemoveCommand( Delegate method ) { RemoveCommand( method.Method ); } + + public static void RemoveCommand( MethodInfo method ) + { + if( method != null ) + { + for( int i = methods.Count - 1; i >= 0; i-- ) + { + if( methods[i].method == method ) + methods.RemoveAt( i ); + } + } + } + + // Returns the first command that starts with the entered argument + public static string GetAutoCompleteCommand( string commandStart ) + { + int commandIndex = FindCommandIndex( commandStart ); + if( commandIndex < 0 ) + commandIndex = ~commandIndex; + + string result = null; + for( int i = commandIndex; i >= 0 && caseInsensitiveComparer.IsPrefix( methods[i].command, commandStart, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ); i-- ) + result = methods[i].command; + + if( result == null ) + { + for( int i = commandIndex + 1; i < methods.Count && caseInsensitiveComparer.IsPrefix( methods[i].command, commandStart, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ); i++ ) + result = methods[i].command; + } + + return result; + } + + // Parse the command and try to execute it + public static void ExecuteCommand( string command ) + { + if( command == null ) + return; + + command = command.Trim(); + + if( command.Length == 0 ) + return; + + // Split the command's arguments + commandArguments.Clear(); + FetchArgumentsFromCommand( command, commandArguments ); + + // Find all matching commands + matchingMethods.Clear(); + bool parameterCountMismatch = false; + int commandIndex = FindCommandIndex( commandArguments[0] ); + if( commandIndex >= 0 ) + { + string _command = commandArguments[0]; + + int commandLastIndex = commandIndex; + while( commandIndex > 0 && caseInsensitiveComparer.Compare( methods[commandIndex - 1].command, _command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 ) + commandIndex--; + while( commandLastIndex < methods.Count - 1 && caseInsensitiveComparer.Compare( methods[commandLastIndex + 1].command, _command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 ) + commandLastIndex++; + + while( commandIndex <= commandLastIndex ) + { + if( !methods[commandIndex].IsValid() ) + { + methods.RemoveAt( commandIndex ); + commandLastIndex--; + } + else + { + // Check if number of parameters match + if( methods[commandIndex].parameterTypes.Length == commandArguments.Count - 1 ) + matchingMethods.Add( methods[commandIndex] ); + else + parameterCountMismatch = true; + + commandIndex++; + } + } + } + + if( matchingMethods.Count == 0 ) + { + if( parameterCountMismatch ) + { + string _command = commandArguments[0]; + int commandsLength = _command.Length + 75; + for( int i = 0; i < methods.Count; i++ ) + { + if( caseInsensitiveComparer.Compare( methods[i].command, _command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 ) + commandsLength += methods[i].signature.Length + 3; + } + + StringBuilder stringBuilder = new StringBuilder( commandsLength ); + stringBuilder.Append( "ERROR: " ).Append( _command ).Append( " doesn't take " ).Append( commandArguments.Count - 1 ).Append( " parameter(s). Available command(s):" ); + + for( int i = 0; i < methods.Count; i++ ) + { + if( caseInsensitiveComparer.Compare( methods[i].command, _command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 ) + stringBuilder.Append( "\n- " ).Append( methods[i].signature ); + } + + Debug.LogWarning( stringBuilder.ToString() ); + + // The log that lists method signature(s) for this command should automatically be expanded for better UX + if( DebugLogManager.Instance ) + { + DebugLogManager.Instance.ExpandLatestPendingLog(); + DebugLogManager.Instance.StripStackTraceFromLatestPendingLog(); + } + } + else + Debug.LogWarning( "ERROR: can't find command: " + commandArguments[0] ); + + return; + } + + ConsoleMethodInfo methodToExecute = null; + object[] parameters = new object[commandArguments.Count - 1]; + string errorMessage = null; + for( int i = 0; i < matchingMethods.Count && methodToExecute == null; i++ ) + { + ConsoleMethodInfo methodInfo = matchingMethods[i]; + + // Parse the parameters into objects + bool success = true; + for( int j = 0; j < methodInfo.parameterTypes.Length && success; j++ ) + { + try + { + string argument = commandArguments[j + 1]; + Type parameterType = methodInfo.parameterTypes[j]; + + object val; + if( ParseArgument( argument, parameterType, out val ) ) + parameters[j] = val; + else + { + success = false; + errorMessage = string.Concat( "ERROR: couldn't parse ", argument, " to ", GetTypeReadableName( parameterType ) ); + } + } + catch( Exception e ) + { + success = false; + errorMessage = "ERROR: " + e.ToString(); + } + } + + if( success ) + methodToExecute = methodInfo; + } + + if( methodToExecute == null ) + Debug.LogWarning( !string.IsNullOrEmpty( errorMessage ) ? errorMessage : "ERROR: something went wrong" ); + else + { + Debug.Log( "Executing command: " + commandArguments[0] ); + + // Execute the method associated with the command + object result = methodToExecute.method.Invoke( methodToExecute.instance, parameters ); + if( methodToExecute.method.ReturnType != typeof( void ) ) + { + // Print the returned value to the console + if( result == null || result.Equals( null ) ) + Debug.Log( "Value returned: null" ); + else + Debug.Log( "Value returned: " + result.ToString() ); + } + } + } + + public static void FetchArgumentsFromCommand( string command, List commandArguments ) + { + for( int i = 0; i < command.Length; i++ ) + { + if( char.IsWhiteSpace( command[i] ) ) + continue; + + int delimiterIndex = IndexOfDelimiterGroup( command[i] ); + if( delimiterIndex >= 0 ) + { + int endIndex = IndexOfDelimiterGroupEnd( command, delimiterIndex, i + 1 ); + commandArguments.Add( command.Substring( i + 1, endIndex - i - 1 ) ); + i = ( endIndex < command.Length - 1 && command[endIndex + 1] == ',' ) ? endIndex + 1 : endIndex; + } + else + { + int endIndex = IndexOfChar( command, ' ', i + 1 ); + commandArguments.Add( command.Substring( i, command[endIndex - 1] == ',' ? endIndex - 1 - i : endIndex - i ) ); + i = endIndex; + } + } + } + + // Finds all commands that have a matching signature with command + // - caretIndexIncrements: indices inside "string command" that separate two arguments in the command. This is used to + // figure out which argument the caret is standing on + // - commandName: command's name (first argument) + internal static void GetCommandSuggestions( string command, List matchingCommands, List caretIndexIncrements, ref string commandName, out int numberOfParameters ) + { + bool commandNameCalculated = false; + bool commandNameFullyTyped = false; + numberOfParameters = -1; + for( int i = 0; i < command.Length; i++ ) + { + if( char.IsWhiteSpace( command[i] ) ) + continue; + + int delimiterIndex = IndexOfDelimiterGroup( command[i] ); + if( delimiterIndex >= 0 ) + { + int endIndex = IndexOfDelimiterGroupEnd( command, delimiterIndex, i + 1 ); + if( !commandNameCalculated ) + { + commandNameCalculated = true; + commandNameFullyTyped = command.Length > endIndex; + + int commandNameLength = endIndex - i - 1; + if( commandName == null || commandNameLength == 0 || commandName.Length != commandNameLength || caseInsensitiveComparer.IndexOf( command, commandName, i + 1, commandNameLength, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) != i + 1 ) + commandName = command.Substring( i + 1, commandNameLength ); + } + + i = ( endIndex < command.Length - 1 && command[endIndex + 1] == ',' ) ? endIndex + 1 : endIndex; + caretIndexIncrements.Add( i + 1 ); + } + else + { + int endIndex = IndexOfChar( command, ' ', i + 1 ); + if( !commandNameCalculated ) + { + commandNameCalculated = true; + commandNameFullyTyped = command.Length > endIndex; + + int commandNameLength = command[endIndex - 1] == ',' ? endIndex - 1 - i : endIndex - i; + if( commandName == null || commandNameLength == 0 || commandName.Length != commandNameLength || caseInsensitiveComparer.IndexOf( command, commandName, i, commandNameLength, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) != i ) + commandName = command.Substring( i, commandNameLength ); + } + + i = endIndex; + caretIndexIncrements.Add( i ); + } + + numberOfParameters++; + } + + if( !commandNameCalculated ) + commandName = string.Empty; + + if( !string.IsNullOrEmpty( commandName ) ) + { + int commandIndex = FindCommandIndex( commandName ); + if( commandIndex < 0 ) + commandIndex = ~commandIndex; + + int commandLastIndex = commandIndex; + if( !commandNameFullyTyped ) + { + // Match all commands that start with commandName + if( commandIndex < methods.Count && caseInsensitiveComparer.IsPrefix( methods[commandIndex].command, commandName, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) ) + { + while( commandIndex > 0 && caseInsensitiveComparer.IsPrefix( methods[commandIndex - 1].command, commandName, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) ) + commandIndex--; + while( commandLastIndex < methods.Count - 1 && caseInsensitiveComparer.IsPrefix( methods[commandLastIndex + 1].command, commandName, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) ) + commandLastIndex++; + } + else + commandLastIndex = -1; + } + else + { + // Match only the commands that are equal to commandName + if( commandIndex < methods.Count && caseInsensitiveComparer.Compare( methods[commandIndex].command, commandName, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 ) + { + while( commandIndex > 0 && caseInsensitiveComparer.Compare( methods[commandIndex - 1].command, commandName, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 ) + commandIndex--; + while( commandLastIndex < methods.Count - 1 && caseInsensitiveComparer.Compare( methods[commandLastIndex + 1].command, commandName, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 ) + commandLastIndex++; + } + else + commandLastIndex = -1; + } + + for( ; commandIndex <= commandLastIndex; commandIndex++ ) + { + if( methods[commandIndex].parameterTypes.Length >= numberOfParameters ) + matchingCommands.Add( methods[commandIndex] ); + } + } + } + + // Find the index of the delimiter group that 'c' belongs to + private static int IndexOfDelimiterGroup( char c ) + { + for( int i = 0; i < inputDelimiters.Length; i++ ) + { + if( c == inputDelimiters[i][0] ) + return i; + } + + return -1; + } + + private static int IndexOfDelimiterGroupEnd( string command, int delimiterIndex, int startIndex ) + { + char startChar = inputDelimiters[delimiterIndex][0]; + char endChar = inputDelimiters[delimiterIndex][1]; + + // Check delimiter's depth for array support (e.g. [[1 2] [3 4]] for Vector2 array) + int depth = 1; + + for( int i = startIndex; i < command.Length; i++ ) + { + char c = command[i]; + if( c == endChar && --depth <= 0 ) + return i; + else if( c == startChar ) + depth++; + } + + return command.Length; + } + + // Find the index of char in the string, or return the length of string instead of -1 + private static int IndexOfChar( string command, char c, int startIndex ) + { + int result = command.IndexOf( c, startIndex ); + if( result < 0 ) + result = command.Length; + + return result; + } + + // Find command's index in the list of registered commands using binary search + private static int FindCommandIndex( string command ) + { + int min = 0; + int max = methods.Count - 1; + while( min <= max ) + { + int mid = ( min + max ) / 2; + int comparison = caseInsensitiveComparer.Compare( command, methods[mid].command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ); + if( comparison == 0 ) + return mid; + else if( comparison < 0 ) + max = mid - 1; + else + min = mid + 1; + } + + return ~min; + } + + public static bool IsSupportedArrayType( Type type ) + { + if( type.IsArray ) + { + if( type.GetArrayRank() != 1 ) + return false; + + type = type.GetElementType(); + } + else if( type.IsGenericType ) + { + if( type.GetGenericTypeDefinition() != typeof( List<> ) ) + return false; + + type = type.GetGenericArguments()[0]; + } + else + return false; + + return parseFunctions.ContainsKey( type ) || typeof( Component ).IsAssignableFrom( type ) || type.IsEnum; + } + + public static string GetTypeReadableName( Type type ) + { + string result; + if( typeReadableNames.TryGetValue( type, out result ) ) + return result; + + if( IsSupportedArrayType( type ) ) + { + Type elementType = type.IsArray ? type.GetElementType() : type.GetGenericArguments()[0]; + if( typeReadableNames.TryGetValue( elementType, out result ) ) + return result + "[]"; + else + return elementType.Name + "[]"; + } + + return type.Name; + } + + public static bool ParseArgument( string input, Type argumentType, out object output ) + { + ParseFunction parseFunction; + if( parseFunctions.TryGetValue( argumentType, out parseFunction ) ) + return parseFunction( input, out output ); + else if( typeof( Component ).IsAssignableFrom( argumentType ) ) + return ParseComponent( input, argumentType, out output ); + else if( argumentType.IsEnum ) + return ParseEnum( input, argumentType, out output ); + else if( IsSupportedArrayType( argumentType ) ) + return ParseArray( input, argumentType, out output ); + else + { + output = null; + return false; + } + } + + public static bool ParseString( string input, out object output ) + { + output = input; + return true; + } + + public static bool ParseBool( string input, out object output ) + { + if( input == "1" || input.ToLowerInvariant() == "true" ) + { + output = true; + return true; + } + + if( input == "0" || input.ToLowerInvariant() == "false" ) + { + output = false; + return true; + } + + output = false; + return false; + } + + public static bool ParseInt( string input, out object output ) + { + int value; + bool result = int.TryParse( input, out value ); + + output = value; + return result; + } + + public static bool ParseUInt( string input, out object output ) + { + uint value; + bool result = uint.TryParse( input, out value ); + + output = value; + return result; + } + + public static bool ParseLong( string input, out object output ) + { + long value; + bool result = long.TryParse( !input.EndsWith( "L", StringComparison.OrdinalIgnoreCase ) ? input : input.Substring( 0, input.Length - 1 ), out value ); + + output = value; + return result; + } + + public static bool ParseULong( string input, out object output ) + { + ulong value; + bool result = ulong.TryParse( !input.EndsWith( "L", StringComparison.OrdinalIgnoreCase ) ? input : input.Substring( 0, input.Length - 1 ), out value ); + + output = value; + return result; + } + + public static bool ParseByte( string input, out object output ) + { + byte value; + bool result = byte.TryParse( input, out value ); + + output = value; + return result; + } + + public static bool ParseSByte( string input, out object output ) + { + sbyte value; + bool result = sbyte.TryParse( input, out value ); + + output = value; + return result; + } + + public static bool ParseShort( string input, out object output ) + { + short value; + bool result = short.TryParse( input, out value ); + + output = value; + return result; + } + + public static bool ParseUShort( string input, out object output ) + { + ushort value; + bool result = ushort.TryParse( input, out value ); + + output = value; + return result; + } + + public static bool ParseChar( string input, out object output ) + { + char value; + bool result = char.TryParse( input, out value ); + + output = value; + return result; + } + + public static bool ParseFloat( string input, out object output ) + { + float value; + bool result = float.TryParse( !input.EndsWith( "f", StringComparison.OrdinalIgnoreCase ) ? input : input.Substring( 0, input.Length - 1 ), out value ); + + output = value; + return result; + } + + public static bool ParseDouble( string input, out object output ) + { + double value; + bool result = double.TryParse( !input.EndsWith( "f", StringComparison.OrdinalIgnoreCase ) ? input : input.Substring( 0, input.Length - 1 ), out value ); + + output = value; + return result; + } + + public static bool ParseDecimal( string input, out object output ) + { + decimal value; + bool result = decimal.TryParse( !input.EndsWith( "f", StringComparison.OrdinalIgnoreCase ) ? input : input.Substring( 0, input.Length - 1 ), out value ); + + output = value; + return result; + } + + public static bool ParseVector2( string input, out object output ) + { + return ParseVector( input, typeof( Vector2 ), out output ); + } + + public static bool ParseVector3( string input, out object output ) + { + return ParseVector( input, typeof( Vector3 ), out output ); + } + + public static bool ParseVector4( string input, out object output ) + { + return ParseVector( input, typeof( Vector4 ), out output ); + } + + public static bool ParseQuaternion( string input, out object output ) + { + return ParseVector( input, typeof( Quaternion ), out output ); + } + + public static bool ParseColor( string input, out object output ) + { + return ParseVector( input, typeof( Color ), out output ); + } + + public static bool ParseColor32( string input, out object output ) + { + return ParseVector( input, typeof( Color32 ), out output ); + } + + public static bool ParseRect( string input, out object output ) + { + return ParseVector( input, typeof( Rect ), out output ); + } + + public static bool ParseRectOffset( string input, out object output ) + { + return ParseVector( input, typeof( RectOffset ), out output ); + } + + public static bool ParseBounds( string input, out object output ) + { + return ParseVector( input, typeof( Bounds ), out output ); + } + +#if UNITY_2017_2_OR_NEWER + public static bool ParseVector2Int( string input, out object output ) + { + return ParseVector( input, typeof( Vector2Int ), out output ); + } + + public static bool ParseVector3Int( string input, out object output ) + { + return ParseVector( input, typeof( Vector3Int ), out output ); + } + + public static bool ParseRectInt( string input, out object output ) + { + return ParseVector( input, typeof( RectInt ), out output ); + } + + public static bool ParseBoundsInt( string input, out object output ) + { + return ParseVector( input, typeof( BoundsInt ), out output ); + } +#endif + + public static bool ParseGameObject( string input, out object output ) + { + output = input == "null" ? null : GameObject.Find( input ); + return true; + } + + public static bool ParseComponent( string input, Type componentType, out object output ) + { + GameObject gameObject = input == "null" ? null : GameObject.Find( input ); + output = gameObject ? gameObject.GetComponent( componentType ) : null; + return true; + } + + public static bool ParseEnum( string input, Type enumType, out object output ) + { + const int NONE = 0, OR = 1, AND = 2; + + int outputInt = 0; + int operation = 0; // 0: nothing, 1: OR with outputInt, 2: AND with outputInt + for( int i = 0; i < input.Length; i++ ) + { + string enumStr; + int orIndex = input.IndexOf( '|', i ); + int andIndex = input.IndexOf( '&', i ); + if( orIndex < 0 ) + enumStr = input.Substring( i, ( andIndex < 0 ? input.Length : andIndex ) - i ).Trim(); + else + enumStr = input.Substring( i, ( andIndex < 0 ? orIndex : Mathf.Min( andIndex, orIndex ) ) - i ).Trim(); + + int value; + if( !int.TryParse( enumStr, out value ) ) + { + if( Enum.IsDefined( enumType, enumStr ) ) + value = Convert.ToInt32( Enum.Parse( enumType, enumStr ) ); + else + { + output = null; + return false; + } + } + + if( operation == NONE ) + outputInt = value; + else if( operation == OR ) + outputInt |= value; + else + outputInt &= value; + + if( orIndex >= 0 ) + { + if( andIndex > orIndex ) + { + operation = AND; + i = andIndex; + } + else + { + operation = OR; + i = orIndex; + } + } + else if( andIndex >= 0 ) + { + operation = AND; + i = andIndex; + } + else + i = input.Length; + } + + output = Enum.ToObject( enumType, outputInt ); + return true; + } + + public static bool ParseArray( string input, Type arrayType, out object output ) + { + List valuesToParse = new List( 2 ); + FetchArgumentsFromCommand( input, valuesToParse ); + + IList result = (IList) Activator.CreateInstance( arrayType, new object[1] { valuesToParse.Count } ); + output = result; + + if( arrayType.IsArray ) + { + Type elementType = arrayType.GetElementType(); + for( int i = 0; i < valuesToParse.Count; i++ ) + { + object obj; + if( !ParseArgument( valuesToParse[i], elementType, out obj ) ) + return false; + + result[i] = obj; + } + } + else + { + Type elementType = arrayType.GetGenericArguments()[0]; + for( int i = 0; i < valuesToParse.Count; i++ ) + { + object obj; + if( !ParseArgument( valuesToParse[i], elementType, out obj ) ) + return false; + + result.Add( obj ); + } + } + + return true; + } + + // Create a vector of specified type (fill the blank slots with 0 or ignore unnecessary slots) + private static bool ParseVector( string input, Type vectorType, out object output ) + { + List tokens = new List( input.Replace( ',', ' ' ).Trim().Split( ' ' ) ); + for( int i = tokens.Count - 1; i >= 0; i-- ) + { + tokens[i] = tokens[i].Trim(); + if( tokens[i].Length == 0 ) + tokens.RemoveAt( i ); + } + + float[] tokenValues = new float[tokens.Count]; + for( int i = 0; i < tokens.Count; i++ ) + { + object val; + if( !ParseFloat( tokens[i], out val ) ) + { + if( vectorType == typeof( Vector3 ) ) + output = Vector3.zero; + else if( vectorType == typeof( Vector2 ) ) + output = Vector2.zero; + else + output = Vector4.zero; + + return false; + } + + tokenValues[i] = (float) val; + } + + if( vectorType == typeof( Vector3 ) ) + { + Vector3 result = Vector3.zero; + + for( int i = 0; i < tokenValues.Length && i < 3; i++ ) + result[i] = tokenValues[i]; + + output = result; + } + else if( vectorType == typeof( Vector2 ) ) + { + Vector2 result = Vector2.zero; + + for( int i = 0; i < tokenValues.Length && i < 2; i++ ) + result[i] = tokenValues[i]; + + output = result; + } + else if( vectorType == typeof( Vector4 ) ) + { + Vector4 result = Vector4.zero; + + for( int i = 0; i < tokenValues.Length && i < 4; i++ ) + result[i] = tokenValues[i]; + + output = result; + } + else if( vectorType == typeof( Quaternion ) ) + { + Quaternion result = Quaternion.identity; + + for( int i = 0; i < tokenValues.Length && i < 4; i++ ) + result[i] = tokenValues[i]; + + output = result; + } + else if( vectorType == typeof( Color ) ) + { + Color result = Color.black; + + for( int i = 0; i < tokenValues.Length && i < 4; i++ ) + result[i] = tokenValues[i]; + + output = result; + } + else if( vectorType == typeof( Color32 ) ) + { + Color32 result = new Color32( 0, 0, 0, 255 ); + + if( tokenValues.Length > 0 ) + result.r = (byte) Mathf.RoundToInt( tokenValues[0] ); + if( tokenValues.Length > 1 ) + result.g = (byte) Mathf.RoundToInt( tokenValues[1] ); + if( tokenValues.Length > 2 ) + result.b = (byte) Mathf.RoundToInt( tokenValues[2] ); + if( tokenValues.Length > 3 ) + result.a = (byte) Mathf.RoundToInt( tokenValues[3] ); + + output = result; + } + else if( vectorType == typeof( Rect ) ) + { + Rect result = Rect.zero; + + if( tokenValues.Length > 0 ) + result.x = tokenValues[0]; + if( tokenValues.Length > 1 ) + result.y = tokenValues[1]; + if( tokenValues.Length > 2 ) + result.width = tokenValues[2]; + if( tokenValues.Length > 3 ) + result.height = tokenValues[3]; + + output = result; + } + else if( vectorType == typeof( RectOffset ) ) + { + RectOffset result = new RectOffset(); + + if( tokenValues.Length > 0 ) + result.left = Mathf.RoundToInt( tokenValues[0] ); + if( tokenValues.Length > 1 ) + result.right = Mathf.RoundToInt( tokenValues[1] ); + if( tokenValues.Length > 2 ) + result.top = Mathf.RoundToInt( tokenValues[2] ); + if( tokenValues.Length > 3 ) + result.bottom = Mathf.RoundToInt( tokenValues[3] ); + + output = result; + } + else if( vectorType == typeof( Bounds ) ) + { + Vector3 center = Vector3.zero; + for( int i = 0; i < tokenValues.Length && i < 3; i++ ) + center[i] = tokenValues[i]; + + Vector3 size = Vector3.zero; + for( int i = 3; i < tokenValues.Length && i < 6; i++ ) + size[i - 3] = tokenValues[i]; + + output = new Bounds( center, size ); + } +#if UNITY_2017_2_OR_NEWER + else if( vectorType == typeof( Vector3Int ) ) + { + Vector3Int result = Vector3Int.zero; + + for( int i = 0; i < tokenValues.Length && i < 3; i++ ) + result[i] = Mathf.RoundToInt( tokenValues[i] ); + + output = result; + } + else if( vectorType == typeof( Vector2Int ) ) + { + Vector2Int result = Vector2Int.zero; + + for( int i = 0; i < tokenValues.Length && i < 2; i++ ) + result[i] = Mathf.RoundToInt( tokenValues[i] ); + + output = result; + } + else if( vectorType == typeof( RectInt ) ) + { + RectInt result = new RectInt(); + + if( tokenValues.Length > 0 ) + result.x = Mathf.RoundToInt( tokenValues[0] ); + if( tokenValues.Length > 1 ) + result.y = Mathf.RoundToInt( tokenValues[1] ); + if( tokenValues.Length > 2 ) + result.width = Mathf.RoundToInt( tokenValues[2] ); + if( tokenValues.Length > 3 ) + result.height = Mathf.RoundToInt( tokenValues[3] ); + + output = result; + } + else if( vectorType == typeof( BoundsInt ) ) + { + Vector3Int center = Vector3Int.zero; + for( int i = 0; i < tokenValues.Length && i < 3; i++ ) + center[i] = Mathf.RoundToInt( tokenValues[i] ); + + Vector3Int size = Vector3Int.zero; + for( int i = 3; i < tokenValues.Length && i < 6; i++ ) + size[i - 3] = Mathf.RoundToInt( tokenValues[i] ); + + output = new BoundsInt( center, size ); + } +#endif + else + { + output = null; + return false; + } + + return true; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs.meta new file mode 100644 index 0000000..756bdf7 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d15693a03d0d33b4892c6365a2a97e19 +timeCreated: 1472036503 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs new file mode 100644 index 0000000..cc582c4 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs @@ -0,0 +1,92 @@ +using UnityEngine; + +// Container for a simple debug entry +namespace IngameDebugConsole +{ + public class DebugLogEntry : System.IEquatable + { + private const int HASH_NOT_CALCULATED = -623218; + + public string logString; + public string stackTrace; + + private string completeLog; + + // Sprite to show with this entry + public Sprite logTypeSpriteRepresentation; + + // Collapsed count + public int count; + + private int hashValue; + + public void Initialize( string logString, string stackTrace ) + { + this.logString = logString; + this.stackTrace = stackTrace; + + completeLog = null; + count = 1; + hashValue = HASH_NOT_CALCULATED; + } + + // Check if two entries have the same origin + public bool Equals( DebugLogEntry other ) + { + return this.logString == other.logString && this.stackTrace == other.stackTrace; + } + + // Checks if logString or stackTrace contains the search term + public bool MatchesSearchTerm( string searchTerm ) + { + return ( logString != null && logString.IndexOf( searchTerm, System.StringComparison.OrdinalIgnoreCase ) >= 0 ) || + ( stackTrace != null && stackTrace.IndexOf( searchTerm, System.StringComparison.OrdinalIgnoreCase ) >= 0 ); + } + + // Return a string containing complete information about this debug entry + public override string ToString() + { + if( completeLog == null ) + completeLog = string.Concat( logString, "\n", stackTrace ); + + return completeLog; + } + + // Credit: https://stackoverflow.com/a/19250516/2373034 + public override int GetHashCode() + { + if( hashValue == HASH_NOT_CALCULATED ) + { + unchecked + { + hashValue = 17; + hashValue = hashValue * 23 + ( logString == null ? 0 : logString.GetHashCode() ); + hashValue = hashValue * 23 + ( stackTrace == null ? 0 : stackTrace.GetHashCode() ); + } + } + + return hashValue; + } + } + + public struct QueuedDebugLogEntry + { + public readonly string logString; + public readonly string stackTrace; + public readonly LogType logType; + + public QueuedDebugLogEntry( string logString, string stackTrace, LogType logType ) + { + this.logString = logString; + this.stackTrace = stackTrace; + this.logType = logType; + } + + // Checks if logString or stackTrace contains the search term + public bool MatchesSearchTerm( string searchTerm ) + { + return ( logString != null && logString.IndexOf( searchTerm, System.StringComparison.OrdinalIgnoreCase ) >= 0 ) || + ( stackTrace != null && stackTrace.IndexOf( searchTerm, System.StringComparison.OrdinalIgnoreCase ) >= 0 ); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs.meta new file mode 100644 index 0000000..3a1dd21 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e7b1a420c564be040bf73b8a377fc2c2 +timeCreated: 1466375168 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogIndexList.cs b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogIndexList.cs new file mode 100644 index 0000000..95bb069 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogIndexList.cs @@ -0,0 +1,35 @@ +namespace IngameDebugConsole +{ + public class DebugLogIndexList + { + private int[] indices; + private int size; + + public int Count { get { return size; } } + public int this[int index] { get { return indices[index]; } } + + public DebugLogIndexList() + { + indices = new int[64]; + size = 0; + } + + public void Add( int index ) + { + if( size == indices.Length ) + System.Array.Resize( ref indices, size * 2 ); + + indices[size++] = index; + } + + public void Clear() + { + size = 0; + } + + public int IndexOf( int index ) + { + return System.Array.IndexOf( indices, index ); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogIndexList.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogIndexList.cs.meta new file mode 100644 index 0000000..5f86ef5 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogIndexList.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 37c6c91e5bfac6f499698c03f593bcbb +timeCreated: 1520627934 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs new file mode 100644 index 0000000..ff1cf6d --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs @@ -0,0 +1,217 @@ +using UnityEngine; +using UnityEngine.UI; +using UnityEngine.EventSystems; +#if UNITY_EDITOR +using UnityEditor; +using System.Text.RegularExpressions; +#endif + +// A UI element to show information about a debug entry +namespace IngameDebugConsole +{ + public class DebugLogItem : MonoBehaviour, IPointerClickHandler + { + #region Platform Specific Elements +#if !UNITY_2018_1_OR_NEWER +#if !UNITY_EDITOR && UNITY_ANDROID + private static AndroidJavaClass m_ajc = null; + private static AndroidJavaClass AJC + { + get + { + if( m_ajc == null ) + m_ajc = new AndroidJavaClass( "com.yasirkula.unity.DebugConsole" ); + + return m_ajc; + } + } + + private static AndroidJavaObject m_context = null; + private static AndroidJavaObject Context + { + get + { + if( m_context == null ) + { + using( AndroidJavaObject unityClass = new AndroidJavaClass( "com.unity3d.player.UnityPlayer" ) ) + { + m_context = unityClass.GetStatic( "currentActivity" ); + } + } + + return m_context; + } + } +#elif !UNITY_EDITOR && UNITY_IOS + [System.Runtime.InteropServices.DllImport( "__Internal" )] + private static extern void _DebugConsole_CopyText( string text ); +#endif +#endif + #endregion + +#pragma warning disable 0649 + // Cached components + [SerializeField] + private RectTransform transformComponent; + public RectTransform Transform { get { return transformComponent; } } + + [SerializeField] + private Image imageComponent; + public Image Image { get { return imageComponent; } } + + [SerializeField] + private CanvasGroup canvasGroupComponent; + public CanvasGroup CanvasGroup { get { return canvasGroupComponent; } } + + [SerializeField] + private Text logText; + [SerializeField] + private Image logTypeImage; + + // Objects related to the collapsed count of the debug entry + [SerializeField] + private GameObject logCountParent; + [SerializeField] + private Text logCountText; + + [SerializeField] + private RectTransform copyLogButton; +#pragma warning restore 0649 + + // Debug entry to show with this log item + private DebugLogEntry logEntry; + + // Index of the entry in the list of entries + private int entryIndex; + public int Index { get { return entryIndex; } } + + private Vector2 logTextOriginalPosition; + private Vector2 logTextOriginalSize; + private float copyLogButtonHeight; + + private DebugLogRecycledListView manager; + + public void Initialize( DebugLogRecycledListView manager ) + { + this.manager = manager; + + logTextOriginalPosition = logText.rectTransform.anchoredPosition; + logTextOriginalSize = logText.rectTransform.sizeDelta; + copyLogButtonHeight = copyLogButton.anchoredPosition.y + copyLogButton.sizeDelta.y + 2f; // 2f: space between text and button + } + + public void SetContent( DebugLogEntry logEntry, int entryIndex, bool isExpanded ) + { + this.logEntry = logEntry; + this.entryIndex = entryIndex; + + Vector2 size = transformComponent.sizeDelta; + if( isExpanded ) + { + logText.horizontalOverflow = HorizontalWrapMode.Wrap; + size.y = manager.SelectedItemHeight; + + if( !copyLogButton.gameObject.activeSelf ) + { + copyLogButton.gameObject.SetActive( true ); + + logText.rectTransform.anchoredPosition = new Vector2( logTextOriginalPosition.x, logTextOriginalPosition.y + copyLogButtonHeight * 0.5f ); + logText.rectTransform.sizeDelta = logTextOriginalSize - new Vector2( 0f, copyLogButtonHeight ); + } + } + else + { + logText.horizontalOverflow = HorizontalWrapMode.Overflow; + size.y = manager.ItemHeight; + + if( copyLogButton.gameObject.activeSelf ) + { + copyLogButton.gameObject.SetActive( false ); + + logText.rectTransform.anchoredPosition = logTextOriginalPosition; + logText.rectTransform.sizeDelta = logTextOriginalSize; + } + } + transformComponent.sizeDelta = size; + + logText.text = isExpanded ? logEntry.ToString() : logEntry.logString; + logTypeImage.sprite = logEntry.logTypeSpriteRepresentation; + } + + // Show the collapsed count of the debug entry + public void ShowCount() + { + logCountText.text = logEntry.count.ToString(); + + if( !logCountParent.activeSelf ) + logCountParent.SetActive( true ); + } + + // Hide the collapsed count of the debug entry + public void HideCount() + { + if( logCountParent.activeSelf ) + logCountParent.SetActive( false ); + } + + // This log item is clicked, show the debug entry's stack trace + public void OnPointerClick( PointerEventData eventData ) + { +#if UNITY_EDITOR + if( eventData.button == PointerEventData.InputButton.Right ) + { + Match regex = Regex.Match( logEntry.stackTrace, @"\(at .*\.cs:[0-9]+\)$", RegexOptions.Multiline ); + if( regex.Success ) + { + string line = logEntry.stackTrace.Substring( regex.Index + 4, regex.Length - 5 ); + int lineSeparator = line.IndexOf( ':' ); + MonoScript script = AssetDatabase.LoadAssetAtPath( line.Substring( 0, lineSeparator ) ); + if( script != null ) + AssetDatabase.OpenAsset( script, int.Parse( line.Substring( lineSeparator + 1 ) ) ); + } + } + else + manager.OnLogItemClicked( this ); +#else + manager.OnLogItemClicked( this ); +#endif + } + + public void CopyLog() + { + string log = logEntry.ToString(); + if( string.IsNullOrEmpty( log ) ) + return; + +#if UNITY_EDITOR || UNITY_2018_1_OR_NEWER || ( !UNITY_ANDROID && !UNITY_IOS ) + GUIUtility.systemCopyBuffer = log; +#elif UNITY_ANDROID + AJC.CallStatic( "CopyText", Context, log ); +#elif UNITY_IOS + _DebugConsole_CopyText( log ); +#endif + } + + public float CalculateExpandedHeight( string content ) + { + string text = logText.text; + HorizontalWrapMode wrapMode = logText.horizontalOverflow; + + logText.text = content; + logText.horizontalOverflow = HorizontalWrapMode.Wrap; + + float result = logText.preferredHeight + copyLogButtonHeight; + + logText.text = text; + logText.horizontalOverflow = wrapMode; + + return Mathf.Max( manager.ItemHeight, result ); + } + + // Return a string containing complete information about the debug entry + public override string ToString() + { + return logEntry.ToString(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs.meta new file mode 100644 index 0000000..15a0f84 --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d2ea291be9de70a4abfec595203c96c1 +timeCreated: 1465919949 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogManager.cs b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogManager.cs new file mode 100644 index 0000000..d17993a --- /dev/null +++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogManager.cs @@ -0,0 +1,1318 @@ +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; +using UnityEngine; +using UnityEngine.UI; +using UnityEngine.EventSystems; + +// Receives debug entries and custom events (e.g. Clear, Collapse, Filter by Type) +// and notifies the recycled list view of changes to the list of debug entries +// +// - Vocabulary - +// Debug/Log entry: a Debug.Log/LogError/LogWarning/LogException/LogAssertion request made by +// the client and intercepted by this manager object +// Debug/Log item: a visual (uGUI) representation of a debug entry +// +// There can be a lot of debug entries in the system but there will only be a handful of log items +// to show their properties on screen (these log items are recycled as the list is scrolled) + +// An enum to represent filtered log types +namespace IngameDebugConsole +{ + public enum DebugLogFilter + { + None = 0, + Info = 1, + Warning = 2, + Error = 4, + All = 7 + } + + public class DebugLogManager : MonoBehaviour + { + public static DebugLogManager Instance { get; private set; } + +#pragma warning disable 0649 + [Header( "Properties" )] + [SerializeField] + [HideInInspector] + [Tooltip( "If enabled, console window will persist between scenes (i.e. not be destroyed when scene changes)" )] + private bool singleton = true; + + [SerializeField] + [HideInInspector] + [Tooltip( "Minimum height of the console window" )] + private float minimumHeight = 200f; + + [SerializeField] + [HideInInspector] + [Tooltip( "If disabled, no popup will be shown when the console window is hidden" )] + private bool enablePopup = true; + + [SerializeField] + [HideInInspector] + [Tooltip( "If enabled, console will be initialized as a popup" )] + private bool startInPopupMode = true; + + [SerializeField] + [HideInInspector] + [Tooltip( "If enabled, console window will initially be invisible" )] + private bool startMinimized = false; + + [SerializeField] + [HideInInspector] + [Tooltip( "If enabled, pressing the Toggle Key will show/hide (i.e. toggle) the console window at runtime" )] + private bool toggleWithKey = false; + + [SerializeField] + [HideInInspector] + private KeyCode toggleKey = KeyCode.BackQuote; + + [SerializeField] + [HideInInspector] + [Tooltip( "If enabled, the console window will have a searchbar" )] + private bool enableSearchbar = true; + + [SerializeField] + [HideInInspector] + [Tooltip( "Width of the canvas determines whether the searchbar will be located inside the menu bar or underneath the menu bar. This way, the menu bar doesn't get too crowded on narrow screens. This value determines the minimum width of the canvas for the searchbar to appear inside the menu bar" )] + private float topSearchbarMinWidth = 360f; + + [SerializeField] + [HideInInspector] + [Tooltip( "If enabled, the command input field at the bottom of the console window will automatically be cleared after entering a command" )] + private bool clearCommandAfterExecution = true; + + [SerializeField] + [HideInInspector] + [Tooltip( "Console keeps track of the previously entered commands. This value determines the capacity of the command history (you can scroll through the history via up and down arrow keys while the command input field is focused)" )] + private int commandHistorySize = 15; + + [SerializeField] + [HideInInspector] + [Tooltip( "If enabled, while typing a command, all of the matching commands' signatures will be displayed in a popup" )] + private bool showCommandSuggestions = true; + + [SerializeField] + [HideInInspector] + [Tooltip( "If enabled, on Android platform, logcat entries of the application will also be logged to the console with the prefix \"LOGCAT: \". This may come in handy especially if you want to access the native logs of your Android plugins (like Admob)" )] + private bool receiveLogcatLogsInAndroid = false; + +#pragma warning disable 0414 + [SerializeField] + [HideInInspector] + [Tooltip( "Native logs will be filtered using these arguments. If left blank, all native logs of the application will be logged to the console. But if you want to e.g. see Admob's logs only, you can enter \"-s Ads\" (without quotes) here" )] + private string logcatArguments; +#pragma warning restore 0414 + + [SerializeField] + [Tooltip( "If enabled, on Android and iOS devices with notch screens, the console window will be repositioned so that the cutout(s) don't obscure it" )] + private bool avoidScreenCutout = true; + + [SerializeField] + [Tooltip( "If a log is longer than this limit, it will be truncated. This helps avoid reaching Unity's 65000 vertex limit for UI canvases" )] + private int maxLogLength = 10000; + +#if UNITY_EDITOR || UNITY_STANDALONE + [SerializeField] + [Tooltip( "If enabled, on standalone platforms, command input field will automatically be focused (start receiving keyboard input) after opening the console window" )] + private bool autoFocusOnCommandInputField = true; +#endif + + [Header( "Visuals" )] + [SerializeField] + private DebugLogItem logItemPrefab; + + [SerializeField] + private Text commandSuggestionPrefab; + + // Visuals for different log types + [SerializeField] + private Sprite infoLog; + [SerializeField] + private Sprite warningLog; + [SerializeField] + private Sprite errorLog; + + private Dictionary logSpriteRepresentations; + + [SerializeField] + private Color collapseButtonNormalColor; + [SerializeField] + private Color collapseButtonSelectedColor; + + [SerializeField] + private Color filterButtonsNormalColor; + [SerializeField] + private Color filterButtonsSelectedColor; + + [SerializeField] + private string commandSuggestionHighlightStart = ""; + [SerializeField] + private string commandSuggestionHighlightEnd = ""; + + [Header( "Internal References" )] + [SerializeField] + private RectTransform logWindowTR; + + private RectTransform canvasTR; + + [SerializeField] + private RectTransform logItemsContainer; + + [SerializeField] + private RectTransform commandSuggestionsContainer; + + [SerializeField] + private InputField commandInputField; + + [SerializeField] + private Button hideButton; + + [SerializeField] + private Button clearButton; + + [SerializeField] + private Image collapseButton; + + [SerializeField] + private Image filterInfoButton; + [SerializeField] + private Image filterWarningButton; + [SerializeField] + private Image filterErrorButton; + + [SerializeField] + private Text infoEntryCountText; + [SerializeField] + private Text warningEntryCountText; + [SerializeField] + private Text errorEntryCountText; + + [SerializeField] + private RectTransform searchbar; + [SerializeField] + private RectTransform searchbarSlotTop; + [SerializeField] + private RectTransform searchbarSlotBottom; + + [SerializeField] + private GameObject snapToBottomButton; + + // Canvas group to modify visibility of the log window + [SerializeField] + private CanvasGroup logWindowCanvasGroup; + + [SerializeField] + private DebugLogPopup popupManager; + + [SerializeField] + private ScrollRect logItemsScrollRect; + private RectTransform logItemsScrollRectTR; + private Vector2 logItemsScrollRectOriginalSize; + + // Recycled list view to handle the log items efficiently + [SerializeField] + private DebugLogRecycledListView recycledListView; +#pragma warning restore 0649 + + private bool isLogWindowVisible = true; + public bool IsLogWindowVisible { get { return isLogWindowVisible; } } + + public bool PopupEnabled + { + get { return popupManager.gameObject.activeSelf; } + set { popupManager.gameObject.SetActive( value ); } + } + + private bool screenDimensionsChanged = true; + + // Number of entries filtered by their types + private int infoEntryCount = 0, warningEntryCount = 0, errorEntryCount = 0; + + // Number of new entries received this frame + private int newInfoEntryCount = 0, newWarningEntryCount = 0, newErrorEntryCount = 0; + + // Filters to apply to the list of debug entries to show + private bool isCollapseOn = false; + private DebugLogFilter logFilter = DebugLogFilter.All; + + // Search filter + private string searchTerm; + private bool isInSearchMode; + + // If the last log item is completely visible (scrollbar is at the bottom), + // scrollbar will remain at the bottom when new debug entries are received + private bool snapToBottom = true; + + // List of unique debug entries (duplicates of entries are not kept) + private List collapsedLogEntries; + + // Dictionary to quickly find if a log already exists in collapsedLogEntries + private Dictionary collapsedLogEntriesMap; + + // The order the collapsedLogEntries are received + // (duplicate entries have the same index (value)) + private DebugLogIndexList uncollapsedLogEntriesIndices; + + // Filtered list of debug entries to show + private DebugLogIndexList indicesOfListEntriesToShow; + + // The log entry that must be focused this frame + private int indexOfLogEntryToSelectAndFocus = -1; + + // Whether or not logs list view should be updated this frame + private bool shouldUpdateRecycledListView = false; + + // Logs that should be registered in Update-loop + private DynamicCircularBuffer queuedLogEntries; + private object logEntriesLock; + private int pendingLogToAutoExpand; + + // Command suggestions that match the currently entered command + private List commandSuggestionInstances; + private int visibleCommandSuggestionInstances = 0; + private List matchingCommandSuggestions; + private List commandCaretIndexIncrements; + private StringBuilder commandSuggestionsStringBuilder; + private string commandInputFieldPrevCommand; + private string commandInputFieldPrevCommandName; + private int commandInputFieldPrevParamCount = -1; + private int commandInputFieldPrevCaretPos = -1; + private int commandInputFieldPrevCaretArgumentIndex = -1; + + // Pools for memory efficiency + private List pooledLogEntries; + private List pooledLogItems; + + // History of the previously entered commands + private CircularBuffer commandHistory; + private int commandHistoryIndex = -1; + private string unfinishedCommand; + + // Required in ValidateScrollPosition() function + private PointerEventData nullPointerEventData; + + // Callbacks for log window show/hide events + public System.Action OnLogWindowShown, OnLogWindowHidden; + +#if UNITY_EDITOR + private bool isQuittingApplication; +#endif + +#if !UNITY_EDITOR && UNITY_ANDROID + private DebugLogLogcatListener logcatListener; +#endif + + private void Awake() + { + // Only one instance of debug console is allowed + if( !Instance ) + { + Instance = this; + + // If it is a singleton object, don't destroy it between scene changes + if( singleton ) + DontDestroyOnLoad( gameObject ); + } + else if( Instance != this ) + { + Destroy( gameObject ); + return; + } + + pooledLogEntries = new List( 16 ); + pooledLogItems = new List( 16 ); + commandSuggestionInstances = new List( 8 ); + matchingCommandSuggestions = new List( 8 ); + commandCaretIndexIncrements = new List( 8 ); + queuedLogEntries = new DynamicCircularBuffer( 16 ); + commandHistory = new CircularBuffer( commandHistorySize ); + + logEntriesLock = new object(); + commandSuggestionsStringBuilder = new StringBuilder( 128 ); + + canvasTR = (RectTransform) transform; + logItemsScrollRectTR = (RectTransform) logItemsScrollRect.transform; + logItemsScrollRectOriginalSize = logItemsScrollRectTR.sizeDelta; + + // Associate sprites with log types + logSpriteRepresentations = new Dictionary() + { + { LogType.Log, infoLog }, + { LogType.Warning, warningLog }, + { LogType.Error, errorLog }, + { LogType.Exception, errorLog }, + { LogType.Assert, errorLog } + }; + + // Initially, all log types are visible + filterInfoButton.color = filterButtonsSelectedColor; + filterWarningButton.color = filterButtonsSelectedColor; + filterErrorButton.color = filterButtonsSelectedColor; + + collapsedLogEntries = new List( 128 ); + collapsedLogEntriesMap = new Dictionary( 128 ); + uncollapsedLogEntriesIndices = new DebugLogIndexList(); + indicesOfListEntriesToShow = new DebugLogIndexList(); + + recycledListView.Initialize( this, collapsedLogEntries, indicesOfListEntriesToShow, logItemPrefab.Transform.sizeDelta.y ); + recycledListView.UpdateItemsInTheList( true ); + + if( minimumHeight < 200f ) + minimumHeight = 200f; + + if( enableSearchbar ) + searchbar.GetComponent().onValueChanged.AddListener( SearchTermChanged ); + else + { + searchbar = null; + searchbarSlotTop.gameObject.SetActive( false ); + searchbarSlotBottom.gameObject.SetActive( false ); + } + + if( commandSuggestionsContainer.gameObject.activeSelf ) + commandSuggestionsContainer.gameObject.SetActive( false ); + + // Register to UI events + commandInputField.onValidateInput += OnValidateCommand; + commandInputField.onValueChanged.AddListener( RefreshCommandSuggestions ); + commandInputField.onEndEdit.AddListener( OnEndEditCommand ); + hideButton.onClick.AddListener( HideLogWindow ); + clearButton.onClick.AddListener( ClearLogs ); + collapseButton.GetComponent