From 39b4a5e7ffc5489e546a76e87de649e10b527bab Mon Sep 17 00:00:00 2001 From: SoulliesOfficial <77235731+SoulliesOfficial@users.noreply.github.com> Date: Wed, 29 Jan 2025 23:49:18 -0500 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E5=86=85=E5=AE=B9-5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 主题包; 测试NoteVisual与NoteEffect; LookAt旋转动画与FlexibleBool 动画杂项 控制台初步 --- .DS_Store | Bin 14340 -> 14340 bytes Assets/.DS_Store | Bin 8196 -> 14340 bytes Assets/Editor.meta | 8 + Assets/Editor/AssetBundleComponent.cs | 62 ++ Assets/Editor/AssetBundleComponent.cs.meta | 11 + Assets/Prefabs/GameElements.meta | 8 + .../{ => GameElements}/ElementFolder.prefab | 0 .../ElementFolder.prefab.meta | 0 .../{ => GameElements}/EmptyObject.prefab | 0 .../EmptyObject.prefab.meta | 0 Assets/Prefabs/GameElements/GameCamera.prefab | 809 ++++++++++++++++++ .../GameElements/GameCamera.prefab.meta | 7 + .../{ => GameElements}/PathNode.prefab | 0 .../{ => GameElements}/PathNode.prefab.meta | 0 .../Prefabs/{ => GameElements}/Track.prefab | 0 .../{ => GameElements}/Track.prefab.meta | 0 Assets/Scenes/SampleScene.unity | 712 +++++++++++---- Assets/Scripts/.DS_Store | Bin 6148 -> 6148 bytes Assets/Scripts/Animations/AnimationBase.cs | 5 + Assets/Scripts/Animations/Color.meta | 8 + .../Animations/Color/BaseColorChange.cs | 62 ++ .../Animations/Color/BaseColorChange.cs.meta | 11 + .../Animations/Color/EmissionColorChange.cs | 65 ++ .../Color/EmissionColorChange.cs.meta | 11 + Assets/Scripts/Animations/Track.meta | 8 + .../Animations/Track/TrackTotalTimeChange.cs | 43 + .../Track/TrackTotalTimeChange.cs.meta | 11 + .../Animations/Transform/Displacement.cs | 9 + Assets/Scripts/Animations/Transform/LookAt.cs | 71 ++ .../Animations/Transform/LookAt.cs.meta | 11 + Assets/Scripts/Animations/Transform/Scale.cs | 4 + Assets/Scripts/Animations/Transform/Swirl.cs | 4 + Assets/Scripts/Base/.DS_Store | Bin 0 -> 8196 bytes Assets/Scripts/Base/BaseElement.cs | 63 ++ .../Base/FlexibleTypes/FlexibleBool.cs | 70 ++ .../Base/FlexibleTypes/FlexibleBool.cs.meta | 11 + .../Base/GeneralSubmodules/ColorSubmodule.cs | 5 + .../GeneralSubmodules/TransformSubmodule.cs | 28 + .../Base/Manager/BasePrefabsCollection.cs | 1 + Assets/Scripts/Base/Manager/EditorManager.cs | 5 + .../Base/Manager/ThemeBundleManager.cs | 16 +- Assets/Scripts/Console.meta | 8 + Assets/Scripts/Console/EditorConsole.cs | 31 + Assets/Scripts/Console/EditorConsole.cs.meta | 11 + Assets/Scripts/GameElements/ElementFolder.cs | 2 +- .../EnvironmentObjects/EnvironmentObject.cs | 23 + .../EnvironmentObject.cs.meta | 11 + Assets/Scripts/GameElements/GameCamera.meta | 8 + .../GameElements/GameCamera/GameCamera.cs | 90 ++ .../GameCamera/GameCamera.cs.meta | 11 + Assets/Scripts/GameElements/Notes/NoteBase.cs | 6 +- .../GameElements/Notes/NoteEffectBase.cs | 12 + .../GameElements/Notes/NoteEffectBase.cs.meta | 11 + .../Notes/NoteVisual/NoteVisualBase.cs | 21 +- .../Track/TrackPoints/TrackPercentPoint.cs | 14 +- Assets/Settings/URP-Balanced.asset | 48 +- Assets/Settings/URP-HighFidelity.asset | 48 +- Assets/Settings/URP-Performant.asset | 54 +- Assets/Shaders.meta | 8 + .../DefaultShaderVariants.shadervariants | 162 ++++ .../DefaultShaderVariants.shadervariants.meta | 8 + Assets/StreamingAssets.meta | 8 + Assets/StreamingAssets/.DS_Store | Bin 0 -> 6148 bytes Assets/StreamingAssets/ThemeBundles.meta | 8 + Assets/StreamingAssets/ThemeBundles/.DS_Store | Bin 0 -> 6148 bytes Assets/StreamingAssets/ThemeBundles/OSX.meta | 8 + Assets/StreamingAssets/ThemeBundles/OSX/OSX | Bin 0 -> 1025 bytes .../ThemeBundles/OSX/OSX.manifest | 7 + .../ThemeBundles/OSX/OSX.manifest.meta | 7 + .../StreamingAssets/ThemeBundles/OSX/OSX.meta | 7 + Assets/StreamingAssets/ThemeBundles/OSX/basic | Bin 0 -> 78571 bytes .../ThemeBundles/OSX/basic.manifest | 44 + .../ThemeBundles/OSX/basic.manifest.meta | 7 + .../ThemeBundles/OSX/basic.meta | 7 + .../ThemeBundles/Windows64.meta | 8 + .../ThemeBundles/Windows64/Windows64 | Bin 0 -> 1026 bytes .../ThemeBundles/Windows64/Windows64.manifest | 7 + .../Windows64/Windows64.manifest.meta | 7 + .../ThemeBundles/Windows64/Windows64.meta | 7 + .../ThemeBundles/Windows64/basic | Bin 0 -> 45209 bytes .../ThemeBundles/Windows64/basic.manifest | 44 + .../Windows64/basic.manifest.meta | 7 + .../ThemeBundles/Windows64/basic.meta | 7 + Assets/StreamingAssets/ThemeBundles/basic.abs | 14 + .../ThemeBundles/basic.abs.meta | 7 + Assets/ThemeBundles.meta | 8 + Assets/ThemeBundles/Basic.meta | 8 + Assets/ThemeBundles/Basic/Prefabs.meta | 8 + .../Basic/Prefabs/BasicNoteTap3D.prefab | 542 ++++++++++++ .../Basic/Prefabs/BasicNoteTap3D.prefab.meta | 7 + Assets/ThemeBundles/Basic/Scripts.meta | 8 + .../Basic/Scripts/NoteVisual.meta | 8 + .../NoteVisual/BasicNoteGenerateExpand.cs | 18 + .../BasicNoteGenerateExpand.cs.meta | 11 + .../NoteVisual/BasicNotePerfectBurst.cs | 35 + .../NoteVisual/BasicNotePerfectBurst.cs.meta | 11 + .../Scripts/NoteVisual/BasicNoteVisual.cs | 11 + .../NoteVisual/BasicNoteVisual.cs.meta | 11 + Packages/manifest.json | 1 + Packages/packages-lock.json | 119 +++ .../BurstAotSettings_StandaloneWindows.json | 8 +- ProjectSettings/CommonBurstAotSettings.json | 2 +- 102 files changed, 3492 insertions(+), 261 deletions(-) create mode 100644 Assets/Editor.meta create mode 100644 Assets/Editor/AssetBundleComponent.cs create mode 100644 Assets/Editor/AssetBundleComponent.cs.meta create mode 100644 Assets/Prefabs/GameElements.meta rename Assets/Prefabs/{ => GameElements}/ElementFolder.prefab (100%) rename Assets/Prefabs/{ => GameElements}/ElementFolder.prefab.meta (100%) rename Assets/Prefabs/{ => GameElements}/EmptyObject.prefab (100%) rename Assets/Prefabs/{ => GameElements}/EmptyObject.prefab.meta (100%) create mode 100644 Assets/Prefabs/GameElements/GameCamera.prefab create mode 100644 Assets/Prefabs/GameElements/GameCamera.prefab.meta rename Assets/Prefabs/{ => GameElements}/PathNode.prefab (100%) rename Assets/Prefabs/{ => GameElements}/PathNode.prefab.meta (100%) rename Assets/Prefabs/{ => GameElements}/Track.prefab (100%) rename Assets/Prefabs/{ => GameElements}/Track.prefab.meta (100%) create mode 100644 Assets/Scripts/Animations/Color.meta create mode 100644 Assets/Scripts/Animations/Color/BaseColorChange.cs create mode 100644 Assets/Scripts/Animations/Color/BaseColorChange.cs.meta create mode 100644 Assets/Scripts/Animations/Color/EmissionColorChange.cs create mode 100644 Assets/Scripts/Animations/Color/EmissionColorChange.cs.meta create mode 100644 Assets/Scripts/Animations/Track.meta create mode 100644 Assets/Scripts/Animations/Track/TrackTotalTimeChange.cs create mode 100644 Assets/Scripts/Animations/Track/TrackTotalTimeChange.cs.meta create mode 100644 Assets/Scripts/Animations/Transform/LookAt.cs create mode 100644 Assets/Scripts/Animations/Transform/LookAt.cs.meta create mode 100644 Assets/Scripts/Base/.DS_Store create mode 100644 Assets/Scripts/Base/FlexibleTypes/FlexibleBool.cs create mode 100644 Assets/Scripts/Base/FlexibleTypes/FlexibleBool.cs.meta create mode 100644 Assets/Scripts/Console.meta create mode 100644 Assets/Scripts/Console/EditorConsole.cs create mode 100644 Assets/Scripts/Console/EditorConsole.cs.meta create mode 100644 Assets/Scripts/GameElements/EnvironmentObjects/EnvironmentObject.cs create mode 100644 Assets/Scripts/GameElements/EnvironmentObjects/EnvironmentObject.cs.meta create mode 100644 Assets/Scripts/GameElements/GameCamera.meta create mode 100644 Assets/Scripts/GameElements/GameCamera/GameCamera.cs create mode 100644 Assets/Scripts/GameElements/GameCamera/GameCamera.cs.meta create mode 100644 Assets/Scripts/GameElements/Notes/NoteEffectBase.cs create mode 100644 Assets/Scripts/GameElements/Notes/NoteEffectBase.cs.meta create mode 100644 Assets/Shaders.meta create mode 100644 Assets/Shaders/DefaultShaderVariants.shadervariants create mode 100644 Assets/Shaders/DefaultShaderVariants.shadervariants.meta create mode 100644 Assets/StreamingAssets.meta create mode 100644 Assets/StreamingAssets/.DS_Store create mode 100644 Assets/StreamingAssets/ThemeBundles.meta create mode 100644 Assets/StreamingAssets/ThemeBundles/.DS_Store create mode 100644 Assets/StreamingAssets/ThemeBundles/OSX.meta create mode 100644 Assets/StreamingAssets/ThemeBundles/OSX/OSX create mode 100644 Assets/StreamingAssets/ThemeBundles/OSX/OSX.manifest create mode 100644 Assets/StreamingAssets/ThemeBundles/OSX/OSX.manifest.meta create mode 100644 Assets/StreamingAssets/ThemeBundles/OSX/OSX.meta create mode 100644 Assets/StreamingAssets/ThemeBundles/OSX/basic create mode 100644 Assets/StreamingAssets/ThemeBundles/OSX/basic.manifest create mode 100644 Assets/StreamingAssets/ThemeBundles/OSX/basic.manifest.meta create mode 100644 Assets/StreamingAssets/ThemeBundles/OSX/basic.meta create mode 100644 Assets/StreamingAssets/ThemeBundles/Windows64.meta create mode 100644 Assets/StreamingAssets/ThemeBundles/Windows64/Windows64 create mode 100644 Assets/StreamingAssets/ThemeBundles/Windows64/Windows64.manifest create mode 100644 Assets/StreamingAssets/ThemeBundles/Windows64/Windows64.manifest.meta create mode 100644 Assets/StreamingAssets/ThemeBundles/Windows64/Windows64.meta create mode 100644 Assets/StreamingAssets/ThemeBundles/Windows64/basic create mode 100644 Assets/StreamingAssets/ThemeBundles/Windows64/basic.manifest create mode 100644 Assets/StreamingAssets/ThemeBundles/Windows64/basic.manifest.meta create mode 100644 Assets/StreamingAssets/ThemeBundles/Windows64/basic.meta create mode 100644 Assets/StreamingAssets/ThemeBundles/basic.abs create mode 100644 Assets/StreamingAssets/ThemeBundles/basic.abs.meta create mode 100644 Assets/ThemeBundles.meta create mode 100644 Assets/ThemeBundles/Basic.meta create mode 100644 Assets/ThemeBundles/Basic/Prefabs.meta create mode 100644 Assets/ThemeBundles/Basic/Prefabs/BasicNoteTap3D.prefab create mode 100644 Assets/ThemeBundles/Basic/Prefabs/BasicNoteTap3D.prefab.meta create mode 100644 Assets/ThemeBundles/Basic/Scripts.meta create mode 100644 Assets/ThemeBundles/Basic/Scripts/NoteVisual.meta create mode 100644 Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNoteGenerateExpand.cs create mode 100644 Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNoteGenerateExpand.cs.meta create mode 100644 Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNotePerfectBurst.cs create mode 100644 Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNotePerfectBurst.cs.meta create mode 100644 Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNoteVisual.cs create mode 100644 Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNoteVisual.cs.meta diff --git a/.DS_Store b/.DS_Store index fc6ec49cd84c1e4e5d38796e6a5a697b6e091449..0ebab392e1b099e07ac75487fcdc4ac1e1841376 100644 GIT binary patch delta 981 zcmZoEXepTB&zLqbpol5s*T#!x>=PgGZf57WA;!#T@nCYDoXlhaEgrT5w=#ciSu$Bb zUJJ%_kk@8nESPw4UcD6q0|N_#9z!}qCPPV1x?yl~er^F!j6p~@K^R#sH{Zo2DJMS( zD8>;#IRj|mF-KJS6uj~U8AxWEI{>vZurlb?1FcPANM%Swwwi%K#S0=0lSQ_?@ANmR zz{Oz8fd(K{Agsr(0@(o!3}8R1Gi(-ASj||UR9;*F_1n&*f}G6a5(9&4j7-cdtZeKY z>>S)2vB4Sn<-sM1C8fnqiAB*MUPyj^P7;irm=ucQViA`43XgAl_&GBafntE6gdrcu3I@`pz&ObS^7I&r8FCo% zJah7sp}`}-z`&Fa#OEfbs9a&065uB`*+x~4&HwS|&x@8!PEb`qFhwTMQsrTu`PyLf zO4TGrX2ItlC-bRGuo-i_`8s9EWF2)W7}G~xnn}oEa;Exc7RChsTayzs#Mq8bZ}Filk0q+-J~xkK%wM$iB6kARxl8GINr8Il-^7!rZFGB@AFB`GIA2`IyHjWcPH z)#AyO>I!U7=6rPpj!9_;fRYR{lN&X3C#R`MZsyexXH4c|o(&Xa0UDOikj_wyY)sjU zZE6=69dksLPk~#5O}-$*FgQ6sw*X`l16Koxl$v~7Q*-hL&7+YFO!Y!Q0cN08Neo%Y zR;eqz2zFfvwhAtbun1EY#TsUX&F8c%7#Rg8+v=!HlINP7t)n$LUdMg%dntv@Yo&}> Wh>Vn3o7oM%u}l_Iw;r-#oC^SH(a7ll diff --git a/Assets/.DS_Store b/Assets/.DS_Store index 501c8837cfa1f5ea3c089da8dff527ccd49e8bf8..1dc2194e84eb0cf903a22f3d827d477bab1d2aab 100644 GIT binary patch literal 14340 zcmeHN-D@0G6hE^`x|1fU8(O7RiYp=r#+XEs#t(2!qorUac9T}AlI~`=n>CxACA(>a zm=J@ApbzSUFQWKSiyBaTsrVrHqA!BT8Caz!Kt1*_`mGgGGG~y z4BU(#y?X9VgS3b&yGEJgC2uZU^0L6-wdyzu`P!eVs49BtBybtZDf}R=s`!IuNbkdt zUcX7t)N<$bp&GhX4OQ}J8LI|!XtS!fN%vw1*e7glp~0&NjWq`9xdCmoKrMQclK}_r z*7})C54`m`>TZq9?GRa+mo2AI9qo&HWMYFp2>G^$(u#v}ln3WN z%=G;DH5ZicAxzV26Gr#wtk(-o+{>7W)laFdgWTC zSk5mgg<>ub$fKu=<(#)N;VqYQRi&HuAGqCa_iWgveY=srg*{EaGL+L&Hnd={V*}W1E@AAaRlbo0Gh`zR@MFCs#PQfLVEMm z)-PQzzpbnc)wAd|eKDhSPgHBYG>wQnfry;op#-)i)u+MJ2iFb^=$ao!Jx7R!KTz%pPN zunbrRb}a+9!t%!d)%9r}PdjK(OgkDlIjuYN*(aN_4mpjx>G0;oU>euZm6Ov}&*e1j z+BeUlYUJ9%|NYxdP&7+pbeu+XZ#WZ_UEA>zAKHAItv)(Gh@x!mE95;ZJ^cXNn;8T)98RM6wC*5Bm&*l*G^am0z6=J{T& zhL)>-YVA$7>ehQB`ecFAMBPd?YRFZ>2wvmZd9MbWA{fc^`S^_#$pNzocw>RGZ2&&oN%_zx!Y^j3A)S9!f-sH7gWse$5mg%_OH#YBJuXp3dQGGH07 z3|Iy%1G|!eF5l{*9?1L5`~P>PZ`NqbfMsB33^<*W>B$LT9Rogw`$-&UaWLjn99(d% xRB&Pl|4`fU@PoJGjq|;F!Lt-!LvHvIS1A9%MnIeYYg-L${=fTn0R8j)|1TfB=$-%o delta 677 zcmZoEXmOBWU|?W$DortDU;r^WfEYvza8E20o2Vx_*}#NF6v$`L0b)j=I73dlVQ_MO zZoy_piRJ8@**RD^7aMip z{-ViNLUJ%>oRB=T#0G}RyM^VM8Rl|NzAG%pw!7`2tmUG~j3NpMrpRP#5nd*y36nR8 zC^JPZp8Q`#Z1P(XuF3MEGLwZxttSVF?WpHr2w^B?C}GHFC}PNDNMy)i@MOqiNMp!{ zc@X4l28R3oKmw=Q+ctHi;p?tSDyk^Z%Ukof(%G#0}Ta+f5OI# zA&i2|U=D)>H;{G(Mb*ZO-j|i$MZ~`%p&SFl)W3s2mrJ9 BtlR(q diff --git a/Assets/Editor.meta b/Assets/Editor.meta new file mode 100644 index 00000000..02bc588b --- /dev/null +++ b/Assets/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 392d1d53b7aae498487d4fe9604f15cc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/AssetBundleComponent.cs b/Assets/Editor/AssetBundleComponent.cs new file mode 100644 index 00000000..188c4473 --- /dev/null +++ b/Assets/Editor/AssetBundleComponent.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Ichni; +using UnityEditor; +using UnityEngine; + +/// +/// AssetBundle 打包工具 +/// +public class BuildAssetBundle +{ + private static string BuildPrepare() + { + // 打包AB输出路径 + string strABOutPAthDir = string.Empty; + + // 获取“StreamingAssets”文件夹路径(不一定这个文件夹,可自定义) + strABOutPAthDir = Application.streamingAssetsPath + "/ThemeBundles"; + + // 判断文件夹是否存在,不存在则新建 + if (Directory.Exists(strABOutPAthDir) == false) + { + Directory.CreateDirectory(strABOutPAthDir); + } + + return strABOutPAthDir; + } + + private static void GenerateAbstracts(AssetBundleManifest manifest) + { + List themeBundles = manifest.GetAllAssetBundles().ToList(); + foreach (string bundle in themeBundles) + { + string uriAbs = Application.streamingAssetsPath + "/ThemeBundles/" + bundle + ".abs"; + Debug.Log(uriAbs); + if (!ES3.FileExists(uriAbs)) + { + ThemeBundleAbstract abs = new ThemeBundleAbstract(bundle); + ES3.Save("ThemeBundleAbstract", abs, uriAbs); + } + } + } + + [MenuItem("AssetBundleTools/BuildToWindows64")] + public static void BuildToWindows64() + { + string uri = BuildPrepare() + "/Windows64"; + AssetBundleManifest manifestWin64 = BuildPipeline.BuildAssetBundles(uri, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64); + GenerateAbstracts(manifestWin64); + } + + [MenuItem("AssetBundleTools/BuildToOSX")] + public static void BuildToOSX() + { + string uri = BuildPrepare() + "/OSX"; + AssetBundleManifest manifestOSX = BuildPipeline.BuildAssetBundles(uri, BuildAssetBundleOptions.None, BuildTarget.StandaloneOSX); + GenerateAbstracts(manifestOSX); + } +} \ No newline at end of file diff --git a/Assets/Editor/AssetBundleComponent.cs.meta b/Assets/Editor/AssetBundleComponent.cs.meta new file mode 100644 index 00000000..cdca955c --- /dev/null +++ b/Assets/Editor/AssetBundleComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8490cfc5a68124e599aee3e07c8f9cfd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/GameElements.meta b/Assets/Prefabs/GameElements.meta new file mode 100644 index 00000000..8db4087a --- /dev/null +++ b/Assets/Prefabs/GameElements.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 17a9645190739456285c104d5a23c342 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/ElementFolder.prefab b/Assets/Prefabs/GameElements/ElementFolder.prefab similarity index 100% rename from Assets/Prefabs/ElementFolder.prefab rename to Assets/Prefabs/GameElements/ElementFolder.prefab diff --git a/Assets/Prefabs/ElementFolder.prefab.meta b/Assets/Prefabs/GameElements/ElementFolder.prefab.meta similarity index 100% rename from Assets/Prefabs/ElementFolder.prefab.meta rename to Assets/Prefabs/GameElements/ElementFolder.prefab.meta diff --git a/Assets/Prefabs/EmptyObject.prefab b/Assets/Prefabs/GameElements/EmptyObject.prefab similarity index 100% rename from Assets/Prefabs/EmptyObject.prefab rename to Assets/Prefabs/GameElements/EmptyObject.prefab diff --git a/Assets/Prefabs/EmptyObject.prefab.meta b/Assets/Prefabs/GameElements/EmptyObject.prefab.meta similarity index 100% rename from Assets/Prefabs/EmptyObject.prefab.meta rename to Assets/Prefabs/GameElements/EmptyObject.prefab.meta diff --git a/Assets/Prefabs/GameElements/GameCamera.prefab b/Assets/Prefabs/GameElements/GameCamera.prefab new file mode 100644 index 00000000..a858469d --- /dev/null +++ b/Assets/Prefabs/GameElements/GameCamera.prefab @@ -0,0 +1,809 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &10333948111691042 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5840097170757975722} + - component: {fileID: 7025203609509180022} + m_Layer: 0 + m_Name: GameCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5840097170757975722 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 10333948111691042} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 373065448631755357} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7025203609509180022 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 10333948111691042} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 79d811a12f27f43629797719fcbfc6ae, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: elementGuid + Entry: 2 + Data: 702c793776b444d3ad481072561faaec + - Name: timeDurationSubmodule + Entry: 7 + Data: 0|Ichni.RhythmGame.TimeDurationSubmodule, Assembly-CSharp + - Name: isOverridingDuration + Entry: 5 + Data: false + - Name: startTime + Entry: 4 + Data: 0 + - Name: endTime + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: transformSubmodule + Entry: 7 + Data: 1|Ichni.RhythmGame.TransformSubmodule, Assembly-CSharp + - Name: originalPosition + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: originalEulerAngles + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: originalScale + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: positionOffset + Entry: 7 + Data: 2|System.Collections.Generic.List`1[[UnityEngine.Vector3, UnityEngine.CoreModule]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: eulerAnglesOffset + Entry: 7 + Data: 3|System.Collections.Generic.List`1[[UnityEngine.Vector3, UnityEngine.CoreModule]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: scaleOffset + Entry: 7 + Data: 4|System.Collections.Generic.List`1[[UnityEngine.Vector3, UnityEngine.CoreModule]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: currentPosition + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: currentEulerAngles + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: currentScale + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: positionDirtyMark + Entry: 5 + Data: false + - Name: eulerAnglesDirtyMark + Entry: 5 + Data: false + - Name: scaleDirtyMark + Entry: 5 + Data: false + - Name: eulerAnglesOffsetLock + Entry: 5 + Data: false + - Name: OnPositionChanged + Entry: 6 + Data: + - Name: OnEulerAnglesChanged + Entry: 6 + Data: + - Name: OnScaleChanged + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: colorSubmodule + Entry: 6 + Data: + elementName: + serialNumber: 0 + parentElement: {fileID: 0} + childElementList: [] + camera: {fileID: 1378655914364111770} + rotationPoint: {fileID: 373065448631755357} + positionPoint: {fileID: 2202765603615894048} + cameraTransform: {fileID: 4681825519897212372} + cameraViewType: 0 + perspectiveAngle: 60 + orthographicSize: 10 +--- !u!1 &261765279725222738 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 373065448631755357} + m_Layer: 0 + m_Name: RotationPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &373065448631755357 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 261765279725222738} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2202765603615894048} + m_Father: {fileID: 5840097170757975722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &816955147983443379 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2202765603615894048} + m_Layer: 0 + m_Name: PositionPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2202765603615894048 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 816955147983443379} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4681825519897212372} + m_Father: {fileID: 373065448631755357} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8526474044217039555 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4681825519897212372} + - component: {fileID: 1378655914364111770} + - component: {fileID: 7108567356200093580} + - component: {fileID: 2072332804138453357} + - component: {fileID: 8132557174609694425} + - component: {fileID: 854107432770048664} + - component: {fileID: 5126086572364088879} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4681825519897212372 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8526474044217039555} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2202765603615894048} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &1378655914364111770 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8526474044217039555} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!81 &7108567356200093580 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8526474044217039555} + m_Enabled: 1 +--- !u!114 &2072332804138453357 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8526474044217039555} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 1 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 +--- !u!114 &8132557174609694425 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8526474044217039555} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 347013242dca7c44fb5001793033ea59, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateMode: 0 + PositionActive: 0 + RotationActive: 0 + ScaleActive: 0 + PositionWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + TimeMultiplier: 1 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + UniformValues: 0 + ForceVectorLength: 0 + ForcedVectorLength: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + RotationWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + TimeMultiplier: 1 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + UniformValues: 0 + ForceVectorLength: 0 + ForcedVectorLength: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + ScaleWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + TimeMultiplier: 1 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + UniformValues: 0 + ForceVectorLength: 0 + ForcedVectorLength: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + DebugWiggleDuration: 2 +--- !u!114 &854107432770048664 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8526474044217039555} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bf8e915527fa424a8b17dc168fe20eb, type: 3} + m_Name: + m_EditorClassIdentifier: + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + CooldownBetweenShakes: 0 +--- !u!114 &5126086572364088879 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8526474044217039555} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 531894cbc68d4bf49a71825ad87c3305, type: 3} + m_Name: + m_EditorClassIdentifier: + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + CooldownBetweenShakes: 0 diff --git a/Assets/Prefabs/GameElements/GameCamera.prefab.meta b/Assets/Prefabs/GameElements/GameCamera.prefab.meta new file mode 100644 index 00000000..fda2cbd7 --- /dev/null +++ b/Assets/Prefabs/GameElements/GameCamera.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5e49956564dfa491cb6aa8fe57c1b2d6 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/PathNode.prefab b/Assets/Prefabs/GameElements/PathNode.prefab similarity index 100% rename from Assets/Prefabs/PathNode.prefab rename to Assets/Prefabs/GameElements/PathNode.prefab diff --git a/Assets/Prefabs/PathNode.prefab.meta b/Assets/Prefabs/GameElements/PathNode.prefab.meta similarity index 100% rename from Assets/Prefabs/PathNode.prefab.meta rename to Assets/Prefabs/GameElements/PathNode.prefab.meta diff --git a/Assets/Prefabs/Track.prefab b/Assets/Prefabs/GameElements/Track.prefab similarity index 100% rename from Assets/Prefabs/Track.prefab rename to Assets/Prefabs/GameElements/Track.prefab diff --git a/Assets/Prefabs/Track.prefab.meta b/Assets/Prefabs/GameElements/Track.prefab.meta similarity index 100% rename from Assets/Prefabs/Track.prefab.meta rename to Assets/Prefabs/GameElements/Track.prefab.meta diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 9f7a7dc2..0684419d 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -122,84 +122,248 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1001 &151772093 -PrefabInstance: +--- !u!1 &293267687 +GameObject: m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 293267688} + - component: {fileID: 293267689} + m_Layer: 0 + m_Name: GameCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &293267688 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 293267687} serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 2505559936379693214, guid: 46175bea33f87445bbec1389a53da172, - type: 3} - propertyPath: managedReferences[6334994104641650688].CameraShakeProperties.Amplitude - value: 10 - objectReference: {fileID: 0} - - target: {fileID: 2505559936379693214, guid: 46175bea33f87445bbec1389a53da172, - type: 3} - propertyPath: managedReferences[6334994104641650688].CameraShakeProperties.AmplitudeY - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5030288017655597913, guid: 46175bea33f87445bbec1389a53da172, - type: 3} - propertyPath: m_Name - value: CameraShake - objectReference: {fileID: 0} - - target: {fileID: 6794014747502131782, guid: 46175bea33f87445bbec1389a53da172, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6794014747502131782, guid: 46175bea33f87445bbec1389a53da172, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6794014747502131782, guid: 46175bea33f87445bbec1389a53da172, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6794014747502131782, guid: 46175bea33f87445bbec1389a53da172, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6794014747502131782, guid: 46175bea33f87445bbec1389a53da172, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6794014747502131782, guid: 46175bea33f87445bbec1389a53da172, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6794014747502131782, guid: 46175bea33f87445bbec1389a53da172, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6794014747502131782, guid: 46175bea33f87445bbec1389a53da172, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6794014747502131782, guid: 46175bea33f87445bbec1389a53da172, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6794014747502131782, guid: 46175bea33f87445bbec1389a53da172, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 46175bea33f87445bbec1389a53da172, type: 3} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2048155078} + m_Father: {fileID: 759707325} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &293267689 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 293267687} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 79d811a12f27f43629797719fcbfc6ae, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: elementGuid + Entry: 2 + Data: 9ce023db680c4db6aca5388c7fea2d83 + - Name: timeDurationSubmodule + Entry: 7 + Data: 0|Ichni.RhythmGame.TimeDurationSubmodule, Assembly-CSharp + - Name: isOverridingDuration + Entry: 5 + Data: false + - Name: startTime + Entry: 4 + Data: 0 + - Name: endTime + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: transformSubmodule + Entry: 7 + Data: 1|Ichni.RhythmGame.TransformSubmodule, Assembly-CSharp + - Name: originalPosition + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: originalEulerAngles + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: originalScale + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: positionOffset + Entry: 7 + Data: 2|System.Collections.Generic.List`1[[UnityEngine.Vector3, UnityEngine.CoreModule]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: eulerAnglesOffset + Entry: 7 + Data: 3|System.Collections.Generic.List`1[[UnityEngine.Vector3, UnityEngine.CoreModule]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: scaleOffset + Entry: 7 + Data: 4|System.Collections.Generic.List`1[[UnityEngine.Vector3, UnityEngine.CoreModule]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: currentPosition + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: currentEulerAngles + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: currentScale + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: positionDirtyMark + Entry: 5 + Data: false + - Name: eulerAnglesDirtyMark + Entry: 5 + Data: false + - Name: scaleDirtyMark + Entry: 5 + Data: false + - Name: eulerAnglesOffsetLock + Entry: 5 + Data: false + - Name: OnPositionChanged + Entry: 6 + Data: + - Name: OnEulerAnglesChanged + Entry: 6 + Data: + - Name: OnScaleChanged + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: colorSubmodule + Entry: 6 + Data: + elementName: + serialNumber: 0 + parentElement: {fileID: 0} + childElementList: [] + camera: {fileID: 330585545} + rotationPoint: {fileID: 2048155078} + positionPoint: {fileID: 719302918} + cameraTransform: {fileID: 330585546} + cameraViewType: 0 + perspectiveAngle: 60 + orthographicSize: 10 --- !u!1 &330585543 GameObject: m_ObjectHideFlags: 0 @@ -289,12 +453,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 330585543} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + 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_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 719302918} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &330585547 MonoBehaviour: @@ -819,6 +983,273 @@ MonoBehaviour: m_LightCookieSize: {x: 1, y: 1} m_LightCookieOffset: {x: 0, y: 0} m_SoftShadowQuality: 1 +--- !u!1 &719302917 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 719302918} + m_Layer: 0 + m_Name: PositionPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &719302918 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 719302917} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 330585546} + m_Father: {fileID: 2048155078} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &759707323 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 759707325} + - component: {fileID: 759707324} + m_Layer: 0 + m_Name: Folder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &759707324 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 759707323} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0892af0ddd15c449d9b1c65248b5dc64, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: elementGuid + Entry: 2 + Data: 00000000000000000000000000000000 + - Name: timeDurationSubmodule + Entry: 7 + Data: 0|Ichni.RhythmGame.TimeDurationSubmodule, Assembly-CSharp + - Name: isOverridingDuration + Entry: 5 + Data: false + - Name: startTime + Entry: 4 + Data: 0 + - Name: endTime + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: transformSubmodule + Entry: 7 + Data: 1|Ichni.RhythmGame.TransformSubmodule, Assembly-CSharp + - Name: originalPosition + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: originalEulerAngles + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: originalScale + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 1 + - Name: + Entry: 4 + Data: 1 + - Name: + Entry: 4 + Data: 1 + - Name: + Entry: 8 + Data: + - Name: positionOffset + Entry: 7 + Data: 2|System.Collections.Generic.List`1[[UnityEngine.Vector3, UnityEngine.CoreModule]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: eulerAnglesOffset + Entry: 7 + Data: 3|System.Collections.Generic.List`1[[UnityEngine.Vector3, UnityEngine.CoreModule]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: scaleOffset + Entry: 7 + Data: 4|System.Collections.Generic.List`1[[UnityEngine.Vector3, UnityEngine.CoreModule]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: currentPosition + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: currentEulerAngles + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: currentScale + Entry: 7 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 4 + Data: 1 + - Name: + Entry: 4 + Data: 1 + - Name: + Entry: 4 + Data: 1 + - Name: + Entry: 8 + Data: + - Name: positionDirtyMark + Entry: 5 + Data: false + - Name: eulerAnglesDirtyMark + Entry: 5 + Data: false + - Name: scaleDirtyMark + Entry: 5 + Data: false + - Name: eulerAnglesOffsetLock + Entry: 5 + Data: false + - Name: OnPositionChanged + Entry: 6 + Data: + - Name: OnEulerAnglesChanged + Entry: 6 + Data: + - Name: OnScaleChanged + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: colorSubmodule + Entry: 6 + Data: + elementName: + serialNumber: 0 + parentElement: {fileID: 0} + childElementList: [] +--- !u!4 &759707325 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 759707323} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 293267688} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &832575517 GameObject: m_ObjectHideFlags: 0 @@ -1146,6 +1577,8 @@ GameObject: - component: {fileID: 1197505579} - component: {fileID: 1197505578} - component: {fileID: 1197505580} + - component: {fileID: 1197505581} + - component: {fileID: 1197505582} m_Layer: 0 m_Name: EditorManager m_TagString: Untagged @@ -1257,7 +1690,35 @@ MonoBehaviour: - Name: Entry: 8 Data: ---- !u!1 &1754040413 +--- !u!114 &1197505581 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1197505577} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 912c3a32e155f4ca79a4ca1fa1f359e5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1197505582 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1197505577} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1d27859adda1341aaa0db8a117d5431c, type: 3} + m_Name: + m_EditorClassIdentifier: + themeBundleAbstractList: [] + selectedThemeBundleList: [] + loadedThemeBundleList: [] + waitingBundleAmount: 0 +--- !u!1 &2048155077 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1265,110 +1726,35 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1754040417} - - component: {fileID: 1754040416} - - component: {fileID: 1754040415} - - component: {fileID: 1754040414} + - component: {fileID: 2048155078} m_Layer: 0 - m_Name: Sphere + m_Name: RotationPoint m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!135 &1754040414 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1754040413} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1754040415 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1754040413} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1754040416 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1754040413} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1754040417 +--- !u!4 &2048155078 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1754040413} + m_GameObject: {fileID: 2048155077} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 5} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} + m_Children: + - {fileID: 719302918} + m_Father: {fileID: 293267688} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 m_Roots: - - {fileID: 330585546} - {fileID: 410087041} - {fileID: 832575519} - {fileID: 1197505579} - - {fileID: 1754040417} - - {fileID: 151772093} + - {fileID: 759707325} diff --git a/Assets/Scripts/.DS_Store b/Assets/Scripts/.DS_Store index 0ea3e43f9c8bf3c8a866d823127115696fb3fada..aff4f18f8c72edc8048714b6b10ca3c03918c4e9 100644 GIT binary patch literal 6148 zcmeHKKX21O6n~ev)M-EjK_wWFj93_=(nLxNVsX<{h!Kon02J&dYAtMER6EKLMe@ua ziGhikorQ%j(18!Y!os&e3<%!4yA(T#Q6_}YJ?ZXuckjJBzu&X(d;q}O!(IcR1^^}& zLSqf91wwi%b5c?x=MkBh!-WKV;1EGPXRQY`1Db(je7|=BzV8Lx zLp^N{J6JY;3c*%^PjJw1_IWrE7I5vj$S&laj+)!7f4li+{oOImzwkLi-doysaF|{H zH9f}JMX|vK#@ffd%AJYwJ$huLG@y-~#L&;%vCBnv-Y6cZ$Ub_5z>ky7&Cje zd>Hj&;p<3+Surc!+NJThxz(y$jqT>7ZjBqQ=62n>(b}3!D(3pt>$mQ8p9NvWUl1?2 zW8;=BsO|P7o~{N(`Qq3 z8g65XD4lx{U`?$EQyb5u?EA8Q`G{Y=MZdx|vJ9+TsXB&a;1Bk{U*=`(a}1Tm3w^FA z-Xg|I2Q!glSBiQ8%<6PNqh>%epczmM(EeayA+!~y62;bmmAC>R8aONj+w{9YK9)jT zVJZ`??7)-k3xTWlDg{eg84oqD>m|B^s8wwMvZ3VR?#$gzQp@!UZdJ9E%1W#TT&% aL7hbnL|b7h5l2w;kAR>-SDJyp%D^x1a{^KT delta 181 zcmZoMXfc=|#>B)qu~2NHo+2a1#(>?7j2x34Sk#zAd4ZI~l zVc}te2u$9`qQMlvFj<~W${}wN0|NsKgA+p{Loq{YZoZ34QcivnP>h4~?bDh&K+UM~ wDQNPOE7@c=3v!6DOl&y5nVo~51L!Cq|2y+!ei26wpk4+>p!u64MAk3^09y?*7XSbN diff --git a/Assets/Scripts/Animations/AnimationBase.cs b/Assets/Scripts/Animations/AnimationBase.cs index 52f896cc..c600d4ed 100644 --- a/Assets/Scripts/Animations/AnimationBase.cs +++ b/Assets/Scripts/Animations/AnimationBase.cs @@ -38,6 +38,11 @@ namespace Ichni.RhythmGame timeDurationSubmodule = new TimeDurationSubmodule(startTimes.Min(), endTimes.Max()); } + public virtual void SetTimeDuration(float startTime, float endTime) + { + timeDurationSubmodule = new TimeDurationSubmodule(startTime, endTime); + } + protected abstract void UpdateAnimation(float songTime); protected virtual void Update() diff --git a/Assets/Scripts/Animations/Color.meta b/Assets/Scripts/Animations/Color.meta new file mode 100644 index 00000000..763c79bd --- /dev/null +++ b/Assets/Scripts/Animations/Color.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e3418d0d84b6b476db0e552f2e754c7e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Animations/Color/BaseColorChange.cs b/Assets/Scripts/Animations/Color/BaseColorChange.cs new file mode 100644 index 00000000..e117c156 --- /dev/null +++ b/Assets/Scripts/Animations/Color/BaseColorChange.cs @@ -0,0 +1,62 @@ +using System.Collections; +using System.Collections.Generic; +using Lean.Pool; +using UnityEngine; + +namespace Ichni.RhythmGame +{ + public class BaseColorChange : AnimationBase + { + public ColorSubmodule targetColorSubmodule; + public FlexibleFloat colorR, colorG, colorB, colorA; + + public static BaseColorChange GenerateElement(string elementName, BaseElement targetObject, + FlexibleFloat colorR, FlexibleFloat colorG, FlexibleFloat colorB, FlexibleFloat colorA) + { + BaseColorChange baseColorChange = LeanPool.Spawn(EditorManager.instance.basePrefabs.emptyObject).AddComponent(); + + baseColorChange.NewInitialize(elementName, targetObject); + baseColorChange.colorR = colorR; + baseColorChange.colorG = colorG; + baseColorChange.colorB = colorB; + baseColorChange.colorA = colorA; + baseColorChange.animationReturnType = FlexibleReturnType.Before; + + if (targetObject.colorSubmodule != null) + { + baseColorChange.targetColorSubmodule = targetObject.colorSubmodule; + } + else + { + throw new System.Exception("Target object does not have a ColorSubmodule"); + } + + baseColorChange.SetTimeDuration(colorR, colorG, colorB, colorA); + + return baseColorChange; + } + + protected override void UpdateAnimation(float songTime) + { + colorR.UpdateFlexibleFloat(songTime); + colorG.UpdateFlexibleFloat(songTime); + colorB.UpdateFlexibleFloat(songTime); + colorA.UpdateFlexibleFloat(songTime); + + if (colorR.returnType is FlexibleReturnType.MiddleExecuting || + colorG.returnType is FlexibleReturnType.MiddleExecuting || + colorB.returnType is FlexibleReturnType.MiddleExecuting || + colorA.returnType is FlexibleReturnType.MiddleExecuting) + { + animationReturnType = FlexibleReturnType.MiddleExecuting; + Color colorOffset = new Color(colorR.value, colorG.value, colorB.value, colorA.value); + targetColorSubmodule.baseColorOffset.Add(colorOffset); + targetColorSubmodule.baseColorDirtyMark = true; + } + else + { + animationReturnType = FlexibleReturnType.MiddleInterval; + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Animations/Color/BaseColorChange.cs.meta b/Assets/Scripts/Animations/Color/BaseColorChange.cs.meta new file mode 100644 index 00000000..e996d1e4 --- /dev/null +++ b/Assets/Scripts/Animations/Color/BaseColorChange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3dada7ead8505418198027da3d9984bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Animations/Color/EmissionColorChange.cs b/Assets/Scripts/Animations/Color/EmissionColorChange.cs new file mode 100644 index 00000000..6cb1991a --- /dev/null +++ b/Assets/Scripts/Animations/Color/EmissionColorChange.cs @@ -0,0 +1,65 @@ +using System.Collections; +using System.Collections.Generic; +using Lean.Pool; +using UnityEngine; + +namespace Ichni.RhythmGame +{ + public class EmissionColorChange : AnimationBase + { + public ColorSubmodule targetColorSubmodule; + public FlexibleFloat colorR, colorG, colorB, colorI; + + public static EmissionColorChange GenerateElement(string elementName, BaseElement targetObject, + FlexibleFloat colorR, FlexibleFloat colorG, FlexibleFloat colorB, FlexibleFloat colorI) + { + EmissionColorChange baseColorChange = LeanPool.Spawn(EditorManager.instance.basePrefabs.emptyObject).AddComponent(); + + baseColorChange.NewInitialize(elementName, targetObject); + baseColorChange.colorR = colorR; + baseColorChange.colorG = colorG; + baseColorChange.colorB = colorB; + baseColorChange.colorI = colorI; + baseColorChange.animationReturnType = FlexibleReturnType.Before; + + if (targetObject.colorSubmodule != null) + { + baseColorChange.targetColorSubmodule = targetObject.colorSubmodule; + } + else + { + throw new System.Exception("Target object does not have a ColorSubmodule"); + } + + baseColorChange.SetTimeDuration(colorR, colorG, colorB, colorI); + + return baseColorChange; + } + + protected override void UpdateAnimation(float songTime) + { + colorR.UpdateFlexibleFloat(songTime); + colorG.UpdateFlexibleFloat(songTime); + colorB.UpdateFlexibleFloat(songTime); + colorI.UpdateFlexibleFloat(songTime); + + if (colorR.returnType is FlexibleReturnType.MiddleExecuting || + colorG.returnType is FlexibleReturnType.MiddleExecuting || + colorB.returnType is FlexibleReturnType.MiddleExecuting || + colorI.returnType is FlexibleReturnType.MiddleExecuting) + { + animationReturnType = FlexibleReturnType.MiddleExecuting; + Color colorOffset = new Color(colorR.value, colorG.value, colorB.value); + float intensityOffset = colorI.value; + + targetColorSubmodule.emissionColorOffset.Add(colorOffset); + targetColorSubmodule.emissionIntensityOffset.Add(intensityOffset); + targetColorSubmodule.emissionColorDirtyMark = true; + } + else + { + animationReturnType = FlexibleReturnType.MiddleInterval; + } + } + } +} diff --git a/Assets/Scripts/Animations/Color/EmissionColorChange.cs.meta b/Assets/Scripts/Animations/Color/EmissionColorChange.cs.meta new file mode 100644 index 00000000..06ae6193 --- /dev/null +++ b/Assets/Scripts/Animations/Color/EmissionColorChange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed8c4bbcff6cc433dae44740d8f01b84 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Animations/Track.meta b/Assets/Scripts/Animations/Track.meta new file mode 100644 index 00000000..8eee5ae4 --- /dev/null +++ b/Assets/Scripts/Animations/Track.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 17936224adc4a4e3497f05188aeb115f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Animations/Track/TrackTotalTimeChange.cs b/Assets/Scripts/Animations/Track/TrackTotalTimeChange.cs new file mode 100644 index 00000000..b5196e01 --- /dev/null +++ b/Assets/Scripts/Animations/Track/TrackTotalTimeChange.cs @@ -0,0 +1,43 @@ +using System.Collections; +using System.Collections.Generic; +using Lean.Pool; +using UnityEngine; + +namespace Ichni.RhythmGame +{ + public class TrackTotalTimeChange : AnimationBase + { + public FlexibleFloat totalTime; + public TrackTimeSubmoduleStatic targetTrackTimeSubmoduleStatic; + + public static TrackTotalTimeChange GenerateElement(string elementName, Track targetTrack, FlexibleFloat totalTime) + { + TrackTotalTimeChange trackTotalTimeChange = LeanPool.Spawn(EditorManager.instance.basePrefabs.emptyObject).AddComponent(); + trackTotalTimeChange.NewInitialize(elementName, targetTrack); + + if (targetTrack.trackTimeSubmodule is TrackTimeSubmoduleStatic submoduleStatic) + { + trackTotalTimeChange.targetTrackTimeSubmoduleStatic = submoduleStatic; + } + else + { + throw new System.Exception("Target object does not have a TrackTimeSubmoduleStatic"); + } + + trackTotalTimeChange.totalTime = totalTime; + trackTotalTimeChange.animationReturnType = FlexibleReturnType.Before; + trackTotalTimeChange.SetTimeDuration(totalTime); + return trackTotalTimeChange; + } + + protected override void UpdateAnimation(float songTime) + { + totalTime.UpdateFlexibleFloat(songTime); + + if (totalTime.returnType == FlexibleReturnType.MiddleExecuting) + { + targetTrackTimeSubmoduleStatic.trackTotalTime = totalTime.value; + } + } + } +} diff --git a/Assets/Scripts/Animations/Track/TrackTotalTimeChange.cs.meta b/Assets/Scripts/Animations/Track/TrackTotalTimeChange.cs.meta new file mode 100644 index 00000000..e8201399 --- /dev/null +++ b/Assets/Scripts/Animations/Track/TrackTotalTimeChange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2eec4a2a4ac744e0ca183d59c465c4e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Animations/Transform/Displacement.cs b/Assets/Scripts/Animations/Transform/Displacement.cs index b1b8f903..261f1f25 100644 --- a/Assets/Scripts/Animations/Transform/Displacement.cs +++ b/Assets/Scripts/Animations/Transform/Displacement.cs @@ -41,6 +41,11 @@ namespace Ichni.RhythmGame return displacement; } + private void Start() + { + targetTransformSubmodule = targetObject.transformSubmodule; + } + protected override void UpdateAnimation(float songTime) { positionX.UpdateFlexibleFloat(songTime); @@ -56,6 +61,10 @@ namespace Ichni.RhythmGame targetTransformSubmodule.positionOffset.Add(currentPosition); targetTransformSubmodule.positionDirtyMark = true; } + else + { + animationReturnType = FlexibleReturnType.MiddleInterval; + } //本体使用,用于判断动画是否结束 // else if (positionX.returnType is FlexibleReturnType.After or FlexibleReturnType.None && diff --git a/Assets/Scripts/Animations/Transform/LookAt.cs b/Assets/Scripts/Animations/Transform/LookAt.cs new file mode 100644 index 00000000..fad10cc7 --- /dev/null +++ b/Assets/Scripts/Animations/Transform/LookAt.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Lean.Pool; +using UnityEngine; +using UnityEngine.Serialization; + +namespace Ichni.RhythmGame +{ + /// + /// 将物体的z轴指向目标物体,注意,LookAt的启用期间,物体的旋转将被锁定 + /// + public class LookAt : AnimationBase + { + public TransformSubmodule targetTransformSubmodule; + public BaseElement lookAtObject; + public FlexibleBool enabling; + + public static LookAt GenerateElement(string elementName, BaseElement targetObject, + BaseElement lookAtTarget, FlexibleBool enabling) + { + LookAt swirl = LeanPool.Spawn(EditorManager.instance.basePrefabs.emptyObject).AddComponent(); + + swirl.NewInitialize(elementName, targetObject); + + swirl.lookAtObject = lookAtTarget; + swirl.enabling = enabling; + swirl.animationReturnType = FlexibleReturnType.Before; + + if (targetObject.transformSubmodule != null) + { + swirl.targetTransformSubmodule = targetObject.transformSubmodule; + } + else + { + throw new System.Exception("Target object does not have a TransformSubmodule"); + } + + swirl.SetTimeDuration(-999, 999); //TODO: 换为(-delay, songLength) + + return swirl; + } + + private void Start() + { + targetTransformSubmodule = targetObject.transformSubmodule; + } + + protected override void UpdateAnimation(float songTime) + { + enabling.UpdateFlexibleBool(songTime); + if (enabling.value) + { + animationReturnType = FlexibleReturnType.MiddleExecuting; + Vector3 lookingDirection = + (lookAtObject.transform.position - targetObject.transform.position).normalized; + + Vector3 eulerAnglesOffset = Quaternion.LookRotation(lookingDirection).eulerAngles; + + targetTransformSubmodule.eulerAnglesOffsetLock = true; + + targetTransformSubmodule.currentEulerAngles = eulerAnglesOffset; + } + else + { + animationReturnType = FlexibleReturnType.MiddleInterval; + targetTransformSubmodule.eulerAnglesOffsetLock = false; + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Animations/Transform/LookAt.cs.meta b/Assets/Scripts/Animations/Transform/LookAt.cs.meta new file mode 100644 index 00000000..7891fcee --- /dev/null +++ b/Assets/Scripts/Animations/Transform/LookAt.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c02ee9e15cdc048c5909a61377382530 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Animations/Transform/Scale.cs b/Assets/Scripts/Animations/Transform/Scale.cs index 179061cd..42e1e8e2 100644 --- a/Assets/Scripts/Animations/Transform/Scale.cs +++ b/Assets/Scripts/Animations/Transform/Scale.cs @@ -49,6 +49,10 @@ namespace Ichni.RhythmGame Vector3 currentScale = new Vector3(scaleX.value, scaleY.value, scaleZ.value); targetTransformSubmodule.scaleOffset.Add(currentScale); targetTransformSubmodule.scaleDirtyMark = true; + } + else + { + animationReturnType = FlexibleReturnType.MiddleInterval; } } } diff --git a/Assets/Scripts/Animations/Transform/Swirl.cs b/Assets/Scripts/Animations/Transform/Swirl.cs index 5f64796a..906eda37 100644 --- a/Assets/Scripts/Animations/Transform/Swirl.cs +++ b/Assets/Scripts/Animations/Transform/Swirl.cs @@ -51,6 +51,10 @@ namespace Ichni.RhythmGame targetTransformSubmodule.eulerAnglesOffset.Add(currentEulerAngles); targetTransformSubmodule.eulerAnglesDirtyMark = true; } + else + { + animationReturnType = FlexibleReturnType.MiddleInterval; + } } } } \ No newline at end of file diff --git a/Assets/Scripts/Base/.DS_Store b/Assets/Scripts/Base/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b61292d79173d8ae0a6fa7db7dc88d316a03d4be GIT binary patch literal 8196 zcmeI1O=}ZD7{{MUqTSFJ>PxjA#I1sO2(>A+6}-eWt#}ZNDXpL-W|NRclWfR~v6MoN zf(o9bUPRQp_2?Jy;=z-C1y6d{i~eV3+wN{MX?hWhGcfZ^cAx*e{C0L`XF^0Q-pEFY zMv2Hk=JoW)XV>&kG*p{?HiZbQyfjLs< zY%!RWk8udZxN6qI@V2#68Kp_ozlKi-uX%iqh{HHS!z&~9#GD! zV5j$1Sj}3+Y3T>6QY_T!6BA!qAQ(DyxX`y z)>0wYObs8OwafK%p`5D-q;8mBj+w&zL~mTES2rYoEc^(XBMMD`FkgQf?Nj}#e6iGu}c-{ zci~oNuacceH~@^u*^#CA>yP|#bttc7XM6Olth#HC@dgaFKP=UQX1u@d;W9|`;)v)W z7042~MOvc@28nN=v7fywy>w3gfU-+HZc3$JE8%Z%1f{NuU0S^)-h31TU-n;um*)BJD4~aX-Bk0-pKrW)E2#FQ z+@-rerI+$6G?Y&4O-MyMI19adtoG4$P%b0pLAL6hkb>{KdwVHH*5K_c&rPhd_0-su z#M-=e>8QQDB%Yx%8t}GW)$7n1Uq1$D0i(;Nd+2ipQ};aH)D9y{ECerI3xQJSC1HFL zZBx|YX7Xt3`R1UU!IWjY=doV=y_{NT3dXjgEh=Kf7cY0uc_{}n1ZAs7`Tl=Seg1zS z`=%SM31|Yn5n!Q2G7*RG_E)K2#`oGL;$1`@xL-?JAweRx /// 首次初始化 @@ -42,6 +44,7 @@ namespace Ichni.RhythmGame this.elementGuid = Guid.NewGuid(); //GameManager.beatMapContainer.beatMapElementList.Add(this); //serialNumber = totalSerialNumber++; + SetTransformObserver(); } /// @@ -77,6 +80,11 @@ namespace Ichni.RhythmGame public abstract partial class BaseElement { + private void Start() + { + SetTransformObserver(); + } + public virtual void SetTimeDuration() { @@ -89,5 +97,60 @@ namespace Ichni.RhythmGame timeDurationSubmodule?.SetDurationFromChildren(childElementList.Select(x=>x.timeDurationSubmodule).ToList()); } + + /// + /// 设置物体Transform的监听,顺序为Scale -> EulerAngles -> Position + /// 如果有一些特殊的物体(例如Camera,ElementFolder),需要自定义监听,可以重写这个方法 + /// + public virtual void SetTransformObserver() + { + Observable.EveryUpdate().Subscribe(_ => + { + if (transformSubmodule == null) + { + return; + } + + if (transformSubmodule.scaleDirtyMark) + { + Vector3 offset = Vector3.zero; + foreach (Vector3 scaleOffset in transformSubmodule.scaleOffset) + { + offset += scaleOffset; + } + transformSubmodule.currentScale = transformSubmodule.originalScale + offset; + transform.localScale = transformSubmodule.currentScale; + transformSubmodule.scaleDirtyMark = false; + } + + if (transformSubmodule.eulerAnglesDirtyMark) + { + Vector3 offset = Vector3.zero; + foreach (Vector3 eulerOffset in transformSubmodule.eulerAnglesOffset) + { + offset += eulerOffset; + } + transformSubmodule.currentEulerAngles = transformSubmodule.originalEulerAngles + offset; + transform.localEulerAngles = transformSubmodule.currentEulerAngles; + transformSubmodule.eulerAnglesDirtyMark = false; + } + + if (transformSubmodule.positionDirtyMark) + { + Vector3 offset = Vector3.zero; + foreach (Vector3 posOffset in transformSubmodule.positionOffset) + { + offset += posOffset; + } + transformSubmodule.currentPosition = transformSubmodule.originalPosition + offset; + transform.localPosition = transformSubmodule.currentPosition; + transformSubmodule.positionDirtyMark = false; + } + + transformSubmodule.scaleOffset.Clear(); + transformSubmodule.eulerAnglesOffset.Clear(); + transformSubmodule.positionOffset.Clear(); + }).AddTo(gameObject); + } } } \ No newline at end of file diff --git a/Assets/Scripts/Base/FlexibleTypes/FlexibleBool.cs b/Assets/Scripts/Base/FlexibleTypes/FlexibleBool.cs new file mode 100644 index 00000000..1e8e3c53 --- /dev/null +++ b/Assets/Scripts/Base/FlexibleTypes/FlexibleBool.cs @@ -0,0 +1,70 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Ichni +{ + [System.Serializable] + public class AnimatedBool + { + public bool value; //bool值 + public float time; //当前时间 + + public AnimatedBool(bool value, float time) + { + this.value = value; + this.time = time; + } + } + + [System.Serializable] + public class FlexibleBool + { + public bool value; + public List animations; + + public FlexibleBool() + { + animations = new List(); + } + + public FlexibleBool(List anim) + { + this.animations = anim; + } + + public void Add(AnimatedBool animatedBool) + { + animations.Add(animatedBool); + } + + /// + /// 在动画脚本的Update中更新Bool Value + /// + /// + public FlexibleReturnType UpdateFlexibleBool(float nowTime) + { + AnimatedBool nowAnimatedBool = GetAnimatedBool(nowTime); //获取当前时间点对应的AnimatedBool + value = nowAnimatedBool.value; //更新value + return FlexibleReturnType.MiddleExecuting; + } + + /// + /// 获取songTime对应的AnimatedBool的时间段 + /// + /// + /// 返回距离当前时间最近的前一个AnimatedBool + AnimatedBool GetAnimatedBool(float nowTime) + { + for (int i = 0; i < animations.Count; i++) + { + if (nowTime >= animations[i].time) + { + return animations[i]; + } + } + + return new AnimatedBool(false, 0); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Base/FlexibleTypes/FlexibleBool.cs.meta b/Assets/Scripts/Base/FlexibleTypes/FlexibleBool.cs.meta new file mode 100644 index 00000000..541019e4 --- /dev/null +++ b/Assets/Scripts/Base/FlexibleTypes/FlexibleBool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43cce55e6aac440e9b664e917adc2f74 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Base/GeneralSubmodules/ColorSubmodule.cs b/Assets/Scripts/Base/GeneralSubmodules/ColorSubmodule.cs index 04cf32c9..ce609f4a 100644 --- a/Assets/Scripts/Base/GeneralSubmodules/ColorSubmodule.cs +++ b/Assets/Scripts/Base/GeneralSubmodules/ColorSubmodule.cs @@ -22,6 +22,11 @@ namespace Ichni.RhythmGame public bool baseColorDirtyMark; public bool emissionColorDirtyMark; + public ColorSubmodule() + { + + } + public ColorSubmodule(Color originalBaseColor) { this.originalBaseColor = originalBaseColor; diff --git a/Assets/Scripts/Base/GeneralSubmodules/TransformSubmodule.cs b/Assets/Scripts/Base/GeneralSubmodules/TransformSubmodule.cs index bf3d6f24..7b3565d8 100644 --- a/Assets/Scripts/Base/GeneralSubmodules/TransformSubmodule.cs +++ b/Assets/Scripts/Base/GeneralSubmodules/TransformSubmodule.cs @@ -26,25 +26,53 @@ namespace Ichni.RhythmGame public bool positionDirtyMark; public bool eulerAnglesDirtyMark; public bool scaleDirtyMark; + + public bool eulerAnglesOffsetLock; public UnityAction OnPositionChanged; public UnityAction OnEulerAnglesChanged; public UnityAction OnScaleChanged; + public TransformSubmodule() + { + this.originalPosition = Vector3.zero; + this.originalEulerAngles = Vector3.zero; + this.originalScale = Vector3.one; + + positionOffset = new List(); + eulerAnglesOffset = new List(); + scaleOffset = new List(); + + currentPosition = Vector3.zero; + currentEulerAngles = Vector3.zero; + currentScale = Vector3.one; + + positionDirtyMark = false; + eulerAnglesDirtyMark = false; + scaleDirtyMark = false; + + eulerAnglesOffsetLock = false; + } + public TransformSubmodule(Vector3 originalPosition, Vector3 originalEulerAngles, Vector3 originalScale) { this.originalPosition = originalPosition; this.originalEulerAngles = originalEulerAngles; this.originalScale = originalScale; + positionOffset = new List(); eulerAnglesOffset = new List(); scaleOffset = new List(); + currentPosition = originalPosition; currentEulerAngles = originalEulerAngles; currentScale = originalScale; + positionDirtyMark = false; eulerAnglesDirtyMark = false; scaleDirtyMark = false; + + eulerAnglesOffsetLock = false; } public void SetObserver(BaseElement target) diff --git a/Assets/Scripts/Base/Manager/BasePrefabsCollection.cs b/Assets/Scripts/Base/Manager/BasePrefabsCollection.cs index a1167e05..64e0fda2 100644 --- a/Assets/Scripts/Base/Manager/BasePrefabsCollection.cs +++ b/Assets/Scripts/Base/Manager/BasePrefabsCollection.cs @@ -9,6 +9,7 @@ public class BasePrefabsCollection : SerializedScriptableObject [Title("基础预制体")] public GameObject emptyObject; public GameObject elementFolder; + public GameObject gameCamera; [Title("Track相关")] public GameObject track; diff --git a/Assets/Scripts/Base/Manager/EditorManager.cs b/Assets/Scripts/Base/Manager/EditorManager.cs index 0897a6b6..31eb362d 100644 --- a/Assets/Scripts/Base/Manager/EditorManager.cs +++ b/Assets/Scripts/Base/Manager/EditorManager.cs @@ -34,6 +34,11 @@ namespace Ichni t0.AfterInitialize(); } + + private void Update() + { + songModule.songTime += Time.deltaTime; + } } public class SongModule diff --git a/Assets/Scripts/Base/Manager/ThemeBundleManager.cs b/Assets/Scripts/Base/Manager/ThemeBundleManager.cs index 05e981f6..5bfa8b13 100644 --- a/Assets/Scripts/Base/Manager/ThemeBundleManager.cs +++ b/Assets/Scripts/Base/Manager/ThemeBundleManager.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.Networking; +using UnityEngine.Serialization; namespace Ichni { @@ -123,20 +124,23 @@ namespace Ichni [System.Serializable] public class ThemeBundleAbstract { - public string themeBundleName; + public string fileName; + public string displayName; + public string description; public List tags; - public string iconPath; public ThemeBundleAbstract() { } - public ThemeBundleAbstract(string themeBundleName, List tags, string iconPath) + public ThemeBundleAbstract(string fileName) { - this.themeBundleName = themeBundleName; - this.tags = tags; - this.iconPath = iconPath; + this.fileName = fileName; + this.displayName = fileName; + this.description = "Default Description"; + this.tags = new List(); + this.iconPath = "Icons/Default.png"; } public Texture2D GetIcon() diff --git a/Assets/Scripts/Console.meta b/Assets/Scripts/Console.meta new file mode 100644 index 00000000..c9544beb --- /dev/null +++ b/Assets/Scripts/Console.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e7fc3c136a914933bc2a6d75b13e7d1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Console/EditorConsole.cs b/Assets/Scripts/Console/EditorConsole.cs new file mode 100644 index 00000000..f2433757 --- /dev/null +++ b/Assets/Scripts/Console/EditorConsole.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using DynamicExpresso; + +namespace Ichni.Editor +{ + public partial class EditorConsole : MonoBehaviour + { + public Interpreter functionInterpreter; + + private void Start() + { + SetUpFunctions(); + + //Test + functionInterpreter.Eval("Log(\"Hello World!\")"); + } + } + + public partial class EditorConsole + { + private void SetUpFunctions() + { + functionInterpreter = new Interpreter(); + + functionInterpreter.SetFunction("Log", (System.Action)Debug.Log); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Console/EditorConsole.cs.meta b/Assets/Scripts/Console/EditorConsole.cs.meta new file mode 100644 index 00000000..57059539 --- /dev/null +++ b/Assets/Scripts/Console/EditorConsole.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 912c3a32e155f4ca79a4ca1fa1f359e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/GameElements/ElementFolder.cs b/Assets/Scripts/GameElements/ElementFolder.cs index 13dfb49e..7d8c5c30 100644 --- a/Assets/Scripts/GameElements/ElementFolder.cs +++ b/Assets/Scripts/GameElements/ElementFolder.cs @@ -14,10 +14,10 @@ namespace Ichni.RhythmGame elementFolder.NewInitialize(name); elementFolder.SetParent(parentElement); + elementFolder.transformSubmodule = new TransformSubmodule(Vector3.zero, Vector3.zero, Vector3.one); //elementFolder.GenerateTab(parentElement); return elementFolder; } - } } \ No newline at end of file diff --git a/Assets/Scripts/GameElements/EnvironmentObjects/EnvironmentObject.cs b/Assets/Scripts/GameElements/EnvironmentObjects/EnvironmentObject.cs new file mode 100644 index 00000000..6f8c7107 --- /dev/null +++ b/Assets/Scripts/GameElements/EnvironmentObjects/EnvironmentObject.cs @@ -0,0 +1,23 @@ +using System.Collections; +using System.Collections.Generic; +using Lean.Pool; +using UnityEngine; + +namespace Ichni.RhythmGame +{ + public class EnvironmentObject : SubstantialObject + { + public bool isStatic; + + public static SubstantialObject GenerateElement(string elementName, string themeBundleName, + string objectName, Vector3 position, Vector3 eulerAngles, Vector3 scale, BaseElement parent, + bool isStatic, bool isFirstGenerated = true) + { + EnvironmentObject themeBundleObject = ThemeBundleManager.instance.GetObject(themeBundleName, objectName); + EnvironmentObject environmentObject = LeanPool.Spawn(themeBundleObject, parent.transform).GetComponent(); + environmentObject.NewInitialize(elementName); + environmentObject.isStatic = isStatic; + return environmentObject; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/GameElements/EnvironmentObjects/EnvironmentObject.cs.meta b/Assets/Scripts/GameElements/EnvironmentObjects/EnvironmentObject.cs.meta new file mode 100644 index 00000000..25235a03 --- /dev/null +++ b/Assets/Scripts/GameElements/EnvironmentObjects/EnvironmentObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b73aa7982dc9e4261b2ff45db0112d48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/GameElements/GameCamera.meta b/Assets/Scripts/GameElements/GameCamera.meta new file mode 100644 index 00000000..62bb8dda --- /dev/null +++ b/Assets/Scripts/GameElements/GameCamera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 56a4c0ac4ed204fcfb16a22f625230cd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/GameElements/GameCamera/GameCamera.cs b/Assets/Scripts/GameElements/GameCamera/GameCamera.cs new file mode 100644 index 00000000..124ba416 --- /dev/null +++ b/Assets/Scripts/GameElements/GameCamera/GameCamera.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Dreamteck.Splines; +using Lean.Pool; +using UniRx; +using UnityEngine; +using UnityEngine.Serialization; + +namespace Ichni.RhythmGame +{ + public partial class GameCamera : BaseElement + { + public Camera camera; + public Transform rotationPoint; + public Transform positionPoint; + public Transform cameraTransform; + + public CameraViewType cameraViewType; + public float perspectiveAngle; + public float orthographicSize; + + public static GameCamera GenerateElement(string elementName, BaseElement parentElement, + CameraViewType cameraViewType, float perspectiveAngle, float orthographicSize, + Vector3 initialPosition, Vector3 initialEulerAngles) + { + GameCamera gameCamera = LeanPool.Spawn(EditorManager.instance.basePrefabs.gameCamera).GetComponent(); + + gameCamera.NewInitialize(elementName); + gameCamera.parentElement = parentElement; + gameCamera.cameraViewType = cameraViewType; + gameCamera.camera.orthographic = cameraViewType == CameraViewType.Orthographic; + gameCamera.perspectiveAngle = perspectiveAngle; + gameCamera.orthographicSize = orthographicSize; + gameCamera.transformSubmodule = new TransformSubmodule(initialPosition, initialEulerAngles, Vector3.one); + gameCamera.cameraTransform = gameCamera.transform; + + gameCamera.SetParent(parentElement); + + return gameCamera; + } + } + + public partial class GameCamera + { + public enum CameraViewType + { + None = -1, + Perspective = 0, + Orthographic = 1 + } + } + + public partial class GameCamera + { + public override void SetTransformObserver() + { + Observable.EveryUpdate().Subscribe(_ => + { + if (transformSubmodule.eulerAnglesOffsetLock) + { + rotationPoint.eulerAngles = transformSubmodule.currentEulerAngles; + } + else if (transformSubmodule.eulerAnglesDirtyMark) + { + Vector3 offset = Vector3.zero; + foreach (Vector3 eulerOffset in transformSubmodule.eulerAnglesOffset) + { + offset += eulerOffset; + } + transformSubmodule.currentEulerAngles = transformSubmodule.originalEulerAngles + offset; + rotationPoint.eulerAngles = transformSubmodule.currentEulerAngles; + transformSubmodule.eulerAnglesDirtyMark = false; + } + + if (transformSubmodule.positionDirtyMark) + { + Vector3 offset = Vector3.zero; + foreach (Vector3 posOffset in transformSubmodule.positionOffset) + { + offset += posOffset; + } + transformSubmodule.currentPosition = transformSubmodule.originalPosition + offset; + positionPoint.localPosition = transformSubmodule.currentPosition; + transformSubmodule.positionDirtyMark = false; + } + }).AddTo(gameObject); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/GameElements/GameCamera/GameCamera.cs.meta b/Assets/Scripts/GameElements/GameCamera/GameCamera.cs.meta new file mode 100644 index 00000000..2ccc18e7 --- /dev/null +++ b/Assets/Scripts/GameElements/GameCamera/GameCamera.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79d811a12f27f43629797719fcbfc6ae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/GameElements/Notes/NoteBase.cs b/Assets/Scripts/GameElements/Notes/NoteBase.cs index c6440180..a3d7caff 100644 --- a/Assets/Scripts/GameElements/Notes/NoteBase.cs +++ b/Assets/Scripts/GameElements/Notes/NoteBase.cs @@ -17,9 +17,9 @@ namespace Ichni.RhythmGame public Track track; public SplinePositioner trackPositioner; - // [Title("NoteVisual")] - // public GeneralNoteVisual noteVisual; - // + [Title("NoteVisual")] + public NoteVisualBase noteVisual; + [Title("NoteEffect")] [Tooltip("生成Note时的特效")] public EffectSubmodule generateEffects; diff --git a/Assets/Scripts/GameElements/Notes/NoteEffectBase.cs b/Assets/Scripts/GameElements/Notes/NoteEffectBase.cs new file mode 100644 index 00000000..63776280 --- /dev/null +++ b/Assets/Scripts/GameElements/Notes/NoteEffectBase.cs @@ -0,0 +1,12 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Ichni.RhythmGame +{ + public class NoteEffectBase : EffectBase + { + public NoteBase note; + public NoteVisualBase noteVisual; + } +} \ No newline at end of file diff --git a/Assets/Scripts/GameElements/Notes/NoteEffectBase.cs.meta b/Assets/Scripts/GameElements/Notes/NoteEffectBase.cs.meta new file mode 100644 index 00000000..41604af9 --- /dev/null +++ b/Assets/Scripts/GameElements/Notes/NoteEffectBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5346ecda36b94450cba8f853621bdfdb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/GameElements/Notes/NoteVisual/NoteVisualBase.cs b/Assets/Scripts/GameElements/Notes/NoteVisual/NoteVisualBase.cs index c49ea072..2e6ccd1c 100644 --- a/Assets/Scripts/GameElements/Notes/NoteVisual/NoteVisualBase.cs +++ b/Assets/Scripts/GameElements/Notes/NoteVisual/NoteVisualBase.cs @@ -2,17 +2,22 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -public class NoteVisualBase : MonoBehaviour +namespace Ichni.RhythmGame { - // Start is called before the first frame update - void Start() + public class NoteVisualBase : SubstantialObject { + public NoteBase note; - } + public GameObject noteMain; + public GameObject judgeEffect; - // Update is called once per frame - void Update() - { + public List notePartList; + public List effectPartList; + public void NewInitialize(NoteBase note) + { + base.NewInitialize(note.elementName + " Note Visual"); + this.note = note; + } } -} +} \ No newline at end of file diff --git a/Assets/Scripts/GameElements/Track/TrackPoints/TrackPercentPoint.cs b/Assets/Scripts/GameElements/Track/TrackPoints/TrackPercentPoint.cs index 83dd7cc5..e7aa6431 100644 --- a/Assets/Scripts/GameElements/Track/TrackPoints/TrackPercentPoint.cs +++ b/Assets/Scripts/GameElements/Track/TrackPoints/TrackPercentPoint.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using System.Linq; using Dreamteck.Splines; using Lean.Pool; using UniRx; @@ -15,6 +16,8 @@ namespace Ichni.RhythmGame public Track track; public SplinePositioner trackPositioner; public FlexibleFloat trackPercent; + + private bool isBeyond1 = false; public static TrackPercentPoint GenerateElement(string elementName, Track track, FlexibleFloat trackPercent) { @@ -23,6 +26,8 @@ namespace Ichni.RhythmGame point.NewInitialize(elementName, track, trackPercent); point.SetParent(track); + point.isBeyond1 = trackPercent.animations.Any(animation => animation.endValue > 1);//判断是否有超过1的动画,超过1将会循环 + return point; } @@ -42,7 +47,14 @@ namespace Ichni.RhythmGame trackPercent.UpdateFlexibleFloat(EditorManager.instance.songModule.songTime); if (trackPercent.returnType == FlexibleReturnType.MiddleExecuting) { - trackPositioner.SetPercent(trackPercent.value); + float finalValue = trackPercent.value; + + if (isBeyond1) + { + finalValue -= Mathf.Floor(finalValue); + } + + trackPositioner.SetPercent(finalValue); } } } diff --git a/Assets/Settings/URP-Balanced.asset b/Assets/Settings/URP-Balanced.asset index 65bbfc82..aef05b84 100644 --- a/Assets/Settings/URP-Balanced.asset +++ b/Assets/Settings/URP-Balanced.asset @@ -82,33 +82,33 @@ MonoBehaviour: m_Textures: blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} - m_PrefilteringModeMainLightShadows: 1 - m_PrefilteringModeAdditionalLight: 4 - m_PrefilteringModeAdditionalLightShadows: 1 - m_PrefilterXRKeywords: 0 - m_PrefilteringModeForwardPlus: 1 - m_PrefilteringModeDeferredRendering: 1 - m_PrefilteringModeScreenSpaceOcclusion: 1 - m_PrefilterDebugKeywords: 0 - m_PrefilterWriteRenderingLayers: 0 - m_PrefilterHDROutput: 0 - m_PrefilterSSAODepthNormals: 0 + m_PrefilteringModeMainLightShadows: 3 + m_PrefilteringModeAdditionalLight: 3 + m_PrefilteringModeAdditionalLightShadows: 0 + m_PrefilterXRKeywords: 1 + m_PrefilteringModeForwardPlus: 0 + m_PrefilteringModeDeferredRendering: 0 + m_PrefilteringModeScreenSpaceOcclusion: 2 + m_PrefilterDebugKeywords: 1 + m_PrefilterWriteRenderingLayers: 1 + m_PrefilterHDROutput: 1 + m_PrefilterSSAODepthNormals: 1 m_PrefilterSSAOSourceDepthLow: 0 - m_PrefilterSSAOSourceDepthMedium: 0 - m_PrefilterSSAOSourceDepthHigh: 0 + m_PrefilterSSAOSourceDepthMedium: 1 + m_PrefilterSSAOSourceDepthHigh: 1 m_PrefilterSSAOInterleaved: 0 - m_PrefilterSSAOBlueNoise: 0 + m_PrefilterSSAOBlueNoise: 1 m_PrefilterSSAOSampleCountLow: 0 - m_PrefilterSSAOSampleCountMedium: 0 - m_PrefilterSSAOSampleCountHigh: 0 - m_PrefilterDBufferMRT1: 0 - m_PrefilterDBufferMRT2: 0 - m_PrefilterDBufferMRT3: 0 - m_PrefilterSoftShadowsQualityLow: 0 - m_PrefilterSoftShadowsQualityMedium: 0 - m_PrefilterSoftShadowsQualityHigh: 0 + m_PrefilterSSAOSampleCountMedium: 1 + m_PrefilterSSAOSampleCountHigh: 1 + m_PrefilterDBufferMRT1: 1 + m_PrefilterDBufferMRT2: 1 + m_PrefilterDBufferMRT3: 1 + m_PrefilterSoftShadowsQualityLow: 1 + m_PrefilterSoftShadowsQualityMedium: 1 + m_PrefilterSoftShadowsQualityHigh: 1 m_PrefilterSoftShadows: 0 - m_PrefilterScreenCoord: 0 - m_PrefilterNativeRenderPass: 0 + m_PrefilterScreenCoord: 1 + m_PrefilterNativeRenderPass: 1 m_ShaderVariantLogLevel: 0 m_ShadowCascades: 0 diff --git a/Assets/Settings/URP-HighFidelity.asset b/Assets/Settings/URP-HighFidelity.asset index d5265974..627e0eb0 100644 --- a/Assets/Settings/URP-HighFidelity.asset +++ b/Assets/Settings/URP-HighFidelity.asset @@ -82,33 +82,33 @@ MonoBehaviour: m_Textures: blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} - m_PrefilteringModeMainLightShadows: 1 - m_PrefilteringModeAdditionalLight: 4 - m_PrefilteringModeAdditionalLightShadows: 1 - m_PrefilterXRKeywords: 0 - m_PrefilteringModeForwardPlus: 1 - m_PrefilteringModeDeferredRendering: 1 - m_PrefilteringModeScreenSpaceOcclusion: 1 - m_PrefilterDebugKeywords: 0 - m_PrefilterWriteRenderingLayers: 0 - m_PrefilterHDROutput: 0 + m_PrefilteringModeMainLightShadows: 3 + m_PrefilteringModeAdditionalLight: 3 + m_PrefilteringModeAdditionalLightShadows: 2 + m_PrefilterXRKeywords: 1 + m_PrefilteringModeForwardPlus: 0 + m_PrefilteringModeDeferredRendering: 0 + m_PrefilteringModeScreenSpaceOcclusion: 2 + m_PrefilterDebugKeywords: 1 + m_PrefilterWriteRenderingLayers: 1 + m_PrefilterHDROutput: 1 m_PrefilterSSAODepthNormals: 0 - m_PrefilterSSAOSourceDepthLow: 0 - m_PrefilterSSAOSourceDepthMedium: 0 - m_PrefilterSSAOSourceDepthHigh: 0 + m_PrefilterSSAOSourceDepthLow: 1 + m_PrefilterSSAOSourceDepthMedium: 1 + m_PrefilterSSAOSourceDepthHigh: 1 m_PrefilterSSAOInterleaved: 0 - m_PrefilterSSAOBlueNoise: 0 - m_PrefilterSSAOSampleCountLow: 0 - m_PrefilterSSAOSampleCountMedium: 0 + m_PrefilterSSAOBlueNoise: 1 + m_PrefilterSSAOSampleCountLow: 1 + m_PrefilterSSAOSampleCountMedium: 1 m_PrefilterSSAOSampleCountHigh: 0 - m_PrefilterDBufferMRT1: 0 - m_PrefilterDBufferMRT2: 0 - m_PrefilterDBufferMRT3: 0 - m_PrefilterSoftShadowsQualityLow: 0 - m_PrefilterSoftShadowsQualityMedium: 0 - m_PrefilterSoftShadowsQualityHigh: 0 + m_PrefilterDBufferMRT1: 1 + m_PrefilterDBufferMRT2: 1 + m_PrefilterDBufferMRT3: 1 + m_PrefilterSoftShadowsQualityLow: 1 + m_PrefilterSoftShadowsQualityMedium: 1 + m_PrefilterSoftShadowsQualityHigh: 1 m_PrefilterSoftShadows: 0 - m_PrefilterScreenCoord: 0 - m_PrefilterNativeRenderPass: 0 + m_PrefilterScreenCoord: 1 + m_PrefilterNativeRenderPass: 1 m_ShaderVariantLogLevel: 0 m_ShadowCascades: 1 diff --git a/Assets/Settings/URP-Performant.asset b/Assets/Settings/URP-Performant.asset index 8650b693..05bb7419 100644 --- a/Assets/Settings/URP-Performant.asset +++ b/Assets/Settings/URP-Performant.asset @@ -82,33 +82,33 @@ MonoBehaviour: m_Textures: blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} - m_PrefilteringModeMainLightShadows: 1 - m_PrefilteringModeAdditionalLight: 4 - m_PrefilteringModeAdditionalLightShadows: 1 - m_PrefilterXRKeywords: 0 - m_PrefilteringModeForwardPlus: 1 - m_PrefilteringModeDeferredRendering: 1 - m_PrefilteringModeScreenSpaceOcclusion: 1 - m_PrefilterDebugKeywords: 0 - m_PrefilterWriteRenderingLayers: 0 - m_PrefilterHDROutput: 0 - m_PrefilterSSAODepthNormals: 0 - m_PrefilterSSAOSourceDepthLow: 0 - m_PrefilterSSAOSourceDepthMedium: 0 - m_PrefilterSSAOSourceDepthHigh: 0 - m_PrefilterSSAOInterleaved: 0 - m_PrefilterSSAOBlueNoise: 0 - m_PrefilterSSAOSampleCountLow: 0 - m_PrefilterSSAOSampleCountMedium: 0 - m_PrefilterSSAOSampleCountHigh: 0 - m_PrefilterDBufferMRT1: 0 - m_PrefilterDBufferMRT2: 0 - m_PrefilterDBufferMRT3: 0 - m_PrefilterSoftShadowsQualityLow: 0 - m_PrefilterSoftShadowsQualityMedium: 0 - m_PrefilterSoftShadowsQualityHigh: 0 + m_PrefilteringModeMainLightShadows: 0 + m_PrefilteringModeAdditionalLight: 0 + m_PrefilteringModeAdditionalLightShadows: 0 + m_PrefilterXRKeywords: 1 + m_PrefilteringModeForwardPlus: 0 + m_PrefilteringModeDeferredRendering: 0 + m_PrefilteringModeScreenSpaceOcclusion: 0 + m_PrefilterDebugKeywords: 1 + m_PrefilterWriteRenderingLayers: 1 + m_PrefilterHDROutput: 1 + m_PrefilterSSAODepthNormals: 1 + m_PrefilterSSAOSourceDepthLow: 1 + m_PrefilterSSAOSourceDepthMedium: 1 + m_PrefilterSSAOSourceDepthHigh: 1 + m_PrefilterSSAOInterleaved: 1 + m_PrefilterSSAOBlueNoise: 1 + m_PrefilterSSAOSampleCountLow: 1 + m_PrefilterSSAOSampleCountMedium: 1 + m_PrefilterSSAOSampleCountHigh: 1 + m_PrefilterDBufferMRT1: 1 + m_PrefilterDBufferMRT2: 1 + m_PrefilterDBufferMRT3: 1 + m_PrefilterSoftShadowsQualityLow: 1 + m_PrefilterSoftShadowsQualityMedium: 1 + m_PrefilterSoftShadowsQualityHigh: 1 m_PrefilterSoftShadows: 0 - m_PrefilterScreenCoord: 0 - m_PrefilterNativeRenderPass: 0 + m_PrefilterScreenCoord: 1 + m_PrefilterNativeRenderPass: 1 m_ShaderVariantLogLevel: 0 m_ShadowCascades: 0 diff --git a/Assets/Shaders.meta b/Assets/Shaders.meta new file mode 100644 index 00000000..eb5ad48a --- /dev/null +++ b/Assets/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 41d169eab4b5f42bd82f68363fe237b1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/DefaultShaderVariants.shadervariants b/Assets/Shaders/DefaultShaderVariants.shadervariants new file mode 100644 index 00000000..3e60b289 --- /dev/null +++ b/Assets/Shaders/DefaultShaderVariants.shadervariants @@ -0,0 +1,162 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!200 &20000000 +ShaderVariantCollection: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: DefaultShaderVariants + m_Shaders: + - first: {fileID: 66, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 106, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: _SUNDISK_SIMPLE + passType: 0 + - first: {fileID: 211, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - keywords: + passType: 8 + - keywords: PROCEDURAL_INSTANCING_ON + passType: 8 + - first: {fileID: 9000, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 9001, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 9002, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 9003, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 9004, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 9007, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 9101, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 9103, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} + second: + variants: + - keywords: _OUTPUT_DEPTH + passType: 0 + - first: {fileID: 4800000, guid: 65df88701913c224d95fc554db28381a, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: e7857e9d0c934dc4f83f270f8447b006, type: 3} + second: + variants: + - keywords: _BLOOM_HQ _TONEMAP_NEUTRAL + passType: 0 + - first: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 0849e84e3d62649e8882e9d6f056a017, type: 3} + second: + variants: + - keywords: + passType: 0 + - keywords: _INTERLEAVED_GRADIENT _SAMPLE_COUNT_HIGH _SOURCE_DEPTH_NORMALS + passType: 0 + - first: {fileID: 4800000, guid: 5f1864addb451f54bae8c86d230f736e, type: 3} + second: + variants: + - keywords: + passType: 0 + - keywords: _BLOOM_HQ + passType: 0 + - first: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + second: + variants: + - keywords: + passType: 8 + - keywords: + passType: 13 + - keywords: _ADDITIONAL_LIGHTS _ADDITIONAL_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS + _REFLECTION_PROBE_BLENDING _REFLECTION_PROBE_BOX_PROJECTION _SCREEN_SPACE_OCCLUSION + passType: 13 + - keywords: _ADDITIONAL_LIGHTS _ADDITIONAL_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE + _REFLECTION_PROBE_BLENDING _REFLECTION_PROBE_BOX_PROJECTION _SCREEN_SPACE_OCCLUSION + _SHADOWS_SOFT + passType: 13 + - first: {fileID: 4800000, guid: 36e335017ad71d54fbb10842863188ae, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 4df145ea9bd404e449891032fa9179dc, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 99e0f263ae4ed2d4d962a2e995dff6df, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 2ad0a53eacb91bd4fbe0dc668bf25e6f, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 0a8f4dcd626bcd14bbbfa5a5e116b16e, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 603d454d711fe784cba9ce08dd22b881, type: 3} + second: + variants: + - keywords: DUMMY + passType: 0 + - first: {fileID: 4800000, guid: 3230fdc399f8287488325e5941a00527, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 7cbb3655339ec401ca75ba5fe26884f4, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: bedd19944f451ba4d83e7ed69be98d5c, type: 3} + second: + variants: + - keywords: + passType: 0 diff --git a/Assets/Shaders/DefaultShaderVariants.shadervariants.meta b/Assets/Shaders/DefaultShaderVariants.shadervariants.meta new file mode 100644 index 00000000..1ac00f59 --- /dev/null +++ b/Assets/Shaders/DefaultShaderVariants.shadervariants.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3dde077192f1340ebbb7a7a3085916cc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 20000000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets.meta b/Assets/StreamingAssets.meta new file mode 100644 index 00000000..175d64df --- /dev/null +++ b/Assets/StreamingAssets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dc12867f9fc0d46cabeec9bdb4795a77 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/.DS_Store b/Assets/StreamingAssets/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a9d8656d5a2d5a43686d8de5c7fcfe4fe5a3e8af GIT binary patch literal 6148 zcmeHK!EVz)5S>i|*-#KcYNei#C9YLTOI4}jVoW%2#T6U?1-rJ0h3$=MM>#~1e1>n} z$eAl&z=03oEBFVPnVpK3kV?HE6zxc}Z@fEi?R{(SdI3NM(_{~z4*(jSuyX^8zZkWX zFIh`!x`>MVNFjhJl#oEale!e(K8vIH zd6v#b{msXwtfQ<~$|pnJME>Tl2Ihx>yaZ~x$EvE$8; zC_Z>_xLEY`*1h`=pN-z-MQPsi2teVw#db^Z3_f76QkVSgUU*`P2`9HUZ(o*MnBh>g z(08|feEaz6E9tnh@4_Tk%AbtSJxhB)k923%e8MizaShQQGy54?=Vz9BaklOX$h)sM z)_tIEd`ymVl}M*zeQR%bfr_kDR5DNw!Q4r{{Lk4`TruxT{#7u z0&As!>I}nSfJ2hKb!l+4*Lvu0(8(yTvB(rGWIN`7w&HDcHf-}KK=cJ0i&%r^egs$s LS2zX!sRF+M;XjTL literal 0 HcmV?d00001 diff --git a/Assets/StreamingAssets/ThemeBundles.meta b/Assets/StreamingAssets/ThemeBundles.meta new file mode 100644 index 00000000..ff90031c --- /dev/null +++ b/Assets/StreamingAssets/ThemeBundles.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a2ffb7e2b665348d8af211996c337be6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/ThemeBundles/.DS_Store b/Assets/StreamingAssets/ThemeBundles/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d83e1a5384ac3be081d1c4855f237b7a4a28a11a GIT binary patch literal 6148 zcmeHK&x_MQ6n?X1iW}CYrC%d16ioG9`+;{aRrr{G{p@jnX*aAp%ijn z5B>q7H*bO-1;L|#g8z-^do!~%*>vkoWSIvu-(=qVW}5G1W;y`Cx?{f$&;S6Ag|L1Z zt2st~DivGOJw#@5i~($b3mzl~VI|sh7zK<1|C<7|b}d}7E+h~@Vf~7M7YYx(6mbvB zhu_k$1+Z3S;L49+2r0M+VTt?s47Uak!GWh|qG*PV!VEgf%aW1)9bdgs7$j+{^^+~t z>X(*R_zGX;FPtNhIjNhDldgOGjGi6~5qhU>*LxBSvwq|1eG#W_5D$+fA@GM7^87G} zeUWv=IQA3Cb(Di!-0C;hCzCsS?WVoCvpa3tlfBJW)84whJ)K(o+KpRxAN5~{Q7leK z5ZnN92b6Y2<0-tshJKsyRofYeXe3>1|JTeDiC#~?CvV^U-hcn`2PvX?k?}bpt z%B=${c?CeMW4APH(;o)n*cv+;bA{+ZV~UEXs7zlmn4)99t>ZcxbA^fyOkX~jo|)+z z3X`+r__hoO)=_9`qkvJMtUygYHt76+aQ^+jOfpYK0i(c$Qh?QaPOpovq|esM%h6eD uV|j^%jN)>Il7f{!j%9<6;&m+2&}UNvv7<3ph&^cLkARfHR7Qb+s=yyX7YHc; literal 0 HcmV?d00001 diff --git a/Assets/StreamingAssets/ThemeBundles/OSX.meta b/Assets/StreamingAssets/ThemeBundles/OSX.meta new file mode 100644 index 00000000..d934204b --- /dev/null +++ b/Assets/StreamingAssets/ThemeBundles/OSX.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 50379fdcfefa54bd2bc45c900e3db318 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/ThemeBundles/OSX/OSX b/Assets/StreamingAssets/ThemeBundles/OSX/OSX new file mode 100644 index 0000000000000000000000000000000000000000..89991e71aa7d50230e7aa4312a176d90856d8376 GIT binary patch literal 1025 zcmV+c1pfO~ZfSIRMpFO)000OzE_g0@05UK#GA=VNH8o~200000000040RR91K>z>% zTL1t8LjV8(00000000000000U009890RR9HbN~PYaR5OM00;p902%=B7ytxAK|(EJ zV`MosF=J*nFf}n`IWc56W;8f6H(@p~Vm2~2Vq!D^00000000000000000018000O8 z003+OBl_|HAPnaq=;zKX;OFjdIpvjh3prfFz>h$lb0^YTL|JibA>lUQAUWk;9z0?u z;_14v(WdAHwp}Kn9r>SSq=yM$q?E_>>M<0&@?9ENXc0MsxDg5VahA61aKk7&#IUv< zGoLO&xP-2*e@E{F>dV3}jOd-(u*$4&Ak&H>@7nEjS%X!fqvB;=75U5iZ`Gv=uF=QZ ziKUcn@!BXo5UXp46uSBf&l?zBe~>&j;*Cj~4qiNV1Ctcc>{~CLH_8UkEJ7*jFBu?= zSzp&Mko^40O#83TZz6POI8TLMCJ_nU$xfHHB1x>`21K!+4*N1@!b!|z{F2V(vO0Ut znXYF4=?UwA`CO_spuF`LrsWq8)a459puyNU0Vo8}(-;kabA^f5QKP>G!Z$143HiMp z+GgN;Y@gdd`xCzo2p{@^8tHZg`A8@%;Big%nGP#XGWv4|HHVP_SXn_Ng?SR@-j#WQ z;^Y&qjd$`$VnsvLYk#}elDjv~{%diJO#x+L*cW55{Om595jf@3j%fMpW<9D+gUar; z2MoJmkH{F~`U(nYNd6!!gx0#@)aJkSBUG-@>N`(SzXS^O2NG-Y7?Ei|vtG4U68i5V zb6S%8{Kp*PK|lDRq?VH?{w=Z@8}~Q-{5X9+hAin9NC*&MC}zp$I4@&jIqmVWf38s` z{oNJxWaT*r=@cx}{z2N-OUO-m^thC?PfZR4X0zMfJXKr=Fl#uwmOHz%Y{S#vs{s0p z&9}?e)26>afn8oG*O8Kvi&L@ru#qF{YCcl{sD~KZ3e(YpH#V^6$JY3rFf_V0W3&P* zLI1@4x50YsCI#XoKJat=SdqYzYOSZy2{5B)UGmi^l^MIAODCmww{Hh*MD^8DTKeGu z7d2BMi^C0Y1dX+hS13^*Qyi?<#y#)S<4Gpye?H;E_KYb;HjI9_) z_QYqqW6_I}uHh-~=sUxk`l_cA4ls|)#)sk5gg94L5QLtbgFJ_SJO>S!{c(k6IB(iJ zm7RfAO83&`=|6@FphcyJ9aE_4pt8tUdVnLTDh2$ggJ%uh`;pmSYM&1HY+WuK0u^98 vpT&e!aoNs*ll>8uiHhMT1Qe{({&+=E%qc{I=?@Y$m;MAM9Go!U{v`CCjvvg% literal 0 HcmV?d00001 diff --git a/Assets/StreamingAssets/ThemeBundles/OSX/OSX.manifest b/Assets/StreamingAssets/ThemeBundles/OSX/OSX.manifest new file mode 100644 index 00000000..383bdfcb --- /dev/null +++ b/Assets/StreamingAssets/ThemeBundles/OSX/OSX.manifest @@ -0,0 +1,7 @@ +ManifestFileVersion: 0 +CRC: 3929595412 +AssetBundleManifest: + AssetBundleInfos: + Info_0: + Name: basic + Dependencies: {} diff --git a/Assets/StreamingAssets/ThemeBundles/OSX/OSX.manifest.meta b/Assets/StreamingAssets/ThemeBundles/OSX/OSX.manifest.meta new file mode 100644 index 00000000..2443cffe --- /dev/null +++ b/Assets/StreamingAssets/ThemeBundles/OSX/OSX.manifest.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c7d02a146f9384a499ca4f8f48a4f2df +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/ThemeBundles/OSX/OSX.meta b/Assets/StreamingAssets/ThemeBundles/OSX/OSX.meta new file mode 100644 index 00000000..ccccab31 --- /dev/null +++ b/Assets/StreamingAssets/ThemeBundles/OSX/OSX.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3ad242f2d62504ac7a715c8b78e91261 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/ThemeBundles/OSX/basic b/Assets/StreamingAssets/ThemeBundles/OSX/basic new file mode 100644 index 0000000000000000000000000000000000000000..786d5d34915d8b719c1db30c5508ca001a74b6d4 GIT binary patch literal 78571 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

A+s5c7?*%;!h>T}PR@{K^*iVzmw06k(n3Sb%N> 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 literal 0 HcmV?d00001 diff --git a/Assets/StreamingAssets/ThemeBundles/OSX/basic.manifest b/Assets/StreamingAssets/ThemeBundles/OSX/basic.manifest new file mode 100644 index 00000000..375f7e2b --- /dev/null +++ b/Assets/StreamingAssets/ThemeBundles/OSX/basic.manifest @@ -0,0 +1,44 @@ +ManifestFileVersion: 0 +CRC: 3692374476 +Hashes: + AssetFileHash: + serializedVersion: 2 + Hash: d3fff661e0cc14bfbc3d0521f65d26e7 + TypeTreeHash: + serializedVersion: 2 + Hash: 0b29093cb0b98a6a3edca231f6a05b16 + IncrementalBuildHash: + serializedVersion: 2 + Hash: d3fff661e0cc14bfbc3d0521f65d26e7 +HashAppended: 0 +ClassTypes: +- Class: 1 + Script: {instanceID: 0} +- Class: 4 + Script: {instanceID: 0} +- Class: 21 + Script: {instanceID: 0} +- Class: 23 + Script: {instanceID: 0} +- Class: 28 + Script: {instanceID: 0} +- Class: 33 + Script: {instanceID: 0} +- Class: 43 + Script: {instanceID: 0} +- Class: 48 + Script: {instanceID: 0} +- Class: 114 + Script: {fileID: 11500000, guid: 72caf325f2b59403c94193cd2037b7ba, type: 3} +- Class: 115 + Script: {instanceID: 0} +- Class: 212 + Script: {instanceID: 0} +- Class: 213 + Script: {instanceID: 0} +SerializeReferenceClassIdentifiers: +- AssemblyName: Sirenix.Serialization + ClassName: Sirenix.Serialization.SerializationData +Assets: +- Assets/ThemeBundles/Basic/Prefabs/BasicNoteTap3D.prefab +Dependencies: [] diff --git a/Assets/StreamingAssets/ThemeBundles/OSX/basic.manifest.meta b/Assets/StreamingAssets/ThemeBundles/OSX/basic.manifest.meta new file mode 100644 index 00000000..cfea5135 --- /dev/null +++ b/Assets/StreamingAssets/ThemeBundles/OSX/basic.manifest.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c2010a804ee234d968caaf856b709731 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/ThemeBundles/OSX/basic.meta b/Assets/StreamingAssets/ThemeBundles/OSX/basic.meta new file mode 100644 index 00000000..3c77f420 --- /dev/null +++ b/Assets/StreamingAssets/ThemeBundles/OSX/basic.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2ea334df976a143c9a871c18b3292255 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/ThemeBundles/Windows64.meta b/Assets/StreamingAssets/ThemeBundles/Windows64.meta new file mode 100644 index 00000000..c4bd1969 --- /dev/null +++ b/Assets/StreamingAssets/ThemeBundles/Windows64.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ab53f1438957c48ca8d3166755f9baba +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/ThemeBundles/Windows64/Windows64 b/Assets/StreamingAssets/ThemeBundles/Windows64/Windows64 new file mode 100644 index 0000000000000000000000000000000000000000..3f002c28fc9eb6838b7a9b5dc1a126666f60427f GIT binary patch literal 1026 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

Ua)xazZXcKo^DTMA1DibQ0CYR@bR zv=p!>m@~~2pz3)PI@hn@oG)>R@rGr^PM0 z-vKfuZQ`z-^+3K+(3WydSa5>a?>_yuMVl5*~vGp*&Z2zkT=A2pJVUxPYR)xGx^?bi@9vYN(Tmk3(bZ%A zsZU7HS)maeQF54Izjuj7LDCK8kMH4RjtvRTZPE>E z<&s&zh3E(4Ux~Y-Lxs(#V=Zn!Y#Y96UIbEGTOk6U)+d=xBw)KIYvc_gi;o0k3@j+@ z#h@Z4v$4bqLVdgEp)Wg*CLV}A%eG(FMMFrj0j~L?rQ7K3u}lL9yZTx|iW9M?m~^Oh zT%Lr}7~moZF^D|;6G%!HS3tB8uydb~9V6N}E0z#5TeO^7dAHVnQi*l!5scdwh>ja$ zoAIL4QUdOKodbn0XkN4E2LU@Tg@iY>lG~qW*u6|&zv2}tH7Na&(w)-7$vT^`?zhdeCE0zmO2@+)_<7uG8fbiT)3fHQ*B&NGl1j>`^bq+rc(P{ovT%tpq~Q$@|! zDJr>d0%}IVlP9!v1fB6`(q(TZBcK{_e4d|##Y(j%$vz#K3UuAc#~tOhp+0DEKjiSY zSEVr#CmBgaVF+{D4X`e}H>MFPT54s7?CqlYO9c|j_hK9WT&p6J_h;C*f4RVK6o$T| zl@$X0-6RX3^H!hkq@d{srlAV6+3E2>eK*-T=D-Jqj8(R%!76`b&+h>mLOB6ON!0xG zejEg=-j*gxvaEcdv_w(uPRgt?iEW~}dN$1P9_f`V_sXmoe0Ii^AHT|qjc;-5DcJY| z|EWKTH2sda?rdE^*#euIS~FD^dR{�!(L_;^;Oumshg2(WK#WFT%6iF5j`8tpe9G zbM3V~yKnzRk>~Tp8C*lW;Sgt0XjgL*U%ZDJPK#g*GJchTmq;i}FiIMl8QiSKxXogb zlg8I~*oVi>pw=`Z)jW)pZ51K17Bb$7l)Nmti6hX-?hj!%|5THOcQGQPe($+9vCZ_7 z?E?M^*A7t8!|+)YB2T)dghvOvn)np{@qvOurtcE@v*t61k#)A-d~C7j?zBh6seFJI z$NH(!$zE^#AHTlBh2l6%vgB};^c5akCg}u&HAyFj#ST53+u~NzLd9fbM8Xc-$Ov6ujKLScWkC~6L%1v6$Gzd5Z zr2BL;%c%WatOUL<5rIGPz>rVWj;Cy<7NrjhUhamIW7}{04#Gsto=~%%M!OZiV**!ZeG*| zMNw5Al9|9`0~v6P8k5!Ju<-s#_RioG&ss(F=MMHM9Tpv+Sq8<@Zsw!->Mwiyf!^)= z6>Jn4Dau&{KhnH;rudf4woGXRDw1}bkEVriU0~7V!EAFEbTNhFN&Z^H$}+k=9D!(Q zAw^6kBB?b%pyaBDIE7?v8tN*9ALp3(5FepPH$H9?!uGQg2r^2rSt+qO9u`;-{(_Su zPMb@y13R0x9MVv>$C?P!{1Q$c`t&q;XM_Mcn0QWG!iPitsW{p+tbxw&Zo0GVnl30XP2Ny zw;s`hcm%_r`FJXxm3XYswN^K7LNx?xCX){Y$dPd)XDPN`l^wGE!ft>n&#gWbM520o zjklv&Wid<6#(YlHxP;qE(+C!0X_`-P2?K~s`|(JYNJMbw zy;X1kZV9YdID-Gz5TwyNX;u90iI`lR%EB(!*UOlq+UH$XDfIf{xnU=IVKuQGXbqyf z6o>e@{~O_M&mZcTjdWK9cllTVSL|VMF2)!_0Y$?*V=$4}>8fh>9vqL-pFFb+NFIqQ z*vY-nih32zyr+$@!D7YuV9blmr~)jRler>*l(4aG7hQTa9AIDvYdVz^#A(Lt} zJD{ty|Hr?pro3620bNey6_3)2RAi#9lQIL@U>0o{wjItIDu9Id0VO`ngI1(gjAQ0x`-V}c48EJ^!)hO3y=Qf5h<%ZLtJvAxEcPx_vu6O!6pSTy~x?N zCsaf~=OI1K%}(PA0>n6(AlrnvRiW&R_h9G z^cXt8r-OTSmbN?503ekC1M@811bC{5I;49cjeWYC$pIkD9{K#wR%vjGT-8qJ(T@0< zT50c~+e-~2icmn*hGw*7CowN=_K;OHoB#G=_7Vo_FCgoYr;uVYx^dsqYrj+KS z+Wmzr+~`dGz0$ww8tiDivbl?$x*UAz;C~LInvS&=Yay%tLTCV-A)04`@$Uwi)?^Q! zavaTK+)euxUUh6s?w6jSM)z2dBC@b6m#0x;?43t_>Js2fmS>t8y`)5NWw1b81a5x^ zW1mT}pmtpy8|ygXLlR$@NCuFGb>6<_`$ehZXv^{GvYlwXpg09qzmqByQrcygf>s z-G|DC5+N@#4EkstxPm$l*aQ^V;jXy?=`-vQE^gH-6eZm&8j7!EY!{!B4{zhmsqm88k z^UYUcAh%lMb~U{pw1S82xd1Of(7!q1s6zWaQK(6R_$*WqsNDngkR(bYTN9XtUpfr$ z%NE5>0q)36#ROcC;d3LGZ zFRc@*tb$OHfC!5bhHUcItJSTMgB{J$(Tl>f`sb?&GJl!3hl&6Sg4WwJQ$IZ(R#%NV zys*3(nHcX`;Cb&IVyN6|9v8Ib`zQrV^w9p*ObA4kEY|vePJ>SL z+bUrp`wKfe3Hl>a7S=%ej}@k5^S^Sl2vd@-%mWDDoE}tLO z)#Xwo<=FE;l!uOS3^4pbeHNs4$JA;TF6szF@Rp?uVLah){u$`m@bqR+eUIo%6wcFu zMbLtJ;&N(sh%-?J$`-p;}2r(gZK;!wn$LqS&c2!d9Nb^>DTirULw3 z3hr{!809*1IJUZ8d`+;O3VQiJy&9>uc1VAjP_6r4>1!c>fVG8ccqeCdHzIbReQG>O zrAu4f(K@*lj(gr|oLs_-cn56g!VC4pM!}J$*d#;JWc6#LbR_~VsqfdQcdpKE##pFm z2V66<8FoDri=qB*vCR1FmV%2k_5!&z?U~fwLXlE)wMfaMei!hoI|L%kajb~P?mvwX zZhPsiHqM4QrU;6^$xU|^5TO@9o*k&)B$iXo9suZf7;zdXx!HEWb7JQu;Sibr;*v0G z3($-P42M9$)glh1;$R)kY&ZoW`G$|ATcdkUG`P=pQM3^zowj`yMs3ZJh-H4__wR*4 zpIl4mMkQY8kEo%>Px03agupmK!xW=mgRzoY*qI3FrFFAo2unWu<(DCn?ReCByBXmU zSvr)jL%rfWR&2?Yp@W8x7_e3I%q4;z?#0h_6oFl;#D6Jm;v#;G9>*rO*7tEiofqE6 zx+=rmd0VPrJ`hYTv5OJwEqcEdF3%8wc~MlLQCXL~4p1lx@Os|hjSC4zQeu4&3@?Hd zMuLoZlLhr_Q4Tqpn0QwXi9!V4xz>keU1rtR0;+ukLMPm$BkF<0Buj9ELA^GZ?Wx*R z>4Ww^ss|6>Qoju|0E8Q14pO|OYZ&Z-T$ec?H95{plgvADE0w1O4H>l59)}JMj*A_@ zD-x%G?NM5*yC}<%!p2DSX|=hQM#@(L{{W-M+yX{eK&FTCR-5XXGac1so~-SA%~m)0i7$=v;2B_ zj&{=9elndOkoZi!mpV&(_?E9wrYeD8$ci*f3t#6wTr{b$ywdB8X@Fg*f^s_CKBPu;^j#SJbQ1gqUCtdvH~GP&)`wEz@PN)&l~Q0R*hDyBo2^)< z7-XqkrZfnUSKa-4Rv!+|$SX2>-!yPi&SV%V+GV6=q$UnhQ40kIw5OXDk?6SV52ipPD+G!(xhI zxEKfB09Xd|+ycE>BP|h0^Q7#-1&_!3el`SLT&iy;1~D{PxCn)i$2Q&}gFTvW*4Tk# zHM_Icluw@_XseN7GIpPh<&5I#0aLn8r>}%iHE1q?tIWi4(-$F;faC>ReA9)FuA-nc zjOI#w{vV`uwciEab%nU>@-&Gak?hL^ufz1M2b*?3Q;-@IryeBTMM}F80D>PwuteqE99Qqy41xQu9s(8EOgg6SrG_2!$qtq6cvj+DKREUfLC#`_yM zw8<>|13u0((2SRwb?u^1%UHLTb+Sa>qUK`6e^`X@`ISD_)Eqi2P!6g_CA^n5u z8M%x3|8Cw7wF?Ppd4+=^kTMN0z(Nc%o2`Y@A_@3ij#>cz*pWyVDA!hq$!~*zg&#Fel4c5CfhP zSPAMuW3P%U{fR3;&zP_A zT`82ekW|PQE&X#E<2LfPFwf5#8FDemD&8H^w;BRB)yiE^7(#`PQ1Jk~uN-mZ2eEB~ z7R!+RqfI71#)gT}tQXu7JT)~3k zlQzPNcU3XCX0UG4y&vfmd6oxjBcvUG#`XWsy;&<=POxctCd5m6Zi(lz;-)3OwwuYe_3$R3Wls6ifUW)&F zqwkND9Zp0629C2ELExd)&Va&UmpfuNg@UDja}`|LHs_YdbX(kBj?Zo_(EZ+Riydx4 zCU)(C3#CC1wn$E>OTLX!SgtDPX=jYCf*b)%U9N@T#iKdjJn|RX-h{S>+CsMweCT7A ztFVj$xM(0~ym^mf&gRj=B05$Q#llFctE6q^2(VzIpz_Ycd#bO>G{fJ4UvWzZyc;Qg zK`z5#0&pu(K5ZPIQxfliw3oV7#Pzlb1HQfiUNJKmDRJ(Bi3FGI&QC%w5Xzp=H z&`WMzgE=mp7N!jHPE7>sQ=M``(a~{8{cQE*n%DkMG!|n@nL}!>3%vE^epX_>DdyD? z%cjEDPN!eQt^ZqG;_o!{wDG;r^rmzL|8y;&9vgc&D0^tBeHi}J&7!W{_##CNnk752 z9KP0l(tQ^lFj{8Tbs~273tKaA10nP07?;|YPK#>$8p-hAa< zlVf=#-Dt@t()r=fe53E`QH5oT-G6G}!GxRr5^M2JwdNW^Jhw_;ol+{(v-oZ`uhrJd zO4|B^C_E^trx`L)He*t_wS1TQeYAn?j`lcED(XPzGSTG?^^T%?U2s+pOF0uBUooK3 zPILQ}X3dF2#xs&Bno`$uP-?M?$hSqXc(^HjG`I@SWoc=xOktvQ_D$*P6@&lHNdOS& ztsV1IngI4z7_n9Ulo zabFrVU$B|de*OzA5G*2qp|-!hP#dPx$?^xFjZ@dO-$7!eOR~jqMY#9<6ZZb(hBOB)D{v zxCo3lQ^wHeO5r@{*=3E$k4N@f!}*I)pzAuC)mlRpp!NjHst_g(L_ema=p4zCn^z+G zWO(p&4oSsTTxB8nA5NhoSE%8nSOHx ztiLuvZah{R5-9}hEq%-$*E~3>RGaT>A1)bxZ{Kot5U$G?jt7G8%3#$p>9PEt@X4Y& z36t*CsYG6P8COw((eYdsQ3)c>0wB(21(D!o_%yW!6&ts2H-@WgzOmv3>mk~ z!Dbc1Zh$dyodiE;lJV*^LcGX}_g5e5{1x-v%N#qTu!Gh8BO!T-u9w{w+lZZK8}2an zL2?nAQhJ=aNgvWm^HlZ8K@spZ(NQT%pYQ0tuK_}$WzF0%byKG5d?5piC(A0p2%J{s ztk(>#)_TvcWhGKet|J_KoP&3P^oEo_yj)CsWd7>OJrxxmK9R{A7zx^kZ5A^fnBE4e z06%a-ui{!-1;WV}TDApX-Zo)_%Y^AHBGEDKJ6tzDw_gBVZ-li-ec{4^?b!Pz{9gp9S5^pz!4G5g?O#<(`Q+*bMH8* z19M=F%7_NEfwy|gCF0_r7-T74!{^h_C>KWk&o+vTCmIKCu=2P&@DkuVCN4Q z3ur$S2G6m=QVersmMAh;of*%UHyjtu!C5f4u8a>^_bon@nd)d_>mClzf%R1c!FA-= z1Yn@q4$N?S8$CcbcJ0hrtwk;S)wT3@d|ar2!Cad4AuHAqc<1+U06**NZEXLa%GRz| ztupMiPv`&!SpS2a((h$dH!X+el(KYv)T!r7@AyX#mVSe>#`@Oob#oxTTCJ~g-`u%V zjZftxvXH55^XGPpyl$ltsZqioAlh4Z$|pmQ1M>o-ED#awsbQXj?NZs%T%*RSE;UX3 z5X2qDq-C^5f$IQXc8mx-sbuFyt}k-e_5sbV%q!lA*A!L=umx-UjcO4y>%nNUwjWNB zG2O5R9|uC34$BlI;&+XiHPak`7Vb*-yN*rUH@KC)+xKt=>?!X>fdm!{XNZ78)X24I zlj&~~Vqax_T_HvE2NBsJC;%9%Gmvhct0nR~HC$!YMNpd1m!u05v4ORUb19A{M?#)A zl%#y`BC7iMx?psgBY1ewBH)t9^Bp+|yR|6&qgHj%z>i--{xzoXQJYI7r#GusmrO;E z!H};ECD$NYj#GW|zGlxc0t;F&76BRWFI`QY%`@XsopPnW^7P*XJrR}`op_Mvy0Ayy z>Nw>LS>RbR^aORv7poMA`%`~Q!g$kY5G$Y%dyh`@#>@IDVpDaqOA*mR-yf(n#)Fa4%r}pWeYk>m9Puf0P;bzNr8| z7DV0lCKrEptJ~I8R!S!HTb39c?yVy!_v4cbU_Cbw@_+LD(480}R%Q$ziU={D;-mp+c(oD7P)hpqUQ zEPqxVpuO6C%)BUn8MOU`EOx+6V0q0yHCN-_ z1{>-BxofNQ3?>6T;TOv@g9sV+W{=w$&_3(pn(r^8CGJ78_v^=IiSlR*c-~_G0aH$> z6Wz0GS9OngVQigrDA-P_zAC|}$9flJxN*MI)k_ZTml4kL-6vcz*S2E~+8Re z2sU#>3LR~W>;g-*S|F81htYM!=Fa4pK4IIj9}MSA7_h^$SK#3FtQ>qN-2_HJ}GCz1t8m8sIaPJL-F9g(M--J^mw4KerAN4z19*?;o;D2BvmuQ`tra6 zgI8Cf;G|&C>e;iJE_0mH>x&Tt1m~(Y&LV~++T$?YolR}N3m#@YgXFDi=@f|7bk}wp zc4)SnNO%Nv>=hTw&8?JKLeTsesUJLtj@%`)YPNZmPnO`&H8hDRq32e`N_p0^2nN3Yh3~Feblr*f7MYAhLrPy5Zym-fs7Guc`|>cp$4c7 z<(n;9Ey`w&`!AKh0&jZxWG1vnf@=h7Zx6WI*WPfcj2Pxcmk)ZEDeRZqPOrZ8*W4T` z!vkY6jYZw&^68nPiJsa>$3c?{@x@l-lON(h6@7mJ^3}$uKIP76#5sOk| zvo{@+DwV52r? z?M?8{o_5v8XtSqSNTVV=X+~O=$AZ2x=CwG827*FyAiH@N^v(Pu4Z$)^&UY`l{20|= zT85GecJMGeBf_gUkdAn*{VtQ7R$7H=8UKxB6RdV*F=6uGO;%<+DDE}zOZA(vLvTzO zcFtmAyiIjaC#;b4IeeY=dJ(I*l;tae3X+-#m6(O_@Q*rG<2{V@>S;B3;dedl2HLzu zu_f#7&8rro`l23=>^4n+;oc*}i%ZEJV^ztpp-G@uAv2mlG3T~?#iRbc(iV#L$b%h( zQx_A>r|xUDS}gt0wW~`I$&e&-AyFfxT?ia~yFj47|JuXzqz(-KP9<3NdC%!ErHGLDQYm zrpV+CbgkeMyKb?QXc|St`Z&gSa3F3W8_gin2>x+aGg@^ceC(Vall|jb>`CDFx7p^+ z0@=%m0*1!#`ipUmR?GAMd#|vT#l*!0Yx&K`$du9pH4ZR_Hl$18+@C8MvCmxcw>W&B z!&Fsfy+aPOLAdg81ejTo(ukR3%zpG#G+S9o@)tyqFEg9dSO)V!PMlsAhx#&n-T+yXZC(&g@4F0y4w4+sL^-?GRbgw zdv{l-4V9XEpNu}91P9Kq9ieScRn}gOpnn^9wer~KMtRw=M}WhbyD_RbI!ICgCk_5A2939}UJz#6>V@2NEol&x;`6s_h+RX~Kx4hWjrI>w}q_@A` zM?_A$h!G4f%lCoI6mTtqX;#(seJ}`FS*J{G*$DDnAS>XO^R0o>K*O8DE?3?*F_Vib zkCSCY*3F*5xnsZN$0Nk3^z>H?vTG)Xk8uL?xXVX1-g=}Gji$SyV7OqtAlfG3hdcDZe-(@L%21mYbP)})hm$Nb zV|ncWA@0;M&Q6ghvtKAluT4;u^5)=SI%n0l6j7?wg2UI<_WWkz;#M>B#~LO#Gmn#JkLKHiNqA zfg6=D9YF~X=XOc-y+cJ#q10)43ZLj7Tn<({!Pk$z;M=%2>8N(8Eqtus>kYS3V3yyD zF?L5)01O6R70tarBYTP5ycSTL;&b_?pxyJOe^2lVl>;gk-*d!FLogeqGN`K@EAu;6D1$s5jkrvs7yKXD9Y>$o*Cqe!m_tS! zB&NHrY1yNOm z%r+{=2!8tHsYm}X>Ay9DjfKR4MFAcq@bVFg^fq+pU_R*u$O_M^f> z?(c@y^=I;r{(q>bk1;A&OK(qh^jxsG{M_q{TVstx5{%}$WaVSj_O&`D4_CrPNmfhM zTF&SG(q1u+Ustq5r~3u8oMTFw>eA)&UrM5x{cUsJ(u z1Kj~cldq1T+(biS2)uSlw$RMFS##)1h#Yb84KzS?qkQHfWh9Y5dg&qyYl`GqT6 zNaPnEi7NP9;7>wl1IEClD(ai!5AVl`=+2XHrM_ni*i%c~MjV-3cdwQK@`917_ zMSeGbu9}nVeYKXRpLEs2nC7y#Rj6W#xD$QZu(rGnR>{tl=u|Wa^WkpWd@bZS6J65$ zN1rA}@AD~B7(V#TqVIMlPS+9n_22t;6!EhR<$FKdC04W2W=pfR1{PXR7d6ev zt;)OTZ&<4VMfz?!Se0H>J61%gW?ikpQ2|JSG;cQ*fJCjUJ-#H&0;EW&N!lOg5r44^ zu7^3Emw=AafV#{hYB1KP7<+ZjLTGByFo<5d8M%Wt!{L&kOkhMC|2`;L_3W*(VE**s zo-E+@?^86qobJE%#K?_4bpSkOuZ&>PVOV8<%i|jjTj0*jyGdd` z^EC}!|J>!p-<$+r>%{i`5v*PvCkZr-euOs$*(<;5eUa+r$53FY~B{HG0M7@vTLQMyIy6&ggov4jw$A1g6GNWSX{lHjVokewQr|5=?Tag6sAB<~Ata_}={aL4=pr6s5 zpf%)w?l}I1^qKQ@sc+goIpSb3|9sJf8?|eB(%cQRIb6rn242f28&r}&n4qy7=W&mK zX*i(@Ry5dS;(hMZ_S!`1vS~2J1#nZ*M+ug#HC0-sZ9m`7vH$%+7tHfxmGV><{$!e2 z0v6w)o9J~ksvAx8ubirekl)i_W_q_&p64QtHNnG;f9ciE0`IM{2~ARPKhh zeH;p%omwJW{IsR*ojm)wQg(MNo@OFM=O_%bwdG$oA3Q20z!49Rt^lCLGCN+(jg8qQoN9<^VlaS@p`#oa5Sh1JfT;cNSH_4Fl7Kf+$=S!u z<{^qkPWx`ePI_-xt9Kjgu_9{gf)d;j2LLMqI*F-4F=0ewxLdST>V#K*%2HU**;5(r}by_K*z~|0`e$`j#4sZUw#;ku#*~#y3|f!;r`>Z11e1^*Gn&t{5rkRIES(LbN#$6QCZY`R3f90L zl-(-TY&!7!A7FDuA)rM!XJTzJkKY`bmC1m~pF>|<4sFQ@WX+Sw6U3f*PpTAy3XDBB zVn!~{ub8H$arqcTZ4W;CHe?7YzB^KxyGIT;vLHeX-*+V;{@wahVv^?`d}~PN4*q^v z*||>*0)J6UOAaIRMmlyUrA~^)+&2Smh$W^rR8&NNFw6xR`m>+zG&;j(Vor?Yc;D6o zo4`V*izFy`i)|!8119SKip z{Qn@HrDj8~zT`&AX0u4m1WzROf8SXQ1evSZ4Hbwg}Nthh{L=Kwz{jc`)iSkhvr!-?kaTf%~QCqHV7ob7NWm{s4a`l(=5$ z2J4xwa!qhVx!iv zC_S9a1M84CPrEE7FI7XjtG`NVQ~=s|B>w)YUEV|>%{IR1*BNCT{^R`?_qzKm3yb%P zEE~c#R_9v1?&uLci>}qd)cx$4H7^fEpOQL%(TadOz|b11-?@#O6o_;8Zq_damLJpDV0c>MaLon z;EVqV%Q11G*H15C7xkpg%%EUVy?)Tm{>*@s4bz2rTxG?p0qlPU(A|VQ#lP)D!%2Qlp*v0QhY69-E5M9~Sm+GhQA~{r-bo!GA*DtA>DJE4$UiCnV8(4k zJHg{97JuVa->Ad%Y%V&>^~vWYlKSNO`Q0Vt4alqw7eoMU<5MuurJ7#~1c$l`Bi5cy z2rR~U(Ak!)<`p`!yREb-OJD3yYVsuw|s?gBlefjahJ|lbL|ms`@Cma zb3XEO9G2?{J8B>CI0wn1_Za4yMEzx~$>-o8KcE||eoJ#%LV*v6A>}w@!--pdt6CI1 z0VJV-Xny8ngtMz**EX*{u$@;PCt7W@<5|b-P`{P6V}mjR_^XYT?ey^*he_+{@2)i) zWC3i3Go)}P0xhGCeZYKPjqG&-1YKO!VNev(!WUi#Qw0pV?|$N#E2)Re#<5bJ;EHi% zs$6g}N@FAezne~kHUgTv5{Xt-VeSlo+dxe`4Maaw6Ku>@@iJ?{CRxVaBw}gENnfiS zGXk&u#dIzxJRl@)^59as-?%W>TOZlEVcHT06qYy%JT)4Nw=o1%HTjLulyGDdB8c>1 zZuh>`<9!RoV7rcLD#SMx)EofQIQ)M)RWhO0riuKE_E4;sJcrcmD1F~JW6VL%G}aK3 z+(n_PWt2&Z;rK=5YS}W|TKBMNnk!>D72rR@&NnMK@G`2KxV9fR{Bl`@$m75KiGW0# zc#-QPH7j+wk5_R%&{hU?&R`n(&3pm>1VeuR01K4tC3|7*l7-mKw*x|cEVDXwHo)!Xjn&(wU%xb*oQqHr zXB2{H^=o$4G3!m%lv6l7FX~tI;@+*Mj)d{$!2cLkyEexND?6+WWxb zr{_@B*zX3pdLOYhLkrb%Qirv~Vb$1tX}l=Lm#biy9hU)&s+UuixrJ#_5wucW?a`~} zgy|FvSC#M%5s`gkA%DylW`-(A^i|9WCJ4itT{O1$^!Atc=zEAn>!wxrfzZx6YQa@e4wEf%z$UZf zq}4i$^70g3yM#yHY3rRw|Xzp-sb)7Cx9#v zni8bQv?Gzcf^2B7=1BF+ld{(rtBoIr1R<^J z=mg$23`l&X|Ceh^Xr5e~@i9Si_^B9W-r?||vR6$EQE4~bA9B_KO+&a-{l*^>EU$c3 zS-Is6E>mW_^a6Za8$r=jS{Ik`!74Ks2 z6Cvm4>7a45Jd8FAe}HbE-_(QLt4&2La6Cz@5P4>@_bx*OTYO{hxq8N85Ch1uy)m(c z{KB3JPZ{4h9i?HFJz+uBj~f;uObkmxKTLzs_F?)zF05Bj?9!^l(i*js8lkpSII_;E z^H9V2YQ|oQh(uo*s~)|`eek#HV{6+Qz9t~a4&-ujF&Wr!qj*kVGQ|+&mNF@*yE6Ly|l@?>R3qkm|(r#x(PoWdLfDTQ`~H( zctWW=9Wk~k|6Gi_hj7V)ML*^19SXfeIcDmblm3D^XFP*0nKw0rJ0!lPf91|j;vc3| zs(T+qS$zcavW(zLKQ6<`@+I-+2;ZYov}XS=6MXWprs#g;?H)RV6`^tVYoS_tcMCd8 zY9+M`VQ^XncFeGT456#`iRa-z_wn=A!P-t~42liVbrC%i#v1+Fy}Cb?GLX`+i~$FfDjrucC)q!fRFa*~^mYLcz0sV9ClP~KJFMy;mK z1kc&j7G?TpoL_~@1GGKxT7F`<9Tfj8faJg!o#Y@Vj<;Lk0+s5li05-nv4+S!=WkmH zQMK;8xL9$uFoQac^a(thTlV)M_x<=xMN56Af>#P^#D(Y9nhL3QmwabFk5^C1wf5_g zVATm>_5@P}Fm4GPf*z#7UZLtLX$-r>1xW2=b?w~d_pt@_x6jnk7TaV{)ErkPK4)z; z&K-@Ww0DdkJwlx}{O3;8c@K`E^X$aqp+i+^HI(I6qe?P1wZk2-y#)RX6GhWvp^ zIc9`N)}@8n(}^S@I<^szDoJNEwCmj~z#bhSl!1Ny^a3$YAM>fqOCady(y39_t7xT# z@@FfwtnQ#p?vUB%u(ECWbai51xQbm^yQu^-t-g9fH>Ku3XgECbfw!fz1Z|0Oi6~c^ zm^m-~>?l<6817*Fe~;SFcF?`_B%#0O*Veg!q+zwa+X=Ckz104D`NG?feVQi)fscJp zej$5D3^-LXcc!f2Bc$2f7Jf~Ybwj7qkjo^c9cdG8hb@QE(mrk!ES^PS=U;+i#A#Kt zbZnrg37lN|jU1~Yz)Q%UL|5z?1bbBA$1_9#R&)K+FZY0PHlnNc#uh}R8s>N`raYcV zVcHa>D3d`C25f88+H(v$C^EK`Kh{|2qKzYmVIL-EUL?y6JK`a0-YZxP>Qcv zs2UrbY*{P4gjdYyO7!ntP{4lC74V)|(Ld%AshUk4pXwwMHwyOr7IUV9WnM~uU}{VJ zo`9p8GsqkmF1Ix01sc#OT?w{rU?(H{MImzc+0kvzPzkT%hXM(dmCYSFAzm zk7x53=@d97M9B4*v3HDRLX;QNYU7G(<$PNo1#AnYwX9(bnMJX0k6`~zx5M9Rf8iU6 z4!q|;P6A*Su4Fpw56&W!_ix#ivb4sfp-*5x&h?U6h=H+_<&9AEn8BD5yxnUs_el!a z1Rf0e;=l`j1PqJ*TC+LEg{5Lpk~IH0UX~vc#5j3$Ies;zOGN^*bg|;IvL`O?ae*)8 z+AC`-QTV9&aXn*UIC3Vmj&MMEPe}gw|IfWgxxBA)j}u60X0r1Dpe8BJNNxD|@PM)d z2js*6&RT-I2a98vp66kclqRSiaoG5~PT}S{FcRro!@V+~bq4lG2nZW>fDXI_x%NeP z^Z5mxZVznZ1yDG7Lh6J1#6PgIqV4q)GZqP^h8QQ> z%xCTj1bV>W`*qW~jjg!#!jTU@@S_)67)ho_*7VM_yW{J?5Ak8pk$ld;e5BDxx>yVx^>FpI_PA3 z1>clx+$cG5=_e{@vl$aypdi+x3pFm|zKP5C(2;LukgvAcsEnDyH=i)uFN=CpVh84F zJz#Loc-(x}aP8bHNFfl|%G!x$u+6f~2?ry@r0)i%d@O4;+F%g=hmuo%z-xB(j^d^A zQ^E}VS!Y}ttE*=hr}GJ6#VKi95|4G&W83&w+uJ|};{+B^T|D2G-DO)KM1_&*AP&8Q zO8QC@<`-~_6aASgg(tJ)M`HQ~HO76=t)9_-J z=JB!aXhoP3%XVl3-yz=KLID;;B@?4ACC++ub(ch4tbV0R1jPpprH!c04$77rPlB4N zBs0>HUeHlF1DQ(&5~JBSkjIdWM-rkxPB#{2hAe$5w?Nx)qT?!YfDbwr#V^H4XM?R->(dZ*T>Chg1n>c2g0(jeB6?{rxswNJGDvc{10%Z=| z;82V+l~h%p=PZIYgvt=&MBXFWjG}a2s9?ya`t*6T{&Ho5-!07q7xk~s|1ssaYf=pX zvp=b}QK?T<@z1frCubb}jMX7)hwUPn6pz`pdA zPV8fp1jU(zOINvBHt?a=bLb&A;+9@cO?%kQY~lL* zhOc@`mo?)5)yyaSC+`EzpB9cLCkjv`+y%M%AMI)~e$rY{*K2NCyV>(`Z70;|E6Ps` z)g$jq_m~U&&d?iV5DE?Gq_=04!Q}xXR&XbiaoF2jIZCi`stNC6sh^aBNbQg@f|I?i z0#b?|%i9opBrM4GA(?YRt2_+V4qnI(}A24{zv=}(Wc1i!RebBjr|ApMd}K%Q;xQpnG;mDq5}%PyLy z7qJh4MQq!87&%37lcxr$cDVg1Oc3nBdeyQr>zh`K4q!!l8k>acG>%<2CT7HHw{|_v zcf^U`OUS!o5srOgZ4o*>x3W?0+3k>^%1YlkGhN4bWXjI$6|1YmE1g@+YLY`g%)S$N zbAj4xy)+(%TSkT_t>bzJU0YGpXDO2nEBN9Ue4?UUvsp3fKbO9mBAK+MoVlS>N|=xV zal*yO=u&WRK}%X|p;=W7RuyfuUL009rZfP)j>hdm| z>S^;cDjAh2NJVEc$-fS29ZO7LRi+lx)r59nc1a3ppt?=^8rNC|%N>Hfctn5OrdE9` zNBPV>K3B<<^b{EEOEx!mkxmSoc4=$O!?Z~M+x_KbLfuRmbk7sx2!rM%YXN%$Z#x_Y zg*A=N{sn-CUj-%(8ZMh=3c`IZSf466dQn4Vn6eHxD2*HN`6=CDMl!}{^?#l7+BZrY zmru5yPnnHD5aM6Yw|4Gozbp_A&+x0E|9fm^UGs-TH=Vh~!_sR|#|htju2eg5O{6h| zwW%OsQFV&jylD8YyqE}aGq*K@^`U;Y84FR`!`bl?V~>YH0$zQ$by>-mKj%!E)cC-l zeGr?qP#JuugICLP7h~$lyuIANp%oMXH8CB=db}=7-gzk|_%{2DQHf*V{DX--6EF+; z--x6$arsjrBM$1HFM}jW)QP+DOyB2;Dk!Eq>3TnwxF>8SpwqdZSQmF;e| zVx8UA5IDizA=S!qPTAfkEGq3i~^?ka>klQ?HA(+mUC<_I&I+!1iI3MbJ5vS9-;`Y z*1@`rc4!D(Qt?bVb4}5*;d75W6*KM;21ddHvM&GCwjb&`m}Y<)Y1!cVR@j6Y7|QtSV*PY z-{3>djlc9r*wRrA<6a@#kMz=L#-Jk4u5{Z>>8U()YDx~D0<~S-vNF0_bqsw5 zJKTVQ*P?KgT6Mqohue4P@kQy$!U z-BQPX{2;klk0zh4F(Jj?f&M!mk_JXNCvQJ*na)q8)pZ>-Z$Cn^IVpQZ-T7K z!4QRlGZoTMJwlBELnMff&{OWxy`Z-FBK|?uYwHc1tx&BlxU3tHm2?A4lcYV^hNfpI z1KtVtNX8>~;GmX)#g_zY8@NzIP6Ub!5Ja-f73S2r?-ohK=ztnIOa_!Y)|(|0C-Jcl z;w?_>-v?li$U*3eT>T2^*=`Y8OkcsSi4ztwN-_;(C!U4|1-(&$8s zTpM`WMR>$W#f^b0C_i8JqG=MuE-GLB07`ZKp>z7ti+K(11_LuxgKnMI_ojwc>lG;*7+B0n&nqzXC#< zB&Z*sfoQfHnjGd5VFI5rsFa~O{J1_I&iNBIa40xYw;C!9Kd^9h`6pzYY9nYg-Yxf= zHGPMo=p;ZU4;-1}d|SuP%-pL4uNV-a6GH2hm2udf=(Xl^zE$*U&K!~t!}=D-}Fr#+|23OKmzm}AS9D$QVeO+#2$L$RO5 zO;;9VEqRedn5&zZHnTU>-9Bag5eHafCjbUx!y7|y;BvUEAWvBYOz<1+DTLcsEDlTY z4-MFq$Q@E^wCHamlyGCp#eB)(a2Ga1^1Ec5)5uDYNu&E_!h5mVEpMhPr85*}p_GE- z1okE($nb5SJfST6U&GL>7*b?2RucNa%-)7VB1^=M(aB@}oRRnB#B_i)X7{;wYZcX$ z-U|(BuS-SnZddT!^d;^JDN!%;%285{;Ve1_9dyB;VBSxDhdr@|TB6+kdiHU3QOi%KgUX6pdfI6kPW+o{KM5IsUQgv2ZX#Hs~Q=pW`hvv#OG1_;vK|42Pbg|hf zP1XvKhtq_w=rj`s^eD+@e4!wSI1qdl(`}tDY1~a`E7z;G=vA2w{cLIqP6_e}QG8~n zJNqy*a9PwO^Ma?r5bxQfMyJ}H!ZBh)n00bHotw{I( zj{iXZKN46E8MmrZco`ekqhTKLVg}?f(37giOyb)!KLv}zLy2$ zzb<p3CK z|CXgyk&qB5p?XATlxL?`A#HOtavJ~f7(4a_mjqm0Jrxrj!1H*F|3g; z?^&o=xrLu@SbWE=NI{Bd=gU>9hjKaEdpjP6>G2w{8^tBinp6`PbHtWjDRYta{93`N z7*DFAMUGs7bo z2~|ht<{Gr1y;JfMZ6L3s`--%VKFiDG@f37^XI5Py&NhJ%_PAS6y5GE5`JZ8ynzanX zjp)IN!wNm-c3MbHnw8(Ke-}Hacy2P6M?3YQ&m%%t`8jw%`YHsG=&hBwG~?nIe?W_@ zKuId`Q2z%x@WZ+P2%h+FX##J4f{A8Dv2FhSXX8rCL?s|}{jCx)kr-yr_eqW`1efC8Em{^gW z8XtV95(gZ=%hYO?I~{bfq~XHz!qnTxprY{N_~8SMl(Vw-56-kygucvf#MX-n!Pd(K zssD&ONW3fe#%;(Ghwv`@Vt~pdy(r|WYW#9_WrlE!4=gNg!mDEbt^k-Jm)13pJC(i+yu&VgG zP}|xqogViS-WD?2b3C9|2tpn7T(38D!@UXHGE7vwY8qx~BkGnZg80qBOPo6^{(YoF z0jsVlkva#yYzP86IvF_=}X!Oo>M~ z)SvAU+;^HlP)w9cVH(UfWZ2*Kzdg)Re88osxOz&7pSvLs-3%fku`A~5 z29VC8D)gO!YAk3v(wWQe3WKIl1L*-XY-NJBJg9_LE$UQlCvWYu(>shAD|N;#ihgo7 z?M?q)?vGm8i%XvH<5p9$2D$;+Lc;B9UC5U%1k z;>09nW5XA@ddy?E456PpyTaME1riUF3a;~6QVVq{N(9^}GBKb^-*gkLh8FGql}2Vj zKM7JB7lIxl@Vx;vo4p0*g&bpnPu>H&rT!U#$0aV7earQyEha*rg(B7n5;Abp7n!*x zaSqN&vz#bNFkPc~XK@3<_s|vd2z05063+jr>dL?kjTfN3`K`>jFW*I^vuvE5u?!aR zH)OIvUbIc5q7=f5522Y-DiyKcYSifV4oF?`2zOmN^p12S`v}ME+Wa3Zf=fpxQD2bY~Umj)tai?56I3>My_1t(BBb z?h!m~@`UPJo6OT9st{~1qeMWU81P$5kgE)6cCwSw#t6tGyIa{28pxxXVia$09^TJzV~Lg-le&COecAsd_B6IS+LENjkw5dOcCdqv z`~AF!n?f+H%%V44{1hY--~r-NYL4 z1*4LbR!|+ppQ=tw)Z*!(I=?R2coR$q#Hu}PJ@x+q!Th?pYD*^DQ?@3`_I+y+5nsbz*F~CT8JnYKSY0O$;gy?isVCcm6AgA@WH1PsZJ8+ z-vV6~SwS_$%LUGa+pFCg5LY-Y&Y4K9T~A5$F!Yca&rSKs(QE)ZE~LXvS5Q8`@8w(~MCnx~z^mqHh)j%D8=4;p?| zw8Tj)1!B5Ld{|a%wx#4S4VHz-2p~`F{V`8l+Ry}hv+-i;^|p5LkI&R$@>!7BB9J4# z=1a^99gY808iLa87`7hfb}3^fiH@l`;p*&gA3Sl!CjZ`gEW_TYO1rPL;mou>Ocz84 zm*tWKb(iv-q?{*gIJv0MpZ=~^U#JdCK&BvZ=#y9MllpVC3pJGW5byn{*~tsnQm1s2i4}dp^8lV>h^GMm0BZ)+D@Q zy)a7GVZ^Ce0Dt+-Q4oy$fMn`_0R0TM9~_5~6wohzddU z_2af2+kdXVn&fO{TLluh(i!DgQ|e51>G@-R$=KLdg~HN>w4W4i3C#cZpLWimqW6nE zMH+q-;-D>&_+iDeY_zT5b`j8U1rt>pNjhd;76>DEtK6+lYt01fy5gksZb)DZmi}18 zyTnZS5~lU(-r*UqN-OmyzdcvmxGuq^gS9;dD1XI?fKS9ho`8|yfflDpR-x16y>mSa z=587g33Xr%BgEHV^__m8+H^vX z=_^eXG9#?D9~_hn5e~$IRsfjo`LtW|GxD3;K(fS5Rw|+ZCX+s?wj+!R@Z2z^8VZ$odh2}*{?d4+#Eh<&xlC=ptml~sel#tTpwnKacqEiDInruL# zdcLJ3mW)X<8e8P%AuqUhE^~XvWp%||IhhB#+BOi$@|Ym7MAMf6{-&4zn$&Bk;XFJi zDnik@Gr&~EW;VuH6xi`~WE$`6Aw4X(T_uAECVER)le%qgYvIb5LcM_HNEa=r=K$DU zlq7>ep+qZ|9Gsx=aI6&06r68x{ zp7X1+y5z>;3paX5K9ztluZ|AGrt^}K6q6^WUm7|!yhtAuzK{YjCNeYXA6m7iwqtY% zg$@mFWB;)m9D;-1rKtPUdyPiFHc8IN@oqyFM0=H?6-WgWmA;7NG3dDG1UeZFccfPgHdhIuU+2Ka+7mpKn&OliW9_ zq2?8pB#e&!L?r3^z5iIFpn zF;2h>mFr?r>7GVg+z=u2?)$oH!~=ykKt1$TB5B?!%VtAfIWuz2&fv81W?OwUKbub9k+|qGud;_9i8K-ycV` z<^ZT{RjMo1oV>uh|0*F&DlJ6XKW$N}-xi0zQw+HCoZrC!okIRf5kOdX;E)_Q{C~GN z6L-FkACS5R+$aRi+_MYt<0dgC5SP zn);YMW>M8aN{yr-MV06J9GzRjGLi6!EKo1mv*L90S|le;oKK6Gl!=o$aK-E8&EEU> z1LMrh#cN>2$t6&z4oQ?1`-dd)-@hoiKjdnd?9n07;S*PTjKcznAiZ)8TSm{AxraEY z7BBFUccD%c7#cDjQt*ygUsx>PZQ`sw80ovVaP|2N4K}LkA|+LdGq5UVP)|Mn}b+b z!4zI9YX|Q}D&fnCSjfI1Qx1CV9kPo%aU;A=`kJ9}=5?8DirAZ==w%rKzL7ht2&9(Kx+!7ZDlGz`WIj;c@oMmi8%vGzU|qtzVaDj@E>7 zF6Y7gU}J@BQ>h9Eg?Io^=pug5ia*9V5T?2JXO62k3_Yk{6A02ksCfkz;=zJRcS#Xh z)0c7-L{pMcIZh88?+a}@=o-wVIMI5z_K3uVge1KhYVM^33(G|hZ}U}6+%YU$FU?Un z+#{j#G{Xk8)<-J(u$nm95aGCko3vG9ZI$=Or!hw%0626)`KXh$$*W(4v_)s5iYrrh zF9`Fz${0K4ijG~k7?(VBKbqJMV#4tO@%G5Jwe~R?K1Of6#vZOjb~AyhsN|mM3JaEN z#jxd%1lKt-w)TA&#z)R&w#*5 zLEPZ}VGzNHb>gZMkkuInLdl|X(o-a0$rf82`I8htl-YUSr2wAKI(hz*@#L0zH6&23 z@b}=#s`#GyZ%rO>iOn<0iO=aTHw^ChHCT5?Ln3uxa z?{VPVpbv${rA*9~xs0Y@f>C00xen4>5J>+~%wtsUwKLuR8375$PWDPvDPux>HU+rW z0;VGa*CR`t8gSd60_$Jm$fUFM=?}p=n5H5BclQ;M)H*Z>2%gGqN=2nb2n=I-W-rka zuB(QyZd+cesfNyhWowS~wrCF9;fqtfN|rWN5h9NU**F73sCNzIj!?(0^G;ZJ5V^-o z3GX0-8OFzQ_vGQZk@t(OEWa}a?P}N8?T|CT>neF`D9*BR!<|FZ=UKULK9w z!$Xx>&M8uifm8A{t}%-5Jm}%gfbD_NjCb(*lybYY3(&~ac4b}LQ|)3!T?J-BG|l+; zQQNm>JqPa|QS+6xU(?zlQa| zJ^l^M3K!iKeBdCT01WuKLnh*UCA{DTvf^lbcsgignp=AX$_G;zlT#(lS^MmyO=by6 zSHP4o;409@D(ZNL338nTLBN9Z*;@fVPGVE4c6`yi?KxC2|@31 zRjE@w`Yz>+i&+Jv@^JV=^{MW7ov<~*MX^idO3={d&2M2LfdM6+!ez|1-|wb$RTB?E zVcM5a7yA4;64la(8~FtsR*LT#PZb~}wQW!A9GD?#sOt%?vVm3&l9}W>n)ifN6Qbw? z1qkTw`ylh~GBZcoPTqi=0`kc$Z#tTzXoBV7EaTWR2Jm&-q*cinhOgh8k^C$V#_rIO zO7w7=!wph7;~$1_=Svatea!tW7NVb?ejJF`USU*ooj6fh*md0g1UiN@T%+#I{6(HJ zTXVjab2=H;QUc61Xj!6^e(KIPS$9MWqF*q`y^~~TS$cpf4xKxASK{TPds6v^88}bd z5~m^K0S;nslENjC^}1@LTd_qOJQ~_Ev#J?)`!R&=QOPpD_#?Vdroq6YhcxzAc4|oY zrKjq5FB$G6`O9e~OdBMe|3Dg;WZ4U`n#Ao2bzh{@fY!(q^?-D7(BZO_sy*34xDZ)( zy-mpbA3g5mK2rQUXmJATq?LYjZtu^Ip;^uRXI;&jGHpf1aLIjS;E%T*!N9fCV;_J3 zBoRL&Gl!Ry<|=i%mmDRa_>h!2q9JdlEiD@|6be}H#&Bvtz|+-j6wd-6uqZ0Btk|wb zf+4-^p?7LdNGO!}9dxw(KXzo>m^#8d}U7r5Z7Oa+? zWU^iNGj`d&=P?FsNA`x?Qe{poVi6@Zmk6uhO?qNFCAW-QCQdk7&C81Bo*I!9&s8^% zcCYG6uiHuX(|etvb~UoxixxDegFnP-S`wgCBXW@6Znb$Ku~#KAgK6UgT*K#X-|&25 z^XX~(MhP5YCg;#X7mk(-m9I?Zf$vNCb}1}{K}oc>zh*u7_ z>!0T$h%t+|E?RpIRs1-Q6KGBQTDCC$ks#UZ{PV^sLvI3-&pVJEecL*uMo4sOz6v)c zmW-S2Po|E^uNdiurVRU6zVm7F@xpMv24gOVwb?&vl{Q;fW$-4>w%Rx&u{ zq{^WC{J*O4?ky9GSab6!vQ8Htknh#K-_QF{D1YrlH5*-Wof zcBvLm#pKh2Jcb~ACW1vBYj$fRfFxGRmrqL_vOfkqtrQF#2aT>`a z$`8RZD#PI;6#X*=YDUPMz9iNh9V-S{mQOr&nxfH9fnS03V_ zE%YetZc$-(8w;j=>Gs*f!;{L%0Am?WMC0%jPFAK~5&85F9;QyVI*Aw|x^V^5KZMkqR^9@*gU^oB`UC%7ZRg8;4BkL=8drTTSdhH&`@pT;RTPP z9qWs7g?0W#I^W7-jmS)yKt7}tWw9C00E~WVed8??Ljyk%`25~_icK25LSxOqu z9;8-Oji1&xi(Y*~`*D^e^*-AOkNK5RFowb>JUU(ROE9eNs{Hu5aUx~(m%<)D&TOJB z+3jrxPlrG}i*`SDq~;!VZzck)fJ!`;s22nbhH2R0MSJN3QU{X6JH$Y6pMlOTZ0aoB zjRh-X4TvkEd7wAxozV%mPZ%5$^A2+QVqUv{J?y+Q@0W4!L30l@o)031G$bIDJ} zPE*H687a$s?V(vsK;!F4#n_&4euEA4++v=@fh@fpTf z)j2F8KdamfxVVUm2$ufzYS5vFFfFFnI{&v5F=Ff*B<9RLbcJe?$*SXfs9`(ONMwy+ zsdi#(Qgvmw^M{>qH`vrzMJ7=SwCt(CHRy3hke%NH?de{ z=M0w#o6b3Zm>5Kl;P?Y>R_=DveT{n;nDDT@rOi%w)>iW5c{A!o4v_1+^&uXI&27r-6|A{V zszg$+h1(s7d-tpe_cB#b_5mKq&Tv&*#|_@V1;07G+Imm=2lx!ZS_QQ8ZQW!#5JRZ=y}nK=`h~jPAZq*0 z9~*Ef?}SoxG^ocrTFf|?(X%drwirLtuBa4$I#0v?Am@}UAI)vhvtqF3hLtL#nyE?K zQ(+`MsNz2wMy&<48BIW~5Al+}IpspsC1RrLc<(?RM~>_&6m)}0gqG!edt?A$v*0?HP8CE1GORGY;sifQ6zhq@QjPX-u|176fWZ zFDHxQ`B3xt-`$L#_hPflAKN)zNCwj_(TTD5`5U3-LuaF4@a=gSCVO|qZ`B6O#Xwd= zphT)SrZnSBZm}^Pi&)hNtZM*qYYpcnrO*F|- z(w!Z1+AswKQw2#DEf0=rSUkT~ZGMTR?9;B*7ANhz8W-pb&^neCPHbqoJ;#{Bf%9NR zo0~LYr=5MHhr5Ou1PGB8FPE3WtBx_BD=1r%ACYvdr?-qNu`N_!%}wTTbvNx~zzAsr z&R7o+nl55^k*A=}>d#&3$YY7eP#1}G`0~}z7&!;9^dGBBu)G4x1~pyNU_+}SH@Gmy za7}heOe5hB90xY>t)3#jXPd4-&2e$G*q$yHmn*v<$=2v@3eZY!`*g}`k%f4YA(8ME zO>Sbj0lFZQuk2E4Q-ZqlUU~?Dc_*b&T?6!Uf{y?!vsV88F3QP!sSbl(_FM$aSd&kN z^@u^b&`XNtO@36lR7=Gj_Kl>b-!2=WUos&BrBKU=P_-#E{^(WCtX>;gCV}qy+{s1(?Op4JiwxW`rz$M zG>p^TPMXtR`8nDuTMjI_p`WW7%X+G^00yL$SXm=1bBnvDXXZ%#ud;wVN}xM^K(sri ztkO|@nsl5BMU^d!IBs%YPE@rG`c{L|tSi9&xEyb|@gRM+xg>K~cHk|2#^kO*r9G>5sh@=7DOT77O0W0wrYM(-gXAToE2+e-) z^}5L(Ddh{+Va`-@a+BW6h6`Sep^d8M%tw;YyS2`gxHxXS>gxH!dVyb`SARQGoKiHw zBmm7hm{`eKdA^SpHN|4lnUEq^1!QRxOSttsNa6yP zh+z*h7u|s(irIcB4kp`JC51D$XL-s>56z6=;HC#o*1f3m-sH1MW8no!&wTlr`1(R7 z@+K97@2cHu9YuJOqk%S!WEmO5V~sRyv03bW6W;{dcenLfKOFDULZ%yRe3G#O0vq%C z+*@5$ujwXX!e%aYZZN#%k$tsR+&gl~I|LLfOhB>Qsl4Y|$TogZw^@q4dlq+tg%1or2a(a~h;c zae?|@X*p_X(wR<+)yl7d2AN-m!?rRc-kEz-H(Ir~bSCVA>aw6lXye3~ zb4B)Za=zV7^D&*EQF;<9af43nh_#{pJa6ZK`Z)BgINS0YZADinLke$MIw7i0e{8@! zbFd3eFrAU&2(den51QZI-o#5PQgssQXQ~kX6%p@4ijJ5Y+XXdm^v_o|w*2mi%<|`CKYm;g-g0No#yPT z3EM8NSr{cnH!Ag=uuL_UF%`f&HKIlN6Di8M!tc;gA*aCjNeBuqZ)-$??EpQyD0>5u z_XOvXmYFz8u{APVHg8G97?-$0G*n9L?4a@T4^_R=XxtQ>jV~haSjr@xaPqNu6=M%j zrZvIhNKDKkSx0PdMet1~UaPMP$cwF?0sqo;?Y1PB4TRiwwL+l&`mwE5ph174TvCl* z9nj;vfhoxbpfJ&FlDi3I$ht+J(0xv1!k{h%rp;o8{q3= zTmF=XlE-IHFjn8x6ZTAdS!FG2!q5fiM-TN>=uGL3$Bk;!Rbvb%poV3dG1;(K!*!jL zhu*{R2altI^Y=ZQBZMWU8*yBc{a(srFH^VuaP4_ zM_2(g_R*cFgwxiq;S6{uiPB>h!76G1d3s!J-KB68Kj$4L|JAlZW1L-+%%3O#jFmZ^ zi*9W4cD>&UV>V8?F$z%Z(u)OT8{Dw96*}x8Xe}Ct^Qq{2o$9Rdm`N434e3-NVA@1) zNNhSGv58i-`O6;0nZx+@l&i58*s&F%ym;dk~}K$<^R;jfJdD}s&B7E{~nwpTyl&M6I=yXOE_7YVBdhJ z$wrqRUbb6}r*bY`BNB@8Q;4pQ=*TAcpd57c5HUy8a$r3697QAl9ECWlq$bv+a|5f- zV+VW>8B;n4&UNQn+%c_Cu~2QQQQ4;reI6-N!DUUL2Cd@r!~93cpe6QFMuB8lgCd*l zvD&XS3Fy{^^rt$C#-OY64%Mr7gkXgL!OC0a+r-SQXj)nsAz#!WG|q`!kRwO@?bWmrSh*YkJgcDPWN|*RNv5oVaBg)Lzf#Z!h$?;K463+72~3aL0>p| z-HVWWB$`2yJ~X`{E~6EN0$Z|WgHxztB`tbT@SC+RC$Y)xDhLZwx`yH3_bz0X$}VzM z^4>)jD;9#$yxI0BYiur?L55W%h?u_&70TS@X?;tW-QINl+N9{OA4kTz=U7V3>YGS+ zeZ4E?*E>$qD4NXSO3HF~B%fzU#a>=}3Wv~}xZ^A(0n!VRp2z={bh zp>T#oNhCOyN^q@6KNE;oi?(k$9od-$q?b~xER&-%V?If4TTMG{r7qpsTvku{(>Mu` zhGI|Dk@OT2Lw8&kvkm1`UZPTih2#1*xSAkF5BWzf)+M2{-x9mTIAPUxV9XZ|MtnBd z8aJ|Pn#99c2HXd|?9^n^5fB~0NtekHLRwV|u3jC>f8QIH@Dc8tQOe14EZ+K(c)G|W z=Wh220&sRoaBV?Et4+m`6qcx5uIV3h7SQquPuU+7o+gw zc0M{h>PDNb5I4Ca0Glo*cYgIICcDl9C-5sAk)0yuPkQoj&sD!LXMpg(DdH5iG-(M} z3i!vLzS0z;&DjKWVa&@7p3;-!Y`1r+5q)B9EM5hT>(OQUdXq-uSv%=FzjNj*^AGM{ z&p;b!^HtS%t6|_Ju9U^;0Nvl&4p*c6Z`ApPyA{WEkpqi8xcNhpmexkNSHP-MbcfCf za@cBm=LmQ^{h%$3Ct4RqhT;lGGA^O)YXrz+ME)x+=3eKkbttk~2FlL{QPQ%?4=N>p z1CM>wpcA1>1aKi8QG`j!CoVegm8{;qvF8%PML*=)FT*7|07Mfj1_qz^yo9@LRJK7Mszpm`>LwVAVnZ-L=1tG|;_?;v0Tg9qCMKBZ;7wbfwsCiY^=rQk* z)-(p^56KuIUl84NOmU;eaV18EjZt6C(^#S(X&vj%%1YK$Mp;BmWnYji(OOTVJsP4l zJ23=$3x%}JDYSWqyhw4mk<|%KwC+N__vfmf=QRUj)k|yo%qvQ3uW&Of)3#-jBG$#+ zVuI8r10{RrPzjmDRB+^0cg9{VZWf1Ak=(); + this.effectRing = noteVisual.effectPartList[0]; + } + + public override void Recover() + { + effectRing.SetActive(false); + effectRing.transform.localScale = Vector3.zero; + effectRing.GetComponent().color = Color.white; + noteVisual.noteMain.SetActive(true); + } + + public override void Adjust() + { + effectRing.gameObject.SetActive(true); + effectRing.transform.DOScale(Vector3.one, 0.1f).SetEase(Ease.OutBack); + effectRing.GetComponent().DOFade(0, 0.1f).SetEase(Ease.OutBack).OnComplete(() => effectRing.SetActive(false)); + noteVisual.noteMain.SetActive(false); + } + } +} \ No newline at end of file diff --git a/Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNotePerfectBurst.cs.meta b/Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNotePerfectBurst.cs.meta new file mode 100644 index 00000000..2d102df0 --- /dev/null +++ b/Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNotePerfectBurst.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15a3d3264a53c481c9fc2db8ac8a76e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNoteVisual.cs b/Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNoteVisual.cs new file mode 100644 index 00000000..c7403698 --- /dev/null +++ b/Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNoteVisual.cs @@ -0,0 +1,11 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Ichni.RhythmGame.ThemeBundles.Basic +{ + public class BasicNoteVisual : NoteVisualBase + { + + } +} \ No newline at end of file diff --git a/Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNoteVisual.cs.meta b/Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNoteVisual.cs.meta new file mode 100644 index 00000000..89f1411b --- /dev/null +++ b/Assets/ThemeBundles/Basic/Scripts/NoteVisual/BasicNoteVisual.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72caf325f2b59403c94193cd2037b7ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/manifest.json b/Packages/manifest.json index 8b874f02..129a7039 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,6 +1,7 @@ { "dependencies": { "com.unity.collab-proxy": "2.6.0", + "com.unity.feature.2d": "2.0.1", "com.unity.ide.rider": "3.0.34", "com.unity.ide.visualstudio": "2.0.22", "com.unity.ide.vscode": "1.2.5", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 48e0397d..be1c50a5 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -1,5 +1,99 @@ { "dependencies": { + "com.unity.2d.animation": { + "version": "9.1.3", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.2d.common": "8.0.4", + "com.unity.2d.sprite": "1.0.0", + "com.unity.collections": "1.1.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.uielements": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.2d.aseprite": { + "version": "1.1.7", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.2d.common": "6.0.6", + "com.unity.2d.sprite": "1.0.0", + "com.unity.mathematics": "1.2.6", + "com.unity.modules.animation": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.2d.common": { + "version": "8.0.4", + "depth": 2, + "source": "registry", + "dependencies": { + "com.unity.burst": "1.7.3", + "com.unity.2d.sprite": "1.0.0", + "com.unity.mathematics": "1.1.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.uielements": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.2d.pixel-perfect": { + "version": "5.0.3", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.2d.psdimporter": { + "version": "8.0.5", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.2d.common": "8.0.2", + "com.unity.2d.sprite": "1.0.0", + "com.unity.2d.animation": "9.1.1" + }, + "url": "https://packages.unity.com" + }, + "com.unity.2d.sprite": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": {} + }, + "com.unity.2d.spriteshape": { + "version": "9.0.5", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.2d.common": "8.0.4", + "com.unity.mathematics": "1.1.0", + "com.unity.modules.physics2d": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.2d.tilemap": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.tilemap": "1.0.0", + "com.unity.modules.uielements": "1.0.0" + } + }, + "com.unity.2d.tilemap.extras": { + "version": "3.1.3", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0", + "com.unity.2d.tilemap": "1.0.0", + "com.unity.modules.tilemap": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, "com.unity.burst": { "version": "1.8.18", "depth": 1, @@ -17,6 +111,16 @@ "dependencies": {}, "url": "https://packages.unity.com" }, + "com.unity.collections": { + "version": "1.2.4", + "depth": 2, + "source": "registry", + "dependencies": { + "com.unity.burst": "1.6.6", + "com.unity.test-framework": "1.1.31" + }, + "url": "https://packages.unity.com" + }, "com.unity.ext.nunit": { "version": "1.0.6", "depth": 1, @@ -24,6 +128,21 @@ "dependencies": {}, "url": "https://packages.unity.com" }, + "com.unity.feature.2d": { + "version": "2.0.1", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.2d.animation": "9.1.3", + "com.unity.2d.pixel-perfect": "5.0.3", + "com.unity.2d.psdimporter": "8.0.5", + "com.unity.2d.sprite": "1.0.0", + "com.unity.2d.spriteshape": "9.0.5", + "com.unity.2d.tilemap": "1.0.0", + "com.unity.2d.tilemap.extras": "3.1.3", + "com.unity.2d.aseprite": "1.1.7" + } + }, "com.unity.ide.rider": { "version": "3.0.34", "depth": 0, diff --git a/ProjectSettings/BurstAotSettings_StandaloneWindows.json b/ProjectSettings/BurstAotSettings_StandaloneWindows.json index 2144f6dc..36e6a2c0 100644 --- a/ProjectSettings/BurstAotSettings_StandaloneWindows.json +++ b/ProjectSettings/BurstAotSettings_StandaloneWindows.json @@ -1,16 +1,18 @@ { "MonoBehaviour": { - "Version": 3, + "Version": 4, "EnableBurstCompilation": true, "EnableOptimisations": true, "EnableSafetyChecks": false, "EnableDebugInAllBuilds": false, - "UsePlatformSDKLinker": false, + "DebugDataKind": 0, + "EnableArmv9SecurityFeatures": false, "CpuMinTargetX32": 0, "CpuMaxTargetX32": 0, "CpuMinTargetX64": 0, "CpuMaxTargetX64": 0, "CpuTargetsX32": 6, - "CpuTargetsX64": 72 + "CpuTargetsX64": 72, + "OptimizeFor": 0 } } diff --git a/ProjectSettings/CommonBurstAotSettings.json b/ProjectSettings/CommonBurstAotSettings.json index 3dffdba7..0293dafc 100644 --- a/ProjectSettings/CommonBurstAotSettings.json +++ b/ProjectSettings/CommonBurstAotSettings.json @@ -1,6 +1,6 @@ { "MonoBehaviour": { - "Version": 3, + "Version": 4, "DisabledWarnings": "" } }