From a492d86558385da501ac4f5065f621d56112cdff Mon Sep 17 00:00:00 2001 From: mrtoine Date: Fri, 10 Oct 2025 18:53:01 +0200 Subject: [PATCH] Premier commit --- .gitignore | 101 + Assets/InputSystem_Actions.inputactions | 1057 ++++++ Assets/InputSystem_Actions.inputactions.meta | 14 + Assets/Plugins.meta | 8 + Assets/Plugins/Demigiant.meta | 8 + Assets/Plugins/Demigiant/DOTween.meta | 21 + Assets/Plugins/Demigiant/DOTween/DOTween.XML | 3089 +++++++++++++++++ .../Demigiant/DOTween/DOTween.XML.meta | 11 + Assets/Plugins/Demigiant/DOTween/DOTween.dll | Bin 0 -> 175616 bytes .../Demigiant/DOTween/DOTween.dll.meta | 29 + Assets/Plugins/Demigiant/DOTween/Editor.meta | 5 + .../DOTween/Editor/DOTweenEditor.XML | 144 + .../DOTween/Editor/DOTweenEditor.XML.meta | 11 + .../DOTween/Editor/DOTweenEditor.dll | Bin 0 -> 70656 bytes .../DOTween/Editor/DOTweenEditor.dll.meta | 29 + .../Demigiant/DOTween/Editor/Imgs.meta | 5 + .../DOTween/Editor/Imgs/DOTweenIcon.png | Bin 0 -> 1565 bytes .../DOTween/Editor/Imgs/DOTweenIcon.png.meta | 54 + .../DOTween/Editor/Imgs/DOTweenMiniIcon.png | Bin 0 -> 319 bytes .../Editor/Imgs/DOTweenMiniIcon.png.meta | 75 + .../Demigiant/DOTween/Editor/Imgs/Footer.png | Bin 0 -> 4409 bytes .../DOTween/Editor/Imgs/Footer.png.meta | 54 + .../DOTween/Editor/Imgs/Footer_dark.png | Bin 0 -> 4429 bytes .../DOTween/Editor/Imgs/Footer_dark.png.meta | 54 + .../Demigiant/DOTween/Editor/Imgs/Header.jpg | Bin 0 -> 22787 bytes .../DOTween/Editor/Imgs/Header.jpg.meta | 54 + Assets/Plugins/Demigiant/DOTween/Modules.meta | 5 + .../DOTween/Modules/DOTweenModuleAudio.cs | 198 ++ .../Modules/DOTweenModuleAudio.cs.meta | 15 + .../Modules/DOTweenModuleEPOOutline.cs | 146 + .../Modules/DOTweenModuleEPOOutline.cs.meta | 19 + .../DOTween/Modules/DOTweenModulePhysics.cs | 216 ++ .../Modules/DOTweenModulePhysics.cs.meta | 15 + .../DOTween/Modules/DOTweenModulePhysics2D.cs | 193 + .../Modules/DOTweenModulePhysics2D.cs.meta | 15 + .../DOTween/Modules/DOTweenModuleSprite.cs | 93 + .../Modules/DOTweenModuleSprite.cs.meta | 15 + .../DOTween/Modules/DOTweenModuleUI.cs | 662 ++++ .../DOTween/Modules/DOTweenModuleUI.cs.meta | 15 + .../Modules/DOTweenModuleUnityVersion.cs | 389 +++ .../Modules/DOTweenModuleUnityVersion.cs.meta | 15 + .../DOTween/Modules/DOTweenModuleUtils.cs | 167 + .../Modules/DOTweenModuleUtils.cs.meta | 15 + Assets/Plugins/Demigiant/DOTween/readme.txt | 29 + .../Plugins/Demigiant/DOTween/readme.txt.meta | 11 + Assets/Readme.asset | 34 + Assets/Readme.asset.meta | 8 + Assets/Resources.meta | 8 + Assets/Resources/DOTweenSettings.asset | 54 + Assets/Resources/DOTweenSettings.asset.meta | 8 + Assets/Scenes.meta | 8 + Assets/Scenes/SampleScene.unity | 432 +++ Assets/Scenes/SampleScene.unity.meta | 7 + Assets/Settings.meta | 8 + Assets/Settings/DefaultVolumeProfile.asset | 982 ++++++ .../Settings/DefaultVolumeProfile.asset.meta | 8 + Assets/Settings/Mobile_RPAsset.asset | 135 + Assets/Settings/Mobile_RPAsset.asset.meta | 8 + Assets/Settings/Mobile_Renderer.asset | 52 + Assets/Settings/Mobile_Renderer.asset.meta | 8 + Assets/Settings/PC_RPAsset.asset | 135 + Assets/Settings/PC_RPAsset.asset.meta | 8 + Assets/Settings/PC_Renderer.asset | 95 + Assets/Settings/PC_Renderer.asset.meta | 8 + Assets/Settings/SampleSceneProfile.asset | 159 + Assets/Settings/SampleSceneProfile.asset.meta | 8 + ...niversalRenderPipelineGlobalSettings.asset | 393 +++ ...salRenderPipelineGlobalSettings.asset.meta | 8 + Assets/StreamingAssets.meta | 8 + Assets/StreamingAssets/Localization.meta | 8 + .../StreamingAssets/Localization/English.xml | 0 .../Localization/English.xml.meta | 3 + .../StreamingAssets/Localization/French.xml | 0 .../Localization/French.xml.meta | 3 + .../StreamingAssets/Localization/Spanish.xml | 0 .../Localization/Spanish.xml.meta | 3 + Assets/TutorialInfo.meta | 8 + Assets/TutorialInfo/Icons.meta | 9 + Assets/TutorialInfo/Icons/URP.png | Bin 0 -> 24069 bytes Assets/TutorialInfo/Icons/URP.png.meta | 134 + Assets/TutorialInfo/Layout.wlt | 654 ++++ Assets/TutorialInfo/Layout.wlt.meta | 8 + Assets/TutorialInfo/Scripts.meta | 9 + Assets/TutorialInfo/Scripts/Editor.meta | 9 + .../Scripts/Editor/ReadmeEditor.cs | 242 ++ .../Scripts/Editor/ReadmeEditor.cs.meta | 12 + Assets/TutorialInfo/Scripts/Readme.cs | 16 + Assets/TutorialInfo/Scripts/Readme.cs.meta | 12 + Assets/_.meta | 8 + Assets/_/Features.meta | 8 + Assets/_/Features/Core.meta | 8 + Assets/_/Features/Core/Runtime.meta | 8 + .../_/Features/Core/Runtime/AudioOneShot.cs | 55 + .../Core/Runtime/AudioOneShot.cs.meta | 3 + .../Core/Runtime/BaseMonoBehaviour.cs | 138 + .../Core/Runtime/BaseMonoBehaviour.cs.meta | 2 + .../_/Features/Core/Runtime/CheckManagers.cs | 51 + .../Core/Runtime/CheckManagers.cs.meta | 3 + .../Features/Core/Runtime/Core.Runtime.asmdef | 16 + .../Core/Runtime/Core.Runtime.asmdef.meta | 7 + Assets/_/Features/Core/Runtime/EnumInputs.cs | 8 + .../Features/Core/Runtime/EnumInputs.cs.meta | 3 + .../_/Features/Core/Runtime/EnumLanguage.cs | 9 + .../Core/Runtime/EnumLanguage.cs.meta | 3 + .../_/Features/Core/Runtime/FactsSystem.meta | 8 + .../Features/Core/Runtime/FactsSystem/Fact.cs | 43 + .../Core/Runtime/FactsSystem/Fact.cs.meta | 3 + .../Runtime/FactsSystem/FactDictionary.cs | 214 ++ .../FactsSystem/FactDictionary.cs.meta | 3 + Assets/_/Features/Core/Runtime/GameManager.cs | 295 ++ .../Features/Core/Runtime/GameManager.cs.meta | 11 + .../Features/Core/Runtime/GeneralSettings.cs | 60 + .../Core/Runtime/GeneralSettings.cs.meta | 3 + .../Core/Runtime/GlobalEventSystem.cs | 21 + .../Core/Runtime/GlobalEventSystem.cs.meta | 2 + .../_/Features/Core/Runtime/Interfaces.meta | 8 + .../Core/Runtime/Interfaces/IEvent.cs | 7 + .../Core/Runtime/Interfaces/IEvent.cs.meta | 3 + .../Features/Core/Runtime/Interfaces/IFact.cs | 12 + .../Core/Runtime/Interfaces/IFact.cs.meta | 3 + .../Core/Runtime/Interfaces/IInputHandler.cs | 8 + .../Runtime/Interfaces/IInputHandler.cs.meta | 3 + .../_/Features/Core/Runtime/LoadingScene.cs | 41 + .../Core/Runtime/LoadingScene.cs.meta | 3 + .../Core/Runtime/LocalizationSystem.cs | 110 + .../Core/Runtime/LocalizationSystem.cs.meta | 3 + Assets/_/Features/Core/Runtime/SceneLoader.cs | 166 + .../Features/Core/Runtime/SceneLoader.cs.meta | 3 + .../Core/Runtime/TranslationTextTransform.cs | 19 + .../Runtime/TranslationTextTransform.cs.meta | 2 + Assets/_/Features/Core/Runtime/XmlLoader.cs | 22 + .../_/Features/Core/Runtime/XmlLoader.cs.meta | 3 + Packages/manifest.json | 48 + Packages/packages-lock.json | 472 +++ ProjectSettings/AudioManager.asset | 19 + ProjectSettings/ClusterInputManager.asset | 6 + ProjectSettings/DynamicsManager.asset | 36 + ProjectSettings/EditorBuildSettings.asset | 13 + ProjectSettings/EditorSettings.asset | 50 + ProjectSettings/GraphicsSettings.asset | 70 + ProjectSettings/InputManager.asset | 487 +++ ProjectSettings/MemorySettings.asset | 35 + ProjectSettings/MultiplayerManager.asset | 7 + ProjectSettings/NavMeshAreas.asset | 91 + ProjectSettings/PackageManagerSettings.asset | 43 + ProjectSettings/Physics2DSettings.asset | 56 + ProjectSettings/PresetManager.asset | 7 + ProjectSettings/ProjectSettings.asset | 956 +++++ ProjectSettings/ProjectVersion.txt | 2 + ProjectSettings/QualitySettings.asset | 134 + ProjectSettings/ShaderGraphSettings.asset | 19 + ProjectSettings/TagManager.asset | 76 + ProjectSettings/TimeManager.asset | 9 + ProjectSettings/URPProjectSettings.asset | 15 + ProjectSettings/UnityConnectSettings.asset | 40 + ProjectSettings/VFXManager.asset | 12 + ProjectSettings/VersionControlSettings.asset | 8 + ProjectSettings/XRSettings.asset | 10 + 158 files changed, 14898 insertions(+) create mode 100644 .gitignore create mode 100644 Assets/InputSystem_Actions.inputactions create mode 100644 Assets/InputSystem_Actions.inputactions.meta create mode 100644 Assets/Plugins.meta create mode 100644 Assets/Plugins/Demigiant.meta create mode 100644 Assets/Plugins/Demigiant/DOTween.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/DOTween.XML create mode 100644 Assets/Plugins/Demigiant/DOTween/DOTween.XML.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/DOTween.dll create mode 100644 Assets/Plugins/Demigiant/DOTween/DOTween.dll.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/readme.txt create mode 100644 Assets/Plugins/Demigiant/DOTween/readme.txt.meta create mode 100644 Assets/Readme.asset create mode 100644 Assets/Readme.asset.meta create mode 100644 Assets/Resources.meta create mode 100644 Assets/Resources/DOTweenSettings.asset create mode 100644 Assets/Resources/DOTweenSettings.asset.meta create mode 100644 Assets/Scenes.meta create mode 100644 Assets/Scenes/SampleScene.unity create mode 100644 Assets/Scenes/SampleScene.unity.meta create mode 100644 Assets/Settings.meta create mode 100644 Assets/Settings/DefaultVolumeProfile.asset create mode 100644 Assets/Settings/DefaultVolumeProfile.asset.meta create mode 100644 Assets/Settings/Mobile_RPAsset.asset create mode 100644 Assets/Settings/Mobile_RPAsset.asset.meta create mode 100644 Assets/Settings/Mobile_Renderer.asset create mode 100644 Assets/Settings/Mobile_Renderer.asset.meta create mode 100644 Assets/Settings/PC_RPAsset.asset create mode 100644 Assets/Settings/PC_RPAsset.asset.meta create mode 100644 Assets/Settings/PC_Renderer.asset create mode 100644 Assets/Settings/PC_Renderer.asset.meta create mode 100644 Assets/Settings/SampleSceneProfile.asset create mode 100644 Assets/Settings/SampleSceneProfile.asset.meta create mode 100644 Assets/Settings/UniversalRenderPipelineGlobalSettings.asset create mode 100644 Assets/Settings/UniversalRenderPipelineGlobalSettings.asset.meta create mode 100644 Assets/StreamingAssets.meta create mode 100644 Assets/StreamingAssets/Localization.meta create mode 100644 Assets/StreamingAssets/Localization/English.xml create mode 100644 Assets/StreamingAssets/Localization/English.xml.meta create mode 100644 Assets/StreamingAssets/Localization/French.xml create mode 100644 Assets/StreamingAssets/Localization/French.xml.meta create mode 100644 Assets/StreamingAssets/Localization/Spanish.xml create mode 100644 Assets/StreamingAssets/Localization/Spanish.xml.meta create mode 100644 Assets/TutorialInfo.meta create mode 100644 Assets/TutorialInfo/Icons.meta create mode 100644 Assets/TutorialInfo/Icons/URP.png create mode 100644 Assets/TutorialInfo/Icons/URP.png.meta create mode 100644 Assets/TutorialInfo/Layout.wlt create mode 100644 Assets/TutorialInfo/Layout.wlt.meta create mode 100644 Assets/TutorialInfo/Scripts.meta create mode 100644 Assets/TutorialInfo/Scripts/Editor.meta create mode 100644 Assets/TutorialInfo/Scripts/Editor/ReadmeEditor.cs create mode 100644 Assets/TutorialInfo/Scripts/Editor/ReadmeEditor.cs.meta create mode 100644 Assets/TutorialInfo/Scripts/Readme.cs create mode 100644 Assets/TutorialInfo/Scripts/Readme.cs.meta create mode 100644 Assets/_.meta create mode 100644 Assets/_/Features.meta create mode 100644 Assets/_/Features/Core.meta create mode 100644 Assets/_/Features/Core/Runtime.meta create mode 100644 Assets/_/Features/Core/Runtime/AudioOneShot.cs create mode 100644 Assets/_/Features/Core/Runtime/AudioOneShot.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/BaseMonoBehaviour.cs create mode 100644 Assets/_/Features/Core/Runtime/BaseMonoBehaviour.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/CheckManagers.cs create mode 100644 Assets/_/Features/Core/Runtime/CheckManagers.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/Core.Runtime.asmdef create mode 100644 Assets/_/Features/Core/Runtime/Core.Runtime.asmdef.meta create mode 100644 Assets/_/Features/Core/Runtime/EnumInputs.cs create mode 100644 Assets/_/Features/Core/Runtime/EnumInputs.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/EnumLanguage.cs create mode 100644 Assets/_/Features/Core/Runtime/EnumLanguage.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/FactsSystem.meta create mode 100644 Assets/_/Features/Core/Runtime/FactsSystem/Fact.cs create mode 100644 Assets/_/Features/Core/Runtime/FactsSystem/Fact.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/FactsSystem/FactDictionary.cs create mode 100644 Assets/_/Features/Core/Runtime/FactsSystem/FactDictionary.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/GameManager.cs create mode 100644 Assets/_/Features/Core/Runtime/GameManager.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/GeneralSettings.cs create mode 100644 Assets/_/Features/Core/Runtime/GeneralSettings.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/GlobalEventSystem.cs create mode 100644 Assets/_/Features/Core/Runtime/GlobalEventSystem.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/Interfaces.meta create mode 100644 Assets/_/Features/Core/Runtime/Interfaces/IEvent.cs create mode 100644 Assets/_/Features/Core/Runtime/Interfaces/IEvent.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/Interfaces/IFact.cs create mode 100644 Assets/_/Features/Core/Runtime/Interfaces/IFact.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/Interfaces/IInputHandler.cs create mode 100644 Assets/_/Features/Core/Runtime/Interfaces/IInputHandler.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/LoadingScene.cs create mode 100644 Assets/_/Features/Core/Runtime/LoadingScene.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/LocalizationSystem.cs create mode 100644 Assets/_/Features/Core/Runtime/LocalizationSystem.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/SceneLoader.cs create mode 100644 Assets/_/Features/Core/Runtime/SceneLoader.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/TranslationTextTransform.cs create mode 100644 Assets/_/Features/Core/Runtime/TranslationTextTransform.cs.meta create mode 100644 Assets/_/Features/Core/Runtime/XmlLoader.cs create mode 100644 Assets/_/Features/Core/Runtime/XmlLoader.cs.meta create mode 100644 Packages/manifest.json create mode 100644 Packages/packages-lock.json create mode 100644 ProjectSettings/AudioManager.asset create mode 100644 ProjectSettings/ClusterInputManager.asset create mode 100644 ProjectSettings/DynamicsManager.asset create mode 100644 ProjectSettings/EditorBuildSettings.asset create mode 100644 ProjectSettings/EditorSettings.asset create mode 100644 ProjectSettings/GraphicsSettings.asset create mode 100644 ProjectSettings/InputManager.asset create mode 100644 ProjectSettings/MemorySettings.asset create mode 100644 ProjectSettings/MultiplayerManager.asset create mode 100644 ProjectSettings/NavMeshAreas.asset create mode 100644 ProjectSettings/PackageManagerSettings.asset create mode 100644 ProjectSettings/Physics2DSettings.asset create mode 100644 ProjectSettings/PresetManager.asset create mode 100644 ProjectSettings/ProjectSettings.asset create mode 100644 ProjectSettings/ProjectVersion.txt create mode 100644 ProjectSettings/QualitySettings.asset create mode 100644 ProjectSettings/ShaderGraphSettings.asset create mode 100644 ProjectSettings/TagManager.asset create mode 100644 ProjectSettings/TimeManager.asset create mode 100644 ProjectSettings/URPProjectSettings.asset create mode 100644 ProjectSettings/UnityConnectSettings.asset create mode 100644 ProjectSettings/VFXManager.asset create mode 100644 ProjectSettings/VersionControlSettings.asset create mode 100644 ProjectSettings/XRSettings.asset diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6a189c0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,101 @@ +# This .gitignore file should be placed at the root of your Unity project directory +# +# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore +# +.utmp/ +/[Ll]ibrary/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/[Ll]ogs/ +/[Uu]ser[Ss]ettings/ +*.log + +# By default unity supports Blender asset imports, *.blend1 blender files do not need to be commited to version control. +*.blend1 +*.blend1.meta + +# MemoryCaptures can get excessive in size. +# They also could contain extremely sensitive data +/[Mm]emoryCaptures/ + +# Recordings can get excessive in size +/[Rr]ecordings/ + +# Uncomment this line if you wish to ignore the asset store tools plugin +# /[Aa]ssets/AssetStoreTools* + +# Autogenerated Jetbrains Rider plugin +/[Aa]ssets/Plugins/Editor/JetBrains* +# Jetbrains Rider personal-layer settings +*.DotSettings.user + +# Visual Studio cache directory +.vs/ + +# Gradle cache directory +.gradle/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta +*.mdb.meta + +# Unity3D generated file on crash reports +sysinfo.txt + +# Mono auto generated files +mono_crash.* + +# Builds +*.apk +*.aab +*.unitypackage +*.unitypackage.meta +*.app + +# Crashlytics generated file +crashlytics-build.properties + +# TestRunner generated files +InitTestScene*.unity* + +# Addressables default ignores, before user customizations +/ServerData +/[Aa]ssets/StreamingAssets/aa* +/[Aa]ssets/AddressableAssetsData/link.xml* +/[Aa]ssets/Addressables_Temp* +# By default, Addressables content builds will generate addressables_content_state.bin +# files in platform-specific subfolders, for example: +# /Assets/AddressableAssetsData/OSX/addressables_content_state.bin +/[Aa]ssets/AddressableAssetsData/*/*.bin* + +# Visual Scripting auto-generated files +/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db +/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db.meta +/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers +/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers.meta + +# Auto-generated scenes by play mode tests +/[Aa]ssets/[Ii]nit[Tt]est[Ss]cene*.unity* + +.idea/* \ No newline at end of file diff --git a/Assets/InputSystem_Actions.inputactions b/Assets/InputSystem_Actions.inputactions new file mode 100644 index 0000000..1a12cb9 --- /dev/null +++ b/Assets/InputSystem_Actions.inputactions @@ -0,0 +1,1057 @@ +{ + "name": "InputSystem_Actions", + "maps": [ + { + "name": "Player", + "id": "df70fa95-8a34-4494-b137-73ab6b9c7d37", + "actions": [ + { + "name": "Move", + "type": "Value", + "id": "351f2ccd-1f9f-44bf-9bec-d62ac5c5f408", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "Look", + "type": "Value", + "id": "6b444451-8a00-4d00-a97e-f47457f736a8", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "Attack", + "type": "Button", + "id": "6c2ab1b8-8984-453a-af3d-a3c78ae1679a", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Interact", + "type": "Button", + "id": "852140f2-7766-474d-8707-702459ba45f3", + "expectedControlType": "Button", + "processors": "", + "interactions": "Hold", + "initialStateCheck": false + }, + { + "name": "Crouch", + "type": "Button", + "id": "27c5f898-bc57-4ee1-8800-db469aca5fe3", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Jump", + "type": "Button", + "id": "f1ba0d36-48eb-4cd5-b651-1c94a6531f70", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Previous", + "type": "Button", + "id": "2776c80d-3c14-4091-8c56-d04ced07a2b0", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Next", + "type": "Button", + "id": "b7230bb6-fc9b-4f52-8b25-f5e19cb2c2ba", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Sprint", + "type": "Button", + "id": "641cd816-40e6-41b4-8c3d-04687c349290", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + } + ], + "bindings": [ + { + "name": "", + "id": "978bfe49-cc26-4a3d-ab7b-7d7a29327403", + "path": "/leftStick", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Move", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "WASD", + "id": "00ca640b-d935-4593-8157-c05846ea39b3", + "path": "Dpad", + "interactions": "", + "processors": "", + "groups": "", + "action": "Move", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "e2062cb9-1b15-46a2-838c-2f8d72a0bdd9", + "path": "/w", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "up", + "id": "8180e8bd-4097-4f4e-ab88-4523101a6ce9", + "path": "/upArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "320bffee-a40b-4347-ac70-c210eb8bc73a", + "path": "/s", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "1c5327b5-f71c-4f60-99c7-4e737386f1d1", + "path": "/downArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "d2581a9b-1d11-4566-b27d-b92aff5fabbc", + "path": "/a", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "2e46982e-44cc-431b-9f0b-c11910bf467a", + "path": "/leftArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "fcfe95b8-67b9-4526-84b5-5d0bc98d6400", + "path": "/d", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "77bff152-3580-4b21-b6de-dcd0c7e41164", + "path": "/rightArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "1635d3fe-58b6-4ba9-a4e2-f4b964f6b5c8", + "path": "/{Primary2DAxis}", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Move", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "3ea4d645-4504-4529-b061-ab81934c3752", + "path": "/stick", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Move", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "c1f7a91b-d0fd-4a62-997e-7fb9b69bf235", + "path": "/rightStick", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Look", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "8c8e490b-c610-4785-884f-f04217b23ca4", + "path": "/delta", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse;Touch", + "action": "Look", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "3e5f5442-8668-4b27-a940-df99bad7e831", + "path": "/{Hatswitch}", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Look", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "143bb1cd-cc10-4eca-a2f0-a3664166fe91", + "path": "/buttonWest", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "05f6913d-c316-48b2-a6bb-e225f14c7960", + "path": "/leftButton", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "886e731e-7071-4ae4-95c0-e61739dad6fd", + "path": "/primaryTouch/tap", + "interactions": "", + "processors": "", + "groups": ";Touch", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "ee3d0cd2-254e-47a7-a8cb-bc94d9658c54", + "path": "/trigger", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "8255d333-5683-4943-a58a-ccb207ff1dce", + "path": "/{PrimaryAction}", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b3c1c7f0-bd20-4ee7-a0f1-899b24bca6d7", + "path": "/enter", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "cbac6039-9c09-46a1-b5f2-4e5124ccb5ed", + "path": "/2", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Next", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "e15ca19d-e649-4852-97d5-7fe8ccc44e94", + "path": "/dpad/right", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Next", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "f2e9ba44-c423-42a7-ad56-f20975884794", + "path": "/leftShift", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Sprint", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "8cbb2f4b-a784-49cc-8d5e-c010b8c7f4e6", + "path": "/leftStickPress", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Sprint", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "d8bf24bf-3f2f-4160-a97c-38ec1eb520ba", + "path": "/trigger", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Sprint", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "eb40bb66-4559-4dfa-9a2f-820438abb426", + "path": "/space", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "daba33a1-ad0c-4742-a909-43ad1cdfbeb6", + "path": "/buttonSouth", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "603f3daf-40bd-4854-8724-93e8017f59e3", + "path": "/secondaryButton", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "1534dc16-a6aa-499d-9c3a-22b47347b52a", + "path": "/1", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Previous", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "25060bbd-a3a6-476e-8fba-45ae484aad05", + "path": "/dpad/left", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Previous", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "1c04ea5f-b012-41d1-a6f7-02e963b52893", + "path": "/e", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Interact", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b3f66d0b-7751-423f-908b-a11c5bd95930", + "path": "/buttonNorth", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Interact", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "4f4649ac-64a8-4a73-af11-b3faef356a4d", + "path": "/buttonEast", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Crouch", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "36e52cba-0905-478e-a818-f4bfcb9f3b9a", + "path": "/c", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Crouch", + "isComposite": false, + "isPartOfComposite": false + } + ] + }, + { + "name": "UI", + "id": "272f6d14-89ba-496f-b7ff-215263d3219f", + "actions": [ + { + "name": "Navigate", + "type": "PassThrough", + "id": "c95b2375-e6d9-4b88-9c4c-c5e76515df4b", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Submit", + "type": "Button", + "id": "7607c7b6-cd76-4816-beef-bd0341cfe950", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Cancel", + "type": "Button", + "id": "15cef263-9014-4fd5-94d9-4e4a6234a6ef", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Point", + "type": "PassThrough", + "id": "32b35790-4ed0-4e9a-aa41-69ac6d629449", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "Click", + "type": "PassThrough", + "id": "3c7022bf-7922-4f7c-a998-c437916075ad", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "RightClick", + "type": "PassThrough", + "id": "44b200b1-1557-4083-816c-b22cbdf77ddf", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "MiddleClick", + "type": "PassThrough", + "id": "dad70c86-b58c-4b17-88ad-f5e53adf419e", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "ScrollWheel", + "type": "PassThrough", + "id": "0489e84a-4833-4c40-bfae-cea84b696689", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "TrackedDevicePosition", + "type": "PassThrough", + "id": "24908448-c609-4bc3-a128-ea258674378a", + "expectedControlType": "Vector3", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "TrackedDeviceOrientation", + "type": "PassThrough", + "id": "9caa3d8a-6b2f-4e8e-8bad-6ede561bd9be", + "expectedControlType": "Quaternion", + "processors": "", + "interactions": "", + "initialStateCheck": false + } + ], + "bindings": [ + { + "name": "Gamepad", + "id": "809f371f-c5e2-4e7a-83a1-d867598f40dd", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "", + "action": "Navigate", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "14a5d6e8-4aaf-4119-a9ef-34b8c2c548bf", + "path": "/leftStick/up", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "up", + "id": "9144cbe6-05e1-4687-a6d7-24f99d23dd81", + "path": "/rightStick/up", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "2db08d65-c5fb-421b-983f-c71163608d67", + "path": "/leftStick/down", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "58748904-2ea9-4a80-8579-b500e6a76df8", + "path": "/rightStick/down", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "8ba04515-75aa-45de-966d-393d9bbd1c14", + "path": "/leftStick/left", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "712e721c-bdfb-4b23-a86c-a0d9fcfea921", + "path": "/rightStick/left", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "fcd248ae-a788-4676-a12e-f4d81205600b", + "path": "/leftStick/right", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "1f04d9bc-c50b-41a1-bfcc-afb75475ec20", + "path": "/rightStick/right", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "fb8277d4-c5cd-4663-9dc7-ee3f0b506d90", + "path": "/dpad", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "Joystick", + "id": "e25d9774-381c-4a61-b47c-7b6b299ad9f9", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "", + "action": "Navigate", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "3db53b26-6601-41be-9887-63ac74e79d19", + "path": "/stick/up", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "0cb3e13e-3d90-4178-8ae6-d9c5501d653f", + "path": "/stick/down", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "0392d399-f6dd-4c82-8062-c1e9c0d34835", + "path": "/stick/left", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "942a66d9-d42f-43d6-8d70-ecb4ba5363bc", + "path": "/stick/right", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "Keyboard", + "id": "ff527021-f211-4c02-933e-5976594c46ed", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "", + "action": "Navigate", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "563fbfdd-0f09-408d-aa75-8642c4f08ef0", + "path": "/w", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "up", + "id": "eb480147-c587-4a33-85ed-eb0ab9942c43", + "path": "/upArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "2bf42165-60bc-42ca-8072-8c13ab40239b", + "path": "/s", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "85d264ad-e0a0-4565-b7ff-1a37edde51ac", + "path": "/downArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "74214943-c580-44e4-98eb-ad7eebe17902", + "path": "/a", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "cea9b045-a000-445b-95b8-0c171af70a3b", + "path": "/leftArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "8607c725-d935-4808-84b1-8354e29bab63", + "path": "/d", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "4cda81dc-9edd-4e03-9d7c-a71a14345d0b", + "path": "/rightArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "9e92bb26-7e3b-4ec4-b06b-3c8f8e498ddc", + "path": "*/{Submit}", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse;Gamepad;Touch;Joystick;XR", + "action": "Submit", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "82627dcc-3b13-4ba9-841d-e4b746d6553e", + "path": "*/{Cancel}", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse;Gamepad;Touch;Joystick;XR", + "action": "Cancel", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "c52c8e0b-8179-41d3-b8a1-d149033bbe86", + "path": "/position", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Point", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "e1394cbc-336e-44ce-9ea8-6007ed6193f7", + "path": "/position", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Point", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "5693e57a-238a-46ed-b5ae-e64e6e574302", + "path": "/touch*/position", + "interactions": "", + "processors": "", + "groups": "Touch", + "action": "Point", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "4faf7dc9-b979-4210-aa8c-e808e1ef89f5", + "path": "/leftButton", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "8d66d5ba-88d7-48e6-b1cd-198bbfef7ace", + "path": "/tip", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "47c2a644-3ebc-4dae-a106-589b7ca75b59", + "path": "/touch*/press", + "interactions": "", + "processors": "", + "groups": "Touch", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "bb9e6b34-44bf-4381-ac63-5aa15d19f677", + "path": "/trigger", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "38c99815-14ea-4617-8627-164d27641299", + "path": "/scroll", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "ScrollWheel", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "4c191405-5738-4d4b-a523-c6a301dbf754", + "path": "/rightButton", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "RightClick", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "24066f69-da47-44f3-a07e-0015fb02eb2e", + "path": "/middleButton", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "MiddleClick", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "7236c0d9-6ca3-47cf-a6ee-a97f5b59ea77", + "path": "/devicePosition", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "TrackedDevicePosition", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "23e01e3a-f935-4948-8d8b-9bcac77714fb", + "path": "/deviceRotation", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "TrackedDeviceOrientation", + "isComposite": false, + "isPartOfComposite": false + } + ] + } + ], + "controlSchemes": [ + { + "name": "Keyboard&Mouse", + "bindingGroup": "Keyboard&Mouse", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + }, + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "Gamepad", + "bindingGroup": "Gamepad", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "Touch", + "bindingGroup": "Touch", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "Joystick", + "bindingGroup": "Joystick", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "XR", + "bindingGroup": "XR", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + } + ] +} \ No newline at end of file diff --git a/Assets/InputSystem_Actions.inputactions.meta b/Assets/InputSystem_Actions.inputactions.meta new file mode 100644 index 0000000..6b38b04 --- /dev/null +++ b/Assets/InputSystem_Actions.inputactions.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 052faaac586de48259a63d0c4782560b +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3} + generateWrapperCode: 0 + wrapperCodePath: + wrapperClassName: + wrapperCodeNamespace: diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta new file mode 100644 index 0000000..e308316 --- /dev/null +++ b/Assets/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 327dd71580e4e48a09dc597c2abfa7c5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant.meta b/Assets/Plugins/Demigiant.meta new file mode 100644 index 0000000..a13cea2 --- /dev/null +++ b/Assets/Plugins/Demigiant.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5eced6c26c1824eeab9773aa241dd3de +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTween.meta b/Assets/Plugins/Demigiant/DOTween.meta new file mode 100644 index 0000000..cbebc39 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween.meta @@ -0,0 +1,21 @@ +fileFormatVersion: 2 +guid: a50bd9a009c8dfc4ebd88cc8101225a7 +labels: +- Tween +- Tweening +- Animation +- HOTween +- Paths +- iTween +- DFTween +- LeanTween +- Ease +- Easing +- Shake +- Punch +- 2DToolkit +- TextMeshPro +- Text +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/DOTween.XML b/Assets/Plugins/Demigiant/DOTween/DOTween.XML new file mode 100644 index 0000000..46e79c4 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/DOTween.XML @@ -0,0 +1,3089 @@ + + + + DOTween + + + + + Types of autoPlay behaviours + + + + No tween is automatically played + + + Only Sequences are automatically played + + + Only Tweeners are automatically played + + + All tweens are automatically played + + + + What axis to constrain in case of Vector tweens + + + + Called the first time the tween is set in a playing state, after any eventual delay + + + + Used in place of System.Func, which is not available in mscorlib. + + + + + Used in place of System.Action. + + + + + Public so it can be used by lose scripts related to DOTween (like DOTweenAnimation) + + + + + Used to separate DOTween class from the MonoBehaviour instance (in order to use static constructors on DOTween). + Contains all instance-based methods + + + + Used internally inside Unity Editor, as a trick to update DOTween's inspector at every frame + + + + Directly sets the current max capacity of Tweeners and Sequences + (meaning how many Tweeners and Sequences can be running at the same time), + so that DOTween doesn't need to automatically increase them in case the max is reached + (which might lead to hiccups when that happens). + Sequences capacity must be less or equal to Tweeners capacity + (if you pass a low Tweener capacity it will be automatically increased to match the Sequence's). + Beware: use this method only when there are no tweens running. + + Max Tweeners capacity. + Default: 200 + Max Sequences capacity. + Default: 50 + + + + This class contains a C# port of the easing equations created by Robert Penner (http://robertpenner.com/easing). + + + + + Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in: accelerating from zero velocity. + + + Current time (in frames or seconds). + + + Expected easing duration (in frames or seconds). + + Unused: here to keep same delegate for all ease types. + Unused: here to keep same delegate for all ease types. + + The eased value. + + + + + Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out: decelerating from zero velocity. + + + Current time (in frames or seconds). + + + Expected easing duration (in frames or seconds). + + Unused: here to keep same delegate for all ease types. + Unused: here to keep same delegate for all ease types. + + The eased value. + + + + + Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in/out: acceleration until halfway, then deceleration. + + + Current time (in frames or seconds). + + + Expected easing duration (in frames or seconds). + + Unused: here to keep same delegate for all ease types. + Unused: here to keep same delegate for all ease types. + + The eased value. + + + + + Returns a value between 0 and 1 (inclusive) based on the elapsed time and ease selected + + + + + Returns a value between 0 and 1 (inclusive) based on the elapsed time and ease selected + + + + + Used to interpret AnimationCurves as eases. + Public so it can be used by external ease factories + + + + + Behaviour in case a tween nested inside a Sequence fails and is captured by safe mode + + + + If the Sequence contains other elements, kill the failed tween but preserve the rest + + + Kill the whole Sequence + + + + Log types thrown by errors captured and prevented by safe mode + + + + No logs. NOT RECOMMENDED + + + Throw a normal log + + + Throw a warning log (default) + + + Throw an error log + + + + Additional notices passed to plugins when updating. + Public so it can be used by custom plugins. Internally, only PathPlugin uses it + + + + + None + + + + + Lets the plugin know that we restarted or rewinded + + + + + OnRewind callback behaviour (can only be set via DOTween's Utility Panel) + + + + + When calling Rewind or PlayBackwards/SmoothRewind, OnRewind callbacks will be fired only if the tween isn't already rewinded + + + + + When calling Rewind, OnRewind callbacks will always be fired, even if the tween is already rewinded. + When calling PlayBackwards/SmoothRewind instead, OnRewind callbacks will be fired only if the tween isn't already rewinded + + + + + When calling Rewind or PlayBackwards/SmoothRewind, OnRewind callbacks will always be fired, even if the tween is already rewinded + + + + + Public only so custom shortcuts can access some of these methods + + + + + INTERNAL: used by DO shortcuts and Modules to set special startup mode + + + + + INTERNAL: used by DO shortcuts and Modules to set the tween as blendable + + + + + INTERNAL: used by DO shortcuts and Modules to prevent a tween from using a From setup even if passed + + + + + Used to dispatch commands that need to be captured externally, usually by Modules + + + + + Various utils + + + + + Returns a Vector3 with z = 0 + + + + + Returns the 2D angle between two vectors + + + + + Returns a point on a circle with the given center and radius, + using Unity's circle coordinates (0° points up and increases clockwise) + + + + + Uses approximate equality on each axis instead of Unity's Vector3 equality, + because the latter fails (in some cases) when assigning a Vector3 to a transform.position and then checking it. + + + + + Looks for the type within all possible project assembly names + + + + NO-GC METHOD: changes the start value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new start value + If bigger than 0 applies it as the new tween duration + + + NO-GC METHOD: changes the end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new end value + If TRUE the start value will become the current target's value, otherwise it will stay the same + + + NO-GC METHOD: changes the end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new end value + If bigger than 0 applies it as the new tween duration + If TRUE the start value will become the current target's value, otherwise it will stay the same + + + NO-GC METHOD: changes the start and end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new start value + The new end value + If bigger than 0 applies it as the new tween duration + + + + Struct that stores two colors (used for LineRenderer tweens) + + + + + Used for tween callbacks + + + + + Used for tween callbacks + + + + + Used for custom and animationCurve-based ease functions. Must return a value between 0 and 1. + + + + + Straight Quaternion plugin. Instead of using Vector3 values accepts Quaternion values directly. + Beware: doesn't work with LoopType.Incremental (neither directly nor if inside a LoopType.Incremental Sequence). + To use it, call DOTween.To with the plugin parameter overload, passing it PureQuaternionPlugin.Plug() as first parameter + (do not use any of the other public PureQuaternionPlugin methods): + DOTween.To(PureQuaternionPlugin.Plug(), ()=> myQuaternionProperty, x=> myQuaternionProperty = x, myQuaternionEndValue, duration); + + + + + Plug this plugin inside a DOTween.To call. + Example: + DOTween.To(PureQuaternionPlugin.Plug(), ()=> myQuaternionProperty, x=> myQuaternionProperty = x, myQuaternionEndValue, duration); + + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + + Extra non-tweening-related curve methods + + + + + Cubic bezier curve methods + + + + + Calculates a point along the given Cubic Bezier segment-curve. + + Segment start point + Start point's control point/handle + Segment end point + End point's control point/handle + 0-1 percentage along which to retrieve point + + + + Returns an array containing a series of points along the given Cubic Bezier segment-curve. + + Start point + Start point's control point/handle + End point + End point's control point/handle + Cloud resolution (min: 2) + + + + Calculates a series of points along the given Cubic Bezier segment-curve and adds them to the given list. + + Start point + Start point's control point/handle + End point + End point's control point/handle + Cloud resolution (min: 2) + + + + Main DOTween class. Contains static methods to create and control tweens in a generic way + + + + DOTween's version + + + If TRUE (default) makes tweens slightly slower but safer, automatically taking care of a series of things + (like targets becoming null while a tween is playing). + Default: TRUE + + + Log type when safe mode reports capturing an error and preventing it + + + Behaviour in case a tween nested inside a Sequence fails (and is caught by safe mode). + Default: NestedTweenFailureBehaviour.TryToPreserveSequence + + + If TRUE you will get a DOTween report when exiting play mode (only in the Editor). + Useful to know how many max Tweeners and Sequences you reached and optimize your final project accordingly. + Beware, this will slightly slow down your tweens while inside Unity Editor. + Default: FALSE + + + Global DOTween global timeScale (default: 1). + The final timeScale of a non-timeScaleIndependent tween is: + Unity's Time.timeScale * DOTween.timeScale * tween.timeScale + while the final timeScale of a timeScaleIndependent tween is: + DOTween.unscaledTimeScale * DOTween.timeScale * tween.timeScale + + + DOTween timeScale applied only to timeScaleIndependent tweens (default: 1). + The final timeScale of a timeScaleIndependent tween is: + DOTween.unscaledTimeScale * DOTween.timeScale * tween.timeScale + + + If TRUE, DOTween will use Time.smoothDeltaTime instead of Time.deltaTime for UpdateType.Normal and UpdateType.Late tweens + (unless they're set as timeScaleIndependent, in which case a value between the last timestep + and will be used instead). + Setting this to TRUE will lead to smoother animations. + Default: FALSE + + + If is TRUE, this indicates the max timeStep that an independent update call can last. + Setting this to TRUE will lead to smoother animations. + Default: FALSE + + + DOTween's log behaviour. + Default: LogBehaviour.ErrorsOnly + + + Used to intercept DOTween's logs. If this method isn't NULL, DOTween will call it before writing a log via Unity's own Debug log methods. + Return TRUE if you want DOTween to proceed with the log, FALSE otherwise. + This method must return a bool and accept two parameters: + - LogType: the type of Unity log that DOTween is trying to log + - object: the log message that DOTween wants to log + + + If TRUE draws path gizmos in Unity Editor (if the gizmos button is active). + Deactivate this if you want to avoid gizmos overhead while in Unity Editor + + + If TRUE activates various debug options + + + Stores the target id so it can be used to give more info in case of safeMode error capturing. + Only active if both debugMode and useSafeMode are TRUE + + + Default updateType for new tweens. + Default: UpdateType.Normal + + + Sets whether Unity's timeScale should be taken into account by default or not. + Default: false + + + Default autoPlay behaviour for new tweens. + Default: AutoPlay.All + + + Default autoKillOnComplete behaviour for new tweens. + Default: TRUE + + + Default loopType applied to all new tweens. + Default: LoopType.Restart + + + If TRUE all newly created tweens are set as recyclable, otherwise not. + Default: FALSE + + + Default ease applied to all new Tweeners (not to Sequences which always have Ease.Linear as default). + Default: Ease.InOutQuad + + + Default overshoot/amplitude used for eases + Default: 1.70158f + + + Default period used for eases + Default: 0 + + + Used internally. Assigned/removed by DOTweenComponent.Create/DestroyInstance + + + + Must be called once, before the first ever DOTween call/reference, + otherwise it will be called automatically and will use default options. + Calling it a second time won't have any effect. + You can chain SetCapacity to this method, to directly set the max starting size of Tweeners and Sequences: + DOTween.Init(false, false, LogBehaviour.Default).SetCapacity(100, 20); + + If TRUE all new tweens will be set for recycling, meaning that when killed, + instead of being destroyed, they will be put in a pool and reused instead of creating new tweens. This option allows you to avoid + GC allocations by reusing tweens, but you will have to take care of tween references, since they might result active + even if they were killed (since they might have been respawned and are now being used for other tweens). + If you want to automatically set your tween references to NULL when a tween is killed + you can use the OnKill callback like this: + .OnKill(()=> myTweenReference = null) + You can change this setting at any time by changing the static property, + or you can set the recycling behaviour for each tween separately, using: + SetRecyclable(bool recyclable) + Default: FALSE + If TRUE makes tweens slightly slower but safer, automatically taking care of a series of things + (like targets becoming null while a tween is playing). + You can change this setting at any time by changing the static property. + Default: FALSE + Type of logging to use. + You can change this setting at any time by changing the static property. + Default: ErrorsOnly + + + + Directly sets the current max capacity of Tweeners and Sequences + (meaning how many Tweeners and Sequences can be running at the same time), + so that DOTween doesn't need to automatically increase them in case the max is reached + (which might lead to hiccups when that happens). + Sequences capacity must be less or equal to Tweeners capacity + (if you pass a low Tweener capacity it will be automatically increased to match the Sequence's). + Beware: use this method only when there are no tweens running. + + Max Tweeners capacity. + Default: 200 + Max Sequences capacity. + Default: 50 + + + + Kills all tweens, clears all cached tween pools and plugins and resets the max Tweeners/Sequences capacities to the default values. + + If TRUE also destroys DOTween's gameObject and resets its initializiation, default settings and everything else + (so that next time you use it it will need to be re-initialized) + + + + Clears all cached tween pools. + + + + + Checks all active tweens to find and remove eventually invalid ones (usually because their targets became NULL) + and returns the total number of invalid tweens found and removed. + IMPORTANT: this will cause an error on UWP platform, so don't use it there + BEWARE: this is a slightly expensive operation so use it with care + + + + + Updates all tweens that are set to . + + Manual deltaTime + Unscaled delta time (used with tweens set as timeScaleIndependent) + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using a custom plugin + The plugin to use. Each custom plugin implements a static Get() method + you'll need to call to assign the correct plugin in the correct way, like this: + CustomPlugin.Get() + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens only one axis of a Vector3 to the given value using default plugins. + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + The axis to tween + + + Tweens only the alpha of a Color to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a virtual property from the given start to the given end value + and implements a setter that allows to use that value with an external method or a lambda + Example: + To(MyMethod, 0, 12, 0.5f); + Where MyMethod is a function that accepts a float parameter (which will be the result of the virtual tween) + The action to perform with the tweened value + The value to start from + The end value to reach + The duration of the virtual tween + + + + Punches a Vector3 towards the given direction and then back to the starting one + as if it was connected to the starting position via an elastic. + This tween type generates some GC allocations at startup + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The direction and strength of the punch + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards. + 1 creates a full oscillation between the direction and the opposite decaying direction, + while 0 oscillates only between the starting position and the decaying direction + + + Shakes a Vector3 with the given values. + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction and behave like a random punch. + If TRUE only shakes on the X Y axis (looks better with things like cameras). + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Vector3 with the given values. + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction and behave like a random punch. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Tweens a property or field to the given values using default plugins. + Ease is applied between each segment and not as a whole. + This tween type generates some GC allocations at startup + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end values to reach for each segment. This array must have the same length as durations + The duration of each segment. This array must have the same length as endValues + + + + Returns a new to be used for tween groups. + Mind that Sequences don't have a target applied automatically like Tweener creation shortcuts, + so if you want to be able to kill this Sequence when calling DOTween.Kill(target) you'll have to add + the target manually; you can do that directly by using the overload instead of this one + + + + + Returns a new to be used for tween groups, and allows to set a target + (because Sequences don't have their target set automatically like Tweener creation shortcuts). + That way killing/controlling tweens by target will apply to this Sequence too. + + The target of the Sequence. Relevant only for static target-based methods like DOTween.Kill(target), + useless otherwise + + + Completes all tweens and returns the number of actual tweens completed + (meaning tweens that don't have infinite loops and were not already complete) + For Sequences only: if TRUE also internal Sequence callbacks will be fired, + otherwise they will be ignored + + + Completes all tweens with the given ID or target and returns the number of actual tweens completed + (meaning the tweens that don't have infinite loops and were not already complete) + For Sequences only: if TRUE internal Sequence callbacks will be fired, + otherwise they will be ignored + + + Flips all tweens (changing their direction to forward if it was backwards and viceversa), + then returns the number of actual tweens flipped + + + Flips the tweens with the given ID or target (changing their direction to forward if it was backwards and viceversa), + then returns the number of actual tweens flipped + + + Sends all tweens to the given position (calculating also eventual loop cycles) and returns the actual tweens involved + + + Sends all tweens with the given ID or target to the given position (calculating also eventual loop cycles) + and returns the actual tweens involved + + + Kills all tweens and returns the number of actual tweens killed + If TRUE completes the tweens before killing them + + + Kills all tweens and returns the number of actual tweens killed + If TRUE completes the tweens before killing them + Eventual IDs or targets to exclude from the killing + + + Kills all tweens with the given ID or target and returns the number of actual tweens killed + If TRUE completes the tweens before killing them + + + Kills all tweens with the given target and the given ID, and returns the number of actual tweens killed + If TRUE completes the tweens before killing them + + + Pauses all tweens and returns the number of actual tweens paused + + + Pauses all tweens with the given ID or target and returns the number of actual tweens paused + (meaning the tweens that were actually playing and have been paused) + + + Plays all tweens and returns the number of actual tweens played + (meaning tweens that were not already playing or complete) + + + Plays all tweens with the given ID or target and returns the number of actual tweens played + (meaning the tweens that were not already playing or complete) + + + Plays all tweens with the given target and the given ID, and returns the number of actual tweens played + (meaning the tweens that were not already playing or complete) + + + Plays backwards all tweens and returns the number of actual tweens played + (meaning tweens that were not already started, playing backwards or rewinded) + + + Plays backwards all tweens with the given ID or target and returns the number of actual tweens played + (meaning the tweens that were not already started, playing backwards or rewinded) + + + Plays backwards all tweens with the given target and ID and returns the number of actual tweens played + (meaning the tweens that were not already started, playing backwards or rewinded) + + + Plays forward all tweens and returns the number of actual tweens played + (meaning tweens that were not already playing forward or complete) + + + Plays forward all tweens with the given ID or target and returns the number of actual tweens played + (meaning the tweens that were not already playing forward or complete) + + + Plays forward all tweens with the given target and ID and returns the number of actual tweens played + (meaning the tweens that were not already started, playing backwards or rewinded) + + + Restarts all tweens, then returns the number of actual tweens restarted + + + Restarts all tweens with the given ID or target, then returns the number of actual tweens restarted + If TRUE includes the eventual tweens delays, otherwise skips them + If >= 0 changes the startup delay of all involved tweens to this value, otherwise doesn't touch it + + + Restarts all tweens with the given target and the given ID, and returns the number of actual tweens played + (meaning the tweens that were not already playing or complete) + If TRUE includes the eventual tweens delays, otherwise skips them + If >= 0 changes the startup delay of all involved tweens to this value, otherwise doesn't touch it + + + Rewinds and pauses all tweens, then returns the number of actual tweens rewinded + (meaning tweens that were not already rewinded) + + + Rewinds and pauses all tweens with the given ID or target, then returns the number of actual tweens rewinded + (meaning the tweens that were not already rewinded) + + + Smoothly rewinds all tweens (delays excluded), then returns the number of actual tweens rewinding/rewinded + (meaning tweens that were not already rewinded). + A "smooth rewind" animates the tween to its start position, + skipping all elapsed loops (except in case of LoopType.Incremental) while keeping the animation fluent. + Note that a tween that was smoothly rewinded will have its play direction flipped + + + Smoothly rewinds all tweens (delays excluded) with the given ID or target, then returns the number of actual tweens rewinding/rewinded + (meaning the tweens that were not already rewinded). + A "smooth rewind" animates the tween to its start position, + skipping all elapsed loops (except in case of LoopType.Incremental) while keeping the animation fluent. + Note that a tween that was smoothly rewinded will have its play direction flipped + + + Toggles the play state of all tweens and returns the number of actual tweens toggled + (meaning tweens that could be played or paused, depending on the toggle state) + + + Toggles the play state of all tweens with the given ID or target and returns the number of actual tweens toggled + (meaning the tweens that could be played or paused, depending on the toggle state) + + + + Returns TRUE if a tween with the given ID or target is active. + You can also use this to know if a shortcut tween is active for a given target. + Example: + transform.DOMoveX(45, 1); // transform is automatically added as the tween target + DOTween.IsTweening(transform); // Returns true + + The target or ID to look for + If FALSE (default) returns TRUE as long as a tween for the given target/ID is active, + otherwise also requires it to be playing + + + + Returns the total number of active tweens (so both Tweeners and Sequences). + A tween is considered active if it wasn't killed, regardless if it's playing or paused + + + + + Returns the total number of active Tweeners. + A Tweener is considered active if it wasn't killed, regardless if it's playing or paused + + + + + Returns the total number of active Sequences. + A Sequence is considered active if it wasn't killed, regardless if it's playing or paused + + + + + Returns the total number of active and playing tweens. + A tween is considered as playing even if its delay is actually playing + + + + + Returns a the total number of active tweens with the given id. + + If TRUE returns only the tweens with the given ID that are currently playing + + + + Returns a list of all active tweens in a playing state. + Returns NULL if there are no active playing tweens. + Beware: each time you call this method a new list is generated, so use it for debug only + + If NULL creates a new list, otherwise clears and fills this one (and thus saves allocations) + + + + Returns a list of all active tweens in a paused state. + Returns NULL if there are no active paused tweens. + Beware: each time you call this method a new list is generated, so use it for debug only + + If NULL creates a new list, otherwise clears and fills this one (and thus saves allocations) + + + + Returns a list of all active tweens with the given id. + Returns NULL if there are no active tweens with the given id. + Beware: each time you call this method a new list is generated + + If TRUE returns only the tweens with the given ID that are currently playing + If NULL creates a new list, otherwise clears and fills this one (and thus saves allocations) + + + + Returns a list of all active tweens with the given target. + Returns NULL if there are no active tweens with the given target. + Beware: each time you call this method a new list is generated + If TRUE returns only the tweens with the given target that are currently playing + If NULL creates a new list, otherwise clears and fills this one (and thus saves allocations) + + + + + Creates virtual tweens that can be used to change other elements via their OnUpdate calls + + + + + Tweens a virtual float. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type float, called at each update + + + + Tweens a virtual int. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type int, called at each update + + + + Tweens a virtual Vector2. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type Vector3, called at each update + + + + Tweens a virtual Vector3. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type Vector3, called at each update + + + + Tweens a virtual Color. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type Color, called at each update + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + Eventual overshoot to use with Back ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + Eventual amplitude to use with Elastic easeType + Eventual period to use with Elastic easeType + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The AnimationCurve to use for ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + Eventual overshoot to use with Back ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + Eventual amplitude to use with Elastic easeType + Eventual period to use with Elastic easeType + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The AnimationCurve to use for ease + + + Fires the given callback after the given time. + Callback delay + Callback to fire when the delay has expired + If TRUE (default) ignores Unity's timeScale + + + + Don't assign this! It's assigned automatically when creating 0 duration tweens + + + + + Don't assign this! It's assigned automatically when setting the ease to an AnimationCurve or to a custom ease function + + + + + Allows to wrap ease method in special ways, adding extra features + + + + + Converts the given ease so that it also creates a stop-motion effect, by playing the tween at the given FPS + + FPS at which the tween should be played + Ease type + + + + Converts the given ease so that it also creates a stop-motion effect, by playing the tween at the given FPS + + FPS at which the tween should be played + AnimationCurve to use for the ease + + + + Converts the given ease so that it also creates a stop-motion effect, by playing the tween at the given FPS + + FPS at which the tween should be played + Custom ease function to use + + + + Used to allow method chaining with DOTween.Init + + + + + Directly sets the current max capacity of Tweeners and Sequences + (meaning how many Tweeners and Sequences can be running at the same time), + so that DOTween doesn't need to automatically increase them in case the max is reached + (which might lead to hiccups when that happens). + Sequences capacity must be less or equal to Tweeners capacity + (if you pass a low Tweener capacity it will be automatically increased to match the Sequence's). + Beware: use this method only when there are no tweens running. + + Max Tweeners capacity. + Default: 200 + Max Sequences capacity. + Default: 50 + + + + Behaviour that can be assigned when chaining a SetLink to a tween + + + + Pauses the tween when the link target is disabled + + + Pauses the tween when the link target is disabled, plays it when it's enabled + + + Pauses the tween when the link target is disabled, restarts it when it's enabled + + + Plays the tween when the link target is enabled + + + Restarts the tween when the link target is enabled + + + Kills the tween when the link target is disabled + + + Kills the tween when the link target is destroyed (becomes NULL). This is always active even if another behaviour is chosen + + + Completes the tween when the link target is disabled + + + Completes and kills the tween when the link target is disabled + + + Rewinds the tween (delay excluded) when the link target is disabled + + + Rewinds and kills the tween when the link target is disabled + + + + Path mode (used to determine correct LookAt orientation) + + + + Ignores the path mode (and thus LookAt behaviour) + + + Regular 3D path + + + 2D top-down path + + + 2D side-scroller path + + + + Type of path to use with DOPath tweens + + + + Linear, composed of straight segments between each waypoint + + + Curved path (which uses Catmull-Rom curves) + + + EXPERIMENTAL: Curved path (which uses Cubic Bezier curves, where each point requires two extra control points) + + + + Tweens a Vector2 along a circle. + EndValue represents the center of the circle, start and end value degrees are inside options + ChangeValue x is changeValue°, y is unused + + + + + Path control point + + + + + Path waypoints (modified by PathPlugin when setting relative end/change value or by CubicBezierDecoder) and by DOTweenPathInspector + + + + + Minimum input points necessary to create the path (doesn't correspond to actual waypoints required) + + + + + Gets the point on the path at the given percentage (0 to 1) + + The percentage (0 to 1) at which to get the point + If TRUE constant speed is taken into account, otherwise not + + + + Base interface for all tween plugins options + + + + Resets the plugin + + + + This plugin generates some GC allocations at startup + + + + + Path plugin works exclusively with Transforms + + + + + Rotation mode used with DORotate methods + + + + + Fastest way that never rotates beyond 360° + + + + + Fastest way that rotates beyond 360° + + + + + Adds the given rotation to the transform using world axis and an advanced precision mode + (like when using transform.Rotate(Space.World)). + In this mode the end value is is always considered relative + + + + + Adds the given rotation to the transform's local axis + (like when rotating an object with the "local" switch enabled in Unity's editor or using transform.Rotate(Space.Self)). + In this mode the end value is is always considered relative + + + + + Type of scramble to apply to string tweens + + + + + No scrambling of characters + + + + + A-Z + a-z + 0-9 characters + + + + + A-Z characters + + + + + a-z characters + + + + + 0-9 characters + + + + + Custom characters + + + + + Type of randomness to apply to a shake tween + + + + Default, full randomness + + + Creates a more balanced randomness that looks more harmonic + + + + Methods that extend Tween objects and allow to control or get data from them + + + + Completes the tween + + + Completes the tween + For Sequences only: if TRUE also internal Sequence callbacks will be fired, + otherwise they will be ignored + + + Optional: indicates that the tween creation has ended, to be used (optionally) as the last element of tween chaining creation.
+ This method won't do anything except in case of 0-duration tweens, + where it will complete them immediately instead of waiting for the next internal update routine + (unless they're nested in a Sequence, in which case the Sequence will still be the one in control and this method will be ignored)
+
+ + Flips the direction of this tween (backwards if it was going forward or viceversa) + + + Forces the tween to initialize its settings immediately + + + Send the tween to the given position in time + Time position to reach + (if higher than the whole tween duration the tween will simply reach its end) + If TRUE will play the tween after reaching the given position, otherwise it will pause it + + + Send the tween to the given position in time while also executing any callback between the previous time position and the new one + Time position to reach + (if higher than the whole tween duration the tween will simply reach its end) + If TRUE will play the tween after reaching the given position, otherwise it will pause it + + + Kills the tween + If TRUE completes the tween before killing it + + + + Forces this tween to update manually, regardless of the set via SetUpdate. + Note that the tween will still be subject to normal tween rules, so if for example it's paused this method will do nothing. + Also note that if you only want to update this tween instance manually you'll have to set it to anyway, + so that it's not updated automatically. + + Manual deltaTime + Unscaled delta time (used with tweens set as timeScaleIndependent) + + + Pauses the tween + + + Plays the tween + + + Sets the tween in a backwards direction and plays it + + + Sets the tween in a forward direction and plays it + + + Restarts the tween from the beginning + Ignored in case of Sequences. If TRUE includes the eventual tween delay, otherwise skips it + Ignored in case of Sequences. If >= 0 changes the startup delay to this value, otherwise doesn't touch it + + + Rewinds and pauses the tween + Ignored in case of Sequences. If TRUE includes the eventual tween delay, otherwise skips it + + + Smoothly rewinds the tween (delays excluded). + A "smooth rewind" animates the tween to its start position, + skipping all elapsed loops (except in case of LoopType.Incremental) while keeping the animation fluent. + If called on a tween who is still waiting for its delay to happen, it will simply set the delay to 0 and pause the tween. + Note that a tween that was smoothly rewinded will have its play direction flipped + + + Plays the tween if it was paused, pauses it if it was playing + + + Send a path tween to the given waypoint. + Has no effect if this is not a path tween. + BEWARE, this is a special utility method: + it works only with Linear eases. Also, the lookAt direction might be wrong after calling this and might need to be set manually + (because it relies on a smooth path movement and doesn't work well with jumps that encompass dramatic direction changes) + Waypoint index to reach + (if higher than the max waypoint index the tween will simply go to the last one) + If TRUE will play the tween after reaching the given waypoint, otherwise it will pause it + + + + Creates a yield instruction that waits until the tween is killed or complete. + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForCompletion(); + + + + + Creates a yield instruction that waits until the tween is killed or rewinded. + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForRewind(); + + + + + Creates a yield instruction that waits until the tween is killed. + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForKill(); + + + + + Creates a yield instruction that waits until the tween is killed or has gone through the given amount of loops. + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForElapsedLoops(2); + + Elapsed loops to wait for + + + + Creates a yield instruction that waits until the tween is killed or has reached the given position (loops included, delays excluded). + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForPosition(2.5f); + + Position (loops included, delays excluded) to wait for + + + + Creates a yield instruction that waits until the tween is killed or started + (meaning when the tween is set in a playing state the first time, after any eventual delay). + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForStart(); + + + + Returns the total number of loops completed by this tween + + + Returns the eventual delay set for this tween + + + Returns the eventual elapsed delay set for this tween + + + Returns the duration of this tween (delays excluded). + NOTE: when using settings like SpeedBased, the duration will be recalculated when the tween starts + If TRUE returns the full duration loops included, + otherwise the duration of a single loop cycle + + + Returns the elapsed time for this tween (delays exluded) + If TRUE returns the elapsed time since startup loops included, + otherwise the elapsed time within the current loop cycle + + + Returns the elapsed percentage (0 to 1) of this tween (delays exluded) + If TRUE returns the elapsed percentage since startup loops included, + otherwise the elapsed percentage within the current loop cycle + + + Returns the elapsed percentage (0 to 1) of this tween (delays exluded), + based on a single loop, and calculating eventual backwards Yoyo loops as 1 to 0 instead of 0 to 1 + + + Returns FALSE if this tween has been killed or is NULL, TRUE otherwise. + BEWARE: if this tween is recyclable it might have been spawned again for another use and thus return TRUE anyway. + When working with recyclable tweens you should take care to know when a tween has been killed and manually set your references to NULL. + If you want to be sure your references are set to NULL when a tween is killed you can use the OnKill callback like this: + .OnKill(()=> myTweenReference = null) + + + Returns TRUE if this tween was reversed and is set to go backwards + + + NOTE: To check if a tween was simply set to go backwards see . + Returns TRUE if this tween is going backwards for any of these reasons: + - The tween was reversed and is going backwards on a straight loop + - The tween was reversed and is going backwards on an odd Yoyo loop + - The tween is going forward but on an even Yoyo loop + IMPORTANT: if used inside a tween's callback, this will return a result concerning the exact frame when it's asked, + so for example in a callback at the end of a Yoyo loop step this method will never return FALSE + because the frame will never end exactly there and the tween will already be going backwards when the callback is fired + + + Returns TRUE if the tween is complete + (silently fails and returns FALSE if the tween has been killed) + + + Returns TRUE if this tween has been initialized + + + Returns TRUE if this tween is playing + + + Returns the total number of loops set for this tween + (returns -1 if the loops are infinite) + + + + Returns a point on a path based on the given path percentage. + Returns Vector3.zero if this is not a path tween, if the tween is invalid, or if the path is not yet initialized. + A path is initialized after its tween starts, or immediately if the tween was created with the Path Editor (DOTween Pro feature). + You can force a path to be initialized by calling myTween.ForceInit(). + + Percentage of the path (0 to 1) on which to get the point + + + + Returns an array of points that can be used to draw the path. + Note that this method generates allocations, because it creates a new array. + Returns NULL if this is not a path tween, if the tween is invalid, or if the path is not yet initialized. + A path is initialized after its tween starts, or immediately if the tween was created with the Path Editor (DOTween Pro feature). + You can force a path to be initialized by calling myTween.ForceInit(). + + How many points to create for each path segment (waypoint to waypoint). + Only used in case of non-Linear paths + + + + Returns the length of a path. + Returns -1 if this is not a path tween, if the tween is invalid, or if the path is not yet initialized. + A path is initialized after its tween starts, or immediately if the tween was created with the Path Editor (DOTween Pro feature). + You can force a path to be initialized by calling myTween.ForceInit(). + + + + + Types of loop + + + + Each loop cycle restarts from the beginning + + + The tween moves forward and backwards at alternate cycles + + + Continuously increments the tween at the end of each loop cycle (A to B, B to B+(A-B), and so on), thus always moving "onward". + In case of String tweens works only if the tween is set as relative + + + + Controls other tweens as a group + + + + + Methods that extend known Unity objects and allow to directly create and control tweens from their instances + + + + Tweens a Camera's aspect to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's backgroundColor to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's farClipPlane to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's fieldOfView to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's nearClipPlane to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's orthographicSize to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's pixelRect to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's rect to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Shakes a Camera's localPosition along its relative X Y axes with the given values. + Also stores the camera as the tween's target so it can be used for filtered operations + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Camera's localPosition along its relative X Y axes with the given values. + Also stores the camera as the tween's target so it can be used for filtered operations + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Camera's localRotation. + Also stores the camera as the tween's target so it can be used for filtered operations + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Camera's localRotation. + Also stores the camera as the tween's target so it can be used for filtered operations + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Tweens a Light's color to the given value. + Also stores the light as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Light's intensity to the given value. + Also stores the light as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Light's shadowStrength to the given value. + Also stores the light as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a LineRenderer's color to the given value. + Also stores the LineRenderer as the tween's target so it can be used for filtered operations. + Note that this method requires to also insert the start colors for the tween, + since LineRenderers have no way to get them. + The start value to tween from + The end value to reachThe duration of the tween + + + Tweens a Material's color to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Material's named color property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween (like _Tint or _SpecColor) + The duration of the tween + + + Tweens a Material's named color property with the given ID to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a Material's alpha color to the given value + (will have no effect unless your material supports transparency). + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Material's alpha color to the given value + (will have no effect unless your material supports transparency). + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween (like _Tint or _SpecColor) + The duration of the tween + + + Tweens a Material's alpha color with the given ID to the given value + (will have no effect unless your material supports transparency). + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a Material's named float property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween + The duration of the tween + + + Tweens a Material's named float property with the given ID to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a Material's texture offset to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The duration of the tween + + + Tweens a Material's named texture offset property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween + The duration of the tween + + + Tweens a Material's texture scale to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The duration of the tween + + + Tweens a Material's named texture scale property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween + The duration of the tween + + + Tweens a Material's named Vector property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween + The duration of the tween + + + Tweens a Material's named Vector property with the given ID to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a TrailRenderer's startWidth/endWidth to the given value. + Also stores the TrailRenderer as the tween's target so it can be used for filtered operations + The end startWidth to reachThe end endWidth to reach + The duration of the tween + + + Tweens a TrailRenderer's time to the given value. + Also stores the TrailRenderer as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's position to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's X position to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's Y position to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's Z position to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's localPosition to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's X localPosition to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's Y localPosition to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's Z localPosition to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's rotation to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + Rotation mode + + + Tweens a Transform's rotation to the given value using pure quaternion values. + Also stores the transform as the tween's target so it can be used for filtered operations. + PLEASE NOTE: DORotate, which takes Vector3 values, is the preferred rotation method. + This method was implemented for very special cases, and doesn't support LoopType.Incremental loops + (neither for itself nor if placed inside a LoopType.Incremental Sequence) + + The end value to reachThe duration of the tween + + + Tweens a Transform's localRotation to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + Rotation mode + + + Tweens a Transform's rotation to the given value using pure quaternion values. + Also stores the transform as the tween's target so it can be used for filtered operations. + PLEASE NOTE: DOLocalRotate, which takes Vector3 values, is the preferred rotation method. + This method was implemented for very special cases, and doesn't support LoopType.Incremental loops + (neither for itself nor if placed inside a LoopType.Incremental Sequence) + + The end value to reachThe duration of the tween + + + Tweens a Transform's localScale to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's localScale uniformly to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's X localScale to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's Y localScale to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's Z localScale to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's rotation so that it will look towards the given world position. + Also stores the transform as the tween's target so it can be used for filtered operations + The position to look atThe duration of the tween + Eventual axis constraint for the rotation + The vector that defines in which direction up is (default: Vector3.up) + + + EXPERIMENTAL Tweens a Transform's rotation so that it will look towards the given world position, + while also updating the lookAt position every frame + (contrary to which calculates the lookAt rotation only once, when the tween starts). + Also stores the transform as the tween's target so it can be used for filtered operations + The position to look atThe duration of the tween + Eventual axis constraint for the rotation + The vector that defines in which direction up is (default: Vector3.up) + + + Punches a Transform's localPosition towards the given direction and then back to the starting one + as if it was connected to the starting position via an elastic. + The direction and strength of the punch (added to the Transform's current position) + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards. + 1 creates a full oscillation between the punch direction and the opposite direction, + while 0 oscillates only between the punch and the start position + If TRUE the tween will smoothly snap all values to integers + + + Punches a Transform's localScale towards the given size and then back to the starting one + as if it was connected to the starting scale via an elastic. + The punch strength (added to the Transform's current scale) + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting size when bouncing backwards. + 1 creates a full oscillation between the punch scale and the opposite scale, + while 0 oscillates only between the punch scale and the start scale + + + Punches a Transform's localRotation towards the given size and then back to the starting one + as if it was connected to the starting rotation via an elastic. + The punch strength (added to the Transform's current rotation) + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting rotation when bouncing backwards. + 1 creates a full oscillation between the punch rotation and the opposite rotation, + while 0 oscillates only between the punch and the start rotation + + + Shakes a Transform's localPosition with the given values. + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the tween will smoothly snap all values to integers + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localPosition with the given values. + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the tween will smoothly snap all values to integers + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localRotation. + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localRotation. + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localScale. + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localScale. + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Tweens a Transform's position to the given value, while also applying a jump effect along the Y axis. + Returns a Sequence instead of a Tweener. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reach + Power of the jump (the max height of the jump is represented by this plus the final Y offset) + Total number of jumps + The duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's localPosition to the given value, while also applying a jump effect along the Y axis. + Returns a Sequence instead of a Tweener. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reach + Power of the jump (the max height of the jump is represented by this plus the final Y offset) + Total number of jumps + The duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's position through the given path waypoints, using the chosen path algorithm. + Also stores the transform as the tween's target so it can be used for filtered operations + The waypoints to go through + The duration of the tween + The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + The path mode: 3D, side-scroller 2D, top-down 2D + The resolution of the path (useless in case of Linear paths): higher resolutions make for more detailed curved paths but are more expensive. + Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + The color of the path (shown when gizmos are active in the Play panel and the tween is running) + + + Tweens a Transform's localPosition through the given path waypoints, using the chosen path algorithm. + Also stores the transform as the tween's target so it can be used for filtered operations + The waypoint to go through + The duration of the tween + The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + The path mode: 3D, side-scroller 2D, top-down 2D + The resolution of the path: higher resolutions make for more detailed curved paths but are more expensive. + Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + The color of the path (shown when gizmos are active in the Play panel and the tween is running) + + + IMPORTANT: Unless you really know what you're doing, you should use the overload that accepts a Vector3 array instead. + Tweens a Transform's position via the given path. + Also stores the transform as the tween's target so it can be used for filtered operations + The path to use + The duration of the tween + The path mode: 3D, side-scroller 2D, top-down 2D + + + IMPORTANT: Unless you really know what you're doing, you should use the overload that accepts a Vector3 array instead. + Tweens a Transform's localPosition via the given path. + Also stores the transform as the tween's target so it can be used for filtered operations + The path to use + The duration of the tween + The path mode: 3D, side-scroller 2D, top-down 2D + + + Tweens a Tween's timeScale to the given value. + Also stores the Tween as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Light's color to the given value, + in a way that allows other DOBlendableColor tweens to work together on the same target, + instead than fight each other as multiple DOColor would do. + Also stores the Light as the tween's target so it can be used for filtered operations + The value to tween toThe duration of the tween + + + Tweens a Material's color to the given value, + in a way that allows other DOBlendableColor tweens to work together on the same target, + instead than fight each other as multiple DOColor would do. + Also stores the Material as the tween's target so it can be used for filtered operations + The value to tween toThe duration of the tween + + + Tweens a Material's named color property to the given value, + in a way that allows other DOBlendableColor tweens to work together on the same target, + instead than fight each other as multiple DOColor would do. + Also stores the Material as the tween's target so it can be used for filtered operations + The value to tween to + The name of the material property to tween (like _Tint or _SpecColor) + The duration of the tween + + + Tweens a Material's named color property with the given ID to the given value, + in a way that allows other DOBlendableColor tweens to work together on the same target, + instead than fight each other as multiple DOColor would do. + Also stores the Material as the tween's target so it can be used for filtered operations + The value to tween to + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a Transform's position BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableMove tweens to work together on the same target, + instead than fight each other as multiple DOMove would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's localPosition BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableMove tweens to work together on the same target, + instead than fight each other as multiple DOMove would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + EXPERIMENTAL METHOD - Tweens a Transform's rotation BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableRotate tweens to work together on the same target, + instead than fight each other as multiple DORotate would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + Rotation mode + + + EXPERIMENTAL METHOD - Tweens a Transform's lcoalRotation BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableRotate tweens to work together on the same target, + instead than fight each other as multiple DORotate would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + Rotation mode + + + Punches a Transform's localRotation BY the given value and then back to the starting one + as if it was connected to the starting rotation via an elastic. Does it in a way that allows other + DOBlendableRotate tweens to work together on the same target + The punch strength (added to the Transform's current rotation) + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting rotation when bouncing backwards. + 1 creates a full oscillation between the punch rotation and the opposite rotation, + while 0 oscillates only between the punch and the start rotation + + + Tweens a Transform's localScale BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableScale tweens to work together on the same target, + instead than fight each other as multiple DOScale would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + + + + Completes all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens completed + (meaning the tweens that don't have infinite loops and were not already complete) + + For Sequences only: if TRUE also internal Sequence callbacks will be fired, + otherwise they will be ignored + + + + Completes all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens completed + (meaning the tweens that don't have infinite loops and were not already complete) + + For Sequences only: if TRUE also internal Sequence callbacks will be fired, + otherwise they will be ignored + + + + Kills all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens killed. + + If TRUE completes the tween before killing it + + + + Kills all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens killed. + + If TRUE completes the tween before killing it + + + + Flips the direction (backwards if it was going forward or viceversa) of all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens flipped. + + + + + Flips the direction (backwards if it was going forward or viceversa) of all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens flipped. + + + + + Sends to the given position all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens involved. + + Time position to reach + (if higher than the whole tween duration the tween will simply reach its end) + If TRUE will play the tween after reaching the given position, otherwise it will pause it + + + + Sends to the given position all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens involved. + + Time position to reach + (if higher than the whole tween duration the tween will simply reach its end) + If TRUE will play the tween after reaching the given position, otherwise it will pause it + + + + Pauses all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens paused. + + + + + Pauses all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens paused. + + + + + Plays all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays backwards all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays backwards all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays forward all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays forward all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Restarts all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens restarted. + + + + + Restarts all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens restarted. + + + + + Rewinds all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens rewinded. + + + + + Rewinds all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens rewinded. + + + + + Smoothly rewinds all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens rewinded. + + + + + Smoothly rewinds all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens rewinded. + + + + + Toggles the paused state (plays if it was paused, pauses if it was playing) of all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens involved. + + + + + Toggles the paused state (plays if it was paused, pauses if it was playing) of all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens involved. + + + + + This class serves only as a utility class to store tween settings to apply on multiple tweens. + It is in no way needed otherwise, since you can directly apply tween settings to a tween via chaining + + + + A variable you can eventually Clear and reuse when needed, + to avoid instantiating TweenParams objects + + + Creates a new TweenParams object, which you can use to store tween settings + to pass to multiple tweens via myTween.SetAs(myTweenParms) + + + Clears and resets this TweenParams instance using default values, + so it can be reused without instantiating another one + + + Sets the autoKill behaviour of the tween. + Has no effect if the tween has already started + If TRUE the tween will be automatically killed when complete + + + Sets an ID for the tween, which can then be used as a filter with DOTween's static methods. + The ID to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets an ID for the tween, which can then be used as a filter with DOTween's static methods. + The ID to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets an ID for the tween, which can then be used as a filter with DOTween's static methods. + The ID to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets the target for the tween, which can then be used as a filter with DOTween's static methods. + IMPORTANT: use it with caution. If you just want to set an ID for the tween use SetId instead. + When using shorcuts the shortcut target is already assigned as the tween's target, + so using this method will overwrite it and prevent shortcut-operations like myTarget.DOPause from working correctly. + The target to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets the looping options for the tween. + Has no effect if the tween has already started + Number of cycles to play (-1 for infinite - will be converted to 1 in case the tween is nested in a Sequence) + Loop behaviour type (default: LoopType.Restart) + + + Sets the ease of the tween. + If applied to Sequences eases the whole sequence animation + Eventual overshoot or amplitude to use with Back or Elastic easeType (default is 1.70158) + Eventual period to use with Elastic easeType (default is 0) + + + Sets the ease of the tween using an AnimationCurve. + If applied to Sequences eases the whole sequence animation + + + Sets the ease of the tween using a custom ease function. + If applied to Sequences eases the whole sequence animation + + + Sets the recycling behaviour for the tween. + If TRUE the tween will be recycled after being killed, otherwise it will be destroyed. + + + Sets the update type to the one defined in DOTween.defaultUpdateType (UpdateType.Normal unless changed) + and lets you choose if it should be independent from Unity's Time.timeScale + If TRUE the tween will ignore Unity's Time.timeScale + + + Sets the type of update (default or independent) for the tween + The type of update (default: UpdateType.Normal) + If TRUE the tween will ignore Unity's Time.timeScale + + + Sets the onStart callback for the tween. + Called the first time the tween is set in a playing state, after any eventual delay + + + Sets the onPlay callback for the tween. + Called when the tween is set in a playing state, after any eventual delay. + Also called each time the tween resumes playing from a paused state + + + Sets the onRewind callback for the tween. + Called when the tween is rewinded, + either by calling Rewind or by reaching the start position while playing backwards. + Rewinding a tween that is already rewinded will not fire this callback + + + Sets the onUpdate callback for the tween. + Called each time the tween updates + + + Sets the onStepComplete callback for the tween. + Called the moment the tween completes one loop cycle, even when going backwards + + + Sets the onComplete callback for the tween. + Called the moment the tween reaches its final forward position, loops included + + + Sets the onKill callback for the tween. + Called the moment the tween is killed + + + Sets the onWaypointChange callback for the tween. + Called when a path tween reaches a new waypoint + + + Sets a delayed startup for the tween. + Has no effect on Sequences or if the tween has already started + + + If isRelative is TRUE sets the tween as relative + (the endValue will be calculated as startValue + endValue instead than being used directly). + Has no effect on Sequences or if the tween has already started + + + If isSpeedBased is TRUE sets the tween as speed based + (the duration will represent the number of units the tween moves x second). + Has no effect on Sequences, nested tweens, or if the tween has already started + + + + Methods that extend Tween objects and allow to set their parameters + + + + Sets the autoKill behaviour of the tween to TRUE. + Has no effect if the tween has already started or if it's added to a Sequence + + + Sets the autoKill behaviour of the tween. + Has no effect if the tween has already started or if it's added to a Sequence + If TRUE the tween will be automatically killed when complete + + + Sets an ID for the tween (), which can then be used as a filter with DOTween's static methods. + The ID to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets a string ID for the tween (), which can then be used as a filter with DOTween's static methods. + Filtering via string is 2X faster than using an object as an ID (using the alternate obejct overload) + The string ID to assign to this tween. + + + Sets an int ID for the tween (), which can then be used as a filter with DOTween's static methods. + Filtering via int is 4X faster than via object, 2X faster than via string (using the alternate object/string overloads) + The int ID to assign to this tween. + + + Allows to link this tween to a GameObject + so that it will be automatically killed when the GameObject is destroyed. + Has no effect if the tween is added to a Sequence + The link target (unrelated to the target set via SetTarget) + + + Allows to link this tween to a GameObject and assign a behaviour depending on it. + This will also automatically kill the tween when the GameObject is destroyed. + Has no effect if the tween is added to a Sequence + The link target (unrelated to the target set via SetTarget) + The behaviour to use ( is always evaluated even if you choose another one) + + + Sets the target for the tween, which can then be used as a filter with DOTween's static methods. + IMPORTANT: use it with caution. If you just want to set an ID for the tween use SetId instead. + When using shorcuts the shortcut target is already assigned as the tween's target, + so using this method will overwrite it and prevent shortcut-operations like myTarget.DOPause from working correctly. + The target to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets the looping options for the tween. + Has no effect if the tween has already started + Number of cycles to play (-1 for infinite - will be converted to 1 in case the tween is nested in a Sequence) + + + Sets the looping options for the tween. + Has no effect if the tween has already started + Number of cycles to play (-1 for infinite - will be converted to 1 in case the tween is nested in a Sequence) + Loop behaviour type (default: LoopType.Restart) + + + Sets the ease of the tween. + If applied to Sequences eases the whole sequence animation + + + Sets the ease of the tween. + If applied to Sequences eases the whole sequence animation + + Eventual overshoot to use with Back or Flash ease (default is 1.70158 - 1 for Flash). + In case of Flash ease it must be an intenger and sets the total number of flashes that will happen. + Using an even number will complete the tween on the starting value, while an odd one will complete it on the end value. + + + + Sets the ease of the tween. + If applied to Sequences eases the whole sequence animation + Eventual amplitude to use with Elastic easeType or overshoot to use with Flash easeType (default is 1.70158 - 1 for Flash). + In case of Flash ease it must be an integer and sets the total number of flashes that will happen. + Using an even number will complete the tween on the starting value, while an odd one will complete it on the end value. + + Eventual period to use with Elastic or Flash easeType (default is 0). + In case of Flash ease it indicates the power in time of the ease, and must be between -1 and 1. + 0 is balanced, 1 weakens the ease with time, -1 starts the ease weakened and gives it power towards the end. + + + + Sets the ease of the tween using an AnimationCurve. + If applied to Sequences eases the whole sequence animation + + + Sets the ease of the tween using a custom ease function (which must return a value between 0 and 1). + If applied to Sequences eases the whole sequence animation + + + Allows the tween to be recycled after being killed. + + + Sets the recycling behaviour for the tween. + If TRUE the tween will be recycled after being killed, otherwise it will be destroyed. + + + Sets the update type to UpdateType.Normal and lets you choose if it should be independent from Unity's Time.timeScale + If TRUE the tween will ignore Unity's Time.timeScale + + + Sets the type of update for the tween + The type of update (defalt: UpdateType.Normal) + + + Sets the type of update for the tween and lets you choose if it should be independent from Unity's Time.timeScale + The type of update + If TRUE the tween will ignore Unity's Time.timeScale + + + EXPERIMENTAL: inverts this tween, so that it will play from the end to the beginning + (playing it backwards will actually play it from the beginning to the end). + Has no effect if the tween has already started or if it's added to a Sequence + + + EXPERIMENTAL: inverts this tween, so that it will play from the end to the beginning + (playing it backwards will actually play it from the beginning to the end). + Has no effect if the tween has already started or if it's added to a Sequence + If TRUE the tween will be inverted, otherwise it won't + + + Sets the onStart callback for the tween, clearing any previous onStart callback that was set. + Called the first time the tween is set in a playing state, after any eventual delay + + + Sets the onPlay callback for the tween, clearing any previous onPlay callback that was set. + Called when the tween is set in a playing state, after any eventual delay. + Also called each time the tween resumes playing from a paused state + + + Sets the onPause callback for the tween, clearing any previous onPause callback that was set. + Called when the tween state changes from playing to paused. + If the tween has autoKill set to FALSE, this is called also when the tween reaches completion. + + + Sets the onRewind callback for the tween, clearing any previous onRewind callback that was set. + Called when the tween is rewinded, + either by calling Rewind or by reaching the start position while playing backwards. + Rewinding a tween that is already rewinded will not fire this callback + + + Sets the onUpdate callback for the tween, clearing any previous onUpdate callback that was set. + Called each time the tween updates + + + Sets the onStepComplete callback for the tween, clearing any previous onStepComplete callback that was set. + Called the moment the tween completes one loop cycle, even when going backwards + + + Sets the onComplete callback for the tween, clearing any previous onComplete callback that was set. + Called the moment the tween reaches its final forward position, loops included + + + Sets the onKill callback for the tween, clearing any previous onKill callback that was set. + Called the moment the tween is killed + + + Sets the onWaypointChange callback for the tween, clearing any previous onWaypointChange callback that was set. + Called when a path tween's current waypoint changes + + + Sets the parameters of the tween (id, ease, loops, delay, timeScale, callbacks, etc) as the parameters of the given one. + Doesn't copy specific SetOptions settings: those will need to be applied manually each time. + Has no effect if the tween has already started. + NOTE: the tween's target will not be changed + Tween from which to copy the parameters + + + Sets the parameters of the tween (id, ease, loops, delay, timeScale, callbacks, etc) as the parameters of the given TweenParams. + Has no effect if the tween has already started. + TweenParams from which to copy the parameters + + + Adds the given tween to the end of the Sequence. + Has no effect if the Sequence has already started + The tween to append + + + Adds the given tween to the beginning of the Sequence, pushing forward the other nested content. + Has no effect if the Sequence has already started + The tween to prepend + + + Inserts the given tween at the same time position of the last tween, callback or interval added to the Sequence. + Note that, in case of a Join after an interval, the insertion time will be the time where the interval starts, not where it finishes. + Has no effect if the Sequence has already started + + + Inserts the given tween at the given time position in the Sequence, + automatically adding an interval if needed. + Has no effect if the Sequence has already started + The time position where the tween will be placed + The tween to insert + + + Adds the given interval to the end of the Sequence. + Has no effect if the Sequence has already started + The interval duration + + + Adds the given interval to the beginning of the Sequence, pushing forward the other nested content. + Has no effect if the Sequence has already started + The interval duration + + + Adds the given callback to the end of the Sequence. + Has no effect if the Sequence has already started + The callback to append + + + Adds the given callback to the beginning of the Sequence, pushing forward the other nested content. + Has no effect if the Sequence has already started + The callback to prepend + + + Inserts the given callback at the same time position of the last tween, callback or interval added to the Sequence. + Note that, in case of a Join after an interval, the insertion time will be the time where the interval starts, not where it finishes. + Has no effect if the Sequence has already started + /// <param name="callback">The callback to prepend</param> + + + Inserts the given callback at the given time position in the Sequence, + automatically adding an interval if needed. + Has no effect if the Sequence has already started + The time position where the callback will be placed + The callback to insert + + + Changes a TO tween into a FROM tween: sets the current target's position as the tween's endValue + then immediately sends the target to the previously set endValue. + + + Changes a TO tween into a FROM tween: sets the current target's position as the tween's endValue + then immediately sends the target to the previously set endValue. + If TRUE the FROM value will be calculated as relative to the current one + + + Changes a TO tween into a FROM tween: sets the current value of the target as the endValue, + and the previously passed endValue as the actual startValue. + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM value will be calculated as relative to the current one + + + Changes a TO tween into a FROM tween: sets the tween's starting value to the given one + and eventually sets the tween's target to that value immediately. + Value to start from + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM/TO values will be calculated as relative to the current ones + + + Changes a TO tween into a FROM tween: sets the tween's starting value to the given one + and eventually sets the tween's target to that value immediately. + Alpha value to start from (in case of Fade tweens) + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM/TO values will be calculated as relative to the current ones + + + Changes a TO tween into a FROM tween: sets the tween's starting value to the given one + and eventually sets the tween's target to that value immediately. + Value to start from (in case of Vector tweens that act on a single coordinate or scale tweens) + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM/TO values will be calculated as relative to the current ones + + + Changes a TO tween into a FROM tween: sets the tween's starting value to the given one + and eventually sets the tween's target to that value immediately. + Value to start from (in case of Vector tweens that act on a single coordinate or scale tweens) + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM/TO values will be calculated as relative to the current ones + + + Sets a delayed startup for the tween. + In case of Sequences behaves the same as , + which means the delay will repeat in case of loops (while with tweens it's ignored after the first loop cycle). + Has no effect if the tween has already started + + + EXPERIMENTAL: implemented in v1.2.340. + Sets a delayed startup for the tween with options to choose how the delay is applied in case of Sequences. + Has no effect if the tween has already started + Only used by types: If FALSE sets the delay as a one-time occurrence + (defaults to this for types), + otherwise as a Sequence interval which will repeat at the beginning of every loop cycle + + + Sets the tween as relative + (the endValue will be calculated as startValue + endValue instead than being used directly). + Has no effect on Sequences or if the tween has already started + + + If isRelative is TRUE sets the tween as relative + (the endValue will be calculated as startValue + endValue instead than being used directly). + Has no effect on Sequences or if the tween has already started + + + If isSpeedBased is TRUE sets the tween as speed based + (the duration will represent the number of units the tween moves x second). + Has no effect on Sequences, nested tweens, or if the tween has already started + + + If isSpeedBased is TRUE sets the tween as speed based + (the duration will represent the number of units the tween moves x second). + Has no effect on Sequences, nested tweens, or if the tween has already started + + + Options for float tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector2 tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector2 tweens + Selecting an axis will tween the vector only on that axis, leaving the others untouched + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector3 tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector3 tweens + Selecting an axis will tween the vector only on that axis, leaving the others untouched + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector4 tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector4 tweens + Selecting an axis will tween the vector only on that axis, leaving the others untouched + If TRUE the tween will smoothly snap all values to integers + + + Options for Quaternion tweens + If TRUE (default) the rotation will take the shortest route, and will not rotate more than 360°. + If FALSE the rotation will be fully accounted. Is always FALSE if the tween is set as relative + + + Options for Color tweens + If TRUE only the alpha value of the color will be tweened + + + Options for Vector4 tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector4 tweens + If TRUE, rich text will be interpreted correctly while animated, + otherwise all tags will be considered as normal text + The type of scramble to use, if any + A string containing the characters to use for scrambling. + Use as many characters as possible (minimum 10) because DOTween uses a fast scramble mode which gives better results with more characters. + Leave it to NULL to use default ones + + + Options for Vector3Array tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector3Array tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for ShapeCircle tweens + If TRUE the center you set in the DOTween.To method will be considered as relative + to the starting position of the target + If TRUE the tween will smoothly snap all values to integers + + + Options for Path tweens (created via the DOPath shortcut) + The eventual movement axis to lock. You can input multiple axis if you separate them like this: + AxisConstrain.X | AxisConstraint.Y + The eventual rotation axis to lock. You can input multiple axis if you separate them like this: + AxisConstrain.X | AxisConstraint.Y + + + Options for Path tweens (created via the DOPath shortcut) + If TRUE the path will be automatically closed + The eventual movement axis to lock. You can input multiple axis if you separate them like this: + AxisConstrain.X | AxisConstraint.Y + The eventual rotation axis to lock. You can input multiple axis if you separate them like this: + AxisConstrain.X | AxisConstraint.Y + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target towards the given position. + Must be chained directly to the tween creation method or to a SetOptions + The position to look at + The eventual direction to consider as "forward". + If left to NULL defaults to the regular forward side of the transform + The vector that defines in which direction up is (default: Vector3.up) + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target towards the given position with options to keep the Z rotation stable. + Must be chained directly to the tween creation method or to a SetOptions + The position to look at + If TRUE doesn't rotate the target along the Z axis + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target towards another transform. + Must be chained directly to the tween creation method or to a SetOptions + The transform to look at + The eventual direction to consider as "forward". + If left to NULL defaults to the regular forward side of the transform + The vector that defines in which direction up is (default: Vector3.up) + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target towards another transform with options to keep the Z rotation stable. + Must be chained directly to the tween creation method or to a SetOptions + The transform to look at + If TRUE doesn't rotate the target along the Z axis + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target to the path, with the given lookAhead. + Must be chained directly to the tween creation method or to a SetOptions + The percentage of lookAhead to use (0 to 1) + The eventual direction to consider as "forward". + If left to NULL defaults to the regular forward side of the transform + The vector that defines in which direction up is (default: Vector3.up) + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the path with options to keep the Z rotation stable. + Must be chained directly to the tween creation method or to a SetOptions + The percentage of lookAhead to use (0 to 1) + If TRUE doesn't rotate the target along the Z axis + + + + Types of log behaviours + + + + Log only warnings and errors + + + Log warnings, errors and additional infos + + + Log only errors + + + + Indicates either a Tweener or a Sequence + + + + TimeScale for the tween + + + If TRUE the tween will play backwards + + + If TRUE the tween is completely inverted but without playing it backwards + (play backwards will actually play the tween in the original direction) + + + Object ID (usable for filtering with DOTween static methods). Can be anything except a string or an int + (use or for those) + + + String ID (usable for filtering with DOTween static methods). 2X faster than using an object id + + + Int ID (usable for filtering with DOTween static methods). 4X faster than using an object id, 2X faster than using a string id. + Default is -999 so avoid using an ID like that or it will capture all unset intIds + + + Tween target (usable for filtering with DOTween static methods). Automatically set by tween creation shortcuts + + + Called when the tween is set in a playing state, after any eventual delay. + Also called each time the tween resumes playing from a paused state + + + Called when the tween state changes from playing to paused. + If the tween has autoKill set to FALSE, this is called also when the tween reaches completion. + + + Called when the tween is rewinded, + either by calling Rewind or by reaching the start position while playing backwards. + Rewinding a tween that is already rewinded will not fire this callback + + + Called each time the tween updates + + + Called the moment the tween completes one loop cycle + + + Called the moment the tween reaches completion (loops included) + + + Called the moment the tween is killed + + + Called when a path tween's current waypoint changes + + + Tweeners-only (ignored by Sequences), returns TRUE if the tween was set as relative + + + + Set by SetTarget if DOTween's Debug Mode is on (see DOTween Utility Panel -> "Store GameObject's ID" debug option + + + + FALSE when tween is (or should be) despawned - set only by TweenManager + + + Gets and sets the time position (loops included, delays excluded) of the tween + + + Returns TRUE if the tween is set to loop (either a set number of times or infinitely) + + + TRUE after the tween was set in a play state at least once, AFTER any delay is elapsed + + + Time position within a single loop cycle + + + + Animates a single value + + + + Changes the start value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new start value + If bigger than 0 applies it as the new tween duration + + + Changes the end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new end value + If bigger than 0 applies it as the new tween duration + If TRUE the start value will become the current target's value, otherwise it will stay the same + + + Changes the end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new end value + If TRUE the start value will become the current target's value, otherwise it will stay the same + + + Changes the start and end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new start value + The new end value + If bigger than 0 applies it as the new tween duration + + + + Used internally + + + + + Update type + + + + Updates every frame during Update calls + + + Updates every frame during LateUpdate calls + + + Updates using FixedUpdate calls + + + Updates using manual update calls + +
+
diff --git a/Assets/Plugins/Demigiant/DOTween/DOTween.XML.meta b/Assets/Plugins/Demigiant/DOTween/DOTween.XML.meta new file mode 100644 index 0000000..d2433e9 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/DOTween.XML.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34192c5e0d14aee43a0e86cc4823268a +TextScriptImporter: + userData: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/DOTween.XML + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/DOTween.dll b/Assets/Plugins/Demigiant/DOTween/DOTween.dll new file mode 100644 index 0000000000000000000000000000000000000000..57112d34beef1b8bb4f78782d752c7bef2452e0c GIT binary patch literal 175616 zcmdSC34B~vbwB>}-kbMk-i*e2mOLZLj^#L!d6`AFrNoh)#C8_4I3y$?36e|}0s)Ld zCP)cO#&4no2x}6S0!i3H*!Qvp!WIgYwrovlp{0eewk&OFDW$A+{@?F8_szVKWLpM) z{e1rV*z@i?_uO;NJ@?#m_xsM9d8y@CmgVCA!w*~5NAcv}Zuvd*&jO;0BOfbTAIg3C z=#Tb1>dQx8{FHt38?KvcJbCW%PuuW>$6tGG`K$K zILT`3z?za}t@S#Ao&#&jfcQdclhEoxQQ}`%UZ6CqdZME#M*)G22rS^oU1cXgTY*%@ zDknNdF`WqYGKf|~y67P&%^rwG0oZ;#L^Mh3dAm8)W4Q~dl!RRgm?SiO3A>7TWNSC4 z5o|uw#ycuw^8PHohw?r{)P4!>WpF@(k7E#OM1sp0gbonAoIzy1oyDBVV%6*7c?I#1 z7bJN+gToSh0)r?aK%dAU%m~4&8AQP&_#_6Q5CoshAXI|jQy7FY5ZuS$1_?fuL8uwf zSq5ohcJmqpBjmt~J`N=gj_*6_wlh)8qop~ZUU%T&O!3TJijdm%5 zb$b=7e~WE>*3v&G`YlkS{Vd>mPo*U0Qj!84l;SB#p_D{-WlZLV$MQBIJ^jsg zlmPM>&hLRj0?&@W4;r2me~*s?-noFz!=(iXKZ@ZogxyTEfyRuQTLl@=$yi52iO^A4 z%z*F0u5CGa^ku4j0qoz<-t3#{^Mqfd@??4O8 zWTZ5UZZT8zN=3hzjZR=C?cWkuuvz&d9uZ3AqF3~j_>6VDZK0Kh-u-$u)0}`9RUiI4 z(Xe}H4QH$MFl#iND`xAS3td-TD0v2YbHhM%oehI~h}NGCv;O#3T%+qeb)CmQ)pa}L zKam2&&xcNrj)y?~o>9JE>Mu;fSz2KM`ak(xgqV?_zqgnxPwWf}rLE=AL&D=vpB5U$ zj1ZXWN0#eu(W_sS22-^`bfOTbPBQhHBy}-!^^&xu4ltdv=x=`^G#vJZo);Yr6OSfI zvADVjTNZ^%flDZ+el-I1CeR3mV*Y5vj&=k?F@IJUqm%IPqLcC4Uxe)z!lGDEFFpM~AdxHY%mNB6)VC)cNQ+8NDc@?1OU3VOK_+gl$pE5=9$yL}_ z#<~@GhYt%gx9p*L6EYBe3jTDU;z_m1dr~tCrGB@%-Vb3P?weR;M1pMS zqW0Z+Pw0XpV!ZKhNh$S~`ZLwuTsF+yIn^6x5Sa-x-uO>#$IlH!aLHAv7Nh%5fmX6{ zfxgQ)WEg$5a;7-(=zk!`X!HTrhjA8-XR{xL=u&B*WS0&&vjYQ>i*l>X*zB#9%67>~ zgNaxciIyOCgP&yA97jkDIvRuSj!-_cG?b9A4P+49mmxX`?p@$*L!|-7PB`xo5r@jQ z>!d(VshXi}c+szs*{RA`oce0Jz8ESH&xv*cu{@M;cSN44%I!kgVJc_{D)q{XM43X% zU^3_u%}1wTC-DXy71`u=s&eM=@|hc6M6q(_+T{_~E=FvtcI_f&l{1f8p2SfHC2`ae z66=;HvF@NG)-5KnXCx>M*j)v8z9@7gD8ut6Wi^v1a3mOnKW>}H`o)RW6xSnd7tK8* zxy7Phu55CPW!*E9KL~1mG3uowg++`?2kgpl>xHaQ!>!x(afdvj)vPJogel6upKoW{ zHP3Fq6p+_wpc_&$5Q;fa!HC8cMCc@1L(Dy0pfW*oGWMw#7mZ*d48Nq`=~?JNTj(o= zTEWqWucG52?OTLie6^nQ%F%Ds{a`pogAd@VdaSoeOK4eh7+YMofS!?CK1e4OT3^yV zUD7d?0ikwhOVUv<%gAqOS2XE_9u1BM@50XShMWuRm#)!4p!BaE37OFs4Cl{-ZUQe8 z|1-(~-K-z*alktt(4>F$XolIpf^s)NS%|)XAT;kDwP*Scu0@*Y_l5Hp8k#>;n*X9S zFJhuoK?ejL!|-WJ6G|b?i`z8e!n7t1~Za6<}X#T6x{E5<>VIt&(a_(jLOr?qbJ!w9!O%sEtE}H1ZhVz#hn*Xje z|4nIL&O~P^%_|s2kCOUCv5@AKZJHPbRVz2zjy;_jaK&6&FiW>Jil68dpv_EGu1!Z5 zyW_6vjze$5B>EI1Mn*I9yFuiDcPcreL+>4o$vc4`odYQkB8PMuqCG%h&%PTqEmI2b zmf$t=R*D(hvkn# zpqgnNLpAS&ZUWnjZiIR&Q0QWnX~f<0j|bkU6aNQ_cvOnYp4}V&6mJK-s}l9f(6&WF z9FI8G1>ns;yS_>W-Q}%l7C#54Qn4E^hS+H^rt$!8eg-ntQrMUY1GtPfwOs8fMH#T- zyozHzM@d`uOJM$M>uU^yyuJ$;yP_}3YcU2HCK$?gF$Q_JF+K#rkZ;R6p{P{LWtGO( zaXf5X{{G;+MxM!|-JYBLgK3r`A4Dq^IQUZZTow?6Wew^WwDCuhUmM$GpxI+L{{o7u z` zu|FQof}!bHaNd8ca*uk2D(j7Hq1E^!(T$3RtkC`A>0s6W1HJYcnyz&QCJ@jI4FBNz zbVCF`9(1({f39spmj`i5n=_@pp6W4<*E|pHSaSkZ{q}w3>8;@+Kwppe>pTa{W#2@O z0~-V7seCe0cFI%Z-%DaA5xciwH_%V_YFq8*eefsciO6oe900q?HekHhZhjHZ!OKbq zdaA|Fi-Y#5mX)S4J6*7wUj|Y=tMOIyEKkoWl^Fm?ZDy+1&cTtWGyItGdVSKEmDpOc zl^UqX46^*#jeh{7aXz~uD?A%%RZ!IrQ2@M2` z17mM(<_EfUCnf-#kE{UaE5u=)M!#C?^dU$(we{NGtQlLSWvQ>TGZosvP2kA_7J3)2 zh~8M*%r+m?aujO{T__r*(7$0t^v|}NUw}lSkrOz>XIX}bih5X|rR7kC>?)jyv%T8h4#+nMpn%;C} z+^+d50ag(YVKQ%E(TLnvLT>&Y+`Nce+n~~x$JZoMqKdcu0G1#R74IBc7vvJ!V_pfkf66 zTs^7jPNv|L6ZnaYsTj(L+1HeO?GZvsz68UG-ayglKVUJUXM3?8srLsG*;3k|Y$k45 zJ({>g##BnmsIh4|m(ybx78| z*SZ7w!YWGWNJo3kM9JCk@WT(^6w|=w-i;D-q{JNYwvPBeMV+0Q3hYqoN^vDOPLdNxvZbDPTfx@Xlxmy?S`BzW7LL=ngyG7Z zt@x57qff`^Q|p9l%|H*B*AH!!w`DDd+0lGZ$|sul)0zj(j^^<~&10D_?|aZZ7*XGt z-R8PjX!Pqk^Zy0C2cG9b&yqlBXt{bOGt{PgypJ>tk(BsgKBeuDLJJ&k+iKer<-!U@ zt#Iww!$NgSwy-fJqFt(bbT(A8btx6q$-4UZ&E!K_MVpPs0*6^2(s#cx1wiAKpvQ#= zlhN;&Iqiw!_9{DcUKG*NJYpoId4vhu!ETgB`Q;zAU z?G`66V|FZ&xBCUcIj{KR66DNR{0aQPkGR%v!C{Ta-L5RgA|wy>Uaub55zJ2n2R*hF zuo2eBHCwpWyKob`sG@9v&d$VNAdV<2f)to^#uT+z+m+IdsgSh1tmtNw-TYI$U_nF_ zsK9dLMM&7Lkj;C5Q9HlXTRl^$=ftA87}caBsaHeydQ2kPT!9KRA`>1Ib#|sSq&;A) zP{pK^D^K<2yz%?WEI;2m(YCA-^xy>AgTO8p;pP`zbi(_P9V)UsHkD*m^xFIwfTq`O zH$}fqs#Yfnp-5Fr2iH$Pi*fT}Q0RP!V#jhCC~w`E^aX|toAIm}7v$v0AwfT+Lwn%X zuw(~e`Kq#;*Gy^WKUz?WbSC;Un!$cA(~pJPtXC*zcDx+XST4_&wz|1Obxr8jV8|p{ zhak)Yh8v*_HTY8H+CQfJ>}(Dz+0cGDg4EdZRIcdqvFUB~C9)@Sh1t*_zbnkBBokQ1 zRavH^X;hDm80J~qCbXA?e4r7NK@vK_wB_=|nhe(M``US=DBg5X>T@#X3Fw-AoEmCZ zrnL1m)4khK#JrFQ%Pm4ofG!n@)wgit0@y{y-^p9KR4PeUHeovh7SB8ms+3K^&JyA$ z5Pw>;uK2Ve*LtRFS!Jn9tcHQ>9B{Y)H!`KhDh*M2I`0=I|CT`Q#6o9wljz8>cLl{) zY;C4`bK=6?U9UrmoHSX^DKC>S4SsN9eFo`@nJc#M7vQ4+w4=LGX*Nwh6%bd`OtXqe z4$Y()c2=}2ip-vEKN;Ap8Z2~UJ_Xbr*5uG-daV7HGE#+VSG3SVqdY`*R$*}!$@1=d@S=ty zc{rh@_ERs0YKVIoQX@aj3Fqg9xCAncie?3z2_C{OEsH(41tF(^H2*NyI-`} z+*1aT$h=6_xAo$UEuXXVe_3FPCs8M~qjq6W52MsV&dBWeD&9?XrV(RzNex2`=Dg@$ zQS-6c1X>Z5Y=4_3P1_L~L6lQsNZ4f~>=Hu?LSspJ;!v~`N5j0%$Y!xgMy6!L03e#u z@z_No0qi=-m%5EjBf?;sabb`c+Y^u2*z##(gHBV{mRD-(_+6!&;pB z>18dhet3&3Ap6GR3beR_SeyozSe$~Pivlbzzr^B_ojRev>&^fB@WUngpp11X>I&8n zF-E=!^(rXmt7rNJTf1Jp)d4$eBk$5|HXa8AG27DCQX48hMhkn(SK;6V%k)?7Lno?h z?xOi_lxcm3-9&YD>*IFw?R>(6y^T*aUFbWz^Zv7!xVxHgGgN@tjKo@?kFP&&_J z+Ov=rG;d`X6Q9XqA?Oe*I(iWubR)v~w-`Dh_NyZ8TbZ`5bl%2rw>-pJBF{R~`MjaC zPU-wbiq2myr9-SGbdDmO9~e5Dl+Hh==={r4I>cH+XFciIuId@%NaoAIYmzUQ;qH79 zYYCkZ(%Ee2oTGG5l-~Shs-LY4U#@ztp>qH|6N{UVyUGjYhdqgg&f}EMxhXo2T1tml zDLOgpD%cOo4{Ps+&Sk*R0n`aPjxB8s=5{#PjC}!LKeGiC11 zizXnm*CZkCk**FWoBH~U(b)w%!HPpTe}m9*;{PEXJN~7Tdj?5d zsV4YLhGAFSb9KzqkWJG?lPQj z8alrw9XI|BA5D2_GTcC=3e1vsX=~mSVDx#6zoq)@PqB^LY%{X|0#%)K+H6IB@~x6@ z%kcfJ^8KCgm6s;NJj>F>m%!*R623R3_%1BvOFG?r*|xy{g!4BWzUVj6CT>X)dQO{= z%k7!;Rm5r&qW&pAOemaxzM=Cl>9{ctUO;d1(qwpv-U#gI?FA{eFKn~TBy35i&9<#K zm}@xyBEz?b4BglkzVgy!c!}N!?C9;qDZVdR%9nJO^2MA+IDebr>yV)vyL>d|rOEJ; z{1Vv7@9pGes@@$8OV!hTo+#(9SQ)Ae?`x;hP~tH}?2w%1e{sCHW<=li!!6 z_`ZB8U()I3OFP+0zOOKReKI`Y{RtDFu9fta44;88`XKNRv=d_Ss7$*}qn(VC&Z`Wa zEa|v$j*q6iG#Or^Hv&6)dv%KKoo%+6ge~c`*|z-y+N^N?F2gqjJ~}lacQ1VEyp1jfEMahIRAb_YmL(SK#JA}+qBS|k}j2H$q5NpNe^bC z8-zB~E~0%BX@AJjE-CE~r)b}o&=%6#SxVC$PG~djBHAaD_D2luveN!&iuV0ow3R`c z_WFc2)3#}=eorCoj~Ut+-m}aZiMPXA5JXly1Hp}KiqeaiCr|qQnxY|`*5d` z=9di3^~8QV`XeZ~FQ*89B}EwCrV7G>3Oe*QtY4H5RXd#jYeQ>9<$Ewi=5JDDjC{m8 zqOV#q-SyvV5{n(b zb{hzJnAdRr9}Jz1z*ybmI1W|LQTR7f6#p@y=o^don#4C06JLTZZaDu>hTbtM*EdsC zzLikXsxC&8u9Jf$<4c&fZ8KVr&L-`L4DDl;_P0~Czmw2Dn5`$YnRXHFb4dHUhW4n^ z{$7gq_q%8>W9tcRrZu#;>0(hS`d1h*Hu=kz`m(;!&hCW%_mJ-o4c|v7-ye~esRuu1 zI8_h4CXvL<$`Lxu)x2*iLk5*W!>iorsVG0}?{%YD1aO)KO=l2$z`&g1uws>Czn#K~ zvj|rU8dK63v=5$zsR8bj4CjAhWQ@SxmHem1?AN>LG5fz#W@Cr{#;~?S7_)PkA8in6 zM8`mQtfTEm%K>X6ug8MdqsZ&u4X@*t;}vGoyndSE^&iXeA`Riix~)9UBaiXT9dw$ro(`R2hBlmk z*znuj;dhK|QF#ffM^AJODwx@B7R)`;OJ~$_>;&IG89GDaGt2Ib&n3x3e$spje?MF7h_ zvXQL8UlPu2(SK?AT*C4RfkS)PjwqDRPCPp0Ltx|DcKPfe4n#)zoXlV;K8X)GH4>k~ zAegRB<+HylpTA%E474*L<+F=yn!@aWwGEN=w0y8w!?m4oei%3`pWTQmYRP0GoZh0U*QP{Xmx!EkSUczM zLYLL$w06~NGA&PB<3@o73KKU9{0zo|cG(wSkM=U0Kg#eqbs0YEQ+!4a!G~#=@=>Pc z__xY4Bm3K@$a90?c^cE1JRP0lwK3s^&b#JBFgrQPXhxtb_8Vc(7B&`y^T!yvr>E#1 zo1#0qgsxyNrrRaB@X)#I8S>aNC6x9jBWF9X5+2SU zXXu;>4D3JWqj4PyiT8N~eLbvhW~kf=$-NKpBb9T7+|XTSKfB5>y0^({7mwki{7F=% z`)FIr8}=2>*9`Bol{X&^G*m0#eU|dBr+AMo&znS3yx)x6V96+)A2+6mWy4u-W`Eln3Y_~_>A6c3Zi5JYTNX}EJMoZ%u044sK&Ow%>8=NO6fVN&7z zsfPYzJM=GA`lqGnpT0bOCR&cZXF)FO38a69p+61OCF7fKraE+5CR57$k>qE}CPzKvr}}>>Co+zwbx`K8GPfYrNav?c%6_F zK>&~26*0l$RW@PF8DT0zAQWEEv%Kh z@$(36t!MC72K8?MJ4bKBtB>bP%=5+O`6Batp?SW5&-nTH1(VzPXdx?Zdh*V)LG!3yBHN=9|5Q|zvEPM?~i3$}dAqhz#Nk~e! zGB&>+M!2wmM3pb-ncUiN>clTpD`zpAp9e ziu{Mex_3obZxSrlFNgD{Y7dg1+A--&mP{r;1N?f<8Hk=mt7_-gSvUW4bS|U+#gEx< z{fE(Wm!WqFqMph%uxVpq>Pa%)=E^BT`)CHN$>Eo7Yd z%|->HgScA91_#a?Bp-YM%n(C>CzgUDN9C91Hd= ze~NHuqdTlDW;3|R_y@^lTX5=WxfYj$itEU(b6jDAxsBSO!t_`6Nbj4~t>_}pK>V>z z8Q7gOv=W)ruO-#sexxzO^>&jm`a85sDC?1d%Av6wgY{08?jYJ1H|<2fl^Mtaq&l>)k8D zde4fm-YZzzmS7+%f2O=wP>@dZ^++G{M-w@+O;$GuOKo0kI7%baZ3fKTxjIorZ0kAA$DG&po+GEkZ0Z_xSsM!Fh%vdyP0MuJ7 z$}<3}C>A{#!21c{Pa^3D2;ffw_#grNNdRnLE?ylYqpN+n}L0( zgUjfHw?szBj{r%IpLJ0obR!G-0PbMxkpom3@5osnIk#f~a&RW?^W@NsdM(4_|b|T411hi7Q>Ebm&KsH?zWg0 z5skKV`>Jv7k?tT3r9?-YC5JeyR8t@CDgQCcE&+gmz{B_)n#WKz8E{3 zvz=0eJA!e}4ZUqg&;7{ZPh5dA(;XSXqw{8zC24K~y(G=$HZHr{?sIJxJO)u&`UbS!nkg_O3kl=vgAMz%klg0?$kDFI=5ze+;Z5E z$6k6$je9xIP%Rh?bzPOu*yy+_8ysWf@QxR4w23QSuDmyH#Fzrb04X^?ct#@cN|H-4 zb$%R~#|6ozl6+`oGB}QIbjURJYr3DTES)fxjb&hov5(|}{n)1_c@PyQYF1?=YNkdy zLqJni2ULeQlwc=LgzLJYSEG3+`FM%C3z1w_ep z&4*~7k5@#^voSig0@Ism(yrP@_orRj&||B1_dLrVfv#h0^N4!L(w#W69axs;e*jw zI0OxiQyL5>G;Uoa?>^Gd3&dn2*wWmh1A*N3E~|-KByN?&(XOsaY`R-1=wX0FpD2Z4 zHx3cb@V2y|K9Oml>k^c=j*X!n*DK47>5S+Tl$65W~3Ut%R}L0xElDadK2>B>#mZ zVc3m--VSHt|CZ!?>>+0W4q@Q|7pFv@PcqzdLKpF5&i5p-`~t!Ru5Xf0AxOYg>=}Dd zrnq&UxlIJ=NoP|+CyjJaT6=Jf+c*RrfMYkp7&>iv5`=@&P+x|=oct|PsA}ZDkaMRz z{YVEW>+!!2|84xQZntGY){XxM7`Qh<-ZJqo`F2#%-B|v}-%R4U@+&98!`j~po$NkLO$251fwXb&=z^wytcRFbm8ZeR%?ew$W-#oP^U<|UxRs;2R$tomUQCvS_L*;Y{M)7=*5&F$nV~UI zW{oFhK9h9G)e>RmirT12fg=1MP$NQ>}znF;#qL<^xi5>vXO(5hBM*oRmDgO|9 zBP39+_yG5?{liV+*;Ur|t$1CFvB3FV{7$yr#w$STp&f?dy1Bt@H^T_i4$HF2nY7)! za(&hWdA;7O9E($36Mv41=<+Xi^Z|$rcVCXbDq4CiN`hks$AX8HKkR)D(9Cj)H>gH7 z=Q9F)1}WNs7F~b_)I0Yo2(6!7!1!5KUIRD|%u@t*hAXWgW9}_#Z2&W!$kA2j_mg>N z+QTd!%cPku9?NuD>u4ssPjE-@n_Lex*ts5vXYOsD0X@R|kkk%NL|a8WfI8@4?I!&@ zvd@hIRo-o6H~$8Z9e)SkQ#3&XEp8CM20sto)HZ-0EN1|A$JU07t$pj(Kc)aC190dfWaG6EDha=iVP2n& ztHwTr>}mba+9Suxw3Ha2+WMGv?z63Jv_J0KcsvB;A9PCH!7!LrZNYd2WVecOk(}X8 ze#&Iqn&iGKY4&i>zltFelm?@_pjn-xU|s$X@VbU&=%~%9=9S-ev~?)1#Vj-1p98p7 z{woe$LYK9D!pm~qRn%*|3=)e^&~h@DCW~t*OK}b4AG-9AASK_G-w3ffId>q;unMix?b>)>gA0 z&iCkz6i8we;6(Ql@*Tt_DDd(DZlZ6#8BdQZNZxwht zGVX1XZyk4Wvnv=h&|C&w9tt$pVPhUR>;MGOyHV9lB4#T=Q8LV;3o8-R>j;;r;pWE0@(uGlHPuSsRt^~QqRz6u97KDDZAzZ0ON~7|3VG$< ziijB`W+FvvdLs$QMCl&Yv#xX* ztLBNzmvIfHtJB+;xXsUkt4VoQCncNb!7&V}Jy$xVvoi*hJ?na}dHEtzV?sc<{j&f&T$+ew)DGgDGHYADDP>(i-tvOYOdZ=B|LNH98<2T`0RCv|Ga zuC}z2MDK-iI55N)2u+0%2&<0l-g_UFCv;uW+0%tC8uuVTZFxVQ4LFj3qshRnZFijg z49QnPz0S8m4YU`$ao8KboezYv4-{0(*fU#b$Ikbl?S@WNaZVVMnwV- zN6#RV=zhg^@ z8cd?JeNVz4(pUj%?EC?mAb^#nOZ@Kxk~3EgQ~QrM1smi z5Q+&EIL(PDwvjgP?v*i5X4c&s=;-`-$GaMijD9g^p^D01QXh^!RDHN+W~yBeF6ycW zXDnY2u34#<7s@PNR>s5B0N|=7P)eWEd^#4(=z1w5bmOIrK96Su-OwN=q+LdQK^gre zVVsx5FT;&5;3ri^q@`ulro%Easrg9Ch^eKFNX%6_EFnsa9>DM@g&#zsxh1Rw&jdNU-ve`i-l~86`MPGyD_~%fZsos87x1?;lYG|LIh{u(cKI@4rR1#GS+V3JyXh= zQTzy}esL2QlW)q_13zm%PP@j>I!&VBX2#UFH+d(yH~w`Wde88@l-xC~h@gdwrqA_D zTZf${Ir<96?Uo$^24oNfZa@;2?~ch=KFw8+?}tgjCuZbZMkr_W6^-1E3NASX-@4Oe zo)eyivWTIS&p~XO@?Y!R*-4;}v3Ix;PuSt@`*)F31<228DCVDr|1|3{QZ8@UZi^TE9~v?q$nOJU)LL<`a1|u#7x` z$|Er-deLA(evPJX-`B6xLi|#4p;}Y@g@rruc~*Q?8K*(R%r-BZn<`X;u#hj}yRwBU zz9Fk$k_}ya`Zv|?WS0&x`aP$~#pC|ouy=55b=W&RwlC~mf6^zRn#lol&e0{oI3nox zSNlcZmok;}x1Rh?6|*T=$R5W8u$?9st7~gk<5SOqr%rQLB8!}N$KXDwEJu4gB0M=W z-l0vH&}N{EHUSB3h7U~}y%f;qZ-+MDgf;_Rvt*m$C z+ZXU_j_fgOw$sb!I%+)?hm$XX*b`Ju3g&xE^cb5`5cM6SPalE@@uYU#%%E`?U#E<& z^*vbUe&K;Zt$V{}AmD>gs~ryN-RsBj+W0ky%?D?dAtkQIg<%~{~Wax-z&%JQm%0)bhdRsBh?3G zqfrdZ>p8iunjcp-68!?)YmZh;E&__%=nrzu<3W9JVq@qIZ7$6H5>v3zzkn&e;Vm2i zPEf-jE6eva(Du!Tn{grclzu@y%Zsob+(qrxa`2g1@!|Zc`Uq}u&*SUthMu}9iA}zV z4iEBApTw);t=9OygdN(0BOG zIQkY|<8{DAD!(M3ktr0j+4zwVqnOEx`*NB;W5JaiF)1vgIxdj2#X^J+U3$d;OCp%_ zc>{4WIlh2quJL*hArtkM%T|(Wac`i@X zHKLA|jFU_J=#gOsmI~pDj9!ioCtRzCn2Y9OBudg9Tcs@AFw0N%RyUbjv=LRF-tw*L zaX_Bx&jC4?M$Q>zd~bmlo5MD~UCfuZUS;%-P8=r;$`i*XBGjO0$v>C7F*2pGNNXKb z6LFWs;DYg#e1Wn|#C7#meH89&v07pWUG-mPK$olk^5Ob|FPD<^7QOOB0bLzhVB^Oy zJuO9cD$H)4yWs*)!~YEaPd)>@GEVb8b|iM1zeKzqW7{4nH9|z1G|4vb@N~axLnv_)^;4bZuRu+<6P<8;F_RHpXPPHN zOzr>dfmms%aWf)3b{CvgM0Q9*iWXgvgqD7~twEiLIiWB?0ukGGR{Z z2(~?_JeMY{k|H-g4a@F9gbBEy1|dzb4p{XVlzUq~O*E+9O(c{ypx;&P!f`g~u~nPw z!Tc6)p?3v*pI=+0k)hl8SMcdaw*DKj+cBO+Auu?2#o)vwTy*2#7@uFQ-L9C;CHib8 zRp?{O^EQC0d8H@iO3oxPe8up@DQyzyZ;9iAIxOq>RjZTtt7EpdtF=QXT^~OzbV;@T ziuDuYka<9P2*bv|Q>;w2SNWUQ)!BXYWxRa5kAT5v9lLujCH;SLIZEqPKYhR?#qRJrT`?1{YBLMXd~LP{#7BZ0l5zF z_|WO$s;PeHpMG&@VjDa(JA-Il@H>v0p4spr;Li3JCDn&c+tx3E=btXgk4N(9ex(-z zCHhY!LxcNkP^+8DBOcldbdO0}Mx#|USna7=L4@u72GNP_aUKxGh_U-`0p;8hYIM-} zU;Oa$ozC16Uof|HfG{>m_+_|(c24In9Qj5AY3bZjn-1;Cq~;@;TViUNTOu)6>2PjI zxC-qlkwE5_I>2f6;#M{f2o1|$(x2OKsJYtI)Y1iAL-*5`pQ>Hy%o6Dy@g(3rRR_w- zR`tp}3o>rqB4yGq(K9hFS6VtT(KC$jB(^vMn<~zqxG;|eFzJ&XwMiO72w}^ z&0;Y5TIeT*U7k1^Xo{tyqs1wzPfIZ^q>>I!)SYZL!c~recv3IQCBdu!+7gm+b=b+K zFuLL#k2jK;oNx*Omc}$fuz}&fvE7XII7t5-wYSYFu@Y*uJLXq&BAS68V|N9941Maw zd6RW%@^e$HHew$z6$=lg)Qm7BBP3CgIA;7I%I3LJHt&Nkz`i-7MuSe3I_c$T##r!QAmJq`4-vv&OH+eTO0U1&lzH(kw|z||sa zR$5SiloEv#N(^*SGGY^LDJ4c`J3S-HM9GB`16`C%o|dP?NGBU(77?TIPI;8aa3RDC z(V?jo9is$;P_2bxeQ$XheRl*fZ$;zgjO?I|{ z#sKn@XGBCTV(OeV9=rZI9s?bJMoL`XSzvhQL*A)&yo>gQ%;3amF_X(J>pybh zKeXlpDdjg5w%XcHezNSUjHfOIjLZb4%mqe<0#gClfGW9^U$L!wP?oo{EY$>TH*FgI z`7qB618TcbFX}Z%7oe*>#R!L=g1kbsrV6BxNp&Cv(yI`yyaM4EhjMAhQb8DR5u~+N zL7rdp@O7~(>-@b!wjGDqMc$LeXS%rg_)2_;jAItY;QLi|FU-~Ro)5DaQx}oPoLI4w?L+}%dO#dj~nN$&~k9SVi%Nz-k#t!8O8RtAI}CRuLB;%!UsYH+pS&i@Q_t7+Q7*%cz4E0aH@f+ z763G|+=*mxsxg>~9O^_eIMoI`4TiKDK^c6Kz0xEY7lS_!h3ym2WGzFthDq_Xvd*D^36uQ!F&R9Z&GtgwSn9gb>1h#_Cbu+o?`JkM3t+GGo$wbRIVM2z6(Bh!K=KnHIV3>kvl$S- zu?4@X7tU)?FYwi$gB7OKVluCaz%8I33hBGL-b2+D$pbmldJ@*tv<@m2OR z^a)%-o4_S>30y)Gew*6N)Eb;0`ajjE&ZV_|zgSOVNtEdzN>r0Oh$2no^2#)k9fdCS z{T&lF$SlZdW7$-5ihBYkvlQP1Og1Tw)AL&ah{y3Gb9o~$pjEIXj7vxW4<-mkXW-_$ zeY|HKWqf=x?s)b=o%1SRHMlA(+Vin2SWrq~;@;CuC~r2a=epbU05a zT!r?ONT5FT9LUK(Xa5eMJ1MLKnK%dMj@{*qX);{Ll0t{fbQS9vDmQ`C@k#jAI&I4V z8`iJo_p$lbZ@`mzO6t@J#q6~Qt5#2)c^V|605uH%z3D!`id{X}!kWxiKPlZqnZTA3 zkXqbBIf8A72jf=EVpHDX#`!a99&H-<6g*|ta**(phG8&R6imwaQ_#nY#9pv~FZO~3 zd~+&>koKAeU%cpzXnVQm0eT?-Z3h-6f+l*OZXr83=4FS+O4W#K8bp%Q6>{RBy0#5_ z3rX;&iq%(QB}6a=b8ATJOEP2adR_rArbu86JI&ol>nDdH*njy;lNVhlY3GCXnv$MD z%r7!0vQ9z~GTZMETU?TvqpI7SW}6abEcJMe=IN-#QJt*WY*vNZACN0fWl~yIlj@%D zYU?i7zIm1bJ6YOt2ObK+8y>4vFF*w%vM4iE9O=_Cr;?c7;A4h6hBp!^thTZI zLk)unA0#5WPl#ZWmhWkc=e83eg4HQ9mI*Q=0S`qGUtosdrADI4Ds0?aQl|vClm&*8 z!UJC73|a^4)ln!&G@{NBYKgRxhA?U>bh2Jc#*IJ-rP(moWZRH@9JrB8)%kS|sgxgz<;2 zg^+}|lni+ILOxL{xe!Lm35;RFNI8KqOc*IAFovDx`S|r4kH)XoNykDfDY{Z0)YcPy zP)a)t!Us`P;)5t_W;<5m&>k+Utf=}-DC-m|>oL`9oMxM_xTKEG9fWK^I@#$YPhk`zMBaHDcf zG6s#;UCg7y-Xs&V(u%;~bee}&CpGNoBE+h+^uLe6TgU(2k8#88EBC(_Be9y|5&B;y zT(SS{;<7UT+mCH~!&_GIN{$T(ja@lehXsV0^(WnlQVTOE<-bE%+|) zwKXX!^u<_6QeVvEGL9iNHzCCJi1mpajw5ui3Hous;bv%xp;CyiaxEmbUP_r&XhC$E zq%HTtL0Bf0Fd8YWj$`NYIz^cK5@Zwx(PhAq`{Qu6MvO%b?3E>|PgJHq80r8}y*h?T zqKoGt2?!K?LYOQe*_$2OihWN+!luW@<#>+loH#o>#OsDm)(BXVz)zkSO#tO71#KQX zO6A#4(MI=_r!KDM^%A4dU9;tZ+|X9ch?8NiL;b8AsAsAtX$0oL4fSIaK!^G|L!G%1 z>J{v4M&dBDX3M8V&$jgllnKXsPO}eK^{igE$0dBGTJ9{9FSjwg3~5^bjH%C({5Gzj zTCT*;rcCXIWN>)R!A6E$O)YIbPm-d?^mwMj-tTI^Lb3`m`>;_N$A73?AZ^g+OLz%i zlY=!_pnWdT>NwD%<&-NiJ5({OMsk_M{H_$L$!6YP@%V6GA?t5-{Q|ZHls4O?LZ)_k zS1x3|!>!eD@Vtnf;>s|3B$iM8>@+_egHUuXe&jn0T055FrXqhIf}TI^^_I4-&d&O? zd;7gyZWaeL_D%Oz-CTCMcd=lbvi|0cS#R@t^r?-&bthMKa404v{wB=3v%FKHaUJE! zXe(b1TPV8q0g2}|uvf7><*m}fhI@Pf3V>4Jh|+OXVe%%_?ko;vof0G9WW|Pib0a73 zMzhS_-3|^a2(Ujxw9R=mR+|s>=)!1#?@S5$qh15Z0)kkrMq5bjjN?O_h@gPNgeH@1tf85{WGPRD!F1yqgc?u7&nEZ+WPrz_)@->~@FDcIjF$R>mj+Wct|RE_3{Lg?I2tt7 z=eYc}u_|7k#=$0R*B>tkfm~w_c$?%HNM_fK2OfU7qpQ-+yO4dV`(!v?tNN@&YyZ~P z8ny(8)@pMIP?AB(@lvJFBW@y6nH5uIUW&=$!5Iq87whCyAtln*9Oc#d@p10U zwxB}Z@d2NOwM7?0_RbwKSwt1_e*pihL#-b%P3y<<`xE}ksv%qQq>HH0N zERezcGZ>=Hihp#t*G2wDPSzrS@H=1`J(F0ZF*0Pp54FMM*#>{N4WES9ih}P&&w^0Bwr}TN@j5$~eVsYI_&uF3 z+=H~QqRvWNa1$*K5dYvQ+x+}jsM(OBn2t04 z174uXvF!}#YWwkQuxH=mMm!r${KSN`=S%s5`O^J_HBs%+yT|-X(8Qp`<(6|snBENC zHD4Po{1`r{gThDWQrkQ@E;N++Naj+RI#WAlDWkwmc=WhRo>QzMsIZ(8p=B#(2RI$W zUqKMsUTEaVEIl@l_?!jZ$zRe09`f8g=Ih&Yp({E!e>fN%U^Yh6P>TLB9 zE5ug~q8cq2{W#W7kbAgM)Xkd#qdnY$r<_=e32D!V^2O{}d=BA)kFH#mMv=^i2AJm< z#=yN&J(&|1M3g;9vg1l8GX%CBiDcK6PG$%Uz1Bc>UU4#mkc4=N76*Du4^|RJQc16x zVZul%fidhfp9^~C45rotY}}Q6>%2uf&$Q1}P8sa%&2(dmmD&Coq+KTCM|7yn$rzu-fTC&^{lxKJ2pO_FPXf2BCT7Mv3xdi)!O zz$NkS;otGWJBN9u0e21K$OBnD%!i!llS8EDPT?Myh9Wx%`LT`P$_Ie%GNKe`_)tka zh4>vv7C~GWU6S=jeA}ZG2a1#DV}Lt~HNH0qu<@4^s~Dh8HbEyht4=sn0}b}^ka#s8 zq8b^T%V@r`6Y;cWJm}1zShmraim>h`4Nls-H`IBq*_JKodEb-sf>NpTwr+%Gp14#I zV5wptw|;Cr7vRKIsGA*5-dNhzLh{C9_6-T@LQaEm!b$eg7woKThAu-U-ZObEWWtmx zWO_aV<^1;GG)67+`+%28cdluK}ms`vw(&n;>Jg!8pZnEVq#Jz*x1p82rCTcUP z$BtbL0x-Dt$G=vtWWhVR*RWXBdkxRW?c^AJ%I&0Oa}_83GltC8Ybjqen?$SjB5Dtx z4}2E*)#Ogob_VjEoDawSpA_cyeZ3U%q%P5T^|4BtZM*;(4>P*eo*!++jp=*v+a-5y z{L^|T>)*l8z7Fy{h#~*l=!HlcJa|bG%nua22Ztb-L`-b({E2m~^(cdSFn<}uUtm}O zg~{iDP#XC-|G`TWI!HCDseXVx@CytJpfGu!q{7)J!(zMtVCSW8?f`~FdUx&QF~DqX zP%1_8W>^4)Nnfa}Z&O*TSs8E)~XF!_KW zo|!^CRuRu4BEv2I6ecmk0Yw)xRB9PRtxbyfX{v`|0Tim&c@Ivv$qluz*^k=(DzO+A zK%u(FdvGR&wNA1AiC7G`_*1AJ>pi%)ja6<9D%M{Si(vs2vNb<@!)_Q}WkA*hFNUPA z@3!w&#FWL6f%zA~+!y$U2@O8H)jjKCt8=$VWmFQFqZ{;g0c}4IWw;|rd@*73h zfIj~Q#Cis##0NyD1Cql5$-#ga;egba0V(VOvEKnPr2#3`0V%QpQS*S*kpa~tC94I( zzi~UbSArpqkv!`@7{D8lw@eL(Cw4MZP6=}o7<0-JIIcQ&OhnD)n9>{ar^bCuS`A%R z%XhA6s0e5;uDFp~7IjkM95+I8#Cra@u&FnbjhTM*hCnIwyzvh@Ik~MNv;9w@SZv3K6#9Gn zKEt6OLk)sevVP2_QB?gU(jBDRtO3@K3osa0Qc#tk09OmBd+aZ)F37o?ekdwU0vAZ& zh<2!lmcx9s1rAiaDDRiRaqx5So(6Yv<3N}bz-1=hhF>1r;xk%6Zu!Ef=w`e~8|qm1 zBa8Q-4CT53tPsp%f6N^yDgdbhD}KWZJKiVb8_ffg*Bu z_QI|lu2ab6W^i5uvdi^9c!Y#t5Csg?4ycTX~jjfQ#rKCHA%LeV&h1#jxYo=(C; z#z+4G@$QA3i9z8`EJ~R7OCtF_<-+7gfzmn-2};Tz)!|LFCo$GmMI$I5BiK5My-P${ z$!a+XSg7_U`oK331R%(cFi{0$aMen6g6C|Y0pAY&B^X&2UqRG+|f<&^V~101_hv9@Zpg&$br0!-x>pQn9E zIFHHTKHL5cbkoA zE)q5=^AI*H2WzPdBM(PN9?XR;##pfn`zaPo5*K#4*7yY~$ha=jt-Q(^kp2n#JIhwN zS4u78+&R`TthcZXBqt}V%9P`iLBjMNDkWTKhjWL3+`g}XGmh1D`W9yIbWTKHp*)SB zJXVR|V0rCMcKq9l;N98lpmD`9OExy4JJX+WwR3|jl6=zyXMAB6vib6~-;n8aCuA&+ z@t5^h$S2~#>#=RY<%GVro%*gl9gO_EYNQa;j~dNMo6yhpaVqG=6b&TyV;Tnj z@Kq%0lTF*guGG)O#KbQ7ykvY9qj@D#fClGyzGPy0$yILjay01pf($~hKu9s&a`Yx~ zn9-Z@Xkk?Vw^y|=m+IOFyte=}pTYQ}@h3=7x$j80Ya4_40qbq_xwV*g>>TI`cu&rO zp1g}|ZVvPmO1;%-TS`GMYDBB8Z@3c8ToqIG^nj@^knPAAA$(>9!buB4_>>t>=?vgL zs@|N^x_#gHYgME8+JSU-8qa5z%P~BLTe;h<<*O z?DXE8KaI7S9u;z%-qY0AQ(dK16`!4>Xo#1w+;s@Q!_?!2T_@s$E?QH{(l2|6)mapAX*e z6dfy1OmvB|L6U%q=gj0W#*)4j4QM1MdjecsR%C9R%E0|)I%eQ+{TAnq=$|muwBD7X zJrc}-{23t2Pb=|x`#yB`#)>w6g+ojrZbIGQ&w8_aF$bnR47Q&WHo7pm^_$Y~Jr6vv zVK&stR9;${UWv-I3G;tyV>U0AWw~Jp-(3GuFDBT`ho8lSI=R2uO3?#>iiFxCH ztF;8Bo|6tEhpj%Yi^GDw#)Q7~>Dx4(hnl9NQK*gAbLGarI>1>qDTcF>Vxa#Qkys^i zAcz~qG|t@R+9tRMHD85FZlTML|BXF=H~7R<2OJ@_q`FaKQqL&LvZWI#J~F}JFjB{q zf}uAWY9xF#eS((lS}j{aTI?+oTC5^6LP`Lv7FxoFJmEhJ94d)_=Fv~wJi?1|F*gHmxcmc$Jf*t@*QniQzkzC z&-}0zBX#Zg$)LkO)7CgO&lwyWsqScDzJ}9JuSOXxFl-A%GEr%5)yP{I$*?UD6S-L< zU&=^^?G}GE5~~ew1)RJc>pFDi-Ya#18m#xg_}Td3q~!h&!y-n{r$^g0gHJaS9K8y) zPVU2!1&J6Jz!`2&z^MEv3X9#joyanf|Dw6xpD7VOpPrV`fkf@c9qLpXCpmK;QcH}h6P~!@M$O-OgW*qeK$yQP5m`^%6&*N zA?-DFzIYMVl7jfPgg0L&zYHfAf6x{Zdb(EKriED^<)9RVm|hnrd+bR?_H~k|tMs_! zD-tvr+eug11|b;{zaBqYkMx@Z??*nc;o1Y3r*t<%*7n^p$0MKIOLEw=TC&v@mw`ra z02!48#(oc34Y$sN_SEJ{59^xY+*2@~x9iS8)w5;%FPl|^7Ul!6^+X;+UgM2Oj(Xum zm^#&S8<_i*^sTi-91${3^d%a3n%KR}OSQZLE`up9SCEUgvww6xr4%1bEG2xf_0{?S z^zlc_Pe*I5KBx#C4gHQUe2taGe-x&bDAbE2$6llY(GJHDE#>nul#i-UzFc_dl2M(t z(-wPImR7ir&pi?71JNf@hL!QTPvgZ-Ud}0|Vy?i8iP-LJmLdQb;%9ds9E@|0`kc3N4p%u@p~Sj1M`;8fw%()9C(L& zK^h^5O^x$4?rRc9 zvZ=T%KHGZnZ%eVPopVGaxe>rm(e%Lh9;c)?VOSbtL*Y@>U+t&-Ejj zmWds`8A^}df**W@JAO2r0GdC%#TOtrcPHs@;#Zx#dSUMClI&A70&lLbY+W}p*mxUo z2L>8%$756F7GY~gqsTbEs#cCK5qcdK(l7WNWaOVRvYX^I%|j(_YYpVA;e)gCQo_r& zyxrncqn`(y+SZbw;hNNUfN3=oy%UcXIvVbbNjSi;LLwW&r*foys^D7R?RA6mFuDqW2=@+;jO#?Z|8NKER?+ z!)WwdonfM8Yxj)N2FfbO=3(>N&S>h%92_+LM8Dkn;bW? zXz-OCrTJ;s@r?o8X=(lneSIQcN8R{p1D#dqtU|9L6qKH+ z&^f-o)i@fd@jaEf6V_VS&HpJ%d^CDLtq6Uls${!zdm3|C_e${YyM}hgmoZq5AJ4~7`~*JM#ZQv>E5H1WUGbAO zexE+B(Z|#Hm~W9mgTd%Slw*f2i^UE>EG^|BwK5~dOGeWyoln3so%rrhq8Sy32 z>p@<=H!lGIZb$$U0N@!3Kmq_fGXY3I^T7Vp&1~;Xcf@Ai@c&r+uTI!f^Dv4lPenh5 zX;)*DPQFfM4|L@r&*{e$lOVqfZipQ=BqS zgD#DQ1<0`VQb0;Od+@sa)|>|~ho#8wi$aTZdSz#4iz4Oj=GLUzGtj~R6s*sixCWsI z5b`IkLg>>7WhbUW_xf!hF&YiS0cg5`dxcbs(v4Me@-k7BM|oPLtq$ZQcA_AU@|5I6 zgarm=u3%!VSCMe;G7uvrT$Ed zMbqz=a4GRYl(Wme;cNH*hqC_2}n@F#N*C3vD zdFCHLP$ilYiBx5*lNk$Yl{t&n%aFXZbz_T`(D*b`Tn`V6D~&|Ej6`<$sI*>zUy&ZU zX-IAYdCdIHZ%Ht^MZMAPb5ImQIJkvP?cb8_p`m`CK!Bz!{*U`%;T*> z-C_uJ>#ca8wc%TRZRKxQSe#eu@P@@Vq5DaiphtBiOC*J_4pQe zQ8#=@m{IH_;aJIS8pVf%8TA6Zbj#z^`&E*u1rbO@s5s@ZvNJfbNm)-Vhy?#1aqj_N zMe+Up&z8HJP6FYk+>k~>Zf-hBAfYAnX6T7YKt+n8s25{55CejuqEZwE5fMdEQQ<3! zz0ed8L_eQ6>$ec!=P2P6E{^RQeAi#i9oi-dYz_D^WKlmz!c ztXwjde>isDaQ0(`WN(fdXD%%$Q9gZToQze3r6fUlQLaS^oSy9Ef}Re2UiM4%+_~jV z^jA$ySVC#7JdzstNRpL7Q(uAV;BV~YC95EOO)5|&cxH^}nd7X^hw`F=J3M@q9*q@K zDA<{5AL`;I?8_Hv9~M+OBl1eQaal_v?ffiT9<3?(`U^#~)lQbbw%o}$2S->fbav~! z<^PLz={|wO!F>u2+Ano8+;7VEsEZnuh5lr}PA3i7)61Tb+Lx?R-fMgW$zF96wexIl zdAv7pJWxB}9qDW96Ok_JDz1eN2Q(BuD(EQDy_*poqag;vy9I=LSF{zxk5usk*VjOw zK8c=Go~*kga0GY4^}GyBEXPPKoP(Cj$eb=+9&u9M*O5{unR^50?&-oKinPu=()QIs zf2sid=|+)Z#Nwx(2Ol~QJPaOpTt^)Y?=*Km45+T7Q#;;v0&feAFIeK;hU|Q0uSI&? zM^V?1?{K@Q@1edb&EHpfk)~CEwPpCIoztBNg^*6`eOx@nbL#FC$k^xYg~M32LzBKc zC@`pqYYECDp_RHFXN2nd=o?wtoMYJ1=Gv zq24M#%*nl0Uc^7;@8m2{P`a+f36RdaavwWO(0?T%QF+!X2-h84t^}N>-bA;gR$yGdr@_A*{zkmh^rfyhl$Xihr@QbC#J5OmATIfL!DH2XQSrF$#8r0dE9HUY zDL~*k6{kn{q7BmrOz2DP+`rPV>RW)%()u+SZrzVT=dJhR*xK@=Z$E zCy4b4RJM`29qx4FXrLj4Z)Z5wzPrH`;#KTBYL_uqz7=ELb^$%}?~IQ3eU=QD6A9%x z<`o05j4VGYA=A?S7=C~ z0@GHs-nK1d51=mMtdkl-u_KXJ^Zf|PZ-XTj?DOtGtO9(-ir4qc@CTv6;p&4|;T30c zrsY1ZEO=H@!ZOqR_!viiEMAi#6OmEbkThvXu`eRNkftmu{nt3(pu|vPGxL2BJ0gd) z5S#xwL)_G&TEgqREAD|8-*b#uO7AY0yD2&$Ixf<;pV}jocNA9BIN~DJo(iXrvxO9n zZ=p7zI;pB19CoSx$jt2ztU9dY56=;Vdo zpY}E`b$HLC2cWT#IE?KVY{}4w#MT|#P;9x_8nIn~tpdYP%zt9JDekY+xs``k-KHTF zAw1+uh~(Z14Go=dL`5x&=v(k+yC@jQhdx@P(`}=N!f%W`s*8;Tv?sR%ft4AQi39Ii zkHWEtcby}UI7}Js94ufVV z)_PP%rBhiYxrB5m(NK)2yf!$) zkguye&tZ*;?cnl9Q!%V_@)N^xXS#VcRA`k7{i-uwxM!ub5;r7#RrL>QR55fu*Ts2U z`&9pY!X76ps{jUYtHA6NRa$;OdCGGZN6S+upTW8mVvdcgLY{JkdY# zpG>nLD=5kG1Uj^>G!DPvU#oafmN+@DwBa%hNw275dQl)bTt@DK6w{o#L$$Jc1* z`0b&>poUc9{%ghO@e@sOZ47Elawp*p1l)>b zwVr9@W5pk3B^d@#>tZ;mqw|WCE7@h6b8<7x%alqo-bu8j;C88+Dvx?NnPN2N9Z1tz zj6KagWkG^U)tSIeO*S;_e{MclOBU41aDX{^FVXj@4SJ85xEN(}Mg&{^H-jSnZw)F+ zKyuH(#>CPvJnDpAGS8#yZanOO^%rz>G&c}xCq4G4%i%^O z8VZj#qVn46a;y=N5UtCRhRHd|HH(+aF`>1TzqmNw&QHd7o>yYW<&ROGF!xUMjrpFu zzTx@N2;*^xS(uEcF>E} zE+(Q3|EGG!>!4IU<24|8Ie~hn@r_>E*2oW2JKV;%X@jbKud1~Ye7+(fCYlvYOVBi!PC$C!D3h!GqTE()A=BuIWzY#3st5BXikF@B` zBh*9L=R`?=zD3`QL7xz9**v#y@x?MtLidkE`Om^O4ciUaQ1?8ShU|GxqZ+?$u#Li& zhs|Sm!|^73=Rms~4tbmy_-u^B3=>UOKsJvx-T3hbhUeoM7S_h?0n+w_=TAXTK|1iB zr4Gni-$i_QJ`QYoJ&y|`-_?FdXs(`s{;KsA9^iEHgyDX(niL4bnJ+{p=i7dVSu~G& z`XNw+H8Plb*4^7^YJ?~F^aMHE)6xMuTTZjKq>>jSRV*{R33Z*#Gk!B@M8j=^1ND_^ z8aDp)$ACFW`Wf)O-OUB(vR0J zb>T{(xrPFZ$CDZ1VOGQ6D-A*6E2U=qN?zM*cit*zQI##+=VZX%)u;)kasPGS#ZX*%t+1UXmBcYX@P*lw%DvUoC= zEwbW$JF|o_;`aE6U!1LEKOij?| zMKp=?48+=OIPfEJzRLfcbANPBAF_9WGd;^d*CjvY>u+MbgHASotD+~&B!zrwur~2{= z@Y=fi&`81Zza_v)v0Tm?{%xiZlXz|UDkt0fHVnfI);9cjcInNJpf#eCH}d0K65vfN z#n_6%c=3jZ!}2i<3`5Dq4R?7SS{Od?*+TxgA?I?pG59`aQPVtPNIwawx5L~j5}P+&Ur@BPSI7?pz9W2!aTvxuM#`uy?1%5g6@aXbtwDuJU_ar2kg<^FH>*mF}w$n74Glj zF6JTl3P$)JA>Be|XD3+M1!kxCJcs}B(SkGzPty7Rb*M182`5?g{HQMn8>^;`Ra~^g z$Y357dKHzyboa*q1Eb(z>ZbF9C$E@Z+()4CnuDGT`fu4kknQ{*us`)*?02}a!vh6S zh~v#6GI0*t_J62zldC=wRj>cO>L31}F><)^I}J&q;my7jREH=}7dRO~+OIj4vrXe#Tey ziODOZzetO*Kj(~J8>co=n44j;c4%#c^R`rbhMW`Oy?-NkHUw3 zGj$uKF_2Mz0a*fMP;k;pA~)>Lqg&?as`IFSb`?j9FYvpa+vN)C3v4{Gd{T?W+Y4}k zLeKqKdFoDwq=pDy@Rxs;Ds3~B6Ia_9J)$DGh|N?&z&9jmKFTg#hGT9s#`1m(K5#{( zdj~2dKeK5;xR_>pZ%0RJd*`#efI8KMaCG-8(Bbug3GQR?CPW?R_5YHslU@QO-vLxC zdR-zaOVIILn2F1VDnoCOy$sPS?ryjQZ;R9DqQq3HQ30fnJneuy zEs<#pfk~e@9c#w2k(>itIJOLIov{tahMVO4y~79b`y@7uuTh)0YlAHZ+hlB)W5Wnf zV1Oe|Ve{yCrW4y{Y=^LQF@)HM?MhRKOOeT3Y>#1UW1($g%fU7P+bC>jW4jPrHMUZ0 z6_>&>9b-M%GCyjwtqSkt_zrDr>f}t?q4mMx-%~hMw0H%ogR9L($5^G!$_wmfh_%1gVTHav&8N_=HHD1?q7tRwUvy`uUbYVrK@KL6jiL%rD;W6Caq6=dfTEUf?c zz9EBCHYthB($Y;;joGoXuqsv6oVm7DOa4bq&O&vEF=&}?IuW8-v!71lK7V)e^LZ}D z;fF$lqW3>4*uO9q1gbizGTh;*ZXkRMmvp*!p9ejBO6KRoJ#* z`wW`{=fZ4k{jt$`at^jt*tTH%44XrT99w^Eld;XgwhG%8Y@cDnEoqUB4JL`n*ydnc zg>4JA&#*agKF!8PODQVG!)dvV7W)?@bZWU3o|D#0EQ!A?8r6{9N)k`Y?V<8n0Xa!L zE%QU=*9YVz@w6-mmCp{yN#bc)7%HC=kdp+ANP7+Vc-J$YZ0&Ly0q4I?RIY~S%D?;Uq z0&mIY~S%7?lRgmj>h{@wBWCmERMPlf={VNT_^SKu!`*%cG(4djoQkcv>C{ zl`jv-N#bc)6Dq$iASa2ZqSczv9811pP zVrmpkU*cov4&6q$9@c1&jW!*a*bR3Npbnm|e}?`)q=!UpoFjzZczU{Y|LnhOr!U>f z@&d2nZ^^UW*Zn`HPgTRC83A8wRp)dHctu|J&{eH3YnC=N=7nJqJAfE{AvhE%Mc7q3FgA}KTPXh<@+1?&1uxW!bBDFcnftCV^qd)H(M->Icv^!zJiP*!{JswwG-F~+K8ePjA$l{$D9|DD{!YgrQo*E` z)L{>FFfRlhBJUqc2eU&`hdt22L=kj|yniYk%zH^4_CN=-NYEkjo=`fNQj$9Cfez-B zphM*Si*#tdwIk}d4eG@(J7X;|-V>oWV|u_mt06*f#@U-cd9Mi1u;3uW8==&&v!I6EVR|o9YJnib8>uqF zz6fMQpfW-!QPrk5iu6!Q0>c}v5=XrwanyCdhCooj22?uKP-_7j0zt|Kln6BmHPj&X zHD!Pj1%eE386wW(;KVQ0zrm1j>2Fz>eTeMC4kukhPRzc0kw-1P?4rLUZoHS zGQ90o3aCQU>r^Qa7~TYx0;&xupi)e4qDmnUWO$R58tMsZD2(Y%R%(GD!|PINC>hjH z7}J}g)B-_bwY5g=^>!<(%{s3MbJK2IV7!`n%TP*VXBK|q9h3y25;B2;2PL=X_6 zGEMI#s=X5!-W-(|>NFrC2#8R(0TDq!gene*2m&Hhwdr-MA`=+iT$LAU-1K6$ooj=@ z@P0*vibDMdL<9j5b_QM}r#dDALv}ZaghiH%)lN96qz7UWK>_EdI*Qa*{a8%rThqoaQABFIT%_yfBfjsDCS(UIuzAOuiTco@KS_y7E zd|;)xy>RR6WE{(Xd{;ule>f7T+NKitWwHd_AjPnZ$F_kobVn$cfjo%R6F>ek^a7|d zP;4%PKWs)1iV?`=v@%F}6}0|d2C@vFDO5YC8sycBbBH;H_`4MCtW^$Cte5Qx<` zI2J)5RzDCw2Sr^afiVM*0?=!toBM-g{TL!2_4GE4cVsZVi2^tAjTxk)HxGcD%_9!W z?Se!OH;}|YN`kJzg5pz{KR$upJc#4dph3mQiH@7NuW0mV|V!9{5)DwX-29vM?fdI z4(T{S9a1naX`wnKz*}hGX7gT`Z$XwV8g)2|lJM1`iceww_yl;x2gj$Tq2hCELi{nl z__!}C-jVrJm^%#pKEFqdjGz#_qy;XYMQ|NVe%lUc$+w-^97CR4ka!)GeB}#DpMnE1 zDSZmjo6m&H=NqI?{(nthQ}tI5C13h8VgI|-&rGLKUb>^a)Ke%gFV#5)R*QS&dLDxp z^0+D73fL71yC^BWxdASh8@JiX9~KtSk|hocEq5c7e0EXWR{Mp5{riPLZypObn>%T> zUp!PaoM6X6;6?Y#ZJWUGqKoCB{#hjY1jfok9j6?Bh&pm{J#hAEO8yYv;obBr)^+$_ z!8J5J2sQ-6wHZN@Hv#@Pb#=+~Lttj*9OR6`)7y=c*{v$4@L1L)3;k9t_|cnfkI`zG}j^X zrNEGUDS-2x2oLfl=6uPcH&22q^KB=AA3)HXCnLP`HqMXHsrshKpI3!euFSCAw=;LY!9UwWY09h&~`>aA@)!J+jA*Au!orKA&=hN z1XtRFcE%v>;p`|1vP+zC73uQKA)d=hm~ky(!i;A5GhP17kUuT-BUKA8YsFM#>#Yd! zw8iY9X9ApmTrMymNFdh>TuH^23kHlvy1B{A3lNB#{f+ciCQS2bMx&>X^i4KMpOy^# zXqe>XnKX^{)tUjL5$Ys*g>-q%0KZi^c+EheFI}jfO*Z)z5t*Uh^Y!T&L{YL;l!3~k zN}0npa!kHY)+LZU6fgXH1}Y2OoBreUJYs_K2rdZUY(`DcKdDe1^a{=g%9os;lfO88 zO!YxT`a3<_*pO`hxp@ApagY0XF8OII3H%25?)37W5S}Lt(|6mJ=8WjC8abxFCU<(s zQUb_mZV8Vp@Sn`ccdt5-&go^y;xdG!-&?f-pE>HDXNb;gN(Vd9r#6{Vq6Hw-Jh5;| zwZf1a{n&j?J}LiV@)rBYr-S3w6m`BboYq!5P!6xi_<=|=9c82xk{;ci4N95?FizIf zeNf;zIMVd5I*=x_rmy1F6foZPtyUfI+KkpJ-=YJ96?oA>BD{e`2efiPtvPUn)SRz& zgKDnPFat{t=y>)mIlw+O>3eklf7yzb=39L5&nC)RmDh5={)?Sd#r_^AXe9#gUaaRZ zGv!Kz|3=NqMp#xwS-kS!t>#8gXv}|T+W)eHWXV(=)cG2`Lk1X)4)iuR_z!MwjRBc| z4Fd1u@hAZOoql|#aV7>*^Q}jag|6rHRja2UUxWV#y})7w^x>FXmWvUTpBE!2KQBg5 zeqMQ?{Jio&`TNn$DCO@@{yw9J^wDU69sZ)QUD>&?xUjsqYv-;M;^1$bJ-AVbjxBf> z|0W^&VS!%9(U&(}aLM_YqZML|OB4H1fR44JMR6~U-;vsJVC~?3kX3`HbcU?YMcxUd zj6WT#`OduWnY?g3=Oq5nN`;e`_wjm$?Fd>21>EKnmxc+E2F6HGOow^Pu_2hQ1K3)! z7<~Zi6yTSVyAT`ckc@sOVZ*hhpzD*-*n~J(Mly`A#ZP(ReJycwKDm(v1WcN{aH?jLF>)e_5bstMy#;(QTpOlX+w?uP3xew)x zEsqhis>8AHaH)qv77inK^ayficP42?JCc4DJ3BE#v~5QrYjeVLVnnA(aqD{rtj-&3iEUXF z>wT2M5+9*HW5gv$GeZ1|615f2ad>gvif%Dtb2i1D+KJpsF5`~A?@*lzUMj| zmreei#Z>Csiz%F^b3nhhy1rhqjLu)!^8ZnwvX6R#YqS zAyJO^NUWrArmXIgqQy+aJ6`x$Q3EvN5HnW%TJ9r~eO^jbh$Dh>ADc`06^g4_^ZPoI z)q?Jag^m%A6$#LE*6h%SG;1*up?F8qiOyB@Y!1I*v z+@#Hf=7uhh6%}jC6-}(7G~X8YvgUTS`d#rD(=4X#a|ozbzaMR4@!($QGLMS0b(ki4xO)xm z4?0JuI@<_Yjrc*)E+$hO&$6;1Bn#KhWvXV1&?Yb)V$Eo6BGcE3CNVi!Ge(=t)Rw7@ zb{^AQ){NE8XZn??y*7pIJlgI>H(raPU4Zh%ikbm0x*M3N3?g32E@sWox=OlKr}mPA zc%*qL$1ARqgiAlj_VwE9PSJ9;8G3j|tmr*zue%0s3Yx9ALUs*g4WdB1ku~SCW`TAK z(+f;R+Cp7Rj}>Q^kYX;2GU(wpch5XlbY5Iv)0Z?kN(q7E4(+omWcjp!{EZ%sPUJ4$w( z>3tB@L|yt<=nFnllu#w92U~WckmzHrnl(2T6CKbn0D>(I=!J;}8nckfAWY&kh$A2a zM63RZhA`1l-ylBKYM3x92l`wa$%MDxfWFjfnVx6*T5Dj!l0V3fYG(y$ey5$wB-1>m zO=QaD9DdNwW7^2{qjmukrX!HbPufLHc>f6KxaMVgi|J>ri3v-%Ap1qTf~m$q^qY1y z(+Q^EwPvQrxO{(VElmCJ>_vn4OPk3g%Xd)byK~sI4~$L%)@Y zo~&rVI@0+}v?jDc*!m)-^=w&~zL;qu+Y+HKVQR~^MC!|!USo>Z?_+9Y%i8EGnPgqZ z>8qG(*_O8YY9>sSAis9{V@&t5W%2qGOlPny?e%p`e=<4s^-SB@vIKnt(=}{aqW(OS zn{7$bUt)TnDOrD&X&PJR(l;^5{hp$4Wtz&ibkMgknQTj{{wC8?OlkUCOcU6abp0Ks zIJPB2-^+A}DO2CabURztQU8dk7u%AhA7J{HDO*3xBwJl4{Zpo7&M!y*f@vF*TmPEr zYR)}Z|CT9-^YiG(n0{f((|=-G#kuF}zc7vA{0j8nnGCLpLj45O4NOJ)DW(dJSFGzM z9aS^AUP^QaQ!(4pSr216$W)2XVv*);Y+1FQ%+!-@>8*EQisCf;=;=%^F!j|tGRfn% zpWcZniEZhx=Q1s08mQ+peZlbt>qSg=v1LQ_&P)T?mKwdB>1U=9dIi&iY}qKiJJV>k zY>eKEDU;Kz(|a?$%~Y@VV`}9(Yt#oaEoK_04`C`|%g)kknEu0bwm!m~gPN#Hr*?gg zKAL6s<1uxj2Bz0=Dr*oE^mCYg#nn=SI1ekusRr|L!PX!y(5Eu>WZA{~rA(!9B%7vR zMFR>k1UE|hi_7#GrjD~yBhKy(;wnWQdl6lux0nuSPR1FvznHCG$8<9+>o0Bs85yx+ zTq0@S3Tg+^{iu=$;fZj@?FfqmwAa$!Fi$1?x1uE8O`oUb~hGN$kXh; z!tP7#PU2i{FMrlw(yOy}L9>S4B6i2J+mqcF*nP5&bZ%t-T6U+fy9BPUh5YJ%2RaWY zklV`c&2W9vb9%jp@CoJQ4yt<3AO7O#4-w+h$h|0;+-u*G6$`v-g;pCPvP|1RDT+=g0m&qyWrA`iLIdF1}Y{@=^U zzadj^Z-`$zQmo@Ha#PSsp+A&Tj&QGs`+V&h-4L@1DSQ%ItRZT0!x8I6v|B?wgm&wz zfuSQ-!u~sR$-S{|C5|#Wf-JGM55*mVc5AWy7Ta&J{nlyrTWq-{{>nWGeX`$T`=JT@ zEwPmmgg(U&cByP6Nh0>aEUA~5w6;)MB*o|;mJ|Y;AMkX$C3NM z;Ah%s;xCSMLo&sU8X1jx@FY=P6=%f3U%+*kl`}tH6I-CEiS`{R_dD2zZd|LE;poO! z8}i7V!FAi2{pXLMbh5dgFQmFseci+=XZyO=s&sPOlsen{!XGVNi+Xl=$h|s++>Hpa z#HW49{=2HEws#g$E)P{D!?txbWQn66xzvZ$wRTQkqsNK5Ua9R%L|9cvxM}^}?YoF4 z%8KBQ&n5S2b~6VQwT}}oqP_WYFU~22J>yEqeY%|7JA0J2$4p5Ejw3P9P5#CGslT1W z?guEfB_8Zif$%NmJ>XU$cT0TOjlw@n?TwI*J;84Gv$kaJ=4utX|RBi!KdII*gq=`{^HBl}YsXAC_TrD%1(hf=)Gt!pk)HpK9nu?SDj>|a`ZEBt$M zoN%w`PI;|lmwKl-@!FX)<43k`8gnwz5;s&)nw`5fV%~HF#iBE^#b;!T&&U>^wJkntTYP@E#37vDk$xGu{VVT6?l1IP2KPB`t6K+B z_}&3@jviQYKWeF{1C{Pb zi7fX2Ie`4%vESx&uHtmwM(@;4bYp)Khu_TppKz456RQSpKiCj1JzyouhY2)jK-YWYDJ#qbcM7Yi=kyC(1!SWgkPlj9LY0Kf% z^VE2f*-zu=8c!ztt8o5;AL9W!k9!aj>K1WGz&)d|j6*8e?df+b>gkA%9!?=oB#;f# z?@Nus|4rxL!et7<($hnNrM`S+Df+N&(xvlJ^zi?>D^vKd>j!K8PsX(pY47YEMmWlOCrgHhHKA{%z!+urPkiz<&s_L^yiC|C;7EJ?ISeUr1Ap z-=faE3&-!Db>ybNPiG?Z41A?&i2^>4Jk4W|z3h%*_cnHyvAdDoLF_)n?qqhSldE#M zXZTPjdV^we+mw=f(mmAalh*VdfskwK$h`<|7m=S(>vW0>@GgH`bw-gpGmhMM+micu zJ91x&C%3vix%=6D+DZQ61afh|3GSDX!vy}iGn|aZgi$<#!opMJ=^%o(6BGMk-v zYzcq9crkv>Uo!K|SU>%cIn#+r6#N-tt48tgLNO+?v#(BX6O^)FGH-G6?LOB0A#;%v zYoV3wi_H6+8RG49;>BTq_Fm=8#Hd74RG&vdUn|;@)LZK)vJ&Jk~e_IBhn#n>~CI`hQ=MGd{y zIt#^@Op8QAuOFR7VndeHTsL5+vqZeCsGX;$RwA}2s`mT_*|&(&JfTW-@Y96}eMPRH<|GUh<$hX`FjVyR(+dg1MU9_6N*FB~{PbtS znPRe^T!~}FrGDz3c#fFir?H6>#Z7){O*~)R>8B-$Q^iU}5BJ}kI8AI+)I0IB#4E&6 zzowaVjVS9R%lANW+oTz|!j|+=W_i-}g1!MrZ;<>bb8ON)v4&{@XlBwK;%KgveOLQP z(sI#))l5Px65V^gnY2>e%(NJDfk%@b63hJb1LzS&mz4dQ^ssnAQP;c^Nvp*>OpCd7yOIzQRTFN6m>;@Z;NS)x*)%|#au<_K=uxVUpNY7ejg0zo4ijXC`w5lmHdGyQgm|I zsO0^k57PosUb@qHP>fg9rRT)tgJM1t^?VxcOW!SJiK)GJIzJU>U>?Xl0OwI z6t#}HC;3ZpTv1lr)yYT2pkk?6(eBygV`7=2S=DbO9~a*$sw>!+{F{g>k(zY{hm%hT zx1YXA*0kP!`X$-cF7=aeMQY3Z6y<88ZT3@=D_;A`PdTn+EgLJ7$m(~?%3P@$Zm=^Q z@6pqhphm8)&`(-fCSOD`qO z#Ud}q>&n;GDtf=?1XqD((yIy}`*ZjNSD{v~XkO2&Tt(VMMSJ^S)<$7JcwEQkIhpDw*SCzI}(VjjNT-DkMMcY#+ zxO!_Nc;y!z0rOpbwAG5nrA~46*F=R(r3*9%YGV`~$erNA-EBp;kGk76So;lk9H>NR zc3~fyQfl6s6?tb)BmnSJaZS*EK#M(Rr|Xk~T)sq){KaCTm%^BTbrT)qLVQUwcteMCUhL7ii~Klk9pv;x5$g zU|J-;=y23^p;p|RWQ)Ybqknc?q$T!|q?es?d9?~f$4XDRF4a~jvP`-jEn4D8shQq+bIKdqctw9zy_d2>TjQrsQr^;z`{}ooceIN}$#{QN z#dLU2`&7|c=~*2<)be@ZB3ej#MTd{I2mMsj;jor6M#f7RHlf33+8utnqQh5ORIQX% z4xiiMTWyS=?(J|)dsES(qPZQ8Yw>kbb5YT~9e&m3Da!8sREIw`^Gqqr?!B$UDQ&u< zsYM4n82THEc4mLw!PaBzrRIl)Cptvv;}pG{&^9$je^${CptgE^gVfAOY@6!Trztv& zc***Uiavs7s-D;=HGcX$3ZMZ8Y>ZbfT6IjJ5!Ypm3?Dto0C>eCcG4Oxl4Sy2*X z<$CNmsrgst=+p|m-cM6fyX&hJZBLkz+DkXjlA2$Fdh6pAB_>Wu?Wez}XkX3r)PeeT zMTbFW==+!!2z}W6)RFr1vz28%R;8Y)f2rv1j!&hYrJr$*l>J!wRO$qMt)dOxUrjw< zcaN8{4c&LAdi7)FJe)d5KjEiisq^%UCP>ZwJw@6g zJ!+DqPe4obHIpU1Qyi0apB{gnq`yE9>2npmQ(ThvxPHhlD@j|Y_d8!|w(U41?P-0U zqHfh=)1KACrbt=0>hscG&}aMU(zKWLvI~5&8EG5!PZh<~-judguf9;q(m~txWr_}u zxif8-enQdDpm+3fQ>CWf?WxrF^xcYfjaixYk)Cytl)dkHJncXbJ)L$)FHo{?${tTU z5=2j@eX4g+vb{ZDO8Y#BHm7}|_foR!d+td4GKlu1eWMRjvOT#krF|Dfo72A6M<`j} z+LzLf1<~fTAM|=9d#BG!X+H+h=Cq&m@k;ha>Pu9pVU zE0yfG4v(k(5kya?ozSmSGAGhJ8AO}YPU$x)*?yEk7y;UxrWv=hOpf_3EvM*re!(VPB?M#!f{OhyIaf8z&Ui z=i2Gv#+XZF4)wXo=~2d&e#%UbHs&favyP<27z-6$;W?7l#(3CIx#_XSvx-Vbm!!8f zHYyrbTaw<+cvDf|)ROdg<2^+aJtgVwjYEn~f}Ff77WOPmSrB#;1Oon4V=sO{3fwi>pg7O7CQh^V3!7Zexw2ABK%g&og2#m6{WW zPE0Q_micLRdXZ7qBxUuvx2JbD?(ox+^fKe9pB_x_YK*wdr@1!0yRqC)FQoT0-d1F0 zVZ>?t>Zd{J)kcTQWxOjqgVOsLgZ#85y`OQJpWaFzU@TQso8om1Hg@`HQ2G$uq>`zW zj{Y$H45O2xQMDhY4>QhC^mXos=_8CLMSW90Odn<3t!Sd>!}Kx6%Zg5d>WohneF>^J zBCeD<{8;v3dZSUS=%LI{)5jV0iu(5XA^mJ)&DBz~Z=XNY#~X3Yl77HwZGus#=qu19 zqrajP6-Qm?850zFM>{g67}qK?F_N2VEKu|#MsgP$s}-&6+$O_oY*(}pbgA);qIW=- z8PU^a?%}108CMwjObbMGdS=Ge#_dWr2korcSmLKa>C=q|{gju{Vx-TIsmv)a&zNb9 z@zdyxImUy2x-{b^W51tn&$!h{Y?1NS)jpQ7z?ko+^%;wdsOzNc)=}^WBW0s$eXFOmm_mh>m%Gm0s z#a)(rBK5pduX;kKu#vngU%3Nnm^3&CsPZ{s{>6Xk5#&>>N zp81^NoaIaNsmvFRA%5DL`KnRtr!O)$88<09RTJLvbz_;Ix^&!OZ1+=L$6dy!ewy9! z9m9FO%;8kcs*Zb&d_TS2@dINV(*kj-=2*x5#&3!?cFWHC)NszBcsGQ33&XT8j8vxU z!&(a4i!Y2ECEEe3N?f7XbWL*9*pAZ;$e^p2 zfQ+tCzV&O;70S299@bohtK@!JKNbeKc8d^M4Ob7>=bhv)8`u1U`e2bg`~MyygjTryOVht(^jDu-UPZ*QB%R-Y`6KWqIIBLGj@^8p{4Sk zY>%0uXnEa(_zc8vOgD)ASzEI!&Hi_grW{>#53+1mc6W0G%eIPH59Dp^xO-%e+nA1PV~I>$VwsHL*C(|9v>i7)q? zI!!cpGs)b&LAkH)GuT6ep68H(K$Dnvsp%Ecjeq{?)H->XI@b5-E-!f z&SlcFrh@34g=U_jb)ZFNwW5~FAvt%L;}tEh8=Z5P+5O%??hly#n5acI@Ufgn&1V%g6*T3nF|(FSTh@UdH>WFVseCo(33Ice<#ju9)|mrW z26BJN9Kl4nAIo_uC_l~pauBt1ziQ58O*$TO-J8w1DxO|g37W5{so+@7R`a-`b)eVH zBM(Z;S}KRR-!P9VT3*-S-eDeph;0#@DqGy|n}0n@G*k5HJ>UJYnfI8aGeHN<1}52F z4*M-D9lpeU*qp>N+GCHnkC^-Y^t}7ipgp$B{iQi-4W+qNG!-mye{D`xv<~!5(6MsZ zebk(-WXtQmaer^_eVpRS-2V*9Jtp^0^AO7@_mtcdX8sd0hgs!$xhI2i?~$uJnv|@m zASTyz+^A?B$l+L~sHJjfuH|@9(ek=6x#5nPPX=;t?+El@m*uv1%wrkletoXfv23j` z_d9YE9p*Yodg1Ea6i2k8rh?0IQyp$a>p*D^*HconrSgT`bcb8f^13a#9UaHllWeB2 z27j4be$0XZRxMvQpX8Jv&!3e${cGq$Q)*sXL`Cg7CtKp zt;f^Nv0hPA!C$#O92L(=**Z{9#~MW~l_Na89LE$buN&*>?I?PYG-d8Jj;>7dYN95n zmS%Zs9Q{~EwRDGPm}A^aGKX2^4|_&90zLc7o-vNKFH2cd!7NXmqwEz)>p*8ZRx4_$ z-0P`#>`}D5?vQ7!27?enHM#`q~K@4}$m%kwUAELF0m z0y}S-W38ffpi3QLn`A02mHqOX9BxI+>uU0@a1?G1Y>%?4aE5&ztMmr({h97veHNzb7d7 z!+G~O#<7fY{~>RgW9~Lz?t1?6pxmALD;?XmOIcIF;k*YOpDJ1hTID#o!yCwf! z$8Sv1vONy*9?4|;+~Y_Lp*2j4#FImJ=I?PFQgqAEck}o9Eh`;G@o4m$o)vZjKA`G*~C_sMwcKt~*IMJ<&n1)n$uDOz5aUGTZ1>I2f0 zR{t23d%uDo9fMd#xsNIM$x;2GOcS+R@N-b^*A)Ej82FKtH5K$L_|q|7(K^tHpx$O) z!CwydeyO>2HiLw*XP(&2Z71>(&rZxCaJV;FrENLseMZa{3RCGYXcs{)TTUzK4&#cu^3YucxzxmfJ&Y8QH} z-As!_UD-~j#~Sn*$u>n?SK~50))|uYW5rHr#(u#veafhe!UAg_)AeFnzmmcdtMyBg zT`$J=FDWdwn!X~Et)SexmPsBt<<>&Ktg^7&TFFE!WqKEOwKg+t74H>Yt5vEJZL%r% z08#Eee6luVXLU$vtF4r;DR)_hYAan5m!aB<{f1>+hQ8LIqeQX{1Fd64UvX;h#u8HJOqtC_AB+v+qi+1jIMUFqz?$yUlQG8J#lErsVwQJJV>EGrb%<$!$Q?7I@B(YxZxnBVm_BMr;f2;Lrp4mU;s**ZQZ+$ijYmMs zSVsNQbA=aMNBy+D&}#+G?*|Gmv%39GY0?Prk-{si(TdiAuCyj8YN`C8@G5JzqUCje z7G7&@W|A%PhLHAh1GgpLS}GsW8mxBOTqWD8(Hg7(eUX`3baP0&Tl|`|2J2Qo(HgAV z{6uT87FchxEsMimKC`E`(ApzO+){kdTxiArLFHR4HWpC=*cr5b*{4JD_U9ITYJcQm1%+KklC~7A#1;) zlFYtE4_ov9B3ovP!&vY3h}HI_q#>h;$`sA>5Sgc>%*|A-D23@kMVAdB&7+E*LQ8(c z>PwGzW0wEN-1eaBnPv*t2u(a{EoAy!qm>VjTFaQO$Nm1HMQbd2qXP8|wW&jk9=D!X zlwCfw=m~3^qMwJ1E_%{BsAx`)aYgH_pB42TJ+$a4iyvLYF}BFF)4AR%#2QXI;?7PZ z8pR}A&)v%E};M6Z&2i=MY`V7eh}@)<7kW$QMknPE4c;SeudcPZH;kiBBvr(~}{_KLMy z$@W6_sp3Mm1=(xXYf9D@4|Tt0y(wj4R`O#-8?DYJS$2cSM(?)C8ZHU_ z*?)>QSr_@~xuPxBd?wk`zHX({Bb}(T@l_j(Ubl8zl6qi`+3VIaThhfjZ$tJ3UJ6Q@ z9n&Ycwp-6CnuQfhJFLsYr7XSY6xR-`0_*xov#xBdbEjoSNjeuR26tKG6;+jfShUM} zi)n#4yL5tUxAm)%jqkV9`L-1nE#r;qcN8>E5v??Q*LqdaJkKXZ?^^w0q~<)&H%0GZ zDXyf8DvuX^Xx)Joz+_9;JhS+)^}C|?d+v38YDMBn4wC&je2VKct3uJdo-xH=SYIhR zmAlvVjTMhIr=&TxcCYKGHCNFdtn>KRI;d!S>R#7(R$_wG95p(r_~ruQCXy{Hn&L9;xr)v}&0F@TDN;57y_9Vq?I5XQ z;7(_ly&_f8xdZzbhuOOo)j~7eZcUf61GU48BkTtiRrRYYj#};QM1Pdm59RnRVHRn6?Uv6uFX&2k+OrPLf ztcg%~+S(tC?nsyK~-dQ)=&1GMc|Gw+}0#`RgwBQAIR=-NioUCOa34FUub< z?qNsKt0O?)kAA$k+McKAS5QCub49y6PZtle1$uPS+~s+txW+Cnk(AkeNAYO8whPfB z(L48@;xYEQOw@nwE3UPtNkY6^oOSkErp0(~(Bs8;J408Q3fXeDU9X62nP5Mwh-^8} z?pHyY3q)D&!Qu<;6HJT6{t;glPqW8Y%2bY|{#ty6y~a;g$+dRyin><&JC~;I+*z4`_if)Vg19X9+`w?$;NW9thbS2ws@6c!4vlT6i z%88q8->T?I#G4ZmZ;rh}$!?8^vFF&U74>biBX*9xPSJkEyCEdr4fbXw8xwJhGgNl7 z{gaZli=3d}Y>V!)2DhQkZVpN17CT1CJ`UfZ-(sgLdN3v@?v@bEd3HsR<~(~ykmkG) z&0FmWO11%7GvLG*DC53y(9LH5Y0R7i9u=JX-^AE z^Ue^>#db?jnv3lPL1``y(Y(uE6{LBW{cMotT_Kux+ixn_=Q#fEwht;=hPHHfh~^Ue zry$KGw$)SC5@{|8(OhaLD_Lgb&#_DG97X%u`~eEyNB7v}L7Mm2gMu{g3DI0;k5jU9 z!+(xlW?!Jl9rFh$IL&+QtAaG|wQmm6yf;L1xxHM;UXI8rS#GaWba|UxP;i>}*;|4% z@3Z#>Y2Fv2xxzlGWbcMe&{x>MD_R=;UBrqI&HHT|Z&sw9Zxl*&zn!Hh2_?EeM02G* zNXfP$&6ReoqFa&X$`H*5?1@U2f#dxFdzzvzqjTaO2+@4dZc(xy(VsnN-=gR_^k)x- zXs)uCC|PFM4tML-P^4t)gF{`ACT7qjtKIjfdu=c7dWC z@jgEXHA(R|W=Sjk?2=9Bh%MK>VLCqp#X+8dRu z6=h#*zolp(%Dy&4bDjNhkmfr3>mbc_A)5cOe^atg(3bvVJF4Y=coa4NpAgNb>~>1l z4!J*Nrz`ppnoosjuD1)7tS>az+uapKz|Qp{norwMF~DRQ*QiQ5pO`K-NE$)19p&)N?wx)ydm z8>0D~{j`$(gf{=2y;0HgI2S(`qWQeNSIOMS{dxO{qVJ*ke2C@?_OT$%7wo@+G+zkO ze9?~VE%yqI1YWcg712oG#SqPx?7Se&m+Xol&6h$nU$%!T*=;EM%XYn@T9p0e5Y1QY z^OUR_=l56a%M{r-zrPZq`KmoLD9u;x+k(=3HAM3@dzq45f?9gbene3g_R(wh21PGn zWVO++`BU2+`bNLz&UQI*0olj#JM>L{+4%N3ahvSjDwPws(%c-9`)2#>KC(WWk^5$Q zs-hC)zS+J;(RSp%#jh#a?a;UQH9th|0om8ceXCz~F>>E(-=R_ocWUDGklbIlGyBTi zr(titZWk%)ioF@C`G(z7$!0+F4SR^9e$ad)B+YGheNdX)?8!lCZVS=eZeJFZ=61U^ zD9!C5nmg>*}#6ivagxg$jLP5Tigdl)0DH|_O`&cYb%%@EC<_R%2Co%Zn{ z&7C2dyX^davX->S&T+f!N<|ymRDgod?{C=ym5g$K%O0VKa(^pCbGN-DNOQOSV36kS z5Y4ykZ-VM>*WA9Y5SqWOV6 zC`j`IyD>=f1N&m8#o}AcD}HESt7rw&jf$>fx(8aQH1F6G8csw0O)V1Y|o|R?0G& z=Eosv99qGCbCg;iG6veaF1Q9)5r zK~t#;KZ@XryXv1^s#I5`vf|Ql5M6IrrRq&pr3v zbI-lcohQND+%hfo)G*4&4KwZ2A3M_3v&<5|5dQwVBef~VE%7{Z3gQ)<-q)Z3r-m9C&2za zc(cL2I{(0YJ9Nlk>)vo+eo5$AgO#fT^UFfNFxaok56rI&g*NHhU#U7Uzb3TNV5=d^ z{LoH=y%n;Y7Rnl|7P2f3ecfOssQrzhmkf3ju(Lz8n{}CIL6$d%?lIW2z*dC5Ww3i7 zOMU3L!RA3Pt3wxU(fJlaFXx9|HrOSQWkcvr%pY3C1Y~IqeGKm_h_ynN&d}!#wiLC$ zHS~Rh9Rao_)V@`7UV+-Tg?bD&4|>@Vy24;Tg)EnaMhvzYviw;nYp|`5WmjmzU{^zy zq0r3+doN_UD&+K06tW~kN?G{2A-{^>gAg}fs~9h@DIT9#N%|dI$TP8+@lzWZCk0NfDqQJ!55_=YKYn>#Rh3`utk3go*j!Z=RH=@ts*w8U-m0onwG(4?dM=hcGZ*$ilnSY{7b#VWy7(6(X4duVcGh)f*K`@YBeSBLqxzpwnxzs8 zI3t`mDHYw+)#p%)rP4A-5(^lAFLYw7w{F+D$U_Rg$he)QHJ?j5LtE_@4d{|J-6@m& znxf0pp_A&ATqr{!59@l5k%98O2etduQfMikixkrRpwHyb*W$>)axRm3{kcVq5A0yB z!{{A`Q6hC&@`PKQ#=4se`sJVWLttuc;3+6OTtCp~J2j0rwdH*sUXKJ;`cHpgyZx*^^ z;mI?v&k3Emkf#);I%7W1UyQOfn2sa2lD&W57F;_^-r+y0rf@HQlb`~!E&B} zUG;{xVlI4F6}kM9DjacN;oS5|}&8J4BOwt4DL5!#p^~f@=1>Y1~^kbPvx_oWl zXo2Z^Ww`2bRSKGwMN6)IFs@(!Ip=?WnSY#?X0G)o?}fFO zu*bFM=H>kK8;a9sa{i$u{Gt4>y~fwh`PyZ;rB22?!eUyQS)=xpo)D|+)#v}e=tJVk z6v|IKP)Omtcx{|B^Zr*UKZb`!t3ny(ZKJ=@vmsyRYfELH(tp-@OH@YoeY%bJz%O#j zr&k<+S4=D6?b%{Hc^OWgI-3=GVkNDR*F)CwaHJKpTC?;2_gkddWd5&MPHp8L$3Dfc zPGDu>erLL#UklHm%u_uc4xhvRdI7uL5_JmtE{Ja`=lkW4<9tEZLERVL61?<3&SL9a zuiYX=WH+Z<>K%=*h3=iLUVbnA;)@Ruz0G1>h!NNAmw=S*D8TFRD^@_u+eHcn|c*Yqik z_O~~KZmBoDi9BzAGs9ajCT$bH<9t$Hd-!G9Xz7t!376ExC?s z`E~rga#EC!`|uTQr%YQcye{9ySO4>L#`!l5@)W(x(B&}hGkYj6h5IJw{7Tcceso;# zM;Lc%)Ed*NT5mdji|pOKub>C zTjTMCtnpf`HGcK5XTErOW=eHjH1oj=naj&Le?3cEDE2|O?x(9rA>Cg zd^GCg(SrsCh5vg{Kwgyb#u}kaHvK0RLVAXE)0U;O|jzwPh_q z$iwqJr(|l9bf1y4@N}ATdMU4c53AdIwX}D>>|4JmYc$8dGyC#!pK61gIN^sCwbiFZ zKkvkNW?VEZGvb}-ah!Ead;>yTk;iBF@9@l;V&}BffIjuovgx)k?(_xAbV}1atWi_^ zre00goJ{qb+VkaDa-wU?`LHh8DL+4JY;{yh=Ikz<#ai3m()!-YmJZ@AgAad6fYNFT zd9-D~*oKD|kaOu0#dZZnhLG@=%KouTy@YkMTuu+d=A1#7^9G#FzP{zmYr`(Ec&`T? z{z1m?h>3MC$wEM_B5wAuJ5)vbx|rEe^5qs@f#7|T26j{z&3Be zyb^lPG`t@5vv}X+S09#hLNAXu&T(kruRc23b56^>=d?T#oqh^ReSS<@q;Km{9(d_8 zVzq4Ema+urKE@{8>(lM^Qv9mn&7_|Y&c$-(!~0QwwOY=6&e*~ek72wY52~lO>k_mK zJTuX!F^*11f2Z`3mdZKj=PWDabR@~^pLt))Z4k=FyGbnJTAZ8N?ky%wr&P|pCWq6f zzTe9hX}W#~!Fx~+r@pPB_29IH<=2Z1)D#{6n4CW8)}1AGfae~z3d(5D-wv|WUtkQ_ zYB}olsjK9y@2_S3y_m@;e1 z{-ri37mI~_?WcC$Tdb4vcHmv2t3Q;k^~_w(y)xdF4Vbquym_VXJK<~=Jo?>zK` zT0HCUoR8-%c-G^&0M7-iRz>X%X+Wr#$4&wqlg}>K%roH2|4(kE+_sc^FFIYYofA^5_ha|qt zzH8^0wa(_Z8t<1cHrCmtTduQ?;P0!TUdT4zK8nBN{$~3w#8=o)BW$yuk?=9)d*d$q zG4=A9LkKTlmqeJpAcycM{z~*6*1=?3-OI;_V_WMx_ezh#&%TnX368h2VHajfgJP8*`_$CR@lkhQU<9^>` z(9He5MvLujwAl7`i+?Ztuyx8gzx1_R{0rhIr2I|Dg?EeAXSOZ$Z?d|Y&OmtmY3KS+ z;LB&{B2I0bP)t3cnA&Au-nt$1C-IfE6Y3W$#t`4u^mc!r)P9A8TkWr}eAXY8ctS$_ z)wfI51sJvmvO>8=!j~Y!eSvpK{ALMnv#9esMe;jE@~t+%Ef}|cxc+fFZZ#ro7oINb z-OZK3OHDZ3dWGd@ z$xlo8jD!zKcwE9064u$iOMV=zvyav-^mEMoGvdG5{)^xdNxjor-h;8K?%Ej&J*IA# z@b4Gr(4y*=bN$b&rRP_LZnC=0U5&8%jaOSYS^u&4YOBt!+Oj_MGQQe)F3POha&hPZ zi+{)c0gHdx{Q--A+5G|OwO8fKj((fpSAD?Z--Gwt{JN^&=2ul85E&kjzV_Svvg%71 z2~Q#HJmUulZ#|!Jj?$N89LDX+n$Orrq!z!Fd_>ATB6S^+dcz{s5h*ink1gKr56j32 z+Z;tZ7X|UIw0dQrbKzZJw02 z$mZ88=SgYvq=Ywta;|@#l(0zn&lCRhguhYv&lCRhgnzy8pC|lXkh!z;O_Hl!a{*d(J zc_P(A(vR)Je}!n{3em>PiaNhSv~h)K<5f`3^{*d+Y7N%^-)`R|bOpI4OmHmT)# zb#&QPkf-m$J!Q8^jW{4r}@5QoGYt44XFWAobgLRC5y^irObu)gX`^B>3(z+|8b)_hI zg?(Jw7?rxNkrrJeZFz^ZJB_0LF|*NEh=pqv$; za16f!%doEe6{+PF)Y4Oajnr~NYB?db+$L=~A?2Tta_*G2oRAX6?cXlWl-Jpl7hhd| zt3}&*tM!W&HzEGg>9qwpb?8>i{kK3PFHB~-o*KZD4 zx7yj2kD|2f%D+eW?8;|QLaO)2<#*T@EWg^i%SvDT^YXjwuBKmta$O(mdg=7vqI|AU z?-0pvl^#E2v)}Krr?!`bxh}sUd{kO=RO?yB{84GqQEAaLGUks;i*A;3j>_ylin}oV zp`$X#kK#tm2;$V+ZNhV0QsY(=X7Qx8?yRx!L#Q{P9d1m*hE?n6io zblG<{cb0P9|8e*+Smsy4M{TauN71^u@Ia`aBeJ$WZ-1cquPUCm|M~1sAiQnqeF$$v z__U0%r)7*iEu-sc8C_4yhW zN9I^|;;ch+UbUAk{Q|;`=X?S6HZFY}aej63Oy6_eKSX?R`L7XjO<&~WcheazLC7zv zzbe+?Rq4%Fr61qqqcwh2diGW6(?vdh8NCZ~c9wQQPKH%{5FP3e!#*w3Gaao zk605DQa=%E96WLBpVyyL9k)6Wwpi=23ba_8unNSj2bPd>mz4H7aJE=)Udhx8S2DhB zOFdEtwyZ_?HHklp_%a_*{AxL*E~yTwu(}dqmD+`Ho*G8DNa(dfd6P!jB-d)t6L!UI;rlmNq4&9g)0`N@+)>gs0TokovTmK=^%iBf@8-%wy_3 zh#yz)L-;dw8^ROn4uro{A4T}Gx*Or|)F%+WirPas4*V2Czx7#!A?u3>!`4FxtE|Ha z=ULxGc&ha{!bR3o2y3nHA$*hdLxfAMXAz!f9Y?szdLCh;^&-Nx*1sZLZ~YEov-Nv~ z?Ur2=QWsf4gqy4|!XB#{;UyN^c!foc4OrAz)S|{lENUrXv5jLE+nBZ3#{Cxcc8$e0 zPFQT?yQPGirG)oO3AafJcMAQW&<_dyUZLD4lm~?Jpm0tJ{fN*X75Y)3KP57JM<`E= zB+m%vG2#4~#7{{4m%>Ll2%Vlr!zzJX@V*UyX1X!jM{Sv(+t< z+99c3Lf+`X$OMI;BQc!Btl}JU8AgoaliARNJM0nzoE8!bP>Zp{H zlU(D7htAxDa+~j91clsX!qeO8#MP7++dvPkpL{CEQ;^*&dYep%Ut6 zs)X_%27gE$DH%pfzXAS`dbA_~`5%*9PYC~050$$l9AFwOvv-NxVnmeZqN(a1IDP zD)bT1!zvN%hi=D$QE0L$#6IniaJz&t33C$ODBM2k#0;SBSORq%yd&2qsQfll6NDZr>2laeyOTzPODJ@VY7NCrERg|%o z>N3hdPr_5nME_;f(&=TCwziDDaHixs3%SrE;DnWsyypr3a>=_2xu6H(Y?1Oigr`gR zBV}yYIKq&+N%(J(ytjfM>x)o6F5x{w|CG@07s_Fwdc66rD4wcGsEoJWfCq&h&PR(W1NIp z`>4eCNcemODHWAWt*&JJbcvrS@#PY)llTP^Z;|*-5`IL&`z8DmQbX!{m8|y%2yOKX zp}!)zevf!amCj*%Pmyo|!Wwm!gv%ssk+4I;D8n}N%kzFY?BCWb)!&j z70MkF-Xru+3H?imhty9_r)~K?LR|E~&HpO}&Q+W0h%Z#z1ujupf#<4g4Sc_WA2aaN z20m=y69OC5a{}L@ekricz>C#y1n)KJm#aWM>l-xbyA8~!6+(ZTx}<&(={G>W8*DA- za|SN)Y1~(0V3|^PBYztp+w(}6UunOx+E=0B5(C=|95nC-1MfEQ5d)ty&{t{l8`x&x zpn*3Sc(;L%82FrlzBwkpfo%p38hC?&2LUPf-3FgB_#*~CX7J|>4wqE;eSmCdt-+TV zyxHJw1|Kl^puul2@SvgJZSX0BKVtA>27k`rc!{9v1(bRXzQo|o25&R?fWZe1K4I`1 z41UnycN=`l;Ex#mn8BYjxT-Pr14{h{Ut;iPgSQ!cz~F-hpD_3h20v)ofo%p38hC?&cN=&J@Brtb z!JjkGH{XHpECF(20v!-=M1iJgOK(60Hq%cex|{f7}#v+0|rhQc+kKp1CJT_93acX zYdYONKq=qgXBxcO-~$Fu7+>o>63zzG8n8aQR(F$2|dlh43r z0|yM8Fz}#(QwAP0P^~ce4Qw`Wz(9VDf_81f;FAVFXz;rXK4tL320v!-9~oS&H1!zR zY~X-_{Msk=bIAGv}fd>toGEm*3`D+bqHgLee2?M7LJZ7MJugPa%vw;%^9yD;u zz+(og_Zj&N958UgK;D>CxbcEJ%7Bjoq62VK#8UeK{};|PcU!CN9{YCtDO>p}eP{Yw zeZ#(+eP8zdFW)P^-}_GSpXIOful8Ty@A6;f-|K&;|7QOO{2%gv)PKnTN&k2KKky&- z|J?se|8M-S`t3j{usqNZ*bwLnbO*KvE)PTk!-3I2CNLg&d*D#ulYuV;9twOb@I>Id zfgc2(4g4hVLg1yql9JYvi%PbX^p#vuva4jIBw6zAlJ}O}R`Qo62TT6CL|LT83nhWD_^M$&8eF6hB>R}w9eT$=h8XRIf*$p&N(vYg*h9lMyj$^ z@2+}Z)n8P7v}$?vh1H$-7nNw?#K%CSHUS`z}?X-l{59x0<8+ zR29zN=i%1WeB72g6}O~LQ&VaYZbe~X$CqqVePCH&*#*umR2TJ}?fI8DLr zV0_^hp{?fPW--Th0P#~)5b^m4anfK>Q}01&s{>X!;x{A2Ifqq&_V4K6gzvYi zLBX3>#6MuoMf}eZ;;hI%1>sHh8xS6_7ckXci10)9=?K4KpMmga_L<;+9-*y%ZZARn z1%x)<4xWYhFA&=5Mf)7Y{{^9~uJA8I_-Foe5$^IYM;P_5L^$HFLwJ?H0b$bLgmBEi z24U8}4&h$^TM%CDzX0Ji{tMB+4}{J|_=V7Ngb#*RBK&fw4&g(g2K4+CQXf`dN9x1s z2vQ$b-$d%e>QSVARUJj@SJk(X`c?H5QopMH4yj*NPb2kf>ibCjn))G9zowo+>etji zA@ytO7*eOyaimVEpCWZi{S2v7>gPzEQYVmlSp5>Iht;o;dRV=T)WhmGNIk56ht$*5 z*{T6|{kkwhcd0RTt$H`!9UW4iL(Pxl9nf>?MfLyU?adT``f|Px`2N!OHQ%><|KzLi-{=35zcMgCaAV+>z;6Tp5tv^xQF3{3FqjLz zC-}kO-N8=>zY=^j_z%JM(4NqE=#@}a>B7=CmM$+{TY6z>cj;xNkZwO;^-oslh^?NrY7ri@K7{Z`mVZK9T}(Lh-*20EuRZ@?cXcoJJ-p=} zaEaa3_rV97{$DBly6Jf@M`=n8_Hrs;3_=3@g(q!;z`0Pq|_Ur=QpT5c+z+> zc(QnMc=qDihi5;YaXeS!c^jT<@LY@MIy`U3Gl6Fk&-Hk2!1E3~H{y9Go_FDSH=djD zya&$#JU8RH1kr|^6l&u8%5hv$AgpT+Yz zJP+XcJf1J$`68YN@q7u-m+^cB_VXdtgL%?}G1-GL--D6egYny=zOJ^aNAMiM^9_vP zZ>pW@TR6viR1IM*9l|;~B)t??-^6}dsVmj)FfI0#>N=cRo(gym{2T?nl5PQ#PIyn3 zPw3rin0~!Uzh2UbcdwzXyWZq~rz!WHrrdW5-GcsDuMPd_`af&+YG$cz_%MXY2Xb8-e};v47|y}0|wq=;QI`` z)xbYD@OA?~Xy6?Ne%Qc|82B**?=tXi13zxy-xzq0fq!e@rwsgzf%hBun1T44InuvR z82F^E`}s**_w$ps?&p6n=|3>=|1t0%4Sd$X9~rpDr_0^w)8%dS>GC%Eba`Ed-eu@r zhJLZ3Uu@_X8~SEL-)!ic4ZYjYyA8eD(6<`;Rzu%v=)H#CYv{d(zTMEb8~S!b|FvJs z|7*XN|JQ!XU!{KQ@0P#$`CFvZ4*nMDKFo{XO1e_t2g#E1>g#E1=u|n4v#r z=#Lrt3x@uJp}zq7x3S)T8*BKt)raxijpuLid=Af7@H~R&2|WLR=SO&6!1HT7mi=v2 zVLuu;U_BbR+CCDv5%|@3er{i9zij_JP+@oaD(pk{Jl`R^3C|^XuEq0LzQ0ELU*JjO zxen>qfp(q!b^mqtjldTNt^@CN_U(XQ#}h2MLM|ge~9OLJa^)G z2g*5Q9|7O@z;mqRn}HXsZw8*g^CLW0+ehuO;LH9BdmH5G!}A;ePeZ@)KUlgNAHDmY z{deUHd}G0w@50Ja-+L=>^&KhMK6?kMEnqUp$IuGyJEccs9cd z9>ud6J(Exi@SKKcA)ZBePRFwt&lz}X@tle0jd+&e!MzZ57M`>5oP%d6o@IF6jOScD z=iyn7X9b>>cvj)5!&8r^0Z${ICOoV0tiiJu&pJHk<9Q37^;pR+z_S5Q3uJ78jIE%z z;c3Uyfu|GCMm!fI{bHnV0o($(6>uwHA7CHgPQaajmjPY|cqQPKfCGR7fP;X8fKl8i z8Af~<@e!1}8}Z$UCjpaydjR(U%75!Otn2S@?5|s;*7v14BAHlcE;*Qur;;0X8G75= z#-^6FtJbu%tnFx9)3By#O?z8i>#8*!Esg6M>graluIub*?`UgjXlm)~>{wUV*3`JB zv18TRy2f?&O{?lxss8@nY$O{WY)Pjh<6X&kwr_ka)*HV%c0t`qQ;}$-W2~5Tr0Y~&&MX5!Jb#+ArD@tuBN^LAkZ7ND#U6i_}D784T zzNolGsSQP`jYX+VMX9TcQr8rv7A4j-6cx89wV^1ru_(2vD0OvF>YAd|qQtt!qT&{% zHWZ~c7Ns^7rLHbYU8AXDXJ(m;MP^dbqUxH8Hm4}Hp(wSnD7C35b#+ndnxfRA#Jbf* z#Vty0C`xTCN^L4iU0syArYN;2v2IOKaf?zLic%YkQk#lWR~MzODNZdWSl!xU)cT^- zhN9HQqSU6M)YV0)MTvFmiV9Yg+EA3*RFt~9C{>6%VuRUKx}J+R=90!54A$P=I~YmC zE^*P#sl6U-QwphtB;mibfIpA9{CSe_Usk}M$6WqAsWTFdx!jUDkBvlj#|lY(@zH6N z9{4CDGnw2%IwR?}M0~6#5lQCj*%B*8-IjuHl4lZOr_rbzw`jLDE~Pu29ZAuhaVgtk z886xwPsEeMZfZ{?JK`czTmhwbBoa;S>&>QP$zczpmT7Aa!lskPJws2ocY7o*l8VxH z$0V;ekLYg(wKWk-MkBitvEs>6R8J}scf3QXUU;Wbd$Xyr%_$FCU&?LpTXUmhE+Vpf zC~c`kD($8gVy<+BWIfbP9(aGdTe1e}Or#=CyuG^++lJ}l*3%Q;A4?QaS~6o^hVG%E zOw8f$N;)wV8jmHS-9tO#v3+i7uADMHTgPW6=&mf5;_1s`$sCBq=#p((BE*a((N|9W z#?7xQ?nu{xt~u&w;UL|(+HP;t&2}?3%#soGEd2e{P@l^>3n$1PGv;Dq#(;Uvn4qrB z63kVC*ttBvSSgo3kGcGLlJuBZDVINwx%_#OW5)88v9mQ+V8(=0V8(<}XvSP7w~*;( zOgLtkF`?=)<>nM&r_mfUCj4$|+$;rVOqc1JF+uZYOi;&Y<%=tz%rs-VOfk2GhALlz zmbggj3^S%h;4&b2jByjHI{{~yF-e|b#_~nE16%i^wpx4+ z=dBj<#E*<%u2OiUuM_HJhw3Q{mIL2<_%;_gU7+zf_#)gG6lo=AEew;KlQRZBLK ztXKU#@$S8`w2`@983`QK)HTeaJkX8uX5pxJIT~i+0KKuJbJglKt6LiDR=2KeYwN75 zThrFCW^HSGTkGn!rnZ(<9WCpcRyEZ%HFh*~uIgOV*0#23&8qsfP3^5~)~#NhucEk= zNY86ckOHkWD4u@}H0bdbOSh%cF<>pNy)poM61m}c5(KRix3ap%;NG^<_4S@=NCw@i?NmNlxbJ|ljkYLR{)0F5LwZ5mCh+=}X&W@#1Zrd6|W)VmxF zvv7dEuD-6lsbO7HQ(Jxgs+P5@8`{>jHMKW1w6`}lHPo+bTiv;)v2hK~6YJ|cTAJD$ zS9i3mZCKmBw!INxRg+uAEH!|f*M}el`f#(?t)8Wopqp0C!cp&X%)$V2UIal3L~yg$ zt(ipx(2cceOO1{tV&YT7?P3Na+bmh@U5;58K+el1NP%o__PVvR$OgKRZCh+#JQ<}a zB(srgmTdKFRZIPsm?b zXlQ9`sbAC7($Lyb-?Vnk>NRc^v((_G*R7jHa?p+B7snF`ksBl<_bi#}g~Q>Rg$d-% zsc0?{+o0C>q~m+BS?glAjmDBZ0Z%2{W7$YNk=dYHlEaBueY@&QjkTxtB@ye5M`M}6 zbSja6>1|i>%(nP&Ji03t9S7Elg|MMrjipm#v2=F4t6dGIV<^3)cXNA3C*BV1;)!+)8V|1z~VlE}sS`_*6s4QNS> zjYL#igzK#u+@(e{gQ;{Pz6-hCsdYk>2r4Ha5Bf zt5pKKE@&yUVq+{BOG`GK>u2!pKo{U3ZK)&{sBB*f5y+m*()H|#r3clR6Mq^3rCxA93wiCl5+Oj{MX^BRaj6Mg6 zXL@6MaOZ(QX3V=@u+7Uftvq2t-z_3a%= z`l?YiHZq=x4`%X&Xly&)dX0DN$Cf-Ai#mL(;wIXJXE29>qqWuFWz4~A)vQJT$-wddeGqp6x{ zF9u;Mt>flJn~LcdZmNGQl4C*fOqWbbU8Wn4JH&W~lcXh)NbLhlC(c};LFB=4QY3*X zgc3Y)4(VhnJ?bQ7I^#(vPNCB}lWb+wdcKs4MY}P6Htg>2Z^h04Gt{KPkU~_>$(d<- zPS2!|Ij3ARO3S9Qo8y@biq|u!J1y08q|>Q%W@bTPcSi6@Sd7k3!m&Mx$vjJXJR>Hd zH5X4{;&#iRfXq`y%ORraN7b>P%IYGILfHxCJVQZp~cM8-wAEs%@zpLKv6LF`Sx4)u;x! zB*zf!a~!m2Y$%dTWcf1MP-6M$nC6LRu&%L_Q)$YCc2h(LGT%IJyLq^CB!UKgtwMs|Uq`Lmf>L&E1$NSi+nOJ&no;{K={Tz#m zb;3g3HRR@T3gfogCB~C(bO&Y_6(FLyRA72dlabYzauY&IaWA5KM{?@Ek*GeGkZ4*C zmn15SoW$rFNQAC|L<(0HA*IEGb*8G2u;Rin4#Liu=_ynm3{NBJvnkB7)Mzr6!MH>- z(}n0LX>raRZ8b8u%&>njk)v{C zlrz~OIX;@Cd2F7}t5q3Ka<$E+ z4Ux8DG%}3{)fO;8-U1x<%zeitJp?}kBazaG@$sOnKGR3nL*WGu-WeGro@sSn=FC zX1PQ=V`^J2NuA2Vei0^ep2UkwhQba6MxVw|%#o0IIo#c0M<;+seOs_QqC5gyG8htW z4AyX55XZ+BWEg`c$xOn`?O$gcy-7-cJhL?y&t|#$!G6Zn#j)`riRhuL`ki6h9!q2+ z9IIl2Wkt`ESVN`=E$U{1AFLO8cpvUG$d@h!8}Coz=r8dxFs}utdoF7R)<5pnCx3!pl1ur-xL(==^R&o|nSm=ZGxkXLK$* zn3v5%(W{yyI!m#(cffMG2rS`}&Q(n!G^P^Kt267*@~B*B-SC#gjTek(2YJlQbL{2D zBo$jZ9l=1uY!KQ|KB`+N)Qx)RtL}81UCk;}`6yCRCYJocbbL&wI;%gtt`x=rGbCgC z1ZIh_cXq=3_l}Lk(i(N58&^oXFxGKCfHe24fP9`reX^O+OtU4dpw^_AE-~Y}qjO`O zIFo_7#u>&K&9>{LM4|mO*6Qt}dxlA@SDp7Q` zhQ`IwMQw-kogQR1#}Crf6}KAH5w*W`_O7Lwg8Ya0~aI_8>V2`vxtL-2>j+q z!eHw+)b;mcj)J3OFD8m+bruTc2;mY^NjKV^?9Il;Tr^dPc4gd@cs>gIh#R10y;6ft zgf>V!cfHuc%Yp`jotA?vNEB_!;@D_c4oMqxaStZW)G$}mJO@hO5zoX6Xj})lRP@EO zURIZ!hNnFmN#pv1Q;#k=mcA$+jpFdcrE_nHn*k{g$ti_v3UZDb;{Ut*qgryiVhM011Ld`2gsEj2ct z=FH3|^+d2P%C+M>Ezb^*F*%-3Fv~vWK;64=X(#JRpixM|HG4rA;_IP))$#cMc?68myrkk2#F-%odJ&99(!70fp>dbWq&gybwA@ z!7hqqG=iNXY_g6!(#Q&@N$6IX4V`Wd~tKQr$eOz6zSaJzmfz}JFIg}P}*BouZEPK`n$JvzA zXOHt~I@3+gKtXxeR7DaQ4E@;P?yjLOIX_};RH8mjBE}OGLhRS#|cBdH@$A6I!a0iGGpl!y#6Dlz96Q4q6^NIVja z_M48umEt3s4Na=qdVhKM5zNza*a@FE|S%AFwZ74 zD$nRaS;#&qjwR?AX`5sRs61wYBLQwl)THDm>9hpOYIs->HXGPVLYvqcd+sBO^qE2u zC74b!*B4cP-@a5&T&2cn*CUDUU00#kc#^0)Phu^Z@#J8ex!R%30hWtnBtk(h>YP5g zgzltF1s8uSPWfB}??2E(`|#=@L0T-z-I?|?==i#P?J2!SaS4NtIQ<=CnK*p>9U1Ol zWI#joIE*lcw&F<{y>09*cDvq3o}vv-9?!bG7;2Jd5T|DFwqYaHU@o239t1IrbUEb4 zlo*5^N?_-~({LsG4LKvz`wuYE19L7Uw4`HDSURNA>97yd$Z|ueG#vWXxH3W%y4}hUt%vksERnQ#XbTQ&_K#6i~#Y=2SqFEyi zeuL>DwK0{&+eG{z3U_x2S*m;LOhTd8Oo};zaJUKKFY;{wyOOq)Dqj(mIIF~2l7N&3 z=!ceEHYFspBXaSGli+z-EN^1n;oOQ>c$nXCGGtzK;Wef#2@=s;6>KW9qu9Q0ON}ZV zX5o+!J;_lB3nc&&2pl4a*yh_ za2}lVH|wVIDwM2sT}efOW09nz7cL$=-qkPGoT;UUG}E@g+cB>wiDHAn6Jk-RGAChF zFQ~8& z8uzBNh9dW$>h;#pY|$Oe+-Y*s^b4-S#D>B|2h}+n3lkmG+^~U|Jb`j}qF#(Imfa-1 zOgnsfsW#ZARC3rvx5NH8@qTYS=Rs({4gW^?h%$Z*-X-cXNS3NI@gD4U^S3Pxu^%P_ z7J!$`4Mp_mq{>N$LF7`IlQ6{l)&{}pp%cYhayL%0zLw}@VqyUWvbXE^KZXT%$;7t9 zGCBD?(Of=mj^M=OcQ|#|Hh5`ca*IoGrNH?b0%vEL*9AzPJ*J0lwnrRy&L$cML~y7u zk9j1QVKy#yFcSUSlek)^y?7Ax!3y3}I_EGv5zN1QbzZruAxr@m!31<)#`4s}O^BME z7+oZf*TT~(486-_b4)SJ;kE}axEG7`R;=|i@BPE74DNPw(d4)Y?F&-P4xE)_W>CnJ z=62mlb`cDSJvp5A7)O4abBV&$8k|;GFL@W>c*omfL*{OX+K6L0Y}uW=BH|%p=$lu6 z?pp+fO^cocGg4qP`OYxU>RQq~DeAn9z!JuNg7d3bbt$j>^Mzg-n^3mRStW3ytXDS@ z&5GfnU^KwG$!{m1EpyqyIi6PLPK-9}a!QfDX*GvJ z9ufxWbfS6N;4-o6T?B=2Oeb7|+x;%Z?S7X+9*$#|K$ZeRHsz)nZMnEsgNr6)xpPq% z8S{GH+^BI;a}uVNObNyuM%L~k`Jbm?DbDuh#&{};zDj@@G;Boc(h4Xz#>0 z)Z$w7rDXEs^{Y7)>`D%$RE#$OB-WMe*guxi{;iHVi~41;bV`<~s~OoF--YAY6eb}3 z9xNFGE=`T6R0JnBkO#8>oxXF-gZFZe4a(q{c|*bjECmN68*k&w3qkp7m-rY8=Ivkr z={||~q{iTPnKqu{6F&|dM(9RMd5X&kn4ODfkCVrjmS;)(_D7Vk#E;d)69r5|S0I8F`; zM>p^~988z(VEqZH%0cC-S!?X-cr5LZ`UiOvZ5l0V>hEvO4Glq#T^ex8!?DH-%(T7< z>>zqo;cT z(~mYdGvMZ%Qvi$?_9&=5f8v>xtIbNMvt3l}p17aNY75X^xhlmwbkdxqeYVWaWthuIU7f*xmU; zHm8!QJhsb~2C8Vu;70@KOWcgWaU$*jCVDceWmm>ozT4xtUy$NG&Wwubiw}CIiyIML zQLrWwdQ=uryWmTuc%Idr?${q2MsvjJ7aNSkjM_J*TPBKd zE~#W3n%*>D#(S^&3b@4RZaL1iOUTOsUc5J97A&#w?R(*_xJ|-|8pO;v9;KjkBzT*T zM<6uYkg5Q~p&XVZ&TeGIQ1qa1EcJqJ?mnT;f;X63%?^1z3230mT|$S#oEzU(qI4cMSzg8l6*4 zMMIH;E4h_w2-pkg=_c1s4bh#0UZTs%7oO7@Jv4XM64M16R*|KE;v8?ut?=pM7@Tv; zo9;?x()%OcRNY=oeT+B5APp{{xb4u#gNDy7xPa>N8ly9vc^a8LhmQAjn(6QYn)d(# zqYQ>@8fDOPLV<41?TTU{<(o${P~6v)9QO1abuAvU$mz^L4;>yuI*aAPOVU3v;1#PC z+hW7HL#AraU21lzeaFmNJl!7mP;d`Cub01`^b;866d%%%3TpCxlwL{GS2S2!}G}~ z=Q=w*4od50)dcP=r;!HDS+@S<6fUpJeNN5Jr3$l3BhZ|VB&2Mn$r%RM3cd7kdxZ5s zUUU?iTZMP(az$3(6LF2P&fz3#Y*0$U6!+LdyvxUnw7hL3F80G?Z%A_ugUl&IapN9u z#HGO*apR6J;u4G(bx|yVqb}V>)G+(SdD(%SoP%luhqI)K3(wV|7}fBam8_7pkZ3qP z*Xx}ky`+tBTCi`DJO1LU^yUWPXTkN51AVyTSeMc%gt+4_-Y-rTvl(1+%#I*0N2=UC zM<2@$)^!V{F#Hs#D>;^Pf3AdaVSc!jQSfo%L*u%$_$y{s8I9*Mc6R{!PLWykR9T%aG$VD`1 zyNN>lez^mq6(XECdE}1}Bh!<+F{uA-(M*Aw-flO67LkY$T3(?d@qU_laQAN(FWXF(a@Y;YeX*jNV5F=5p2%y z9}#tK8Sv1`aS!#KSmk(!1_gtYfS2%|b0I_R-GkyfaWhKcimu$^=jx#P`5s$hI6=l9 zo3sRjA?)IDS4Lg~J5U6}>F(ax7MLJsl+qmWeXct#Hph}Ve0H0C#APA>#UtGX9-KCB z$b;iBQh4@@G1`xt3i}}qeYc%GatBIMbg zk}^K0yhw0-PK_7`QX}mteG;rO?HTJhRtz19@|puimvg^NUU0e#w#MWTUKTlx;~0V8 zV1)}vmr=)Y|IYcLIpzs|w1dNF{GvemM(;bjk{96^J(3Z&@QD_FI zNO_XjAM-;s>3(z6MSbXVii}G^PigOXwOUL7Qn47go zTCf}6QtnhL(2egWt24=&K;B_|aXE%BAxB`wa1{-ur!~KCnNkyX^?_8Yc1V%1>PTz= z9sx`v97jCsHjUM=iBa%V^c=8^aFbSxhlS@Gqtl#{h>c3)vWRJcVu)oCC(Iz{sKgRd z%dn)VId%B_bUmIm_{=o^g2G$+3_o5B3I`R+vT^4CcrBDhr8ug^4^luIM~PW9_qi@4 zX$JNHtEG-o_&&8GEE{-^6vQH!%ARE*EH;CXy+IY#N?-30H6+m+q%H-261k{2-JeeL zI4%l#DFJ&r0g0ALiCT^OPzP(q-)@&O2Sr)zXDtW2NlTN3S~f$H{hki7CjO=u&Ea5- zqU$441;x+zW4@_*t^MJR6MJLP&-WMu#*MXX`awy5oD6aLkr4_WRA%FO|?6pE{d zDmAP7Gp{0Rx^UZ&70%)7Nw^-gh2w7Ib*8!7*{yludZo)ar(XvhniuQ!)uE!Z{8V_o z=kvsprO##igTSt ziRIDc&|J`@4a7hJSCvN~L4gwf`q&u{LjkthB;8F?>$P z)xs)s-5wSb$+eOOQ7=1;Q)4ufdPU7*8KV_f6Mx(1Isq({%1I;4A(@3lkb&cZ%gj=b z)zy4lx3c*A5nLj;(z1J4bS?h21eK>%N#o$GmEJDOuZCRU_kl}W{oPWhQ)|8(tXQ8& zr)y=Gu~A&}xzg%&oXZieAfqK*Z)pElBFrJ3tL|&+-pTK@A;T_Y9~1}cYN>!#Iev+* zgwC8^aJZyVA*@i3Gio;_I2{2!R<)0m0B0PjY@Rdf8W4+Nsi)hQLqoLSd8OsM#YxGR z&gBiC7D0Y0AcFjKB1REoJsjU`I=f_-gwtKtr5NGtAkGf2)LeM$C8Z19&Y7ZH$&RKf z^AeD=K{&gyDEFO|w^q%o&9{pk#U-7-<0$gcOVp#5det*>x?I$zGoIy?pG_{@u$7u_WSTxFt@H3?b0DlyFRvGW3Z@ff*1~=5hSZFmq}0p% zT$|)IMBGDAzcdKiQWqKpI*R!T@0bscroG6?%~KS%?OnwScNPNg#L=F2anIkWY^Hx& zI4K;9#R<%TF^Iv!sb`(C1w%wzpnN0M1;wQ+-11N&$Lx3qpX$x$){~vXG%k&&Z;gwa zP@v;Y=eJ}mPupddTWGbdOaJ@Jti|6KY**F|XLO)4@5;@Q7nAwU+1et?ip$K+tH^7x zS3vMCDD<3ZYbHLOLrCIO|f9rL|6}y1%^| z=EURJ;|TH|6tPcegN7lCHUZj|V!J2@+s&y)9qk713QUj%Gbcz3x)C2X`_t5bx}4$k zr>UWb_Wwmw<19K6t#Bp9IzB0HJH?+e((e7y9THBt&+23Yt6a7V69(EY5ruO2U z<3#WNOxsl4vJigfG=&z4f~Gv{3+0Ji-wKvaQ4yP=> zpdPM(A{@7ODP!U!UcPuyRa0i*>MJFpIEoEN#O$RxEbE1 zmy6yo>T?!lDw~6a3mdoXdZExAtG6WEZ^DC=`}^a zn_-C@#B2dKgI2Ii&N8eEr=Ken+8CC`yx!9YuMFx8maDCjbGlNHK0IA!>e!J)>w;s` zInJW|OHp3F#oSD5hr@CGI2GxH@=S((M|V;6*UI?PJwyrgCS1=JuS9=j`ExIyW`YI#?(!MdDRmCZ z!Q}*$>{!S`J*`K%;BK19*ACh9Q@Loax|zAOZ%geI&9QQ3j!kG4O;S<*hMD~AZ$}G7 z^PD>~Po9s%kbQ32y?iEbFJ$q)a`SLkYm?7YDSdi7{WUIMta(>Cbw&$nV=s+9Ld&TG49dA)@_=e#lI zUW_)HD;igA_61wc!AbMveJ446cv`#vxH7pqvTtZ~9MiB8o{4^otjEBNx+V^DZ%Lar zJxRZtr_gz8qzmByVe_;b-KBgS!l8F#!Ft$KPWdRdG@-8{U~ z+kpIhpS_X!v8b&L2LXMO8Op%bmf-LI>iXjwKG5~v`3roV{WSkzT2|&p%gYh1(A=@pt7Fv@#~iF? za%uI%)25`Y)mzWPn+3A41n8 zs&h3HpARV;V&h*>N5Vd(LU`;FWz|fcQaLARpHe+BY3ZBx)T4T$xgR`qzL(3bE|cy%-CQaWeXz)kt@G@~YHl!K+G}PSRN!bpQ_zD}sMe~P_(;vfPkccu zJjXP?I;I&=B?jW;szA`EJB~(St_l&i(a#nTf6xwvN`e@~ePJpa{~wF~`JE6HsTKM1O&RT7@c z$rcVvT(_&1qj^jSZ<27Sgy%`PO2S47*Gjlv!gf<*&eWK5Yt*K~Oni+g7sTke{*vmLU{^>uAYrtcDG5DHb>U_JYhK-qtnlua@EQpxBz%X2@0Rdp z32&3|L)1V*qIXJoP)v&+(s|ROabY+l;U^@#SHk-we1Ilot3)4^a0$*DKSBgo`Rf@LKtW>Zj zu%=?7Xk^fttwGi zj}|Qo(@2JWbJbjHt}Pa`kv2q|&bdmDJgtMU(Lr^sJy)AyoolYDgsqVlX+jmo&BQl^ zpba&wmklFSJ-Oe80>g9d@LY@Q>p117ddAV9Fd^(!I9y)lubG&Tglm`$)7hxfnb=^i zLZKB}akBnW;zp}N3toZ5GMy-kuud$~iDl4n1v$z!hb+&Uqg->8bLE>{XF#|dQckYZ z|0AUwF$@o^Q^BB*%NO+QhaC;i4OZ$^6iZQzrZ!Y9<7jee1zYqX$8eVfvCM@+rv}3{ z6A!~v5qb!H#3JmD)e}#FN&h1|#=cdZ zE5U4#u>zL@wqB1F_)kZJh@x+_##2$jjqpko_`fTdbM zajSGcmFj*frMMhFVUDIS#FIf(EglT$VWxA&N#hy0wjx*(7Lt(Zl_0`O=+|KY30P}Y zhJq!SM)*(W2`8iF3zY_gB%!N=wHV@$A(adCW0iA*SV}`a8_wBxLcY^|Awrl6B!xm) z=;M|T1)xxcY~QJ@EUm&CbUG%7LXY~eN`!pqbsNm4;7XaZTUq>Mi>bwDmsGNy7r`q9 zxvP5eQVcv)8-ki46xMypCOsId#&REU1_gS+t`6H3!GMf5^kKL<7h)IER#XN{Y9{W& zAcW71;a47n+=u!9WGDnzdE#*O)#EI{jc&OHflTbC+(t8kkq>Ful zDhsVcYhX?0TJwVykc8$t(@r-hyBSiINN1ktd8y+Rem}(DrmI+K-Wn?C4e23{g0b0mM_c%ek|K%P=XiQblJU|H7C9 zqrU1ri(nq@xlra@3p1{=dNM03!6Hl`#)CcxER*T5n23ilNih&k!KNl$iUBz}jx5)f z)Y^*{osK-d5Ci@%47FK~Oj@-qnn!a4Y zo~s;F*enV@EFBZS$5M~U%b}8}nY^Sb7&Jp`;&7-Y0h_iMi<7K%XyJa?MYy1F@V=xe2W&9VQNfXf~4xT(&J1(#nt=$*u0F>7>-xR2x8UaWf&4@1|Lum zV!g%!ds7M4>zYYRX6`N8Y0$dxV}2b*uVUFm@1kdkN)I09+yPc)2T}Ic>d9NNsneNC zooQ%S*P_4RE*QmHVYAuS_#8|zPqJNuF7V*=RrDf`#T*+0EX?+qwP7sw@bksu%~b$v z(QR0i=c4csJO^$eV7HZBQBlEM;p)i%my^jr2zD$SrriO9s2_7SNZSw&aq*_-5Qmyz z^iIWQlOai`LV+5@G}tO@6bzhgRaOhYEMnQPd?1AxrAcI$VIdqBc81uj=}dxLYmjT1 zaxDxcGE@_R2plu0Mqx35?A&~C8N+m=iIjO4`r_69Uwh~G8&`3~@!7l1W;Y(&dl&P2 zW0nwT3J%H-11>_s6jK5Xl#rB$$`Rqmwu!oc3#3h|MA|3?i9djcK2)Moc|dBUA{8Mj zAu8I3BK4tFc|a-;d7u&xNJT0Sd20Ll&Y79(wM`^cRjpLk-nlbp=FXfsGjrygGe36e zq08say+|uNH&&BV$YDgeF#*S#a@uleWH;83vr$e<4r|SBY+R0)Ga+YE&Xk-|PDjo~ za;D{6EawtAm&&@QRA-Y#dM=IH&y+i?~aaDMgGT1|kri$=5FDE0Mx_Z5v|tijYIXCUXtK#xc| zv+0b`alQxm&cX#xFDT6e8;O?*4d^`I+xRZhPKx0liR~-mbv(y_dLh%4?vtgM4GqodW4KCr zx+iC=oN49oo_yQnbiv9LGKEyDGvrpDY0B4bE6bHuNT9>F$d%bnQJN5?WTY99QkgQq zXi_yfB4=67NjXEk{1U!1AX1(IrSi-+5l5ywBZOB_%r!py@wrd0{!Gp*RJkqBt8&iD zc@4@9l$ok_hB|l7bS0@tE0C5TEvvoJJVDYu)OoZkp4vIoLa04-kt2+>E}_Yf_Zpo; z@>m+*IYdV(j|4gB$QS}jajC0!<^s(|4X!ZR+7&R!xz6dub)uPlPzU59^x%3=;xMx@ z9SuJYbC+Z)Xi-H4RWL-!m^P1|m){EdO^7m$1F5&59649|zi@z=D8xNqBO0aNtmpMsrM5RhtTeRi_>_h?8c$EGG!;J z#9!;ws-Kkvf!`zc?Y-8iTYP3JX#=GCk~3X2nW;yMLr+jEJP&s|GQn zhNWopz)lKCX7kQLhEeBWmtoY@7(lX>w;Q~;wI*^tV9%OHz1h_RF?e$~gt`VSP^re6 z-7XekB;sx{$wqf^-+{Sphj6K27imz>wJkY^wJ4w!nh#%UTCbL1@C8vX1Q=66;+s-T z=+?%aEUa!E!hH*?+l4S(Coq$8w&ga6mz1-9lWRnuZ&@t7a2%mZ-3ASD*1HXrf5O4x zQ-lYX7~-8K>}TMyj(PN$Zqu0eEPRdt(eOEWx`>XQIq@6V+(3F8^6|!Yjk=@8x;jBb zV`M})DhP-x>Y{ADM<{@{odpgZvFp6U{>=0R%w|GVLdN4PBPEo<_6g}hc3 z`3kM9-ogYGy8W7W&Z?KB;bbg)6x=^fe3D=xfm9m*5SL&>vTo2gvotQEbMCsOm zniY{`d>Wn?J|`-4RsdHZX?$BrPpuDSp~?vHnnu8A!vM-OP(N3h*bRM=YnGv`>Rghl zYjc4mEf+IsrTh#(6!=(Gm7D?DW*TOo2ev`2q*6<7qo_aa8f#z$V=)2g6%5lVH07Eh zkeF^eg^h8Rdt--sJtQdi#t!wmG1hXgvOZ`ykoA^eo)*it)dC`qyn4UJ$; zftW@r*cqBGPl6TOM!MP+SFss5y_9Qrb>8`O4$@t>Z-kcBUyTWE#-T;6e5sj@%E{ znONj>22Ddv@yLNP3}|9iZ`Z98fEBjM&>ze@gJ`)q^^h!W(4ou^qtCH65Mo~n1CZD& z)4Lk+CoM8~iA!|!2@zjR!M-IuMRr@1IjpIYF^!FgPFUqLJYOPoRH+P!m8lFen#vf> z%2Wm!O?6C_czPXO*GqsUyY#acN`d%i8d`i@b;0ub#r6wj22&Z$?Sj~oy13y&*(J^y z^JD>Fr1m2LU(98p)QB?@jb01q8@|3OO9oHfEP#nGj^fWGgSg=_^9|ulMQ6G*m}IOl zF0?Gz8L%|iqX%?hDKw{q$`C9p*ww~@&T?@>yWUtil)&sW<-~To9@k54*!ih;oozQ7 z2nOi3>qdrkMyS8g@b$&a1qL_DhDtJGSk~}GnQ~9$6-(=s*@$YvA{$XHT%IVH)g%O` zEmo|72IUQ25e7UuPzj6RoRR#S1G_W?cmd-a6^0dJ#7XK5VdRgPgUn zg^P=lEjK18+q4%iOG}_+OI5a8Dth=4Yoc3J_VA-zcv2^bLZb+#-HB9aP?aZBks(yH zQ-L8kfd#!+*sc@t1>_;WYelb zq5|$w!AA=Tig+$0gsMV9a6A-ZHhBZ2LdI7W5>a=bNE;)eZAp{34gpVZbs!E=d%S!Gom|7%K*+_5U%04qy32yVet6MJjq zpkM<$Vq@vp(-p9J&l5Im*gB_SIfwC_2YP5+p zQg!7tt7IY>0NY{c%CbP@3AfyryYjx(T{)R5ShGeh8|?tWw39nP2vr>*1X<@K-ZXpz zqz=$r)d8Y$2*t??scL33W>vE|gI0so0BU><(%AM9c+6_{K6JC1y`O2Fj5H!?Z1?FN zLak9IWlCh~ie__>1fP0Ch7^}1I%g1`0x$}xEH+P6`v(D75BQK(p%2 zM`#?r%YSooJr@+T?~GOmRqYyrh>^r&KBCqJFhoA~-VpgXA)+*9D_q^KCOlUpw(yEs z*8r;qbOL4)#{pfnYi6F+fS$r8V=ZLkxt+stZfNzyu(kKfd|Hr2A!MHvPJOanH-2tX z%w&5k2E$$p1`zA|+n6Czh6U~+ny)gf%SZ0u-B!yU-t7bSUlc}qY~RrQ>5 z^fp;@;{y`~w&NIR1=JO*7G-5h57vQrmu8psBQz!Zy}(Yq&3l?JkRfkDSPg*jnFOCw zu#*70GlndWwQ>Wxx_slFCi>Gqe6~h9?Fpb;*W5(BwKe`qmYb}(Rs_xMb|b-?M}jwTFmS5o zHpRqTWQu@RbL}devh+2#F+w?cs4WSWZMqHCxotIf&7Ds#p9nXt_uhH6x5%%?^V>tc zyN~j_l1HC9I@{Z|W9OW6U#_{W^E+v3vX6V{_km zV)s{e&E2$E)$I9{J||_Z)cmkvsP9zw5w$!Q*wd#Kigm zj6aYZugX2Klw!Dlf9XN$^ystw1iNwhiN}P`|MKVM-&$7@j=z?_w?4MNSdosyzIQ(T z%;I2hA9o+SC!c+sUvuq;pN!VK|Gbtw+IMiX!ktbxEPTz~?e=i%!M*P5oFTuD+ZA-x z<39JG+wTr=O!gsn&^_$F9gE$`KjU^tyZKf%g+mH+?ASTVsFw2dn$|^wr0n zw_Cumwi%gf1n^koTO(JUeAUrso#4EO-lZdm`mjKadw^ISgVfbMI_zv0zJ&ztmt!w8 z8RQn)jz9V zM!yGm-;R&#Om0ODwbjZ?pd1*A-lOSPQ++MX_0H-8=XQ + + + DOTweenEditor + + + + + Contains compatibility methods taken from DemiEditor (for when DOTween is without it) + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Starts the update loop of tween in the editor. Has no effect during playMode. + + Eventual callback to call after every update + + + + Stops the update loop and clears the onPreviewUpdated callback. + + If TRUE also resets the tweened objects to their original state. + Note that this works by calling Rewind on all tweens, so it will work correctly + only if you have a single tween type per object and it wasn't killed + If TRUE also kills any cached tween + + + + Readies the tween for editor preview by setting its UpdateType to Manual plus eventual extra settings. + + The tween to ready + If TRUE (recommended) removes all callbacks (OnComplete/Rewind/etc) + If TRUE prevents the tween from being auto-killed at completion + If TRUE starts playing the tween immediately + + + Full major version + first minor version (ex: 2018.1f) + + + Major version + + + First minor version (ex: in 2018.1 it would be 1) + + + + Checks that the given editor texture use the correct import settings, + and applies them if they're incorrect. + + + + + Returns TRUE if setup is required + + + + + Returns TRUE if the file/directory at the given path exists. + + Path, relative to Unity's project folder + + + + + Converts the given project-relative path to a full path, + with backward (\) slashes). + + + + + Converts the given full path to a path usable with AssetDatabase methods + (relative to Unity's project folder, and with the correct Unity forward (/) slashes). + + + + + Connects to a asset. + If the asset already exists at the given path, loads it and returns it. + Otherwise, either returns NULL or automatically creates it before loading and returning it + (depending on the given parameters). + + Asset type + File path (relative to Unity's project folder) + If TRUE and the requested asset doesn't exist, forces its creation + + + + Full path for the given loaded assembly, assembly file included + + + + + Adds the given global define if it's not already present + + + + + Removes the given global define if it's present + + + + + Returns TRUE if the given global define is present in all the + or only in the given , depending on passed parameters. + + + to use. Leave NULL to check in all of them. + + + + Not used as menu item anymore, but as a utility function + + + + Full major version + first minor version (ex: 2018.1f) + + + Major version + + + First minor version (ex: in 2018.1 it would be 1) + + + diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML.meta b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML.meta new file mode 100644 index 0000000..510bb7a --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e2c6224d345d9249acfa6e8ef40bb2d +TextScriptImporter: + userData: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll new file mode 100644 index 0000000000000000000000000000000000000000..4911a86b3feaad8d13ba041e50ed77832d813651 GIT binary patch literal 70656 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%0Dh6|eO%in;`_q3bA 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll.meta b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll.meta new file mode 100644 index 0000000..fa695f8 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 45d5034162d6cf04dbe46da84fc7d074 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs.meta new file mode 100644 index 0000000..a81ba5f --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 0034ebae0c2a9344e897db1160d71b6d +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..d06fc7c3e49fb705b19f50a23884e11e08fd6e89 GIT binary patch literal 1565 zcmV+&2IBdNP)pK&q+iZU-R{R_dCD)yXSsA=iKiWUaHS%xglyYZad)#h+<5;*}0 zNm4;#XNMU$Zj;|vsJ23aE-5O{$8uo1iN`?c(v%ev86gvrQJJtDUgxox^bsB@>w%Sv@Z{F3?7c1><;yj*g<&fQ;rHj}CCd5!B9uJ9iB}?8sX9 z0l}mbA`+6NSzvKr7orW|#Qq*|(_H8{K}SN-b6PMMr68BfK|728UnV4rbuENZG2Z=Z5Wu9k@Z ztFhSr_^u&Go2vR`!G?lmnDf^U%@^vc&8BfCWA&5;S^i0KcuQ?}kJ(Z3^ukf69xF;y zhTjIduJg}*jhXlo$g+|CIjkSftK3odtF^Ij{rKV$Cnn9$)I>`OWpR2BZvMLfc!?KG z`Ygj57^xT!Rkoeb;;a>--p1*pKcW45EApC=r9;lR-6-kL1bPPs&3JrJ`3>IVgWG}u zrp-R@PdWz2X;89OBJXFclQSuKH%hu+=km#Rb8S^yF>)=)yvW|npJ`O9bTXp9hsHlb znp{n43g)Eywa^bS0=L=}#fV_6`pc{T=00UOIql`_gv<&0h%GG1sFbh_*L zqP^;2G6HL$uEjx);7q^Pe;Vac1Sb6of8vi>KZaIU-M!xHLy7h)J?TTTtlXuy)v(S-r9V9I7cw) zBJ@dWbWCbJy!KBwxl~8X#1q??E z(FRaBcRnf^OG3xEWE{XiDJhYPVBV54Q*B2`fK%)r4bJp zv@(2PX=l*%^bG!@&}Ku`gi%4ta5WNM0#2BfuE7?N_gS0ljFV#0yW1U1N=~9Q$*7V9 zs*5|&bg|QQt;WLQDrER5jfAhm2W6wJag5au!96_|(2Th-DB`E<_rUdkM#GW4COG!3 z`K~-?KL;C^l|r|5RUE^pEPvtTLR^K!B04D#hpLNGOCz;*Z|Rx&7b{!rLVU{NI)eH5 zyg0@a6A$elUi>gA6@P$cWD53gSzVnTr*}j6sd4;47Sd19E6U{>QXP%UxLJ2^hjTS@ z6ZIq2+r)$@>IAiS(jN5U4r-m;p98e&wn5+}NTri*S7~M1@c0mh@Mz$FrSMzj$u5?< P00000NkvXXu0mjftl$Bl literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png.meta new file mode 100644 index 0000000..c4bac15 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 8da095e39e9b4df488dfd436f81116d6 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 128 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd74c1a26df1a45564c7a0e21c62d0ef3af2fd1 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{!3Opi<85sBugD~Uq{1quc!H=FU zjv*3LlT#WP(iF^Cl2R3(u|Mi}s1fft&-^joZ3WZ(2Ug1Y!S$8-a*li}_21XqSnvJ# z@Y+`2=i8W`Zfg*cV81TuZmqUr`JI~8M}9x(m1v%HMLo`ySuokJ?%Vq7{C4$+ST-HH z5`RuO<@s#=8XoVy+lF)YEaxg?4vAr1(jlM1>Tx0PF<0}pFUf679a{7Ee==}5`qQz? zuIUa#(3byge21?t-^6oqTDwHc&iz0s`zDdQwtGKbESsPtIM1KwqFB4+nW=frYn!|7 zvs(U9y->(A=TFZ3t)>6Hv^;B{u+A(fd3smW;eIaTDS0KOITHVv7#gf%Y$mkMJ`MCd NgQu&X%Q~loCICTRfS>>X literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png.meta new file mode 100644 index 0000000..8712fc1 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png.meta @@ -0,0 +1,75 @@ +fileFormatVersion: 2 +guid: 61521df2e071645488ba3d05e49289ae +timeCreated: 1602317874 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png new file mode 100644 index 0000000000000000000000000000000000000000..e29d02fe18b777b1d316feb647b339803c5126de GIT binary patch literal 4409 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png.meta new file mode 100644 index 0000000..d5ba4f9 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 7051dba417b3d53409f2918f1ea4938d +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 256 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e48db5ef7a2b83eff50d6e3b5fe9ba3bcd4a5015 GIT binary patch literal 4429 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 TqmFO~00000NkvXXu0mjf{EM6C literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png.meta new file mode 100644 index 0000000..c72b886 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 519694efe2bb2914788b151fbd8c01f4 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d710d719075150879b1ee76680af87791c4d3b3 GIT binary patch literal 22787 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 QE#Li`lK-oJv9mh=KQ4fgsQ>@~ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg.meta new file mode 100644 index 0000000..e0ed7ab --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 78a59ca99f8987941adb61f9e14a06a7 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 512 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules.meta b/Assets/Plugins/Demigiant/DOTween/Modules.meta new file mode 100644 index 0000000..24cd2ac --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 143604b8bad857d47a6f7cc7a533e2dc +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs new file mode 100644 index 0000000..d958ae0 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs @@ -0,0 +1,198 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if true // MODULE_MARKER +using System; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Options; +using UnityEngine; +using UnityEngine.Audio; // Required for AudioMixer + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleAudio + { + #region Shortcuts + + #region Audio + + /// Tweens an AudioSource's volume to the given value. + /// Also stores the AudioSource as the tween's target so it can be used for filtered operations + /// The end value to reach (0 to 1)The duration of the tween + public static TweenerCore DOFade(this AudioSource target, float endValue, float duration) + { + if (endValue < 0) endValue = 0; + else if (endValue > 1) endValue = 1; + TweenerCore t = DOTween.To(() => target.volume, x => target.volume = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an AudioSource's pitch to the given value. + /// Also stores the AudioSource as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOPitch(this AudioSource target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.pitch, x => target.pitch = x, endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region AudioMixer + + /// Tweens an AudioMixer's exposed float to the given value. + /// Also stores the AudioMixer as the tween's target so it can be used for filtered operations. + /// Note that you need to manually expose a float in an AudioMixerGroup in order to be able to tween it from an AudioMixer. + /// Name given to the exposed float to set + /// The end value to reachThe duration of the tween + public static TweenerCore DOSetFloat(this AudioMixer target, string floatName, float endValue, float duration) + { + TweenerCore t = DOTween.To(()=> { + float currVal; + target.GetFloat(floatName, out currVal); + return currVal; + }, x=> target.SetFloat(floatName, x), endValue, duration); + t.SetTarget(target); + return t; + } + + #region Operation Shortcuts + + /// + /// Completes all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens completed + /// (meaning the tweens that don't have infinite loops and were not already complete) + /// + /// For Sequences only: if TRUE also internal Sequence callbacks will be fired, + /// otherwise they will be ignored + public static int DOComplete(this AudioMixer target, bool withCallbacks = false) + { + return DOTween.Complete(target, withCallbacks); + } + + /// + /// Kills all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens killed. + /// + /// If TRUE completes the tween before killing it + public static int DOKill(this AudioMixer target, bool complete = false) + { + return DOTween.Kill(target, complete); + } + + /// + /// Flips the direction (backwards if it was going forward or viceversa) of all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens flipped. + /// + public static int DOFlip(this AudioMixer target) + { + return DOTween.Flip(target); + } + + /// + /// Sends to the given position all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens involved. + /// + /// Time position to reach + /// (if higher than the whole tween duration the tween will simply reach its end) + /// If TRUE will play the tween after reaching the given position, otherwise it will pause it + public static int DOGoto(this AudioMixer target, float to, bool andPlay = false) + { + return DOTween.Goto(target, to, andPlay); + } + + /// + /// Pauses all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens paused. + /// + public static int DOPause(this AudioMixer target) + { + return DOTween.Pause(target); + } + + /// + /// Plays all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlay(this AudioMixer target) + { + return DOTween.Play(target); + } + + /// + /// Plays backwards all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlayBackwards(this AudioMixer target) + { + return DOTween.PlayBackwards(target); + } + + /// + /// Plays forward all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlayForward(this AudioMixer target) + { + return DOTween.PlayForward(target); + } + + /// + /// Restarts all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens restarted. + /// + public static int DORestart(this AudioMixer target) + { + return DOTween.Restart(target); + } + + /// + /// Rewinds all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens rewinded. + /// + public static int DORewind(this AudioMixer target) + { + return DOTween.Rewind(target); + } + + /// + /// Smoothly rewinds all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens rewinded. + /// + public static int DOSmoothRewind(this AudioMixer target) + { + return DOTween.SmoothRewind(target); + } + + /// + /// Toggles the paused state (plays if it was paused, pauses if it was playing) of all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens involved. + /// + public static int DOTogglePause(this AudioMixer target) + { + return DOTween.TogglePause(target); + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta new file mode 100644 index 0000000..fbd0262 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: b766d08851589514b97afb23c6f30a70 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs new file mode 100644 index 0000000..e806b3b --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs @@ -0,0 +1,146 @@ +using UnityEngine; + +#if false || EPO_DOTWEEN // MODULE_MARKER + +using EPOOutline; +using DG.Tweening.Plugins.Options; +using DG.Tweening; +using DG.Tweening.Core; + +namespace DG.Tweening +{ + public static class DOTweenModuleEPOOutline + { + public static int DOKill(this SerializedPass target, bool complete) + { + return DOTween.Kill(target, complete); + } + + public static TweenerCore DOFloat(this SerializedPass target, string propertyName, float endValue, float duration) + { + var tweener = DOTween.To(() => target.GetFloat(propertyName), x => target.SetFloat(propertyName, x), endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + public static TweenerCore DOFade(this SerializedPass target, string propertyName, float endValue, float duration) + { + var tweener = DOTween.ToAlpha(() => target.GetColor(propertyName), x => target.SetColor(propertyName, x), endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + public static TweenerCore DOColor(this SerializedPass target, string propertyName, Color endValue, float duration) + { + var tweener = DOTween.To(() => target.GetColor(propertyName), x => target.SetColor(propertyName, x), endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + public static TweenerCore DOVector(this SerializedPass target, string propertyName, Vector4 endValue, float duration) + { + var tweener = DOTween.To(() => target.GetVector(propertyName), x => target.SetVector(propertyName, x), endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + public static TweenerCore DOFloat(this SerializedPass target, int propertyId, float endValue, float duration) + { + var tweener = DOTween.To(() => target.GetFloat(propertyId), x => target.SetFloat(propertyId, x), endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + public static TweenerCore DOFade(this SerializedPass target, int propertyId, float endValue, float duration) + { + var tweener = DOTween.ToAlpha(() => target.GetColor(propertyId), x => target.SetColor(propertyId, x), endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + public static TweenerCore DOColor(this SerializedPass target, int propertyId, Color endValue, float duration) + { + var tweener = DOTween.To(() => target.GetColor(propertyId), x => target.SetColor(propertyId, x), endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + public static TweenerCore DOVector(this SerializedPass target, int propertyId, Vector4 endValue, float duration) + { + var tweener = DOTween.To(() => target.GetVector(propertyId), x => target.SetVector(propertyId, x), endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + public static int DOKill(this Outlinable.OutlineProperties target, bool complete = false) + { + return DOTween.Kill(target, complete); + } + + public static int DOKill(this Outliner target, bool complete = false) + { + return DOTween.Kill(target, complete); + } + + /// + /// Controls the alpha (transparency) of the outline + /// + public static TweenerCore DOFade(this Outlinable.OutlineProperties target, float endValue, float duration) + { + var tweener = DOTween.ToAlpha(() => target.Color, x => target.Color = x, endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + /// + /// Controls the color of the outline + /// + public static TweenerCore DOColor(this Outlinable.OutlineProperties target, Color endValue, float duration) + { + var tweener = DOTween.To(() => target.Color, x => target.Color = x, endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + /// + /// Controls the amount of blur applied to the outline + /// + public static TweenerCore DOBlurShift(this Outlinable.OutlineProperties target, float endValue, float duration, bool snapping = false) + { + var tweener = DOTween.To(() => target.BlurShift, x => target.BlurShift = x, endValue, duration); + tweener.SetOptions(snapping).SetTarget(target); + return tweener; + } + + /// + /// Controls the amount of blur applied to the outline + /// + public static TweenerCore DOBlurShift(this Outliner target, float endValue, float duration, bool snapping = false) + { + var tweener = DOTween.To(() => target.BlurShift, x => target.BlurShift = x, endValue, duration); + tweener.SetOptions(snapping).SetTarget(target); + return tweener; + } + + /// + /// Controls the amount of dilation applied to the outline + /// + public static TweenerCore DODilateShift(this Outlinable.OutlineProperties target, float endValue, float duration, bool snapping = false) + { + var tweener = DOTween.To(() => target.DilateShift, x => target.DilateShift = x, endValue, duration); + tweener.SetOptions(snapping).SetTarget(target); + return tweener; + } + + /// + /// Controls the amount of dilation applied to the outline + /// + public static TweenerCore DODilateShift(this Outliner target, float endValue, float duration, bool snapping = false) + { + var tweener = DOTween.To(() => target.DilateShift, x => target.DilateShift = x, endValue, duration); + tweener.SetOptions(snapping).SetTarget(target); + return tweener; + } + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs.meta new file mode 100644 index 0000000..1a9a303 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs.meta @@ -0,0 +1,19 @@ +fileFormatVersion: 2 +guid: e944529dcaee98f4e9498d80e541d93e +timeCreated: 1602593330 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs new file mode 100644 index 0000000..08b0700 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs @@ -0,0 +1,216 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if true // MODULE_MARKER +using System; +using DG.Tweening.Core; +using DG.Tweening.Core.Enums; +using DG.Tweening.Plugins; +using DG.Tweening.Plugins.Core.PathCore; +using DG.Tweening.Plugins.Options; +using UnityEngine; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModulePhysics + { + #region Shortcuts + + #region Rigidbody + + /// Tweens a Rigidbody's position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMove(this Rigidbody target, Vector3 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's X position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveX(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector3(endValue, 0, 0), duration); + t.SetOptions(AxisConstraint.X, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's Y position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveY(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector3(0, endValue, 0), duration); + t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's Z position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveZ(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector3(0, 0, endValue), duration); + t.SetOptions(AxisConstraint.Z, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's rotation to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// Rotation mode + public static TweenerCore DORotate(this Rigidbody target, Vector3 endValue, float duration, RotateMode mode = RotateMode.Fast) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, endValue, duration); + t.SetTarget(target); + t.plugOptions.rotateMode = mode; + return t; + } + + /// Tweens a Rigidbody's rotation so that it will look towards the given position. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The position to look atThe duration of the tween + /// Eventual axis constraint for the rotation + /// The vector that defines in which direction up is (default: Vector3.up) + public static TweenerCore DOLookAt(this Rigidbody target, Vector3 towards, float duration, AxisConstraint axisConstraint = AxisConstraint.None, Vector3? up = null) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, towards, duration) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetLookAt); + t.plugOptions.axisConstraint = axisConstraint; + t.plugOptions.up = (up == null) ? Vector3.up : (Vector3)up; + return t; + } + + #region Special + + /// Tweens a Rigidbody's position to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJump(this Rigidbody target, Vector3 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.position, target.MovePosition, new Vector3(0, jumpPower, 0), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(() => startPosY = target.position.y); + s.Append(DOTween.To(() => target.position, target.MovePosition, new Vector3(endValue.x, 0, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(DOTween.To(() => target.position, target.MovePosition, new Vector3(0, 0, endValue.z), duration) + .SetOptions(AxisConstraint.Z, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + yTween.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector3 pos = target.position; + pos.y += DOVirtual.EasedValue(0, offsetY, yTween.ElapsedPercentage(), Ease.OutQuad); + target.MovePosition(pos); + }); + return s; + } + + /// Tweens a Rigidbody's position through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations. + /// NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOPath. + /// The waypoints to go through + /// The duration of the tween + /// The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path (useless in case of Linear paths): higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOPath( + this Rigidbody target, Vector3[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, target.MovePosition, new Path(pathType, path, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + return t; + } + /// Tweens a Rigidbody's localPosition through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations + /// NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOLocalPath. + /// The waypoint to go through + /// The duration of the tween + /// The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path: higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOLocalPath( + this Rigidbody target, Vector3[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), new Path(pathType, path, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + // Used by path editor when creating the actual tween, so it can pass a pre-compiled path + internal static TweenerCore DOPath( + this Rigidbody target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, target.MovePosition, path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + return t; + } + internal static TweenerCore DOLocalPath( + this Rigidbody target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta new file mode 100644 index 0000000..bff89aa --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: dae9aa560b4242648a3affa2bfabc365 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs new file mode 100644 index 0000000..8ce2b56 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs @@ -0,0 +1,193 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if true // MODULE_MARKER +using System; +using DG.Tweening.Core; +using DG.Tweening.Plugins; +using DG.Tweening.Plugins.Core.PathCore; +using DG.Tweening.Plugins.Options; +using UnityEngine; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModulePhysics2D + { + #region Shortcuts + + #region Rigidbody2D Shortcuts + + /// Tweens a Rigidbody2D's position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMove(this Rigidbody2D target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody2D's X position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveX(this Rigidbody2D target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector2(endValue, 0), duration); + t.SetOptions(AxisConstraint.X, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody2D's Y position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveY(this Rigidbody2D target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector2(0, endValue), duration); + t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody2D's rotation to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DORotate(this Rigidbody2D target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, endValue, duration); + t.SetTarget(target); + return t; + } + + #region Special + + /// Tweens a Rigidbody2D's position to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations. + /// IMPORTANT: a rigidbody2D can't be animated in a jump arc using MovePosition, so the tween will directly set the position + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJump(this Rigidbody2D target, Vector2 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.position, x => target.position = x, new Vector2(0, jumpPower), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(() => startPosY = target.position.y); + s.Append(DOTween.To(() => target.position, x => target.position = x, new Vector2(endValue.x, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + yTween.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector3 pos = target.position; + pos.y += DOVirtual.EasedValue(0, offsetY, yTween.ElapsedPercentage(), Ease.OutQuad); + target.MovePosition(pos); + }); + return s; + } + + /// Tweens a Rigidbody2D's position through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations. + /// NOTE: to tween a Rigidbody2D correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOPath. + /// The waypoints to go through + /// The duration of the tween + /// The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path (useless in case of Linear paths): higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOPath( + this Rigidbody2D target, Vector2[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + int len = path.Length; + Vector3[] path3D = new Vector3[len]; + for (int i = 0; i < len; ++i) path3D[i] = path[i]; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, x => target.MovePosition(x), new Path(pathType, path3D, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody2D = true; + t.plugOptions.mode = pathMode; + return t; + } + /// Tweens a Rigidbody2D's localPosition through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// NOTE: to tween a Rigidbody2D correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOLocalPath. + /// The waypoint to go through + /// The duration of the tween + /// The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path: higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOLocalPath( + this Rigidbody2D target, Vector2[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + int len = path.Length; + Vector3[] path3D = new Vector3[len]; + for (int i = 0; i < len; ++i) path3D[i] = path[i]; + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), new Path(pathType, path3D, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody2D = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + // Used by path editor when creating the actual tween, so it can pass a pre-compiled path + internal static TweenerCore DOPath( + this Rigidbody2D target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, x => target.MovePosition(x), path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody2D = true; + t.plugOptions.mode = pathMode; + return t; + } + internal static TweenerCore DOLocalPath( + this Rigidbody2D target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody2D = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta new file mode 100644 index 0000000..5bb2332 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 230fe34542e175245ba74b4659dae700 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs new file mode 100644 index 0000000..72afb7b --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs @@ -0,0 +1,93 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if true // MODULE_MARKER +using System; +using UnityEngine; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Options; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleSprite + { + #region Shortcuts + + #region SpriteRenderer + + /// Tweens a SpriteRenderer's color to the given value. + /// Also stores the spriteRenderer as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this SpriteRenderer target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Material's alpha color to the given value. + /// Also stores the spriteRenderer as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this SpriteRenderer target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a SpriteRenderer's color using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this SpriteRenderer target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + s.SetTarget(target); + return s; + } + + #endregion + + #region Blendables + + #region SpriteRenderer + + /// Tweens a SpriteRenderer's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the SpriteRenderer as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this SpriteRenderer target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta new file mode 100644 index 0000000..f4d9279 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 188918ab119d93148aa0de59ccf5286b +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs new file mode 100644 index 0000000..2381f4c --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs @@ -0,0 +1,662 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if true // MODULE_MARKER + +using System; +using System.Globalization; +using UnityEngine; +using UnityEngine.UI; +using DG.Tweening.Core; +using DG.Tweening.Core.Enums; +using DG.Tweening.Plugins; +using DG.Tweening.Plugins.Options; +using Outline = UnityEngine.UI.Outline; +using Text = UnityEngine.UI.Text; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleUI + { + #region Shortcuts + + #region CanvasGroup + + /// Tweens a CanvasGroup's alpha color to the given value. + /// Also stores the canvasGroup as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this CanvasGroup target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.alpha, x => target.alpha = x, endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region Graphic + + /// Tweens an Graphic's color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this Graphic target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an Graphic's alpha color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this Graphic target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region Image + + /// Tweens an Image's color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this Image target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an Image's alpha color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this Image target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an Image's fillAmount to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reach (0 to 1)The duration of the tween + public static TweenerCore DOFillAmount(this Image target, float endValue, float duration) + { + if (endValue > 1) endValue = 1; + else if (endValue < 0) endValue = 0; + TweenerCore t = DOTween.To(() => target.fillAmount, x => target.fillAmount = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an Image's colors using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this Image target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + s.SetTarget(target); + return s; + } + + #endregion + + #region LayoutElement + + /// Tweens an LayoutElement's flexibleWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOFlexibleSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => new Vector2(target.flexibleWidth, target.flexibleHeight), x => { + target.flexibleWidth = x.x; + target.flexibleHeight = x.y; + }, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens an LayoutElement's minWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMinSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => new Vector2(target.minWidth, target.minHeight), x => { + target.minWidth = x.x; + target.minHeight = x.y; + }, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens an LayoutElement's preferredWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOPreferredSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => new Vector2(target.preferredWidth, target.preferredHeight), x => { + target.preferredWidth = x.x; + target.preferredHeight = x.y; + }, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + #endregion + + #region Outline + + /// Tweens a Outline's effectColor to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this Outline target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.effectColor, x => target.effectColor = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Outline's effectColor alpha to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this Outline target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.effectColor, x => target.effectColor = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Outline's effectDistance to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScale(this Outline target, Vector2 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.effectDistance, x => target.effectDistance = x, endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region RectTransform + + /// Tweens a RectTransform's anchoredPosition to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPosX(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(endValue, 0), duration); + t.SetOptions(AxisConstraint.X, snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPosY(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(0, endValue), duration); + t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's anchoredPosition3D to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos3D(this RectTransform target, Vector3 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition3D X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos3DX(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(endValue, 0, 0), duration); + t.SetOptions(AxisConstraint.X, snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition3D Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos3DY(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(0, endValue, 0), duration); + t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition3D Z to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos3DZ(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(0, 0, endValue), duration); + t.SetOptions(AxisConstraint.Z, snapping).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's anchorMax to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorMax(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchorMax, x => target.anchorMax = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's anchorMin to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorMin(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchorMin, x => target.anchorMin = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's pivot to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOPivot(this RectTransform target, Vector2 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.pivot, x => target.pivot = x, endValue, duration); + t.SetTarget(target); + return t; + } + /// Tweens a RectTransform's pivot X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOPivotX(this RectTransform target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.pivot, x => target.pivot = x, new Vector2(endValue, 0), duration); + t.SetOptions(AxisConstraint.X).SetTarget(target); + return t; + } + /// Tweens a RectTransform's pivot Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOPivotY(this RectTransform target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.pivot, x => target.pivot = x, new Vector2(0, endValue), duration); + t.SetOptions(AxisConstraint.Y).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's sizeDelta to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOSizeDelta(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.sizeDelta, x => target.sizeDelta = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Punches a RectTransform's anchoredPosition towards the given direction and then back to the starting one + /// as if it was connected to the starting position via an elastic. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The direction and strength of the punch (added to the RectTransform's current position) + /// The duration of the tween + /// Indicates how much will the punch vibrate + /// Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards. + /// 1 creates a full oscillation between the punch direction and the opposite direction, + /// while 0 oscillates only between the punch and the start position + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOPunchAnchorPos(this RectTransform target, Vector2 punch, float duration, int vibrato = 10, float elasticity = 1, bool snapping = false) + { + return DOTween.Punch(() => target.anchoredPosition, x => target.anchoredPosition = x, punch, duration, vibrato, elasticity) + .SetTarget(target).SetOptions(snapping); + } + + /// Shakes a RectTransform's anchoredPosition with the given values. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The shake strength + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the tween will smoothly snap all values to integers + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + /// Randomness mode + public static Tweener DOShakeAnchorPos(this RectTransform target, float duration, float strength = 100, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true, ShakeRandomnessMode randomnessMode = ShakeRandomnessMode.Full) + { + return DOTween.Shake(() => target.anchoredPosition, x => target.anchoredPosition = x, duration, strength, vibrato, randomness, true, fadeOut, randomnessMode) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetShake).SetOptions(snapping); + } + /// Shakes a RectTransform's anchoredPosition with the given values. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The shake strength on each axis + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the tween will smoothly snap all values to integers + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + /// Randomness mode + public static Tweener DOShakeAnchorPos(this RectTransform target, float duration, Vector2 strength, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true, ShakeRandomnessMode randomnessMode = ShakeRandomnessMode.Full) + { + return DOTween.Shake(() => target.anchoredPosition, x => target.anchoredPosition = x, duration, strength, vibrato, randomness, fadeOut, randomnessMode) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetShake).SetOptions(snapping); + } + + #region Special + + /// Tweens a RectTransform's anchoredPosition to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJumpAnchorPos(this RectTransform target, Vector2 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + + // Separate Y Tween so we can elaborate elapsedPercentage on that insted of on the Sequence + // (in case users add a delay or other elements to the Sequence) + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(0, jumpPower), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(()=> startPosY = target.anchoredPosition.y); + s.Append(DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(endValue.x, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + s.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector2 pos = target.anchoredPosition; + pos.y += DOVirtual.EasedValue(0, offsetY, s.ElapsedDirectionalPercentage(), Ease.OutQuad); + target.anchoredPosition = pos; + }); + return s; + } + + #endregion + + #endregion + + #region ScrollRect + + /// Tweens a ScrollRect's horizontal/verticalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DONormalizedPos(this ScrollRect target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => new Vector2(target.horizontalNormalizedPosition, target.verticalNormalizedPosition), + x => { + target.horizontalNormalizedPosition = x.x; + target.verticalNormalizedPosition = x.y; + }, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + /// Tweens a ScrollRect's horizontalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOHorizontalNormalizedPos(this ScrollRect target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.horizontalNormalizedPosition, x => target.horizontalNormalizedPosition = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + /// Tweens a ScrollRect's verticalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOVerticalNormalizedPos(this ScrollRect target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.verticalNormalizedPosition, x => target.verticalNormalizedPosition = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + #endregion + + #region Slider + + /// Tweens a Slider's value to the given value. + /// Also stores the Slider as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOValue(this Slider target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.value, x => target.value = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + #endregion + + #region Text + + /// Tweens a Text's color to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this Text target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// + /// Tweens a Text's text from one integer to another, with options for thousands separators + /// + /// The value to start from + /// The end value to reach + /// The duration of the tween + /// If TRUE (default) also adds thousands separators + /// The to use (InvariantCulture if NULL) + public static TweenerCore DOCounter( + this Text target, int fromValue, int endValue, float duration, bool addThousandsSeparator = true, CultureInfo culture = null + ){ + int v = fromValue; + CultureInfo cInfo = !addThousandsSeparator ? null : culture ?? CultureInfo.InvariantCulture; + TweenerCore t = DOTween.To(() => v, x => { + v = x; + target.text = addThousandsSeparator + ? v.ToString("N0", cInfo) + : v.ToString(); + }, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Text's alpha color to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this Text target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Text's text to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end string to tween toThe duration of the tween + /// If TRUE (default), rich text will be interpreted correctly while animated, + /// otherwise all tags will be considered as normal text + /// The type of scramble mode to use, if any + /// A string containing the characters to use for scrambling. + /// Use as many characters as possible (minimum 10) because DOTween uses a fast scramble mode which gives better results with more characters. + /// Leave it to NULL (default) to use default ones + public static TweenerCore DOText(this Text target, string endValue, float duration, bool richTextEnabled = true, ScrambleMode scrambleMode = ScrambleMode.None, string scrambleChars = null) + { + if (endValue == null) { + if (Debugger.logPriority > 0) Debugger.LogWarning("You can't pass a NULL string to DOText: an empty string will be used instead to avoid errors"); + endValue = ""; + } + TweenerCore t = DOTween.To(() => target.text, x => target.text = x, endValue, duration); + t.SetOptions(richTextEnabled, scrambleMode, scrambleChars) + .SetTarget(target); + return t; + } + + #endregion + + #region Blendables + + #region Graphic + + /// Tweens a Graphic's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Graphic as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Graphic target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #region Image + + /// Tweens a Image's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Image as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Image target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #region Text + + /// Tweens a Text's color BY the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Text target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #endregion + + #region Shapes + + /// Tweens a RectTransform's anchoredPosition so that it draws a circle around the given center. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations. + /// IMPORTANT: SetFrom(value) requires a instead of a float, where the X property represents the "from degrees value" + /// Circle-center/pivot around which to rotate (in UI anchoredPosition coordinates) + /// The end value degrees to reach (to rotate counter-clockwise pass a negative value) + /// The duration of the tween + /// If TRUE the coordinates will be considered as relative to the target's current anchoredPosition + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOShapeCircle( + this RectTransform target, Vector2 center, float endValueDegrees, float duration, bool relativeCenter = false, bool snapping = false + ) + { + TweenerCore t = DOTween.To( + CirclePlugin.Get(), () => target.anchoredPosition, x => target.anchoredPosition = x, center, duration + ); + t.SetOptions(endValueDegrees, relativeCenter, snapping).SetTarget(target); + return t; + } + + #endregion + + #endregion + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + public static class Utils + { + /// + /// Converts the anchoredPosition of the first RectTransform to the second RectTransform, + /// taking into consideration offset, anchors and pivot, and returns the new anchoredPosition + /// + public static Vector2 SwitchToRectTransform(RectTransform from, RectTransform to) + { + Vector2 localPoint; + Vector2 fromPivotDerivedOffset = new Vector2(from.rect.width * 0.5f + from.rect.xMin, from.rect.height * 0.5f + from.rect.yMin); + Vector2 screenP = RectTransformUtility.WorldToScreenPoint(null, from.position); + screenP += fromPivotDerivedOffset; + RectTransformUtility.ScreenPointToLocalPointInRectangle(to, screenP, null, out localPoint); + Vector2 pivotDerivedOffset = new Vector2(to.rect.width * 0.5f + to.rect.xMin, to.rect.height * 0.5f + to.rect.yMin); + return to.anchoredPosition + localPoint - pivotDerivedOffset; + } + } + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta new file mode 100644 index 0000000..9fcefb3 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: a060394c03331a64392db53a10e7f2d1 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs new file mode 100644 index 0000000..8f818ba --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs @@ -0,0 +1,389 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +using System; +using UnityEngine; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Options; +//#if UNITY_2018_1_OR_NEWER && (NET_4_6 || NET_STANDARD_2_0) +//using Task = System.Threading.Tasks.Task; +//#endif + +#pragma warning disable 1591 +namespace DG.Tweening +{ + /// + /// Shortcuts/functions that are not strictly related to specific Modules + /// but are available only on some Unity versions + /// + public static class DOTweenModuleUnityVersion + { + #region Material + + /// Tweens a Material's color using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this Material target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + s.SetTarget(target); + return s; + } + /// Tweens a Material's named color property using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to use + /// The name of the material property to tween (like _Tint or _SpecColor) + /// The duration of the tween + public static Sequence DOGradientColor(this Material target, Gradient gradient, string property, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.SetColor(property, c.color); + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, property, colorDuration).SetEase(Ease.Linear)); + } + s.SetTarget(target); + return s; + } + + #endregion + + #region CustomYieldInstructions + + /// + /// Returns a that waits until the tween is killed or complete. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForCompletion(true); + /// + public static CustomYieldInstruction WaitForCompletion(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForCompletion(t); + } + + /// + /// Returns a that waits until the tween is killed or rewinded. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForRewind(); + /// + public static CustomYieldInstruction WaitForRewind(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForRewind(t); + } + + /// + /// Returns a that waits until the tween is killed. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForKill(); + /// + public static CustomYieldInstruction WaitForKill(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForKill(t); + } + + /// + /// Returns a that waits until the tween is killed or has gone through the given amount of loops. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForElapsedLoops(2); + /// + /// Elapsed loops to wait for + public static CustomYieldInstruction WaitForElapsedLoops(this Tween t, int elapsedLoops, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForElapsedLoops(t, elapsedLoops); + } + + /// + /// Returns a that waits until the tween is killed + /// or has reached the given time position (loops included, delays excluded). + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForPosition(2.5f); + /// + /// Position (loops included, delays excluded) to wait for + public static CustomYieldInstruction WaitForPosition(this Tween t, float position, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForPosition(t, position); + } + + /// + /// Returns a that waits until the tween is killed or started + /// (meaning when the tween is set in a playing state the first time, after any eventual delay). + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForStart(); + /// + public static CustomYieldInstruction WaitForStart(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForStart(t); + } + + #endregion + +#if UNITY_2018_1_OR_NEWER + #region Unity 2018.1 or Newer + + #region Material + + /// Tweens a Material's named texture offset property with the given ID to the given value. + /// Also stores the material as the tween's target so it can be used for filtered operations + /// The end value to reach + /// The ID of the material property to tween (also called nameID in Unity's manual) + /// The duration of the tween + public static TweenerCore DOOffset(this Material target, Vector2 endValue, int propertyID, float duration) + { + if (!target.HasProperty(propertyID)) { + if (Debugger.logPriority > 0) Debugger.LogMissingMaterialProperty(propertyID); + return null; + } + TweenerCore t = DOTween.To(() => target.GetTextureOffset(propertyID), x => target.SetTextureOffset(propertyID, x), endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Material's named texture scale property with the given ID to the given value. + /// Also stores the material as the tween's target so it can be used for filtered operations + /// The end value to reach + /// The ID of the material property to tween (also called nameID in Unity's manual) + /// The duration of the tween + public static TweenerCore DOTiling(this Material target, Vector2 endValue, int propertyID, float duration) + { + if (!target.HasProperty(propertyID)) { + if (Debugger.logPriority > 0) Debugger.LogMissingMaterialProperty(propertyID); + return null; + } + TweenerCore t = DOTween.To(() => target.GetTextureScale(propertyID), x => target.SetTextureScale(propertyID, x), endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region .NET 4.6 or Newer + +#if UNITY_2018_1_OR_NEWER && (NET_4_6 || NET_STANDARD_2_0) + + #region Async Instructions + + /// + /// Returns an async that waits until the tween is killed or complete. + /// It can be used inside an async operation. + /// Example usage:await myTween.WaitForCompletion(); + /// + public static async System.Threading.Tasks.Task AsyncWaitForCompletion(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && !t.IsComplete()) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed or rewinded. + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForRewind(); + /// + public static async System.Threading.Tasks.Task AsyncWaitForRewind(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && (!t.playedOnce || t.position * (t.CompletedLoops() + 1) > 0)) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed. + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForKill(); + /// + public static async System.Threading.Tasks.Task AsyncWaitForKill(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed or has gone through the given amount of loops. + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForElapsedLoops(); + /// + /// Elapsed loops to wait for + public static async System.Threading.Tasks.Task AsyncWaitForElapsedLoops(this Tween t, int elapsedLoops) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && t.CompletedLoops() < elapsedLoops) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed or started + /// (meaning when the tween is set in a playing state the first time, after any eventual delay). + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForPosition(); + /// + /// Position (loops included, delays excluded) to wait for + public static async System.Threading.Tasks.Task AsyncWaitForPosition(this Tween t, float position) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && t.position * (t.CompletedLoops() + 1) < position) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed. + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForKill(); + /// + public static async System.Threading.Tasks.Task AsyncWaitForStart(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && !t.playedOnce) await System.Threading.Tasks.Task.Yield(); + } + + #endregion +#endif + + #endregion + + #endregion +#endif + } + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ CLASSES █████████████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + public static class DOTweenCYInstruction + { + public class WaitForCompletion : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && !t.IsComplete(); + }} + readonly Tween t; + public WaitForCompletion(Tween tween) + { + t = tween; + } + } + + public class WaitForRewind : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && (!t.playedOnce || t.position * (t.CompletedLoops() + 1) > 0); + }} + readonly Tween t; + public WaitForRewind(Tween tween) + { + t = tween; + } + } + + public class WaitForKill : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active; + }} + readonly Tween t; + public WaitForKill(Tween tween) + { + t = tween; + } + } + + public class WaitForElapsedLoops : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && t.CompletedLoops() < elapsedLoops; + }} + readonly Tween t; + readonly int elapsedLoops; + public WaitForElapsedLoops(Tween tween, int elapsedLoops) + { + t = tween; + this.elapsedLoops = elapsedLoops; + } + } + + public class WaitForPosition : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && t.position * (t.CompletedLoops() + 1) < position; + }} + readonly Tween t; + readonly float position; + public WaitForPosition(Tween tween, float position) + { + t = tween; + this.position = position; + } + } + + public class WaitForStart : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && !t.playedOnce; + }} + readonly Tween t; + public WaitForStart(Tween tween) + { + t = tween; + } + } + } +} diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta new file mode 100644 index 0000000..87e0239 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 63c02322328255542995bd02b47b0457 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs new file mode 100644 index 0000000..12a365d --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs @@ -0,0 +1,167 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +using System; +using System.Reflection; +using UnityEngine; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Core.PathCore; +using DG.Tweening.Plugins.Options; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + /// + /// Utility functions that deal with available Modules. + /// Modules defines: + /// - DOTAUDIO + /// - DOTPHYSICS + /// - DOTPHYSICS2D + /// - DOTSPRITE + /// - DOTUI + /// Extra defines set and used for implementation of external assets: + /// - DOTWEEN_TMP ► TextMesh Pro + /// - DOTWEEN_TK2D ► 2D Toolkit + /// + public static class DOTweenModuleUtils + { + static bool _initialized; + + #region Reflection + + /// + /// Called via Reflection by DOTweenComponent on Awake + /// +#if UNITY_2018_1_OR_NEWER + [UnityEngine.Scripting.Preserve] +#endif + public static void Init() + { + if (_initialized) return; + + _initialized = true; + DOTweenExternalCommand.SetOrientationOnPath += Physics.SetOrientationOnPath; + +#if UNITY_EDITOR +#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1 + UnityEditor.EditorApplication.playmodeStateChanged += PlaymodeStateChanged; +#else + UnityEditor.EditorApplication.playModeStateChanged += PlaymodeStateChanged; +#endif +#endif + } + +#if UNITY_2018_1_OR_NEWER +#pragma warning disable + [UnityEngine.Scripting.Preserve] + // Just used to preserve methods when building, never called + static void Preserver() + { + Assembly[] loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); + MethodInfo mi = typeof(MonoBehaviour).GetMethod("Stub"); + } +#pragma warning restore +#endif + + #endregion + +#if UNITY_EDITOR + // Fires OnApplicationPause in DOTweenComponent even when Editor is paused (otherwise it's only fired at runtime) +#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1 + static void PlaymodeStateChanged() + #else + static void PlaymodeStateChanged(UnityEditor.PlayModeStateChange state) +#endif + { + if (DOTween.instance == null) return; + DOTween.instance.OnApplicationPause(UnityEditor.EditorApplication.isPaused); + } +#endif + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + public static class Physics + { + // Called via DOTweenExternalCommand callback + public static void SetOrientationOnPath(PathOptions options, Tween t, Quaternion newRot, Transform trans) + { +#if true // PHYSICS_MARKER + if (options.isRigidbody) ((Rigidbody)t.target).rotation = newRot; + else trans.rotation = newRot; +#else + trans.rotation = newRot; +#endif + } + + // Returns FALSE if the DOTween's Physics2D Module is disabled, or if there's no Rigidbody2D attached + public static bool HasRigidbody2D(Component target) + { +#if true // PHYSICS2D_MARKER + return target.GetComponent() != null; +#else + return false; +#endif + } + + #region Called via Reflection + + + // Called via Reflection by DOTweenPathInspector + // Returns FALSE if the DOTween's Physics Module is disabled, or if there's no rigidbody attached +#if UNITY_2018_1_OR_NEWER + [UnityEngine.Scripting.Preserve] +#endif + public static bool HasRigidbody(Component target) + { +#if true // PHYSICS_MARKER + return target.GetComponent() != null; +#else + return false; +#endif + } + + // Called via Reflection by DOTweenPath +#if UNITY_2018_1_OR_NEWER + [UnityEngine.Scripting.Preserve] +#endif + public static TweenerCore CreateDOTweenPathTween( + MonoBehaviour target, bool tweenRigidbody, bool isLocal, Path path, float duration, PathMode pathMode + ){ + TweenerCore t = null; + bool rBodyFoundAndTweened = false; +#if true // PHYSICS_MARKER + if (tweenRigidbody) { + Rigidbody rBody = target.GetComponent(); + if (rBody != null) { + rBodyFoundAndTweened = true; + t = isLocal + ? rBody.DOLocalPath(path, duration, pathMode) + : rBody.DOPath(path, duration, pathMode); + } + } +#endif +#if true // PHYSICS2D_MARKER + if (!rBodyFoundAndTweened && tweenRigidbody) { + Rigidbody2D rBody2D = target.GetComponent(); + if (rBody2D != null) { + rBodyFoundAndTweened = true; + t = isLocal + ? rBody2D.DOLocalPath(path, duration, pathMode) + : rBody2D.DOPath(path, duration, pathMode); + } + } +#endif + if (!rBodyFoundAndTweened) { + t = isLocal + ? target.transform.DOLocalPath(path, duration, pathMode) + : target.transform.DOPath(path, duration, pathMode); + } + return t; + } + + #endregion + } + } +} diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta new file mode 100644 index 0000000..b2d42a2 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 7bcaf917d9cf5b84090421a5a2abe42e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs + uploadId: 642066 diff --git a/Assets/Plugins/Demigiant/DOTween/readme.txt b/Assets/Plugins/Demigiant/DOTween/readme.txt new file mode 100644 index 0000000..37ff7ef --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/readme.txt @@ -0,0 +1,29 @@ +DOTween and DOTween Pro are copyright (c) 2014-2018 Daniele Giardini - Demigiant + +// IMPORTANT!!! ///////////////////////////////////////////// +// Upgrading DOTween from versions older than 1.2.000 /////// +// (or DOTween Pro older than 1.0.000) ////////////////////// +------------------------------------------------------------- +If you're upgrading your project from a version of DOTween older than 1.2.000 (or DOTween Pro older than 1.0.000) please follow these instructions carefully. +1) Import the new version in the same folder as the previous one, overwriting old files. A lot of errors will appear but don't worry +2) Close and reopen Unity (and your project). This is fundamental: skipping this step will cause a bloodbath +3) Open DOTween's Utility Panel (Tools > Demigiant > DOTween Utility Panel) if it doesn't open automatically, then press "Setup DOTween...": this will run the upgrade setup +4) From the Add/Remove Modules panel that opens, activate/deactivate Modules for Unity systems and for external assets (Pro version only) + +// GET STARTED ////////////////////////////////////////////// + +- After importing a new DOTween update, select DOTween's Utility Panel from the "Tools/Demigiant" menu (if it doesn't open automatically) and press the "Setup DOTween..." button to activate/deactivate Modules. You can also access a Preferences Tab from there to choose default settings for DOTween. +- In your code, add "using DG.Tweening" to each class where you want to use DOTween. +- You're ready to tween. Check out the links below for full documentation and license info. + + +// LINKS /////////////////////////////////////////////////////// + +DOTween website (documentation, examples, etc): http://dotween.demigiant.com +DOTween license: http://dotween.demigiant.com/license.php +DOTween repository (Google Code): https://code.google.com/p/dotween/ +Demigiant website (documentation, examples, etc): http://www.demigiant.com + +// NOTES ////////////////////////////////////////////////////// + +- DOTween's Utility Panel can be found under "Tools > Demigiant > DOTween Utility Panel" and also contains other useful options, plus a tab to set DOTween's preferences \ No newline at end of file diff --git a/Assets/Plugins/Demigiant/DOTween/readme.txt.meta b/Assets/Plugins/Demigiant/DOTween/readme.txt.meta new file mode 100644 index 0000000..05c14b3 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/readme.txt.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fccfc62abf2eb0a4db614853430894fd +TextScriptImporter: + userData: +AssetOrigin: + serializedVersion: 1 + productId: 27676 + packageName: DOTween (HOTween v2) + packageVersion: 1.2.765 + assetPath: Assets/Plugins/Demigiant/DOTween/readme.txt + uploadId: 642066 diff --git a/Assets/Readme.asset b/Assets/Readme.asset new file mode 100644 index 0000000..77c2f83 --- /dev/null +++ b/Assets/Readme.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fcf7219bab7fe46a1ad266029b2fee19, type: 3} + m_Name: Readme + m_EditorClassIdentifier: + icon: {fileID: 2800000, guid: 727a75301c3d24613a3ebcec4a24c2c8, type: 3} + title: URP Empty Template + sections: + - heading: Welcome to the Universal Render Pipeline + text: This template includes the settings and assets you need to start creating with the Universal Render Pipeline. + linkText: + url: + - heading: URP Documentation + text: + linkText: Read more about URP + url: https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@latest + - heading: Forums + text: + linkText: Get answers and support + url: https://forum.unity.com/forums/universal-render-pipeline.383/ + - heading: Report bugs + text: + linkText: Submit a report + url: https://unity3d.com/unity/qa/bug-reporting + loadedLayout: 1 diff --git a/Assets/Readme.asset.meta b/Assets/Readme.asset.meta new file mode 100644 index 0000000..ab3ad45 --- /dev/null +++ b/Assets/Readme.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8105016687592461f977c054a80ce2f2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources.meta b/Assets/Resources.meta new file mode 100644 index 0000000..896cfe9 --- /dev/null +++ b/Assets/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c0ba7326867e84fe686cd6a4c6c46389 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/DOTweenSettings.asset b/Assets/Resources/DOTweenSettings.asset new file mode 100644 index 0000000..f93450b --- /dev/null +++ b/Assets/Resources/DOTweenSettings.asset @@ -0,0 +1,54 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 16995157, guid: a811bde74b26b53498b4f6d872b09b6d, type: 3} + m_Name: DOTweenSettings + m_EditorClassIdentifier: DOTween.dll::DG.Tweening.Core.DOTweenSettings + useSafeMode: 1 + safeModeOptions: + logBehaviour: 2 + nestedTweenFailureBehaviour: 0 + timeScale: 1 + unscaledTimeScale: 1 + useSmoothDeltaTime: 0 + maxSmoothUnscaledTime: 0.15 + rewindCallbackMode: 0 + showUnityEditorReport: 0 + logBehaviour: 0 + drawGizmos: 1 + defaultRecyclable: 0 + defaultAutoPlay: 3 + defaultUpdateType: 0 + defaultTimeScaleIndependent: 0 + defaultEaseType: 6 + defaultEaseOvershootOrAmplitude: 1.70158 + defaultEasePeriod: 0 + defaultAutoKill: 1 + defaultLoopType: 0 + debugMode: 0 + debugStoreTargetId: 1 + showPreviewPanel: 1 + storeSettingsLocation: 0 + modules: + showPanel: 0 + audioEnabled: 1 + physicsEnabled: 1 + physics2DEnabled: 1 + spriteEnabled: 1 + uiEnabled: 1 + textMeshProEnabled: 0 + tk2DEnabled: 0 + deAudioEnabled: 0 + deUnityExtendedEnabled: 0 + epoOutlineEnabled: 1 + createASMDEF: 0 + showPlayingTweens: 0 + showPausedTweens: 0 diff --git a/Assets/Resources/DOTweenSettings.asset.meta b/Assets/Resources/DOTweenSettings.asset.meta new file mode 100644 index 0000000..93cca93 --- /dev/null +++ b/Assets/Resources/DOTweenSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e0bddf0f5acee4c6d89f42a09b35e9e0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes.meta b/Assets/Scenes.meta new file mode 100644 index 0000000..e59fb45 --- /dev/null +++ b/Assets/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c53962885c2c4f449125a979d6ad240 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity new file mode 100644 index 0000000..1c63aa8 --- /dev/null +++ b/Assets/Scenes/SampleScene.unity @@ -0,0 +1,432 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &330585543 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 330585546} + - component: {fileID: 330585545} + - component: {fileID: 330585544} + - component: {fileID: 330585547} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &330585544 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 330585543} + m_Enabled: 1 +--- !u!20 &330585545 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 330585543} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + 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!4 &330585546 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 330585543} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &330585547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 330585543} + 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: + quality: 3 + frameInfluence: 0.1 + jitterScale: 1 + mipBias: 0 + varianceClampScale: 0.9 + contrastAdaptiveSharpening: 0 +--- !u!1 &410087039 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 410087041} + - component: {fileID: 410087040} + - component: {fileID: 410087042} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &410087040 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 410087039} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 2 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 5000 + m_UseColorTemperature: 1 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &410087041 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 410087039} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!114 &410087042 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 410087039} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Version: 3 + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_LightLayerMask: 1 + m_RenderingLayers: 1 + m_CustomShadowLayers: 0 + m_ShadowLayerMask: 1 + m_ShadowRenderingLayers: 1 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 1 +--- !u!1 &832575517 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 832575519} + - component: {fileID: 832575518} + m_Layer: 0 + m_Name: Global Volume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &832575518 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 832575517} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IsGlobal: 1 + priority: 0 + blendDistance: 0 + weight: 1 + sharedProfile: {fileID: 11400000, guid: 10fc4df2da32a41aaa32d77bc913491c, type: 2} +--- !u!4 &832575519 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 832575517} + 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: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 330585546} + - {fileID: 410087041} + - {fileID: 832575519} diff --git a/Assets/Scenes/SampleScene.unity.meta b/Assets/Scenes/SampleScene.unity.meta new file mode 100644 index 0000000..9531828 --- /dev/null +++ b/Assets/Scenes/SampleScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 99c9720ab356a0642a771bea13969a05 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings.meta b/Assets/Settings.meta new file mode 100644 index 0000000..39b94dd --- /dev/null +++ b/Assets/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 709f11a7f3c4041caa4ef136ea32d874 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/DefaultVolumeProfile.asset b/Assets/Settings/DefaultVolumeProfile.asset new file mode 100644 index 0000000..6fb1822 --- /dev/null +++ b/Assets/Settings/DefaultVolumeProfile.asset @@ -0,0 +1,982 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-9167874883656233139 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5485954d14dfb9a4c8ead8edb0ded5b1, type: 3} + m_Name: LiftGammaGain + m_EditorClassIdentifier: + active: 1 + lift: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + gamma: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + gain: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} +--- !u!114 &-8270506406425502121 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 70afe9e12c7a7ed47911bb608a23a8ff, type: 3} + m_Name: SplitToning + m_EditorClassIdentifier: + active: 1 + shadows: + m_OverrideState: 1 + m_Value: {r: 0.5, g: 0.5, b: 0.5, a: 1} + highlights: + m_OverrideState: 1 + m_Value: {r: 0.5, g: 0.5, b: 0.5, a: 1} + balance: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &-8104416584915340131 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: CopyPasteTestComponent2 + m_EditorClassIdentifier: Unity.RenderPipelines.Core.Editor.Tests:UnityEditor.Rendering.Tests:VolumeComponentCopyPasteTests/CopyPasteTestComponent2 + active: 1 + p1: + m_OverrideState: 1 + m_Value: 0 + p2: + m_OverrideState: 1 + m_Value: 0 + p21: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &-7750755424749557576 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 60f3b30c03e6ba64d9a27dc9dba8f28d, type: 3} + m_Name: OutlineVolumeComponent + m_EditorClassIdentifier: + active: 1 + Enabled: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &-7743500325797982168 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ccf1aba9553839d41ae37dd52e9ebcce, type: 3} + m_Name: MotionBlur + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 1 + m_Value: 0 + quality: + m_OverrideState: 1 + m_Value: 0 + intensity: + m_OverrideState: 1 + m_Value: 0 + clamp: + m_OverrideState: 1 + m_Value: 0.05 +--- !u!114 &-7274224791359825572 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0fd9ee276a1023e439cf7a9c393195fa, type: 3} + m_Name: TestAnimationCurveVolumeComponent + m_EditorClassIdentifier: + active: 1 + testParameter: + m_OverrideState: 1 + m_Value: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0.5 + value: 10 + inSlope: 0 + outSlope: 10 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 15 + inSlope: 10 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &-6335409530604852063 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66f335fb1ffd8684294ad653bf1c7564, type: 3} + m_Name: ColorAdjustments + m_EditorClassIdentifier: + active: 1 + postExposure: + m_OverrideState: 1 + m_Value: 0 + contrast: + m_OverrideState: 1 + m_Value: 0 + colorFilter: + m_OverrideState: 1 + m_Value: {r: 1, g: 1, b: 1, a: 1} + hueShift: + m_OverrideState: 1 + m_Value: 0 + saturation: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &-6288072647309666549 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 29fa0085f50d5e54f8144f766051a691, type: 3} + m_Name: FilmGrain + m_EditorClassIdentifier: + active: 1 + type: + m_OverrideState: 1 + m_Value: 0 + intensity: + m_OverrideState: 1 + m_Value: 0 + response: + m_OverrideState: 1 + m_Value: 0.8 + texture: + m_OverrideState: 1 + m_Value: {fileID: 0} +--- !u!114 &-5520245016509672950 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 97c23e3b12dc18c42a140437e53d3951, type: 3} + m_Name: Tonemapping + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 1 + m_Value: 0 + neutralHDRRangeReductionMode: + m_OverrideState: 1 + m_Value: 2 + acesPreset: + m_OverrideState: 1 + m_Value: 3 + hueShiftAmount: + m_OverrideState: 1 + m_Value: 0 + detectPaperWhite: + m_OverrideState: 1 + m_Value: 0 + paperWhite: + m_OverrideState: 1 + m_Value: 300 + detectBrightnessLimits: + m_OverrideState: 1 + m_Value: 1 + minNits: + m_OverrideState: 1 + m_Value: 0.005 + maxNits: + m_OverrideState: 1 + m_Value: 1000 +--- !u!114 &-5360449096862653589 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: VolumeComponentSupportedEverywhere + m_EditorClassIdentifier: Unity.RenderPipelines.Core.Editor.Tests:UnityEngine.Rendering.Tests:VolumeComponentEditorSupportedOnTests/VolumeComponentSupportedEverywhere + active: 1 +--- !u!114 &-5139089513906902183 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5a00a63fdd6bd2a45ab1f2d869305ffd, type: 3} + m_Name: OasisFogVolumeComponent + m_EditorClassIdentifier: + active: 1 + Density: + m_OverrideState: 1 + m_Value: 0 + StartDistance: + m_OverrideState: 1 + m_Value: 0 + HeightRange: + m_OverrideState: 1 + m_Value: {x: 0, y: 50} + Tint: + m_OverrideState: 1 + m_Value: {r: 1, g: 1, b: 1, a: 1} + SunScatteringIntensity: + m_OverrideState: 1 + m_Value: 2 +--- !u!114 &-4463884970436517307 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fb60a22f311433c4c962b888d1393f88, type: 3} + m_Name: PaniniProjection + m_EditorClassIdentifier: + active: 1 + distance: + m_OverrideState: 1 + m_Value: 0 + cropToFit: + m_OverrideState: 1 + m_Value: 1 +--- !u!114 &-1410297666881709256 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bd486065ce11414fa40e631affc4900, type: 3} + m_Name: ProbeVolumesOptions + m_EditorClassIdentifier: + active: 1 + normalBias: + m_OverrideState: 1 + m_Value: 0.33 + viewBias: + m_OverrideState: 1 + m_Value: 0 + scaleBiasWithMinProbeDistance: + m_OverrideState: 1 + m_Value: 0 + samplingNoise: + m_OverrideState: 1 + m_Value: 0.1 + animateSamplingNoise: + m_OverrideState: 1 + m_Value: 1 + leakReductionMode: + m_OverrideState: 1 + m_Value: 1 + minValidDotProductValue: + m_OverrideState: 1 + m_Value: 0.1 + occlusionOnlyReflectionNormalization: + m_OverrideState: 1 + m_Value: 1 + intensityMultiplier: + m_OverrideState: 1 + m_Value: 1 + skyOcclusionIntensityMultiplier: + m_OverrideState: 1 + m_Value: 1 +--- !u!114 &-1216621516061285780 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0b2db86121404754db890f4c8dfe81b2, type: 3} + m_Name: Bloom + m_EditorClassIdentifier: + active: 1 + skipIterations: + m_OverrideState: 1 + m_Value: 1 + threshold: + m_OverrideState: 1 + m_Value: 0.9 + intensity: + m_OverrideState: 1 + m_Value: 0 + scatter: + m_OverrideState: 1 + m_Value: 0.7 + clamp: + m_OverrideState: 1 + m_Value: 65472 + tint: + m_OverrideState: 1 + m_Value: {r: 1, g: 1, b: 1, a: 1} + highQualityFiltering: + m_OverrideState: 1 + m_Value: 0 + downscale: + m_OverrideState: 1 + m_Value: 0 + maxIterations: + m_OverrideState: 1 + m_Value: 6 + dirtTexture: + m_OverrideState: 1 + m_Value: {fileID: 0} + dimension: 1 + dirtIntensity: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &-1170528603972255243 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 221518ef91623a7438a71fef23660601, type: 3} + m_Name: WhiteBalance + m_EditorClassIdentifier: + active: 1 + temperature: + m_OverrideState: 1 + m_Value: 0 + tint: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &-581120513425526550 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: CopyPasteTestComponent3 + m_EditorClassIdentifier: Unity.RenderPipelines.Core.Editor.Tests:UnityEditor.Rendering.Tests:VolumeComponentCopyPasteTests/CopyPasteTestComponent3 + active: 1 + p1: + m_OverrideState: 1 + m_Value: 0 + p2: + m_OverrideState: 1 + m_Value: 0 + p31: + m_OverrideState: 1 + m_Value: {r: 0, g: 0, b: 0, a: 1} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: DefaultVolumeProfile + m_EditorClassIdentifier: + components: + - {fileID: -9167874883656233139} + - {fileID: 1918650496244738858} + - {fileID: 853819529557874667} + - {fileID: 1052315754049611418} + - {fileID: -1170528603972255243} + - {fileID: -8270506406425502121} + - {fileID: -5520245016509672950} + - {fileID: 7173750748008157695} + - {fileID: 1666464333004379222} + - {fileID: 9001657382290151224} + - {fileID: -6335409530604852063} + - {fileID: -1216621516061285780} + - {fileID: 3959858460715838825} + - {fileID: -7743500325797982168} + - {fileID: 4644742534064026673} + - {fileID: -4463884970436517307} + - {fileID: -6288072647309666549} + - {fileID: 7518938298396184218} + - {fileID: -1410297666881709256} + - {fileID: -7750755424749557576} + - {fileID: -5139089513906902183} +--- !u!114 &853819529557874667 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 06437c1ff663d574d9447842ba0a72e4, type: 3} + m_Name: ScreenSpaceLensFlare + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 1 + m_Value: 0 + tintColor: + m_OverrideState: 1 + m_Value: {r: 1, g: 1, b: 1, a: 1} + bloomMip: + m_OverrideState: 1 + m_Value: 1 + firstFlareIntensity: + m_OverrideState: 1 + m_Value: 1 + secondaryFlareIntensity: + m_OverrideState: 1 + m_Value: 1 + warpedFlareIntensity: + m_OverrideState: 1 + m_Value: 1 + warpedFlareScale: + m_OverrideState: 1 + m_Value: {x: 1, y: 1} + samples: + m_OverrideState: 1 + m_Value: 1 + sampleDimmer: + m_OverrideState: 1 + m_Value: 0.5 + vignetteEffect: + m_OverrideState: 1 + m_Value: 1 + startingPosition: + m_OverrideState: 1 + m_Value: 1.25 + scale: + m_OverrideState: 1 + m_Value: 1.5 + streaksIntensity: + m_OverrideState: 1 + m_Value: 0 + streaksLength: + m_OverrideState: 1 + m_Value: 0.5 + streaksOrientation: + m_OverrideState: 1 + m_Value: 0 + streaksThreshold: + m_OverrideState: 1 + m_Value: 0.25 + resolution: + m_OverrideState: 1 + m_Value: 4 + chromaticAbberationIntensity: + m_OverrideState: 1 + m_Value: 0.5 +--- !u!114 &1052315754049611418 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 558a8e2b6826cf840aae193990ba9f2e, type: 3} + m_Name: ShadowsMidtonesHighlights + m_EditorClassIdentifier: + active: 1 + shadows: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + midtones: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + highlights: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + shadowsStart: + m_OverrideState: 1 + m_Value: 0 + shadowsEnd: + m_OverrideState: 1 + m_Value: 0.3 + highlightsStart: + m_OverrideState: 1 + m_Value: 0.55 + highlightsEnd: + m_OverrideState: 1 + m_Value: 1 +--- !u!114 &1666464333004379222 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3eb4b772797da9440885e8bd939e9560, type: 3} + m_Name: ColorCurves + m_EditorClassIdentifier: + active: 1 + master: + m_OverrideState: 1 + m_Value: + k__BackingField: 2 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + red: + m_OverrideState: 1 + m_Value: + k__BackingField: 2 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + green: + m_OverrideState: 1 + m_Value: + k__BackingField: 2 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + blue: + m_OverrideState: 1 + m_Value: + k__BackingField: 2 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + hueVsHue: + m_OverrideState: 1 + m_Value: + k__BackingField: 0 + m_Loop: 1 + m_ZeroValue: 0.5 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + hueVsSat: + m_OverrideState: 1 + m_Value: + k__BackingField: 0 + m_Loop: 1 + m_ZeroValue: 0.5 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + satVsSat: + m_OverrideState: 1 + m_Value: + k__BackingField: 0 + m_Loop: 0 + m_ZeroValue: 0.5 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + lumVsSat: + m_OverrideState: 1 + m_Value: + k__BackingField: 0 + m_Loop: 0 + m_ZeroValue: 0.5 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &1918650496244738858 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e021b4c809a781e468c2988c016ebbea, type: 3} + m_Name: ColorLookup + m_EditorClassIdentifier: + active: 1 + texture: + m_OverrideState: 1 + m_Value: {fileID: 0} + dimension: 1 + contribution: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &3959858460715838825 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c01700fd266d6914ababb731e09af2eb, type: 3} + m_Name: DepthOfField + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 1 + m_Value: 0 + gaussianStart: + m_OverrideState: 1 + m_Value: 10 + gaussianEnd: + m_OverrideState: 1 + m_Value: 30 + gaussianMaxRadius: + m_OverrideState: 1 + m_Value: 1 + highQualitySampling: + m_OverrideState: 1 + m_Value: 0 + focusDistance: + m_OverrideState: 1 + m_Value: 10 + aperture: + m_OverrideState: 1 + m_Value: 5.6 + focalLength: + m_OverrideState: 1 + m_Value: 50 + bladeCount: + m_OverrideState: 1 + m_Value: 5 + bladeCurvature: + m_OverrideState: 1 + m_Value: 1 + bladeRotation: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &4251301726029935498 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 74955a4b0b4243bc87231e8b59ed9140, type: 3} + m_Name: TestVolume + m_EditorClassIdentifier: + active: 1 + param: + m_OverrideState: 1 + m_Value: 123 +--- !u!114 &4644742534064026673 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 81180773991d8724ab7f2d216912b564, type: 3} + m_Name: ChromaticAberration + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &6940869943325143175 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: VolumeComponentSupportedOnAnySRP + m_EditorClassIdentifier: Unity.RenderPipelines.Core.Editor.Tests:UnityEngine.Rendering.Tests:VolumeComponentEditorSupportedOnTests/VolumeComponentSupportedOnAnySRP + active: 1 +--- !u!114 &7173750748008157695 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 899c54efeace73346a0a16faa3afe726, type: 3} + m_Name: Vignette + m_EditorClassIdentifier: + active: 1 + color: + m_OverrideState: 1 + m_Value: {r: 0, g: 0, b: 0, a: 1} + center: + m_OverrideState: 1 + m_Value: {x: 0.5, y: 0.5} + intensity: + m_OverrideState: 1 + m_Value: 0 + smoothness: + m_OverrideState: 1 + m_Value: 0.2 + rounded: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &7518938298396184218 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c5e1dc532bcb41949b58bc4f2abfbb7e, type: 3} + m_Name: LensDistortion + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 1 + m_Value: 0 + xMultiplier: + m_OverrideState: 1 + m_Value: 1 + yMultiplier: + m_OverrideState: 1 + m_Value: 1 + center: + m_OverrideState: 1 + m_Value: {x: 0.5, y: 0.5} + scale: + m_OverrideState: 1 + m_Value: 1 +--- !u!114 &9001657382290151224 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdfbdbb87d3286943a057f7791b43141, type: 3} + m_Name: ChannelMixer + m_EditorClassIdentifier: + active: 1 + redOutRedIn: + m_OverrideState: 1 + m_Value: 100 + redOutGreenIn: + m_OverrideState: 1 + m_Value: 0 + redOutBlueIn: + m_OverrideState: 1 + m_Value: 0 + greenOutRedIn: + m_OverrideState: 1 + m_Value: 0 + greenOutGreenIn: + m_OverrideState: 1 + m_Value: 100 + greenOutBlueIn: + m_OverrideState: 1 + m_Value: 0 + blueOutRedIn: + m_OverrideState: 1 + m_Value: 0 + blueOutGreenIn: + m_OverrideState: 1 + m_Value: 0 + blueOutBlueIn: + m_OverrideState: 1 + m_Value: 100 +--- !u!114 &9122958982931076880 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: CopyPasteTestComponent1 + m_EditorClassIdentifier: Unity.RenderPipelines.Core.Editor.Tests:UnityEditor.Rendering.Tests:VolumeComponentCopyPasteTests/CopyPasteTestComponent1 + active: 1 + p1: + m_OverrideState: 1 + m_Value: 0 + p2: + m_OverrideState: 1 + m_Value: 0 diff --git a/Assets/Settings/DefaultVolumeProfile.asset.meta b/Assets/Settings/DefaultVolumeProfile.asset.meta new file mode 100644 index 0000000..53b314a --- /dev/null +++ b/Assets/Settings/DefaultVolumeProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ab09877e2e707104187f6f83e2f62510 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/Mobile_RPAsset.asset b/Assets/Settings/Mobile_RPAsset.asset new file mode 100644 index 0000000..7ceffe7 --- /dev/null +++ b/Assets/Settings/Mobile_RPAsset.asset @@ -0,0 +1,135 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3} + m_Name: Mobile_RPAsset + m_EditorClassIdentifier: + k_AssetVersion: 12 + k_AssetPreviousVersion: 12 + m_RendererType: 1 + m_RendererData: {fileID: 0} + m_RendererDataList: + - {fileID: 11400000, guid: 65bc7dbf4170f435aa868c779acfb082, type: 2} + m_DefaultRendererIndex: 0 + m_RequireDepthTexture: 0 + m_RequireOpaqueTexture: 0 + m_OpaqueDownsampling: 0 + m_SupportsTerrainHoles: 1 + m_SupportsHDR: 1 + m_HDRColorBufferPrecision: 0 + m_MSAA: 1 + m_RenderScale: 0.8 + m_UpscalingFilter: 0 + m_FsrOverrideSharpness: 0 + m_FsrSharpness: 0.92 + m_EnableLODCrossFade: 1 + m_LODCrossFadeDitheringType: 1 + m_ShEvalMode: 0 + m_LightProbeSystem: 0 + m_ProbeVolumeMemoryBudget: 1024 + m_ProbeVolumeBlendingMemoryBudget: 256 + m_SupportProbeVolumeGPUStreaming: 0 + m_SupportProbeVolumeDiskStreaming: 0 + m_SupportProbeVolumeScenarios: 0 + m_SupportProbeVolumeScenarioBlending: 0 + m_ProbeVolumeSHBands: 1 + m_MainLightRenderingMode: 1 + m_MainLightShadowsSupported: 1 + m_MainLightShadowmapResolution: 1024 + m_AdditionalLightsRenderingMode: 1 + m_AdditionalLightsPerObjectLimit: 4 + m_AdditionalLightShadowsSupported: 0 + m_AdditionalLightsShadowmapResolution: 2048 + m_AdditionalLightsShadowResolutionTierLow: 256 + m_AdditionalLightsShadowResolutionTierMedium: 512 + m_AdditionalLightsShadowResolutionTierHigh: 1024 + m_ReflectionProbeBlending: 1 + m_ReflectionProbeBoxProjection: 1 + m_ShadowDistance: 50 + m_ShadowCascadeCount: 1 + m_Cascade2Split: 0.25 + m_Cascade3Split: {x: 0.1, y: 0.3} + m_Cascade4Split: {x: 0.067, y: 0.2, z: 0.467} + m_CascadeBorder: 0.2 + m_ShadowDepthBias: 1 + m_ShadowNormalBias: 1 + m_AnyShadowsSupported: 1 + m_SoftShadowsSupported: 0 + m_ConservativeEnclosingSphere: 1 + m_NumIterationsEnclosingSphere: 64 + m_SoftShadowQuality: 2 + m_AdditionalLightsCookieResolution: 1024 + m_AdditionalLightsCookieFormat: 1 + m_UseSRPBatcher: 1 + m_SupportsDynamicBatching: 0 + m_MixedLightingSupported: 1 + m_SupportsLightCookies: 1 + m_SupportsLightLayers: 1 + m_DebugLevel: 0 + m_StoreActionsOptimization: 0 + m_UseAdaptivePerformance: 1 + m_ColorGradingMode: 0 + m_ColorGradingLutSize: 32 + m_UseFastSRGBLinearConversion: 1 + m_SupportDataDrivenLensFlare: 1 + m_SupportScreenSpaceLensFlare: 1 + m_GPUResidentDrawerMode: 0 + m_UseLegacyLightmaps: 0 + m_SmallMeshScreenPercentage: 0 + m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0 + m_ShadowType: 1 + m_LocalShadowsSupported: 0 + m_LocalShadowsAtlasResolution: 256 + m_MaxPixelLights: 0 + m_ShadowAtlasResolution: 256 + m_VolumeFrameworkUpdateMode: 0 + m_VolumeProfile: {fileID: 11400000, guid: 10fc4df2da32a41aaa32d77bc913491c, type: 2} + apvScenesData: + obsoleteSceneBounds: + m_Keys: [] + m_Values: [] + obsoleteHasProbeVolumes: + m_Keys: [] + m_Values: + m_PrefilteringModeMainLightShadows: 3 + m_PrefilteringModeAdditionalLight: 4 + m_PrefilteringModeAdditionalLightShadows: 0 + m_PrefilterXRKeywords: 1 + m_PrefilteringModeForwardPlus: 1 + m_PrefilteringModeDeferredRendering: 0 + m_PrefilteringModeScreenSpaceOcclusion: 0 + m_PrefilterDebugKeywords: 1 + m_PrefilterWriteRenderingLayers: 1 + m_PrefilterHDROutput: 1 + m_PrefilterSSAODepthNormals: 1 + m_PrefilterSSAOSourceDepthLow: 1 + m_PrefilterSSAOSourceDepthMedium: 0 + m_PrefilterSSAOSourceDepthHigh: 1 + m_PrefilterSSAOInterleaved: 0 + m_PrefilterSSAOBlueNoise: 1 + m_PrefilterSSAOSampleCountLow: 1 + m_PrefilterSSAOSampleCountMedium: 0 + 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: 1 + m_PrefilterNativeRenderPass: 1 + m_PrefilterUseLegacyLightmaps: 0 + m_ShaderVariantLogLevel: 0 + m_ShadowCascades: 0 + m_Textures: + blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} + bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} diff --git a/Assets/Settings/Mobile_RPAsset.asset.meta b/Assets/Settings/Mobile_RPAsset.asset.meta new file mode 100644 index 0000000..3660d15 --- /dev/null +++ b/Assets/Settings/Mobile_RPAsset.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e6cbd92db86f4b18aec3ed561671858 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/Mobile_Renderer.asset b/Assets/Settings/Mobile_Renderer.asset new file mode 100644 index 0000000..ea246b2 --- /dev/null +++ b/Assets/Settings/Mobile_Renderer.asset @@ -0,0 +1,52 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} + m_Name: Mobile_Renderer + m_EditorClassIdentifier: + debugShaders: + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, + type: 3} + hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} + probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, + type: 3} + probeVolumeResources: + probeVolumeDebugShader: {fileID: 0} + probeVolumeFragmentationDebugShader: {fileID: 0} + probeVolumeOffsetDebugShader: {fileID: 0} + probeVolumeSamplingDebugShader: {fileID: 0} + probeSamplingDebugMesh: {fileID: 0} + probeSamplingDebugTexture: {fileID: 0} + probeVolumeBlendStatesCS: {fileID: 0} + m_RendererFeatures: [] + m_RendererFeatureMap: + m_UseNativeRenderPass: 1 + postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} + m_AssetVersion: 2 + m_OpaqueLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_TransparentLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_DefaultStencilState: + overrideStencilState: 0 + stencilReference: 0 + stencilCompareFunction: 8 + passOperation: 2 + failOperation: 0 + zFailOperation: 0 + m_ShadowTransparentReceive: 0 + m_RenderingMode: 0 + m_DepthPrimingMode: 0 + m_CopyDepthMode: 0 + m_AccurateGbufferNormals: 0 + m_IntermediateTextureMode: 0 diff --git a/Assets/Settings/Mobile_Renderer.asset.meta b/Assets/Settings/Mobile_Renderer.asset.meta new file mode 100644 index 0000000..a3588b1 --- /dev/null +++ b/Assets/Settings/Mobile_Renderer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 65bc7dbf4170f435aa868c779acfb082 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/PC_RPAsset.asset b/Assets/Settings/PC_RPAsset.asset new file mode 100644 index 0000000..8b30a06 --- /dev/null +++ b/Assets/Settings/PC_RPAsset.asset @@ -0,0 +1,135 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3} + m_Name: PC_RPAsset + m_EditorClassIdentifier: + k_AssetVersion: 12 + k_AssetPreviousVersion: 12 + m_RendererType: 1 + m_RendererData: {fileID: 0} + m_RendererDataList: + - {fileID: 11400000, guid: f288ae1f4751b564a96ac7587541f7a2, type: 2} + m_DefaultRendererIndex: 0 + m_RequireDepthTexture: 1 + m_RequireOpaqueTexture: 1 + m_OpaqueDownsampling: 1 + m_SupportsTerrainHoles: 1 + m_SupportsHDR: 1 + m_HDRColorBufferPrecision: 0 + m_MSAA: 1 + m_RenderScale: 1 + m_UpscalingFilter: 0 + m_FsrOverrideSharpness: 0 + m_FsrSharpness: 0.92 + m_EnableLODCrossFade: 1 + m_LODCrossFadeDitheringType: 1 + m_ShEvalMode: 0 + m_LightProbeSystem: 0 + m_ProbeVolumeMemoryBudget: 1024 + m_ProbeVolumeBlendingMemoryBudget: 256 + m_SupportProbeVolumeGPUStreaming: 0 + m_SupportProbeVolumeDiskStreaming: 0 + m_SupportProbeVolumeScenarios: 0 + m_SupportProbeVolumeScenarioBlending: 0 + m_ProbeVolumeSHBands: 1 + m_MainLightRenderingMode: 1 + m_MainLightShadowsSupported: 1 + m_MainLightShadowmapResolution: 2048 + m_AdditionalLightsRenderingMode: 1 + m_AdditionalLightsPerObjectLimit: 4 + m_AdditionalLightShadowsSupported: 1 + m_AdditionalLightsShadowmapResolution: 2048 + m_AdditionalLightsShadowResolutionTierLow: 256 + m_AdditionalLightsShadowResolutionTierMedium: 512 + m_AdditionalLightsShadowResolutionTierHigh: 1024 + m_ReflectionProbeBlending: 1 + m_ReflectionProbeBoxProjection: 1 + m_ShadowDistance: 50 + m_ShadowCascadeCount: 4 + m_Cascade2Split: 0.25 + m_Cascade3Split: {x: 0.1, y: 0.3} + m_Cascade4Split: {x: 0.12299999, y: 0.2926, z: 0.53599995} + m_CascadeBorder: 0.107758604 + m_ShadowDepthBias: 0.1 + m_ShadowNormalBias: 0.5 + m_AnyShadowsSupported: 1 + m_SoftShadowsSupported: 1 + m_ConservativeEnclosingSphere: 1 + m_NumIterationsEnclosingSphere: 64 + m_SoftShadowQuality: 3 + m_AdditionalLightsCookieResolution: 2048 + m_AdditionalLightsCookieFormat: 3 + m_UseSRPBatcher: 1 + m_SupportsDynamicBatching: 0 + m_MixedLightingSupported: 1 + m_SupportsLightCookies: 1 + m_SupportsLightLayers: 1 + m_DebugLevel: 0 + m_StoreActionsOptimization: 0 + m_UseAdaptivePerformance: 1 + m_ColorGradingMode: 0 + m_ColorGradingLutSize: 32 + m_UseFastSRGBLinearConversion: 0 + m_SupportDataDrivenLensFlare: 1 + m_SupportScreenSpaceLensFlare: 1 + m_GPUResidentDrawerMode: 0 + m_UseLegacyLightmaps: 0 + m_SmallMeshScreenPercentage: 0 + m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0 + m_ShadowType: 1 + m_LocalShadowsSupported: 0 + m_LocalShadowsAtlasResolution: 256 + m_MaxPixelLights: 0 + m_ShadowAtlasResolution: 256 + m_VolumeFrameworkUpdateMode: 0 + m_VolumeProfile: {fileID: 11400000, guid: 10fc4df2da32a41aaa32d77bc913491c, type: 2} + apvScenesData: + obsoleteSceneBounds: + m_Keys: [] + m_Values: [] + obsoleteHasProbeVolumes: + m_Keys: [] + m_Values: + m_PrefilteringModeMainLightShadows: 3 + m_PrefilteringModeAdditionalLight: 4 + m_PrefilteringModeAdditionalLightShadows: 0 + m_PrefilterXRKeywords: 1 + m_PrefilteringModeForwardPlus: 1 + m_PrefilteringModeDeferredRendering: 0 + m_PrefilteringModeScreenSpaceOcclusion: 1 + m_PrefilterDebugKeywords: 1 + m_PrefilterWriteRenderingLayers: 0 + m_PrefilterHDROutput: 1 + m_PrefilterSSAODepthNormals: 0 + m_PrefilterSSAOSourceDepthLow: 1 + m_PrefilterSSAOSourceDepthMedium: 1 + m_PrefilterSSAOSourceDepthHigh: 1 + m_PrefilterSSAOInterleaved: 1 + m_PrefilterSSAOBlueNoise: 0 + m_PrefilterSSAOSampleCountLow: 1 + m_PrefilterSSAOSampleCountMedium: 0 + m_PrefilterSSAOSampleCountHigh: 1 + m_PrefilterDBufferMRT1: 1 + m_PrefilterDBufferMRT2: 1 + m_PrefilterDBufferMRT3: 0 + m_PrefilterSoftShadowsQualityLow: 0 + m_PrefilterSoftShadowsQualityMedium: 0 + m_PrefilterSoftShadowsQualityHigh: 0 + m_PrefilterSoftShadows: 0 + m_PrefilterScreenCoord: 1 + m_PrefilterNativeRenderPass: 1 + m_PrefilterUseLegacyLightmaps: 0 + m_ShaderVariantLogLevel: 0 + m_ShadowCascades: 0 + m_Textures: + blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} + bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} diff --git a/Assets/Settings/PC_RPAsset.asset.meta b/Assets/Settings/PC_RPAsset.asset.meta new file mode 100644 index 0000000..e286b2f --- /dev/null +++ b/Assets/Settings/PC_RPAsset.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4b83569d67af61e458304325a23e5dfd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/PC_Renderer.asset b/Assets/Settings/PC_Renderer.asset new file mode 100644 index 0000000..475b02e --- /dev/null +++ b/Assets/Settings/PC_Renderer.asset @@ -0,0 +1,95 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} + m_Name: PC_Renderer + m_EditorClassIdentifier: + debugShaders: + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, + type: 3} + hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} + probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, + type: 3} + probeVolumeResources: + probeVolumeDebugShader: {fileID: 4800000, guid: e5c6678ed2aaa91408dd3df699057aae, + type: 3} + probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 03cfc4915c15d504a9ed85ecc404e607, + type: 3} + probeVolumeOffsetDebugShader: {fileID: 4800000, guid: 53a11f4ebaebf4049b3638ef78dc9664, + type: 3} + probeVolumeSamplingDebugShader: {fileID: 4800000, guid: 8f96cd657dc40064aa21efcc7e50a2e7, + type: 3} + probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 57d7c4c16e2765b47a4d2069b311bffe, + type: 3} + probeSamplingDebugTexture: {fileID: 2800000, guid: 24ec0e140fb444a44ab96ee80844e18e, + type: 3} + probeVolumeBlendStatesCS: {fileID: 7200000, guid: b9a23f869c4fd45f19c5ada54dd82176, + type: 3} + m_RendererFeatures: + - {fileID: 7833122117494664109} + m_RendererFeatureMap: ad6b866f10d7b46c + m_UseNativeRenderPass: 1 + postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} + m_AssetVersion: 2 + m_OpaqueLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_TransparentLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_DefaultStencilState: + overrideStencilState: 0 + stencilReference: 1 + stencilCompareFunction: 3 + passOperation: 2 + failOperation: 0 + zFailOperation: 0 + m_ShadowTransparentReceive: 1 + m_RenderingMode: 2 + m_DepthPrimingMode: 0 + m_CopyDepthMode: 0 + m_AccurateGbufferNormals: 0 + m_IntermediateTextureMode: 0 +--- !u!114 &7833122117494664109 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f62c9c65cf3354c93be831c8bc075510, type: 3} + m_Name: ScreenSpaceAmbientOcclusion + m_EditorClassIdentifier: + m_Active: 1 + m_Settings: + AOMethod: 0 + Downsample: 0 + AfterOpaque: 0 + Source: 1 + NormalSamples: 1 + Intensity: 0.4 + DirectLightingStrength: 0.25 + Radius: 0.3 + Samples: 1 + BlurQuality: 0 + Falloff: 100 + SampleCount: -1 + m_BlueNoise256Textures: + - {fileID: 2800000, guid: 36f118343fc974119bee3d09e2111500, type: 3} + - {fileID: 2800000, guid: 4b7b083e6b6734e8bb2838b0b50a0bc8, type: 3} + - {fileID: 2800000, guid: c06cc21c692f94f5fb5206247191eeee, type: 3} + - {fileID: 2800000, guid: cb76dd40fa7654f9587f6a344f125c9a, type: 3} + - {fileID: 2800000, guid: e32226222ff144b24bf3a5a451de54bc, type: 3} + - {fileID: 2800000, guid: 3302065f671a8450b82c9ddf07426f3a, type: 3} + - {fileID: 2800000, guid: 56a77a3e8d64f47b6afe9e3c95cb57d5, type: 3} + m_Shader: {fileID: 4800000, guid: 0849e84e3d62649e8882e9d6f056a017, type: 3} diff --git a/Assets/Settings/PC_Renderer.asset.meta b/Assets/Settings/PC_Renderer.asset.meta new file mode 100644 index 0000000..ddae6a5 --- /dev/null +++ b/Assets/Settings/PC_Renderer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f288ae1f4751b564a96ac7587541f7a2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/SampleSceneProfile.asset b/Assets/Settings/SampleSceneProfile.asset new file mode 100644 index 0000000..c1b0f63 --- /dev/null +++ b/Assets/Settings/SampleSceneProfile.asset @@ -0,0 +1,159 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-7893295128165547882 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0b2db86121404754db890f4c8dfe81b2, type: 3} + m_Name: Bloom + m_EditorClassIdentifier: + active: 1 + skipIterations: + m_OverrideState: 1 + m_Value: 0 + threshold: + m_OverrideState: 1 + m_Value: 1 + intensity: + m_OverrideState: 1 + m_Value: 0.25 + scatter: + m_OverrideState: 1 + m_Value: 0.5 + clamp: + m_OverrideState: 0 + m_Value: 65472 + tint: + m_OverrideState: 0 + m_Value: {r: 1, g: 1, b: 1, a: 1} + highQualityFiltering: + m_OverrideState: 1 + m_Value: 1 + downscale: + m_OverrideState: 0 + m_Value: 0 + maxIterations: + m_OverrideState: 0 + m_Value: 6 + dirtTexture: + m_OverrideState: 0 + m_Value: {fileID: 0} + dimension: 1 + dirtIntensity: + m_OverrideState: 0 + m_Value: 0 +--- !u!114 &-3357603926938260329 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 899c54efeace73346a0a16faa3afe726, type: 3} + m_Name: Vignette + m_EditorClassIdentifier: + active: 1 + color: + m_OverrideState: 0 + m_Value: {r: 0, g: 0, b: 0, a: 1} + center: + m_OverrideState: 0 + m_Value: {x: 0.5, y: 0.5} + intensity: + m_OverrideState: 1 + m_Value: 0.2 + smoothness: + m_OverrideState: 0 + m_Value: 0.2 + rounded: + m_OverrideState: 0 + m_Value: 0 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: SampleSceneProfile + m_EditorClassIdentifier: + components: + - {fileID: 849379129802519247} + - {fileID: -7893295128165547882} + - {fileID: 7391319092446245454} + - {fileID: -3357603926938260329} +--- !u!114 &849379129802519247 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 97c23e3b12dc18c42a140437e53d3951, type: 3} + m_Name: Tonemapping + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 1 + m_Value: 1 + neutralHDRRangeReductionMode: + m_OverrideState: 0 + m_Value: 2 + acesPreset: + m_OverrideState: 0 + m_Value: 3 + hueShiftAmount: + m_OverrideState: 0 + m_Value: 0 + detectPaperWhite: + m_OverrideState: 1 + m_Value: 0 + paperWhite: + m_OverrideState: 1 + m_Value: 234 + detectBrightnessLimits: + m_OverrideState: 1 + m_Value: 1 + minNits: + m_OverrideState: 1 + m_Value: 0.005 + maxNits: + m_OverrideState: 1 + m_Value: 647 +--- !u!114 &7391319092446245454 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ccf1aba9553839d41ae37dd52e9ebcce, type: 3} + m_Name: MotionBlur + m_EditorClassIdentifier: + active: 0 + mode: + m_OverrideState: 0 + m_Value: 0 + quality: + m_OverrideState: 1 + m_Value: 2 + intensity: + m_OverrideState: 1 + m_Value: 0.6 + clamp: + m_OverrideState: 0 + m_Value: 0.05 diff --git a/Assets/Settings/SampleSceneProfile.asset.meta b/Assets/Settings/SampleSceneProfile.asset.meta new file mode 100644 index 0000000..b82270c --- /dev/null +++ b/Assets/Settings/SampleSceneProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 10fc4df2da32a41aaa32d77bc913491c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset b/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset new file mode 100644 index 0000000..07f5d01 --- /dev/null +++ b/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset @@ -0,0 +1,393 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2ec995e51a6e251468d2a3fd8a686257, type: 3} + m_Name: UniversalRenderPipelineGlobalSettings + m_EditorClassIdentifier: + m_ShaderStrippingSetting: + m_Version: 0 + m_ExportShaderVariants: 1 + m_ShaderVariantLogLevel: 0 + m_StripRuntimeDebugShaders: 1 + m_URPShaderStrippingSetting: + m_Version: 0 + m_StripUnusedPostProcessingVariants: 1 + m_StripUnusedVariants: 1 + m_StripScreenCoordOverrideVariants: 1 + m_ShaderVariantLogLevel: 0 + m_ExportShaderVariants: 1 + m_StripDebugVariants: 1 + m_StripUnusedPostProcessingVariants: 1 + m_StripUnusedVariants: 1 + m_StripScreenCoordOverrideVariants: 1 + supportRuntimeDebugDisplay: 0 + m_EnableRenderGraph: 0 + m_Settings: + m_SettingsList: + m_List: + - rid: 6852985685364965376 + - rid: 6852985685364965377 + - rid: 6852985685364965378 + - rid: 6852985685364965379 + - rid: 6852985685364965380 + - rid: 6852985685364965381 + - rid: 6852985685364965382 + - rid: 6852985685364965383 + - rid: 6852985685364965384 + - rid: 6852985685364965385 + - rid: 6852985685364965386 + - rid: 6852985685364965387 + - rid: 6852985685364965388 + - rid: 6852985685364965389 + - rid: 6852985685364965390 + - rid: 6852985685364965391 + - rid: 6852985685364965392 + - rid: 6852985685364965393 + - rid: 6852985685364965394 + - rid: 8712630790384254976 + - rid: 8483784682713120768 + - rid: 8483784682713120769 + - rid: 8483784682713120770 + - rid: 8483784682713120771 + - rid: 8483784682713120772 + - rid: 8483784682713120773 + - rid: 8483784682713120774 + - rid: 8483784682713120775 + - rid: 8483784682713120776 + m_RuntimeSettings: + m_List: [] + m_AssetVersion: 8 + m_ObsoleteDefaultVolumeProfile: {fileID: 0} + m_RenderingLayerNames: + - Light Layer default + - Light Layer 1 + - Light Layer 2 + - Light Layer 3 + - Light Layer 4 + - Light Layer 5 + - Light Layer 6 + - Light Layer 7 + m_ValidRenderingLayers: 0 + lightLayerName0: Light Layer default + lightLayerName1: Light Layer 1 + lightLayerName2: Light Layer 2 + lightLayerName3: Light Layer 3 + lightLayerName4: Light Layer 4 + lightLayerName5: Light Layer 5 + lightLayerName6: Light Layer 6 + lightLayerName7: Light Layer 7 + apvScenesData: + obsoleteSceneBounds: + m_Keys: [] + m_Values: [] + obsoleteHasProbeVolumes: + m_Keys: [] + m_Values: + references: + version: 2 + RefIds: + - rid: 6852985685364965376 + type: {class: URPShaderStrippingSetting, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_StripUnusedPostProcessingVariants: 1 + m_StripUnusedVariants: 1 + m_StripScreenCoordOverrideVariants: 1 + - rid: 6852985685364965377 + type: {class: UniversalRenderPipelineEditorShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_AutodeskInteractive: {fileID: 4800000, guid: 0e9d5a909a1f7e84882a534d0d11e49f, type: 3} + m_AutodeskInteractiveTransparent: {fileID: 4800000, guid: 5c81372d981403744adbdda4433c9c11, type: 3} + m_AutodeskInteractiveMasked: {fileID: 4800000, guid: 80aa867ac363ac043847b06ad71604cd, type: 3} + m_DefaultSpeedTree7Shader: {fileID: 4800000, guid: 0f4122b9a743b744abe2fb6a0a88868b, type: 3} + m_DefaultSpeedTree8Shader: {fileID: -6465566751694194690, guid: 9920c1f1781549a46ba081a2a15a16ec, type: 3} + m_DefaultSpeedTree9Shader: {fileID: -6465566751694194690, guid: cbd3e1cc4ae141c42a30e33b4d666a61, type: 3} + - rid: 6852985685364965378 + type: {class: UniversalRendererResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_CopyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} + m_CameraMotionVector: {fileID: 4800000, guid: c56b7e0d4c7cb484e959caeeedae9bbf, type: 3} + m_StencilDeferredPS: {fileID: 4800000, guid: e9155b26e1bc55942a41e518703fe304, type: 3} + m_ClusterDeferred: {fileID: 4800000, guid: 222cce62363a44a380c36bf03b392608, type: 3} + m_StencilDitherMaskSeedPS: {fileID: 4800000, guid: 8c3ee818f2efa514c889881ccb2e95a2, type: 3} + m_DBufferClear: {fileID: 4800000, guid: f056d8bd2a1c7e44e9729144b4c70395, type: 3} + - rid: 6852985685364965379 + type: {class: UniversalRenderPipelineDebugShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_DebugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, type: 3} + m_HdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} + m_ProbeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, type: 3} + - rid: 6852985685364965380 + type: {class: UniversalRenderPipelineRuntimeShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_FallbackErrorShader: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} + m_BlitHDROverlay: {fileID: 4800000, guid: a89bee29cffa951418fc1e2da94d1959, type: 3} + m_CoreBlitPS: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} + m_CoreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, type: 3} + m_SamplingPS: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} + m_TerrainDetailLit: {fileID: 4800000, guid: f6783ab646d374f94b199774402a5144, type: 3} + m_TerrainDetailGrassBillboard: {fileID: 4800000, guid: 29868e73b638e48ca99a19ea58c48d90, type: 3} + m_TerrainDetailGrass: {fileID: 4800000, guid: e507fdfead5ca47e8b9a768b51c291a1, type: 3} + - rid: 6852985685364965381 + type: {class: UniversalRenderPipelineRuntimeTextures, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 1 + m_BlueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} + m_BayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} + m_DebugFontTex: {fileID: 2800000, guid: 26a413214480ef144b2915d6ff4d0beb, type: 3} + - rid: 6852985685364965382 + type: {class: Renderer2DResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_LightShader: {fileID: 4800000, guid: 3f6c848ca3d7bca4bbe846546ac701a1, type: 3} + m_ProjectedShadowShader: {fileID: 4800000, guid: ce09d4a80b88c5a4eb9768fab4f1ee00, type: 3} + m_SpriteShadowShader: {fileID: 4800000, guid: 44fc62292b65ab04eabcf310e799ccf6, type: 3} + m_SpriteUnshadowShader: {fileID: 4800000, guid: de02b375720b5c445afe83cd483bedf3, type: 3} + m_GeometryShadowShader: {fileID: 4800000, guid: 19349a0f9a7ed4c48a27445bcf92e5e1, type: 3} + m_GeometryUnshadowShader: {fileID: 4800000, guid: 77774d9009bb81447b048c907d4c6273, type: 3} + m_FallOffLookup: {fileID: 2800000, guid: 5688ab254e4c0634f8d6c8e0792331ca, type: 3} + m_CopyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} + m_DefaultLitMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_DefaultUnlitMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2} + m_DefaultMaskMaterial: {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, type: 2} + - rid: 6852985685364965383 + type: {class: UniversalRenderPipelineEditorMaterials, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_DefaultMaterial: {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_DefaultParticleMaterial: {fileID: 2100000, guid: e823cd5b5d27c0f4b8256e7c12ee3e6d, type: 2} + m_DefaultLineMaterial: {fileID: 2100000, guid: e823cd5b5d27c0f4b8256e7c12ee3e6d, type: 2} + m_DefaultTerrainMaterial: {fileID: 2100000, guid: 594ea882c5a793440b60ff72d896021e, type: 2} + m_DefaultDecalMaterial: {fileID: 2100000, guid: 31d0dcc6f2dd4e4408d18036a2c93862, type: 2} + m_DefaultSpriteMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2} + - rid: 6852985685364965384 + type: {class: URPDefaultVolumeProfileSettings, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_VolumeProfile: {fileID: 11400000, guid: ab09877e2e707104187f6f83e2f62510, type: 2} + - rid: 6852985685364965385 + type: {class: RenderGraphSettings, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_EnableRenderCompatibilityMode: 0 + - rid: 6852985685364965386 + type: {class: GPUResidentDrawerResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.GPUDriven.Runtime} + data: + m_Version: 0 + m_InstanceDataBufferCopyKernels: {fileID: 7200000, guid: f984aeb540ded8b4fbb8a2047ab5b2e2, type: 3} + m_InstanceDataBufferUploadKernels: {fileID: 7200000, guid: 53864816eb00f2343b60e1a2c5a262ef, type: 3} + m_TransformUpdaterKernels: {fileID: 7200000, guid: 2a567b9b2733f8d47a700c3c85bed75b, type: 3} + m_WindDataUpdaterKernels: {fileID: 7200000, guid: fde76746e4fd0ed418c224f6b4084114, type: 3} + m_OccluderDepthPyramidKernels: {fileID: 7200000, guid: 08b2b5fb307b0d249860612774a987da, type: 3} + m_InstanceOcclusionCullingKernels: {fileID: 7200000, guid: f6d223acabc2f974795a5a7864b50e6c, type: 3} + m_OcclusionCullingDebugKernels: {fileID: 7200000, guid: b23e766bcf50ca4438ef186b174557df, type: 3} + m_DebugOcclusionTestPS: {fileID: 4800000, guid: d3f0849180c2d0944bc71060693df100, type: 3} + m_DebugOccluderPS: {fileID: 4800000, guid: b3c92426a88625841ab15ca6a7917248, type: 3} + - rid: 6852985685364965387 + type: {class: STP/RuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_setupCS: {fileID: 7200000, guid: 33be2e9a5506b2843bdb2bdff9cad5e1, type: 3} + m_preTaaCS: {fileID: 7200000, guid: a679dba8ec4d9ce45884a270b0e22dda, type: 3} + m_taaCS: {fileID: 7200000, guid: 3923900e2b41b5e47bc25bfdcbcdc9e6, type: 3} + - rid: 6852985685364965388 + type: {class: ProbeVolumeBakingResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + dilationShader: {fileID: 7200000, guid: 6bb382f7de370af41b775f54182e491d, type: 3} + subdivideSceneCS: {fileID: 7200000, guid: bb86f1f0af829fd45b2ebddda1245c22, type: 3} + voxelizeSceneShader: {fileID: 4800000, guid: c8b6a681c7b4e2e4785ffab093907f9e, type: 3} + traceVirtualOffsetCS: {fileID: -6772857160820960102, guid: ff2cbab5da58bf04d82c5f34037ed123, type: 3} + traceVirtualOffsetRT: {fileID: -5126288278712620388, guid: ff2cbab5da58bf04d82c5f34037ed123, type: 3} + skyOcclusionCS: {fileID: -6772857160820960102, guid: 5a2a534753fbdb44e96c3c78b5a6999d, type: 3} + skyOcclusionRT: {fileID: -5126288278712620388, guid: 5a2a534753fbdb44e96c3c78b5a6999d, type: 3} + renderingLayerCS: {fileID: -6772857160820960102, guid: 94a070d33e408384bafc1dea4a565df9, type: 3} + renderingLayerRT: {fileID: -5126288278712620388, guid: 94a070d33e408384bafc1dea4a565df9, type: 3} + - rid: 6852985685364965389 + type: {class: ProbeVolumeGlobalSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + m_ProbeVolumeDisableStreamingAssets: 0 + - rid: 6852985685364965390 + type: {class: ProbeVolumeDebugResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + probeVolumeDebugShader: {fileID: 4800000, guid: 3b21275fd12d65f49babb5286f040f2d, type: 3} + probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 3a80877c579b9144ebdcc6d923bca303, type: 3} + probeVolumeSamplingDebugShader: {fileID: 4800000, guid: bf54e6528c79a224e96346799064c393, type: 3} + probeVolumeOffsetDebugShader: {fileID: 4800000, guid: db8bd7436dc2c5f4c92655307d198381, type: 3} + probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 20be25aac4e22ee49a7db76fb3df6de2, type: 3} + numbersDisplayTex: {fileID: 2800000, guid: 73fe53b428c5b3440b7e87ee830b608a, type: 3} + - rid: 6852985685364965391 + type: {class: IncludeAdditionalRPAssets, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_version: 0 + m_IncludeReferencedInScenes: 0 + m_IncludeAssetsByLabel: 0 + m_LabelToInclude: + - rid: 6852985685364965392 + type: {class: ShaderStrippingSetting, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 0 + m_ExportShaderVariants: 1 + m_ShaderVariantLogLevel: 0 + m_StripRuntimeDebugShaders: 1 + - rid: 6852985685364965393 + type: {class: ProbeVolumeRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + probeVolumeBlendStatesCS: {fileID: 7200000, guid: a3f7b8c99de28a94684cb1daebeccf5d, type: 3} + probeVolumeUploadDataCS: {fileID: 7200000, guid: 0951de5992461754fa73650732c4954c, type: 3} + probeVolumeUploadDataL2CS: {fileID: 7200000, guid: 6196f34ed825db14b81fb3eb0ea8d931, type: 3} + - rid: 6852985685364965394 + type: {class: RenderGraphGlobalSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_version: 0 + m_EnableCompilationCaching: 1 + m_EnableValidityChecks: 1 + - rid: 8483784682713120768 + type: {class: PostProcessData/ShaderResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + stopNanPS: {fileID: 4800000, guid: 1121bb4e615ca3c48b214e79e841e823, type: 3} + subpixelMorphologicalAntialiasingPS: {fileID: 4800000, guid: 63eaba0ebfb82cc43bde059b4a8c65f6, type: 3} + gaussianDepthOfFieldPS: {fileID: 4800000, guid: 5e7134d6e63e0bc47a1dd2669cedb379, type: 3} + bokehDepthOfFieldPS: {fileID: 4800000, guid: 2aed67ad60045d54ba3a00c91e2d2631, type: 3} + cameraMotionBlurPS: {fileID: 4800000, guid: 1edcd131364091c46a17cbff0b1de97a, type: 3} + paniniProjectionPS: {fileID: 4800000, guid: a15b78cf8ca26ca4fb2090293153c62c, type: 3} + lutBuilderLdrPS: {fileID: 4800000, guid: 65df88701913c224d95fc554db28381a, type: 3} + lutBuilderHdrPS: {fileID: 4800000, guid: ec9fec698a3456d4fb18cf8bacb7a2bc, type: 3} + bloomPS: {fileID: 4800000, guid: 5f1864addb451f54bae8c86d230f736e, type: 3} + temporalAntialiasingPS: {fileID: 4800000, guid: 9c70c1a35ff15f340b38ea84842358bf, type: 3} + LensFlareDataDrivenPS: {fileID: 4800000, guid: 6cda457ac28612740adb23da5d39ea92, type: 3} + LensFlareScreenSpacePS: {fileID: 4800000, guid: 701880fecb344ea4c9cd0db3407ab287, type: 3} + scalingSetupPS: {fileID: 4800000, guid: e8ee25143a34b8c4388709ea947055d1, type: 3} + easuPS: {fileID: 4800000, guid: 562b7ae4f629f144aa97780546fce7c6, type: 3} + uberPostPS: {fileID: 4800000, guid: e7857e9d0c934dc4f83f270f8447b006, type: 3} + finalPostPassPS: {fileID: 4800000, guid: c49e63ed1bbcb334780a3bd19dfed403, type: 3} + m_ShaderResourcesVersion: 0 + - rid: 8483784682713120769 + type: {class: ScreenSpaceAmbientOcclusionPersistentResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Shader: {fileID: 4800000, guid: 0849e84e3d62649e8882e9d6f056a017, type: 3} + m_Version: 0 + - rid: 8483784682713120770 + type: {class: UniversalRenderPipelineEditorAssets, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_DefaultSettingsVolumeProfile: {fileID: 11400000, guid: eda47df5b85f4f249abf7abd73db2cb2, type: 2} + - rid: 8483784682713120771 + type: {class: ScreenSpaceAmbientOcclusionDynamicResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_BlueNoise256Textures: + - {fileID: 2800000, guid: 36f118343fc974119bee3d09e2111500, type: 3} + - {fileID: 2800000, guid: 4b7b083e6b6734e8bb2838b0b50a0bc8, type: 3} + - {fileID: 2800000, guid: c06cc21c692f94f5fb5206247191eeee, type: 3} + - {fileID: 2800000, guid: cb76dd40fa7654f9587f6a344f125c9a, type: 3} + - {fileID: 2800000, guid: e32226222ff144b24bf3a5a451de54bc, type: 3} + - {fileID: 2800000, guid: 3302065f671a8450b82c9ddf07426f3a, type: 3} + - {fileID: 2800000, guid: 56a77a3e8d64f47b6afe9e3c95cb57d5, type: 3} + m_Version: 0 + - rid: 8483784682713120772 + type: {class: UniversalRenderPipelineRuntimeXRResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_xrOcclusionMeshPS: {fileID: 4800000, guid: 4431b1f1f743fbf4eb310a967890cbea, type: 3} + m_xrMirrorViewPS: {fileID: 4800000, guid: d5a307c014552314b9f560906d708772, type: 3} + m_xrMotionVector: {fileID: 4800000, guid: f89aac1e4f84468418fe30e611dff395, type: 3} + - rid: 8483784682713120773 + type: {class: PostProcessData/TextureResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + blueNoise16LTex: + - {fileID: 2800000, guid: 81200413a40918d4d8702e94db29911c, type: 3} + - {fileID: 2800000, guid: d50c5e07c9911a74982bddf7f3075e7b, type: 3} + - {fileID: 2800000, guid: 1134690bf9216164dbc75050e35b7900, type: 3} + - {fileID: 2800000, guid: 7ce2118f74614a94aa8a0cdf2e6062c3, type: 3} + - {fileID: 2800000, guid: 2ca97df9d1801e84a8a8f2c53cb744f0, type: 3} + - {fileID: 2800000, guid: e63eef8f54aa9dc4da9a5ac094b503b5, type: 3} + - {fileID: 2800000, guid: 39451254daebd6d40b52899c1f1c0c1b, type: 3} + - {fileID: 2800000, guid: c94ad916058dff743b0f1c969ddbe660, type: 3} + - {fileID: 2800000, guid: ed5ea7ce59ca8ec4f9f14bf470a30f35, type: 3} + - {fileID: 2800000, guid: 071e954febf155243a6c81e48f452644, type: 3} + - {fileID: 2800000, guid: 96aaab9cc247d0b4c98132159688c1af, type: 3} + - {fileID: 2800000, guid: fc3fa8f108657e14486697c9a84ccfc5, type: 3} + - {fileID: 2800000, guid: bfed3e498947fcb4890b7f40f54d85b9, type: 3} + - {fileID: 2800000, guid: d512512f4af60a442ab3458489412954, type: 3} + - {fileID: 2800000, guid: 47a45908f6db0cb44a0d5e961143afec, type: 3} + - {fileID: 2800000, guid: 4dcc0502f8586f941b5c4a66717205e8, type: 3} + - {fileID: 2800000, guid: 9d92991794bb5864c8085468b97aa067, type: 3} + - {fileID: 2800000, guid: 14381521ff11cb74abe3fe65401c23be, type: 3} + - {fileID: 2800000, guid: d36f0fe53425e08499a2333cf423634c, type: 3} + - {fileID: 2800000, guid: d4044ea2490d63b43aa1765f8efbf8a9, type: 3} + - {fileID: 2800000, guid: c9bd74624d8070f429e3f46d161f9204, type: 3} + - {fileID: 2800000, guid: d5c9b274310e5524ebe32a4e4da3df1f, type: 3} + - {fileID: 2800000, guid: f69770e54f2823f43badf77916acad83, type: 3} + - {fileID: 2800000, guid: 10b6c6d22e73dea46a8ab36b6eebd629, type: 3} + - {fileID: 2800000, guid: a2ec5cbf5a9b64345ad3fab0912ddf7b, type: 3} + - {fileID: 2800000, guid: 1c3c6d69a645b804fa232004b96b7ad3, type: 3} + - {fileID: 2800000, guid: d18a24d7b4ed50f4387993566d9d3ae2, type: 3} + - {fileID: 2800000, guid: c989e1ed85cf7154caa922fec53e6af6, type: 3} + - {fileID: 2800000, guid: ff47e5a0f105eb34883b973e51f4db62, type: 3} + - {fileID: 2800000, guid: fa042edbfc40fbd4bad0ab9d505b1223, type: 3} + - {fileID: 2800000, guid: 896d9004736809c4fb5973b7c12eb8b9, type: 3} + - {fileID: 2800000, guid: 179f794063d2a66478e6e726f84a65bc, type: 3} + filmGrainTex: + - {fileID: 2800000, guid: 654c582f7f8a5a14dbd7d119cbde215d, type: 3} + - {fileID: 2800000, guid: dd77ffd079630404e879388999033049, type: 3} + - {fileID: 2800000, guid: 1097e90e1306e26439701489f391a6c0, type: 3} + - {fileID: 2800000, guid: f0b67500f7fad3b4c9f2b13e8f41ba6e, type: 3} + - {fileID: 2800000, guid: 9930fb4528622b34687b00bbe6883de7, type: 3} + - {fileID: 2800000, guid: bd9e8c758250ef449a4b4bfaad7a2133, type: 3} + - {fileID: 2800000, guid: 510a2f57334933e4a8dbabe4c30204e4, type: 3} + - {fileID: 2800000, guid: b4db8180660810945bf8d55ab44352ad, type: 3} + - {fileID: 2800000, guid: fd2fd78b392986e42a12df2177d3b89c, type: 3} + - {fileID: 2800000, guid: 5cdee82a77d13994f83b8fdabed7c301, type: 3} + smaaAreaTex: {fileID: 2800000, guid: d1f1048909d55cd4fa1126ab998f617e, type: 3} + smaaSearchTex: {fileID: 2800000, guid: 51eee22c2a633ef4aada830eed57c3fd, type: 3} + m_TexturesResourcesVersion: 0 + - rid: 8483784682713120774 + type: {class: RenderingDebuggerRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_version: 0 + - rid: 8483784682713120775 + type: {class: VrsRenderPipelineRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_TextureComputeShader: {fileID: 7200000, guid: cacb30de6c40c7444bbc78cb0a81fd2a, type: 3} + m_VisualizationShader: {fileID: 4800000, guid: 620b55b8040a88d468e94abe55bed5ba, type: 3} + m_VisualizationLookupTable: + m_Data: + - {r: 1, g: 0, b: 0, a: 1} + - {r: 1, g: 0.92156863, b: 0.015686275, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0, g: 1, b: 0, a: 1} + - {r: 0.75, g: 0.75, b: 0, a: 1} + - {r: 0, g: 0.75, b: 0.55, a: 1} + - {r: 0.5, g: 0, b: 0.5, a: 1} + - {r: 0.5, g: 0.5, b: 0.5, a: 1} + - {r: 0, g: 0, b: 1, a: 1} + m_ConversionLookupTable: + m_Data: + - {r: 1, g: 0, b: 0, a: 1} + - {r: 1, g: 0.92156863, b: 0.015686275, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0, g: 1, b: 0, a: 1} + - {r: 0.75, g: 0.75, b: 0, a: 1} + - {r: 0, g: 0.75, b: 0.55, a: 1} + - {r: 0.5, g: 0, b: 0.5, a: 1} + - {r: 0.5, g: 0.5, b: 0.5, a: 1} + - {r: 0, g: 0, b: 1, a: 1} + - rid: 8483784682713120776 + type: {class: LightmapSamplingSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + m_UseBicubicLightmapSampling: 0 + - rid: 8712630790384254976 + type: {class: RenderGraphUtilsResources, ns: UnityEngine.Rendering.RenderGraphModule.Util, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 0 + m_CoreCopyPS: {fileID: 4800000, guid: 12dc59547ea167a4ab435097dd0f9add, type: 3} diff --git a/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset.meta b/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset.meta new file mode 100644 index 0000000..81b84f2 --- /dev/null +++ b/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 18dc0cd2c080841dea60987a38ce93fa +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets.meta b/Assets/StreamingAssets.meta new file mode 100644 index 0000000..b69bf82 --- /dev/null +++ b/Assets/StreamingAssets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c343aabed31e84b69b82897e7b990a9e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Localization.meta b/Assets/StreamingAssets/Localization.meta new file mode 100644 index 0000000..7036f24 --- /dev/null +++ b/Assets/StreamingAssets/Localization.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db70c201a0d184204ab4452aedd6832d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Localization/English.xml b/Assets/StreamingAssets/Localization/English.xml new file mode 100644 index 0000000..e69de29 diff --git a/Assets/StreamingAssets/Localization/English.xml.meta b/Assets/StreamingAssets/Localization/English.xml.meta new file mode 100644 index 0000000..cf63335 --- /dev/null +++ b/Assets/StreamingAssets/Localization/English.xml.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 90f84a6a37c742fe86b3afbcf81ef612 +timeCreated: 1760115000 \ No newline at end of file diff --git a/Assets/StreamingAssets/Localization/French.xml b/Assets/StreamingAssets/Localization/French.xml new file mode 100644 index 0000000..e69de29 diff --git a/Assets/StreamingAssets/Localization/French.xml.meta b/Assets/StreamingAssets/Localization/French.xml.meta new file mode 100644 index 0000000..cbf554d --- /dev/null +++ b/Assets/StreamingAssets/Localization/French.xml.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 70cf670d7e2b445c89699592b09993f3 +timeCreated: 1760115072 \ No newline at end of file diff --git a/Assets/StreamingAssets/Localization/Spanish.xml b/Assets/StreamingAssets/Localization/Spanish.xml new file mode 100644 index 0000000..e69de29 diff --git a/Assets/StreamingAssets/Localization/Spanish.xml.meta b/Assets/StreamingAssets/Localization/Spanish.xml.meta new file mode 100644 index 0000000..2265ac3 --- /dev/null +++ b/Assets/StreamingAssets/Localization/Spanish.xml.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1f7e3bb35ec5462cb1a21a4ec729d2a6 +timeCreated: 1760115086 \ No newline at end of file diff --git a/Assets/TutorialInfo.meta b/Assets/TutorialInfo.meta new file mode 100644 index 0000000..a700bca --- /dev/null +++ b/Assets/TutorialInfo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ba062aa6c92b140379dbc06b43dd3b9b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TutorialInfo/Icons.meta b/Assets/TutorialInfo/Icons.meta new file mode 100644 index 0000000..1d19fb9 --- /dev/null +++ b/Assets/TutorialInfo/Icons.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8a0c9218a650547d98138cd835033977 +folderAsset: yes +timeCreated: 1484670163 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TutorialInfo/Icons/URP.png b/Assets/TutorialInfo/Icons/URP.png new file mode 100644 index 0000000000000000000000000000000000000000..6194a807e27158f864a7c7677f4cbf62d8b94503 GIT binary patch literal 24069 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 HejoV(); + DontDestroyOnLoad(runner.gameObject); + runner.StartCoroutine(runner.PlayRoutine(clip, position, volume, spatialBlend, pitch, minDistance, maxDistance, output)); + } + + private IEnumerator PlayRoutine(AudioClip clip, Vector3 position, float volume, float spatialBlend, float pitch, float minDistance, float maxDistance, AudioMixerGroup output) + { + var go = new GameObject($"OneShot_{clip.name}"); + go.transform.position = position; + var src = go.AddComponent(); + src.playOnAwake = false; + src.volume = volume; + src.pitch = Mathf.Max(0.01f, pitch); + src.spatialBlend = Mathf.Clamp01(spatialBlend); + src.minDistance = minDistance; + src.maxDistance = maxDistance; + src.rolloffMode = AudioRolloffMode.Logarithmic; + src.outputAudioMixerGroup = output; + + // On assigne le clip et on joue + src.clip = clip; + src.Play(); + + // Attendre la fin réelle de la lecture + while (src != null && (src.isPlaying || src.time < clip.length)) + yield return null; + + if (go != null) Object.Destroy(go); + if (this != null) Object.Destroy(gameObject); // détruire le runner + } + + } +} + diff --git a/Assets/_/Features/Core/Runtime/AudioOneShot.cs.meta b/Assets/_/Features/Core/Runtime/AudioOneShot.cs.meta new file mode 100644 index 0000000..559ef34 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/AudioOneShot.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 403d34891ad64003a08b2d22330793c4 +timeCreated: 1758098472 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/BaseMonoBehaviour.cs b/Assets/_/Features/Core/Runtime/BaseMonoBehaviour.cs new file mode 100644 index 0000000..7dd798e --- /dev/null +++ b/Assets/_/Features/Core/Runtime/BaseMonoBehaviour.cs @@ -0,0 +1,138 @@ +using System.Collections.Generic; +using Core.Runtime.Interfaces; +using UnityEngine; + +namespace Core.Runtime +{ + public class BaseMonoBehaviour : MonoBehaviour + { + #region Publics + + [Header("Debug")] + [SerializeField] protected bool m_isVerbose; + + public enum FactPersistence + { + Normal, + Persistent, + } + + public GameObject GameObject => _gameObject ? _gameObject : _gameObject = gameObject; + public Rigidbody Rigidbody => _rigidbody ? _rigidbody : _rigidbody = GetComponent(); + public Transform Transform => _transform ? _transform : _transform = GetComponent(); + + #endregion + + #region Fact Dictionnary + + protected bool FactExists(string key, out T value) + { + GameFacts.FactExists(key, out value); + return value != null; + } + + protected T GetFact(string key) + { + return GameFacts.GetFact(key); + } + + protected Dictionary GetAllFacts() + { + return GameFacts.GetAllFacts(); + } + + protected void SetFact(string key, T value, FactPersistence persistence = FactPersistence.Normal) + { + GameFacts.SetFact(key, value, persistence); + } + + protected void RemoveFact(string key) + { + GameFacts.RemoveFact(key); + } + + #endregion + + #region Save System + + protected List GetAllSaves() + { + return GameFacts.GetAllSaves(); + } + + protected void SaveFacts(string slotName = "") + { + string slot = GameManager.Instance.Profile; + if (slotName != "") + { + slot = slotName; + } + + if (GameFacts.SaveFacts(slot)) + { + Info("Données sauvegardées avec succès dans le fichier save.json"); + } + else + { + Error("Failed to save facts"); + } + } + + protected void LoadFacts(string slotName = "") + { + string slot = GameManager.Instance.Profile; + if (slotName != "") + { + slot = slotName; + } + + if (GameFacts.LoadFacts(slot)) + { + Info("Données chargées avec succès"); + } + else + { + Error("Failed to load facts"); + } + } + + protected void DeleteSaveFile() + { + GameFacts.DeleteSaveFile(GameManager.Instance.Profile); + } + + #endregion + + #region DEBUG + + protected void Info(string message) + { + if (!m_isVerbose) return; + Debug.Log(message, this); + } + + protected void Error(string message) + { + if (!m_isVerbose) return; + Debug.LogError(message, this); + } + + protected void Warning(string message) + { + if (!m_isVerbose) return; + Debug.LogWarning(message, this); + } + + #endregion + + #region GETTERS + + private GameObject _gameObject; + private Rigidbody _rigidbody; + private Transform _transform; + + protected FactDictionnary GameFacts => GameManager.m_gameFacts; + + #endregion + } +} diff --git a/Assets/_/Features/Core/Runtime/BaseMonoBehaviour.cs.meta b/Assets/_/Features/Core/Runtime/BaseMonoBehaviour.cs.meta new file mode 100644 index 0000000..4672b2c --- /dev/null +++ b/Assets/_/Features/Core/Runtime/BaseMonoBehaviour.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 5a0991893b6c24954afe021de03614ad diff --git a/Assets/_/Features/Core/Runtime/CheckManagers.cs b/Assets/_/Features/Core/Runtime/CheckManagers.cs new file mode 100644 index 0000000..48eb15e --- /dev/null +++ b/Assets/_/Features/Core/Runtime/CheckManagers.cs @@ -0,0 +1,51 @@ +using System; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace Core.Runtime +{ + public class CheckManagers : MonoBehaviour + { + + #region Publics + + // + + #endregion + + + #region Unity API + + void Awake() + { + if (GameManager.Instance == null) + { + SceneManager.LoadScene("TitleScreen"); + } + } + + #endregion + + + #region Main Methods + + // + + #endregion + + + #region Utils + + /* Fonctions privées utiles */ + + #endregion + + + #region Privates and Protected + + // Variables privées + + #endregion + } +} + diff --git a/Assets/_/Features/Core/Runtime/CheckManagers.cs.meta b/Assets/_/Features/Core/Runtime/CheckManagers.cs.meta new file mode 100644 index 0000000..45baafd --- /dev/null +++ b/Assets/_/Features/Core/Runtime/CheckManagers.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 07a79fcaf2ea4d4e82777e9dec39d553 +timeCreated: 1757927209 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/Core.Runtime.asmdef b/Assets/_/Features/Core/Runtime/Core.Runtime.asmdef new file mode 100644 index 0000000..45175fe --- /dev/null +++ b/Assets/_/Features/Core/Runtime/Core.Runtime.asmdef @@ -0,0 +1,16 @@ +{ + "name": "Core.Runtime", + "rootNamespace": "Core.Runtime", + "references": [ + "GUID:6055be8ebefd69e48b49212b09b47b2f" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/Core.Runtime.asmdef.meta b/Assets/_/Features/Core/Runtime/Core.Runtime.asmdef.meta new file mode 100644 index 0000000..f6824c0 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/Core.Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f86a85de7d85846209da708ccd7175e8 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_/Features/Core/Runtime/EnumInputs.cs b/Assets/_/Features/Core/Runtime/EnumInputs.cs new file mode 100644 index 0000000..bd84bf4 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/EnumInputs.cs @@ -0,0 +1,8 @@ +namespace Core.Runtime +{ + public enum EnumInputs + { + Player, + UI + } +} diff --git a/Assets/_/Features/Core/Runtime/EnumInputs.cs.meta b/Assets/_/Features/Core/Runtime/EnumInputs.cs.meta new file mode 100644 index 0000000..e5816ee --- /dev/null +++ b/Assets/_/Features/Core/Runtime/EnumInputs.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b2da6a29581940dc80af532617ecda96 +timeCreated: 1757927538 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/EnumLanguage.cs b/Assets/_/Features/Core/Runtime/EnumLanguage.cs new file mode 100644 index 0000000..7b65418 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/EnumLanguage.cs @@ -0,0 +1,9 @@ +namespace Core.Runtime._.Features.Core.Runtime +{ + public enum EnumLanguage + { + French, + English, + Spanish, + } +} \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/EnumLanguage.cs.meta b/Assets/_/Features/Core/Runtime/EnumLanguage.cs.meta new file mode 100644 index 0000000..9a96584 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/EnumLanguage.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fc6a721d7edb4ea2b419513579ab9621 +timeCreated: 1758878437 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/FactsSystem.meta b/Assets/_/Features/Core/Runtime/FactsSystem.meta new file mode 100644 index 0000000..8cd8393 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/FactsSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6cacc9eeddc0145c6b5621147a413323 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_/Features/Core/Runtime/FactsSystem/Fact.cs b/Assets/_/Features/Core/Runtime/FactsSystem/Fact.cs new file mode 100644 index 0000000..82decad --- /dev/null +++ b/Assets/_/Features/Core/Runtime/FactsSystem/Fact.cs @@ -0,0 +1,43 @@ +using System; +using Core.Runtime.Interfaces; +using Newtonsoft.Json; +using UnityEngine; + +namespace Core.Runtime +{ + public class Fact : IFact + { + + #region Publics + + public T Value; + + public Fact(object value, bool isPersistent) + { + Value = (T) value; + IsPersistent = isPersistent; + } + + public Type ValueType => typeof(T); + + [JsonIgnore] + public object GetObjectValue => Value; + + public void SetObjectValue(object value) + { + if (value is T cast) + { + Value = cast; + } + else + { + throw new InvalidCastException("Cannot asign a value to a fact"); + } + } + + public bool IsPersistent { get; set; } + + #endregion + } +} + diff --git a/Assets/_/Features/Core/Runtime/FactsSystem/Fact.cs.meta b/Assets/_/Features/Core/Runtime/FactsSystem/Fact.cs.meta new file mode 100644 index 0000000..3f85a79 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/FactsSystem/Fact.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dbdaad04e901476ebafb6f2c0d22a257 +timeCreated: 1752132457 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/FactsSystem/FactDictionary.cs b/Assets/_/Features/Core/Runtime/FactsSystem/FactDictionary.cs new file mode 100644 index 0000000..b650d7c --- /dev/null +++ b/Assets/_/Features/Core/Runtime/FactsSystem/FactDictionary.cs @@ -0,0 +1,214 @@ +using System; +using System.Collections.Generic; +using System.IO; +using Core.Runtime.Interfaces; +using Newtonsoft.Json; +using UnityEngine; + +namespace Core.Runtime +{ + public class FactDictionnary + { + #region Publics + + public Dictionary AllFacts => _facts; + + #endregion + + #region Main Methods + + public bool FactExists(string key, out T value) + { + if (_facts.TryGetValue(key, out var fact) && fact is Fact typedFact) + { + value = typedFact.Value; + return true; + } + + value = default; + return false; + } + + public void SetFact(string key, T value, BaseMonoBehaviour.FactPersistence persistence) + { + if (_facts.TryGetValue(key, out var existingFact)) + { + if (existingFact is Fact typedFact) + { + typedFact.Value = value; + typedFact.IsPersistent = persistence == BaseMonoBehaviour.FactPersistence.Persistent; + } + else + { + throw new InvalidCastException("Fact exists but is a wrong type"); + } + } + else + { + bool isPersistent = persistence == BaseMonoBehaviour.FactPersistence.Persistent; + _facts[key] = new Fact(value, isPersistent); + } + } + + public T GetFact(string key) + { + if (!_facts.TryGetValue(key, out var fact)) + { + throw new InvalidCastException($"Fact {key} does not exist"); + } + + if (_facts[key] is not Fact typedFact) + { + throw new InvalidCastException($"Fact {key} is not of type {typeof(T)}"); + } + + return typedFact.Value; + } + + public Dictionary GetAllFacts() + { + return AllFacts; + } + + public List GetAllFactsOfType() + { + List list = new(); + foreach (var fact in _facts.Values) + { + if (fact is Fact typedFact) + { + list.Add(typedFact.Value); + } + } + return list; + } + + public void RemoveFact(string key) + { + _facts.Remove(key); + } + + public List GetAllSaves() + { + foreach (var slot in Directory.GetFiles(Application.persistentDataPath)) + { + if (slot.Contains("_save.json") && (!slot.Contains("GeneralSettings") || !slot.Contains("continue"))) + { + string fileName = Path.GetFileNameWithoutExtension(slot); + if (fileName.EndsWith("_save")) + { + string slotName = fileName.Substring(0, fileName.Length - "_save".Length); // "Rom1" + _saves.Add(slotName); + } + } + } + return _saves; + } + + public bool SaveFileExists(string slotName= "") + { + if (slotName != "") + { + string filename = Path.Combine(Application.persistentDataPath, $"{slotName}_save.json"); + return File.Exists(filename); + } + + int nbFiles = Directory.GetFiles(Application.persistentDataPath, "*.json").Length; + string fileSettings = Path.Combine(Application.persistentDataPath, "GeneralSettings_save.json"); + string fileContinue = Path.Combine(Application.persistentDataPath, "continue_save.json"); + if (File.Exists(fileSettings)) nbFiles--; // On retire le fichier nommé GeneralSettings_save.json + if (File.Exists(fileContinue)) nbFiles--; // On retire le fichier nommé continue_save.json + + if(nbFiles <= 0) return false; + + return true; + } + + public bool SaveFacts(string slotName) + { + Dictionary persistentsFacts = GetPersistentsFacts(); + + // Permet à Newtonsoft de savoir quel type concret sérialiser via le champ $type + JsonSerializerSettings settings = new JsonSerializerSettings + { + Formatting = Formatting.Indented, + NullValueHandling = NullValueHandling.Ignore, + DateFormatHandling = DateFormatHandling.IsoDateFormat, + TypeNameHandling = TypeNameHandling.All // Ajout du type dans le JSON + }; + + string json = JsonConvert.SerializeObject(persistentsFacts, settings); + string filename = Path.Combine(Application.persistentDataPath, $"{slotName}_save.json"); + + //Debug.Log($"Saving to {filename}"); + + try + { + File.WriteAllText(filename, json); + _saves.Add(slotName); + return true; + } + catch (Exception e) + { + return false; + } + } + + public bool LoadFacts(string slotName) + { + string file = Path.Combine(Application.persistentDataPath, $"{slotName}_save.json"); + if (File.Exists(file)) + { + // Permet à Newtonsoft de savoir quel type concret désérialiser via le champ $type + JsonSerializerSettings settings = new JsonSerializerSettings + { + TypeNameHandling = TypeNameHandling.All + }; + + string json = File.ReadAllText(file); + Dictionary facts = JsonConvert.DeserializeObject>(json, settings); + + foreach (var fact in facts) + { + _facts[fact.Key] = fact.Value; + } + return true; + } + + return false; + } + + public void DeleteSaveFile(string slotName) + { + string file = Path.Combine(Application.persistentDataPath, $"{slotName}_save.json"); + File.Delete(file); + } + + #endregion + + #region Utils + + private Dictionary GetPersistentsFacts() + { + Dictionary persistentsFacts = new(); + + foreach (var fact in _facts) + { + if (fact.Value.IsPersistent) + { + persistentsFacts.Add(fact.Key, fact.Value); + } + } + return persistentsFacts; + } + + #endregion + + #region private + + private Dictionary _facts = new(); + private List _saves = new List(); + + #endregion + } +} \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/FactsSystem/FactDictionary.cs.meta b/Assets/_/Features/Core/Runtime/FactsSystem/FactDictionary.cs.meta new file mode 100644 index 0000000..b04f6d9 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/FactsSystem/FactDictionary.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bb7f99aca4b5495aaecca229e21225ef +timeCreated: 1752132416 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/GameManager.cs b/Assets/_/Features/Core/Runtime/GameManager.cs new file mode 100644 index 0000000..aca65f2 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/GameManager.cs @@ -0,0 +1,295 @@ +using System; +using System.Collections.Generic; +using Core.Runtime._.Features.Core.Runtime; +using Core.Runtime.Interfaces; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace Core.Runtime +{ + [RequireComponent(typeof(SceneLoader), typeof(LocalizationSystem))] + public class GameManager: BaseMonoBehaviour + { + #region Publics + + public static GameManager Instance { get; set; } + + public static FactDictionnary m_gameFacts; + + public static event Action OnMenuCalled; + public static event Action OnKonamiCode; + + public bool IsOnPause + { + get => isOnPause; + set => isOnPause = value; + } + + public FactDictionnary Fact + { + get + { + return _fact; + } + set + { + _fact = value; + } + } + + public String Profile + { + get + { + return _profile; + } + set + { + _profile = value; + } + } + + public bool SaveFileExist => m_gameFacts.SaveFileExists(); + + public bool CanPause + { + get => _canPause; + set => _canPause = value; + } + + public EnumLanguage CurrentLanguage + { + get + { + return _currentLanguage; + } + set + { + _currentLanguage = value; + } + } + + public Dictionary GetLocalTexts + { + get + { + return _localTexts; + } + set + { + _localTexts = value; + } + } + + public string CurrentSceneName + { + get + { + return _currentSceneName; + } + set + { + _currentSceneName = value; + } + } + + public string SecondSceneName + { + get + { + return _secondSceneName; + } + set + { + _secondSceneName = value; + } + } + + #endregion + + + #region Unity API + + void Awake() + { + _sceneLoader = GetComponent(); + // Si une instance existe déjà et que ce n’est pas celle-ci, détruire ce GameObject + if (Instance != null && Instance != this) + { + Destroy(gameObject); + return; + } + + // Sinon, cette instance devient l’instance unique + Instance = this; + DontDestroyOnLoad(gameObject); + + m_gameFacts = new FactDictionnary(); + _localTexts = new Dictionary(); + + if (m_gameFacts.SaveFileExists("GeneralSettings")) + { + LoadFacts("GeneralSettings"); + } + else + { + GeneralSettings settings = new GeneralSettings + { + Language = EnumLanguage.French, + GeneralVolume = 1, + MusicVolume = 1, + MetronomeVolume = 1, + SfxVolume = 1 + }; + SetFact("GeneralSettings", settings, FactPersistence.Persistent); + SaveFacts("GeneralSettings"); + } + + CurrentLanguage = GetFact("GeneralSettings").Language; + + LocalizationSystem.Instance.LoadLanguage(CurrentLanguage); + } + + void Update() + { + CheckKonamiCode(); + if(SceneManager.GetActiveScene().name == "TitleScreen") return; + if (!CanPause) return; + + if (Input.GetKeyDown(KeyCode.Escape) && CanPause) + { + IsOnPause = !IsOnPause; + OnMenuCalled?.Invoke(IsOnPause); + } + + if (IsOnPause && CanPause) + { + SetInputs(EnumInputs.UI); + } + else + { + OnMenuCalled?.Invoke(IsOnPause); + SetInputs(EnumInputs.Player); + Cursor.visible = false; + Cursor.lockState = CursorLockMode.Locked; + } + } + + #endregion + + + #region Main Methods + + public void RegisterInputHandler(IInputHandler handler) + { + _inputHandler = handler; + } + + public void SetInputs(EnumInputs value) + { + switch (value) + { + case EnumInputs.UI: + _inputHandler?.EnableUI(); + break; + case EnumInputs.Player: + _inputHandler?.EnablePlayer(); + break; + } + } + + public void CreateObject(GameObject prefab, Vector3 position) + { + Instantiate(prefab, position, Quaternion.identity); + } + + public void ReloadScene() + { + string sceneName = SceneManager.GetActiveScene().name; + _sceneLoader.LoadScene(sceneName); + } + + #endregion + + + #region Utils + + /* Fonctions privées utiles */ + void CheckKonamiCode() + { + if (_konamiIndex > 0) + { + _konamiTimer += Time.deltaTime; + if (_konamiTimer >= _konamiStepTimeout) + { + _konamiTimer = 0f; + _konamiIndex = 0; + } + } + + if (Input.anyKeyDown) + { + if (Input.GetKeyDown(_konamiSequence[_konamiIndex])) + { + _konamiIndex++; + _konamiTimer = 0f; + + if (_konamiIndex >= _konamiSequence.Length) + { + _konamiIndex = 0; + _konamiTimer = 0f; + TriggerKonamiEsaterEgg(); + } + } + else + { + _konamiIndex = 0; + _konamiTimer = 0f; + } + } + } + + void TriggerKonamiEsaterEgg() + { + _myClip = Resources.Load("Audio/harp-flourish-6251"); + _someWorldPos = new Vector3(0, 0, 0); + AudioOneShot.PlayAndDestroy(_myClip, _someWorldPos, 1f, spatialBlend: 1f); + OnKonamiCode?.Invoke(); + } + + #endregion + + + #region Privates and Protected + + bool isOnPause = false; + SceneLoader _sceneLoader; + FactDictionnary _fact; + bool _canPause; + string _profile; + EnumLanguage _currentLanguage = EnumLanguage.French; + Dictionary _localTexts; + static IInputHandler _inputHandler; + + int _konamiIndex = 0; + float _konamiTimer = 0f; + float _konamiStepTimeout = 1f; + + readonly KeyCode[] _konamiSequence = new[] + { + KeyCode.UpArrow, KeyCode.UpArrow, + KeyCode.DownArrow, KeyCode.DownArrow, + KeyCode.LeftArrow, KeyCode.RightArrow, + KeyCode.LeftArrow, KeyCode.RightArrow, + KeyCode.B, KeyCode.Q + }; + + AudioClip _myClip; + Vector3 _someWorldPos; + + string _currentSceneName; + string _secondSceneName; + + #endregion + } +} \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/GameManager.cs.meta b/Assets/_/Features/Core/Runtime/GameManager.cs.meta new file mode 100644 index 0000000..19611dd --- /dev/null +++ b/Assets/_/Features/Core/Runtime/GameManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3664fb5e6bffa4a6cbfc8fce31b53be3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 11 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_/Features/Core/Runtime/GeneralSettings.cs b/Assets/_/Features/Core/Runtime/GeneralSettings.cs new file mode 100644 index 0000000..b69d73c --- /dev/null +++ b/Assets/_/Features/Core/Runtime/GeneralSettings.cs @@ -0,0 +1,60 @@ +using System.Collections.Generic; +using Core.Runtime._.Features.Core.Runtime; + +namespace Core.Runtime +{ + public class GeneralSettings + { + #region Attributes + + EnumLanguage _language; + + float _generalVolume; + float _musicVolume; + private float _metronomeVolume; + float _sfxVolume; + + #endregion + + + #region Getters and Setters + + public EnumLanguage Language + { + get => _language; + set => _language = value; + } + + public float GeneralVolume + { + get => _generalVolume; + set => _generalVolume = value; + } + public float MusicVolume + { + get => _musicVolume; + set => _musicVolume = value; + } + + public float MetronomeVolume + { + get => _metronomeVolume; + set => _metronomeVolume = value; + } + + public float SfxVolume + { + get => _sfxVolume; + set => _sfxVolume = value; + } + + #endregion + + + public List ApplyResolution(string resolution) + { + string[] res = resolution.Split('x'); + return new List { int.Parse(res[0]), int.Parse(res[1]) }; + } + } +} diff --git a/Assets/_/Features/Core/Runtime/GeneralSettings.cs.meta b/Assets/_/Features/Core/Runtime/GeneralSettings.cs.meta new file mode 100644 index 0000000..a3adbba --- /dev/null +++ b/Assets/_/Features/Core/Runtime/GeneralSettings.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 93e49b753dd642e3bb11f51adfb2fdf8 +timeCreated: 1754912382 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/GlobalEventSystem.cs b/Assets/_/Features/Core/Runtime/GlobalEventSystem.cs new file mode 100644 index 0000000..838f07d --- /dev/null +++ b/Assets/_/Features/Core/Runtime/GlobalEventSystem.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace Core.Runtime._.Features.Core.Runtime +{ + public class GlobalEventSystem : MonoBehaviour + { + private static GlobalEventSystem _instance; + + private void Awake() + { + if (_instance != null) + { + Destroy(gameObject); // Détruire les doublons + return; + } + + _instance = this; + DontDestroyOnLoad(gameObject); // Rendre persistant + } + } +} \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/GlobalEventSystem.cs.meta b/Assets/_/Features/Core/Runtime/GlobalEventSystem.cs.meta new file mode 100644 index 0000000..6cae2f5 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/GlobalEventSystem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 926d511d0daac3c40a9c01ec1f8190c0 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/Interfaces.meta b/Assets/_/Features/Core/Runtime/Interfaces.meta new file mode 100644 index 0000000..c0143f6 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/Interfaces.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d65176b4369414721beed3a163bf9929 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_/Features/Core/Runtime/Interfaces/IEvent.cs b/Assets/_/Features/Core/Runtime/Interfaces/IEvent.cs new file mode 100644 index 0000000..1e474c9 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/Interfaces/IEvent.cs @@ -0,0 +1,7 @@ +namespace Core.Runtime.Interfaces +{ + public interface IEvent + { + + } +} diff --git a/Assets/_/Features/Core/Runtime/Interfaces/IEvent.cs.meta b/Assets/_/Features/Core/Runtime/Interfaces/IEvent.cs.meta new file mode 100644 index 0000000..2e83cc3 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/Interfaces/IEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d7d3d7aa6d7c42d1b37d418d570a6489 +timeCreated: 1758027691 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/Interfaces/IFact.cs b/Assets/_/Features/Core/Runtime/Interfaces/IFact.cs new file mode 100644 index 0000000..0c549d8 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/Interfaces/IFact.cs @@ -0,0 +1,12 @@ +using System; + +namespace Core.Runtime.Interfaces +{ + public interface IFact + { + Type ValueType { get; } + object GetObjectValue { get; } + void SetObjectValue(object value); + bool IsPersistent { get; } + } +} diff --git a/Assets/_/Features/Core/Runtime/Interfaces/IFact.cs.meta b/Assets/_/Features/Core/Runtime/Interfaces/IFact.cs.meta new file mode 100644 index 0000000..d12e910 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/Interfaces/IFact.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 28d823c3a267436eaf00bf170c9669f9 +timeCreated: 1752132484 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/Interfaces/IInputHandler.cs b/Assets/_/Features/Core/Runtime/Interfaces/IInputHandler.cs new file mode 100644 index 0000000..b5e11e9 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/Interfaces/IInputHandler.cs @@ -0,0 +1,8 @@ +namespace Core.Runtime.Interfaces +{ + public interface IInputHandler + { + void EnablePlayer(); + void EnableUI(); + } +} diff --git a/Assets/_/Features/Core/Runtime/Interfaces/IInputHandler.cs.meta b/Assets/_/Features/Core/Runtime/Interfaces/IInputHandler.cs.meta new file mode 100644 index 0000000..de9b87d --- /dev/null +++ b/Assets/_/Features/Core/Runtime/Interfaces/IInputHandler.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 343bec88c3a642b6acebd80f8cefe8e3 +timeCreated: 1757928664 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/LoadingScene.cs b/Assets/_/Features/Core/Runtime/LoadingScene.cs new file mode 100644 index 0000000..59d85ba --- /dev/null +++ b/Assets/_/Features/Core/Runtime/LoadingScene.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections; +using DG.Tweening; +using TMPro; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace Core.Runtime +{ + public class LoadingScene : BaseMonoBehaviour + { + private void Awake() + { + SceneLoader.Instance.LoadSceneAsync(GameManager.Instance.CurrentSceneName); + if(GameManager.Instance.SecondSceneName != null) + { + DOTween.KillAll(); + SceneLoader.Instance.LoadSceneBackground(GameManager.Instance.SecondSceneName); + } + } + + private void Start() + { + LocalizationSystem.Instance.LocalizeAllTextsIn(transform); + } + + private void Update() + { + if (SceneLoader.Instance.IsLoading) + { + float progress = SceneLoader.Instance.Progress; + if (_progressNum != null) + { + _progressNum.text = $"{progress * 100:00}%"; + } + } + } + + [SerializeField] TMP_Text _progressNum; + } +} \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/LoadingScene.cs.meta b/Assets/_/Features/Core/Runtime/LoadingScene.cs.meta new file mode 100644 index 0000000..f60b117 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/LoadingScene.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: be958fd84cb8466f94bf41a8a6645077 +timeCreated: 1758699294 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/LocalizationSystem.cs b/Assets/_/Features/Core/Runtime/LocalizationSystem.cs new file mode 100644 index 0000000..68ea95a --- /dev/null +++ b/Assets/_/Features/Core/Runtime/LocalizationSystem.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.IO; +using Core.Runtime._.Features.Core.Runtime; +using TMPro; +using UnityEngine; + +namespace Core.Runtime +{ + public class LocalizationSystem : BaseMonoBehaviour + { + + #region Publics + + public static LocalizationSystem Instance { get; private set; } + + #endregion + + + #region Unity API + + private void Awake() + { + if (Instance != null && Instance != this) + { + Destroy(gameObject); + return; + } + + Instance = this; + DontDestroyOnLoad(gameObject); + } + + #endregion + + + #region Main Methods + + public void LocalizeAllTextsIn(Transform root) + { + foreach (var txt in root.GetComponentsInChildren(true)) + { + txt.text = GetLocalizedText(txt.text); + } + } + + /*public string GetLocalizedText(string key) + { + if (GameManager.Instance.GetLocalTexts.TryGetValue(key, out var value)) + return value; + + return $"{key}"; + }*/ + + public string GetLocalizedText(string key) + { + if (GameManager.Instance.GetLocalTexts.TryGetValue(key, out var value)) + return value; + + return key; + } + + public void SaveLanguage(string newLanguage) + { + // + } + + public void LoadLanguage(EnumLanguage langReceived) + { + string lang = langReceived.ToString(); + + if (Enum.TryParse(lang, out EnumLanguage parsedLang)) + { + GameManager.Instance.GetLocalTexts = XmlLoader.LoadDictionary(GetLanguageFile(langReceived)); + } + else + { + Debug.LogError($"[ERROR] La langue '{lang}' ne correspond pas à un membre de EnumLanguage."); + return; // Si la conversion échoue, on sort de la méthode + } + } + + #endregion + + #region Utils + + private string GetLanguage() + { + string file = GetLanguageFile(); + + return file.Split('/')[file.Split('/').Length - 1].Split('.')[0]; + } + + private string GetLanguageFile(EnumLanguage lang = EnumLanguage.French) + { + //string filename = Application.dataPath + "/_/Database/Localization/" + GetFact("GeneralSettings").Language + ".xml"; + string filename = $"Localization/{lang}.xml"; + string filepath = Path.Combine(Application.streamingAssetsPath, filename); + + if (File.Exists(filepath)) + { + return filepath; + } + return Path.Combine(Application.streamingAssetsPath, "French.xml"); + } + + #endregion + } +} + diff --git a/Assets/_/Features/Core/Runtime/LocalizationSystem.cs.meta b/Assets/_/Features/Core/Runtime/LocalizationSystem.cs.meta new file mode 100644 index 0000000..e8b05fd --- /dev/null +++ b/Assets/_/Features/Core/Runtime/LocalizationSystem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 02c5410883674e91875167d2ef34abe5 +timeCreated: 1752475493 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/SceneLoader.cs b/Assets/_/Features/Core/Runtime/SceneLoader.cs new file mode 100644 index 0000000..cc2bfb6 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/SceneLoader.cs @@ -0,0 +1,166 @@ +using System; +using System.Collections; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.SceneManagement; +using Random = UnityEngine.Random; + +namespace Core.Runtime +{ + public class SceneLoader : BaseMonoBehaviour + { + + #region Publics + + public static event Action OnSceneLoaded; + public static string CurrentSceneName => SceneManager.GetActiveScene().name; + public static SceneLoader Instance { get; private set; } + + public float Progress => _progress; + public bool IsLoading => _progress < 1f; + + #endregion + + + #region Unity API + + private void Awake() + { + if (Instance != null) + { + Destroy(gameObject); + return; + } + Instance = this; + DontDestroyOnLoad(gameObject); + + SceneManager.sceneLoaded += HandleSceneLoaded; + } + + void OnDestroy() + { + SceneManager.sceneLoaded -= HandleSceneLoaded; + } + + #endregion + + + #region Main Methods + + public void LoadScene(string sceneName) + { + SceneManager.LoadScene(sceneName); + } + + public void LoadSceneAsync(string sceneName) + { + StartCoroutine(LoadSceneWithAsync(sceneName)); + } + + public void LoadSceneBackground(string sceneName) + { + SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive).completed += (operation) => + { + SetSceneActive(sceneName, false); + }; + } + + public void SetSceneActive(string sceneName, bool isActive) + { + Scene scene = SceneManager.GetSceneByName(sceneName); + if (scene.IsValid() && scene.isLoaded) + { + foreach (GameObject rootObj in scene.GetRootGameObjects()) + { + rootObj.SetActive(isActive); + } + } + else + { + Debug.Log($"La scène {sceneName} n'est pas chargée ou invalide."); + } + } + + public void UnloadScene(string sceneName) + { + if (SceneManager.GetSceneByName(sceneName).isLoaded) + { + SceneManager.UnloadSceneAsync(sceneName).completed += (operation) => + { + return; + }; + } + } + + public void FakeLoading(string nextSceneName) + { + Info("On vérifie que la scene Loading est disponible"); + if (SceneExists("Loading")) + { + LoadScene("Loading"); + Info($"level suivant {nextSceneName}"); + StartCoroutine(WaitingLoading(nextSceneName)); + } + } + + #endregion + + + #region Utils + + private IEnumerator LoadSceneWithAsync(string sceneName) + { + AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(sceneName); + + asyncOperation.allowSceneActivation = false; + + while (!asyncOperation.isDone) + { + _progress = Mathf.Clamp01(asyncOperation.progress / .9f); + + if (asyncOperation.progress >= .9f) + { + yield return new WaitForSeconds(1); + asyncOperation.allowSceneActivation = true; + } + yield return null; + _progress = 1f; + } + } + + private IEnumerator WaitingLoading(string nextSceneName) + { + int time = Random.Range(3, 6); + Info($"On attend {time} secondes et on charge la scene {nextSceneName}"); + yield return new WaitForSeconds(time); + LoadScene(nextSceneName); + } + + private void HandleSceneLoaded(Scene scene, LoadSceneMode mode) + { + OnSceneLoaded?.Invoke(scene); + } + + private bool SceneExists(string sceneName) + { + for (int i = 0; i < SceneManager.sceneCountInBuildSettings; i++) + { + string path = SceneUtility.GetScenePathByBuildIndex(i); + string name = System.IO.Path.GetFileNameWithoutExtension(path); + if (name == sceneName) + return true; + } + return false; + } + + #endregion + + + #region Privates and Protected + + float _progress; + + #endregion + } +} + diff --git a/Assets/_/Features/Core/Runtime/SceneLoader.cs.meta b/Assets/_/Features/Core/Runtime/SceneLoader.cs.meta new file mode 100644 index 0000000..980d793 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/SceneLoader.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9a4bd386e20d414fb3e91c510e890143 +timeCreated: 1751130958 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/TranslationTextTransform.cs b/Assets/_/Features/Core/Runtime/TranslationTextTransform.cs new file mode 100644 index 0000000..8e2204d --- /dev/null +++ b/Assets/_/Features/Core/Runtime/TranslationTextTransform.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +namespace Core.Runtime +{ + public class TranslationTextTransfform : MonoBehaviour + { + // Start is called once before the first execution of Update after the MonoBehaviour is created + private void Start() + { + LocalizationSystem.Instance.LocalizeAllTextsIn(transform); + } + + // Update is called once per frame + void Update() + { + + } + } +} diff --git a/Assets/_/Features/Core/Runtime/TranslationTextTransform.cs.meta b/Assets/_/Features/Core/Runtime/TranslationTextTransform.cs.meta new file mode 100644 index 0000000..82a26c3 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/TranslationTextTransform.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 56005dfbf2859e9478184b0345121367 \ No newline at end of file diff --git a/Assets/_/Features/Core/Runtime/XmlLoader.cs b/Assets/_/Features/Core/Runtime/XmlLoader.cs new file mode 100644 index 0000000..c697337 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/XmlLoader.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using System.Linq; +using System.Xml.Linq; +using UnityEngine; + +namespace Core.Runtime +{ + public class XmlLoader + { + public static Dictionary LoadDictionary(string filepath) + { + XDocument xmlDoc = XDocument.Load(filepath); + return xmlDoc.Root + .Elements() + .ToDictionary( + e => e.Name.LocalName, + e => e.Value + ); + } + } +} + diff --git a/Assets/_/Features/Core/Runtime/XmlLoader.cs.meta b/Assets/_/Features/Core/Runtime/XmlLoader.cs.meta new file mode 100644 index 0000000..b4c4127 --- /dev/null +++ b/Assets/_/Features/Core/Runtime/XmlLoader.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f0170f390842426a826731a88149968e +timeCreated: 1752483882 \ No newline at end of file diff --git a/Packages/manifest.json b/Packages/manifest.json new file mode 100644 index 0000000..3dfe980 --- /dev/null +++ b/Packages/manifest.json @@ -0,0 +1,48 @@ +{ + "dependencies": { + "com.unity.ai.navigation": "2.0.9", + "com.unity.collab-proxy": "2.10.0", + "com.unity.ide.rider": "3.0.38", + "com.unity.ide.visualstudio": "2.0.23", + "com.unity.inputsystem": "1.14.2", + "com.unity.multiplayer.center": "1.0.0", + "com.unity.nuget.newtonsoft-json": "3.2.1", + "com.unity.render-pipelines.universal": "17.2.0", + "com.unity.test-framework": "1.6.0", + "com.unity.timeline": "1.8.9", + "com.unity.ugui": "2.0.0", + "com.unity.visualscripting": "1.9.7", + "com.unity.modules.accessibility": "1.0.0", + "com.unity.modules.ai": "1.0.0", + "com.unity.modules.androidjni": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.cloth": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.screencapture": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.terrainphysics": "1.0.0", + "com.unity.modules.tilemap": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.umbra": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.unitywebrequesttexture": "1.0.0", + "com.unity.modules.unitywebrequestwww": "1.0.0", + "com.unity.modules.vehicles": "1.0.0", + "com.unity.modules.video": "1.0.0", + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.wind": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } +} diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json new file mode 100644 index 0000000..00cfb28 --- /dev/null +++ b/Packages/packages-lock.json @@ -0,0 +1,472 @@ +{ + "dependencies": { + "com.unity.ai.navigation": { + "version": "2.0.9", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.ai": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.burst": { + "version": "1.8.25", + "depth": 2, + "source": "registry", + "dependencies": { + "com.unity.mathematics": "1.2.1", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.collab-proxy": { + "version": "2.10.0", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.collections": { + "version": "2.5.7", + "depth": 2, + "source": "registry", + "dependencies": { + "com.unity.burst": "1.8.19", + "com.unity.mathematics": "1.3.2", + "com.unity.test-framework": "1.4.6", + "com.unity.nuget.mono-cecil": "1.11.5", + "com.unity.test-framework.performance": "3.0.3" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ext.nunit": { + "version": "2.0.5", + "depth": 1, + "source": "builtin", + "dependencies": {} + }, + "com.unity.ide.rider": { + "version": "3.0.38", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.visualstudio": { + "version": "2.0.23", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.9" + }, + "url": "https://packages.unity.com" + }, + "com.unity.inputsystem": { + "version": "1.14.2", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.uielements": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.mathematics": { + "version": "1.3.2", + "depth": 2, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.multiplayer.center": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.uielements": "1.0.0" + } + }, + "com.unity.nuget.mono-cecil": { + "version": "1.11.5", + "depth": 3, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.nuget.newtonsoft-json": { + "version": "3.2.1", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.render-pipelines.core": { + "version": "17.2.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.burst": "1.8.14", + "com.unity.mathematics": "1.3.2", + "com.unity.ugui": "2.0.0", + "com.unity.collections": "2.4.3", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.rendering.light-transport": "1.0.1" + } + }, + "com.unity.render-pipelines.universal": { + "version": "17.2.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.render-pipelines.core": "17.2.0", + "com.unity.shadergraph": "17.2.0", + "com.unity.render-pipelines.universal-config": "17.0.3" + } + }, + "com.unity.render-pipelines.universal-config": { + "version": "17.0.3", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.render-pipelines.core": "17.0.3" + } + }, + "com.unity.rendering.light-transport": { + "version": "1.0.1", + "depth": 2, + "source": "builtin", + "dependencies": { + "com.unity.collections": "2.2.0", + "com.unity.mathematics": "1.2.4", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.searcher": { + "version": "4.9.3", + "depth": 2, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.shadergraph": { + "version": "17.2.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.render-pipelines.core": "17.2.0", + "com.unity.searcher": "4.9.3" + } + }, + "com.unity.test-framework": { + "version": "1.6.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.ext.nunit": "2.0.3", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.test-framework.performance": { + "version": "3.2.0", + "depth": 3, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.33", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.timeline": { + "version": "1.8.9", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ugui": { + "version": "2.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0" + } + }, + "com.unity.visualscripting": { + "version": "1.9.7", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.modules.accessibility": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.androidjni": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.assetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.cloth": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.hierarchycore": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.screencapture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.subsystems": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.modules.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics2d": "1.0.0" + } + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.hierarchycore": "1.0.0", + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.umbra": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unitywebrequestassetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestaudio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.audio": "1.0.0" + } + }, + "com.unity.modules.unitywebrequesttexture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestwww": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.vehicles": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.video": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.vr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } + }, + "com.unity.modules.wind": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.xr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.subsystems": "1.0.0" + } + } + } +} diff --git a/ProjectSettings/AudioManager.asset b/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000..27287fe --- /dev/null +++ b/ProjectSettings/AudioManager.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 1024 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_AmbisonicDecoderPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 + m_RequestedDSPBufferSize: 0 diff --git a/ProjectSettings/ClusterInputManager.asset b/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..e7886b2 --- /dev/null +++ b/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000..fc90ab9 --- /dev/null +++ b/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 6 + m_DefaultSolverVelocityIterations: 1 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_ClothInterCollisionDistance: 0.1 + m_ClothInterCollisionStiffness: 0.2 + m_ContactsGeneration: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_AutoSimulation: 1 + m_AutoSyncTransforms: 0 + m_ReuseCollisionCallbacks: 1 + m_ClothInterCollisionSettingsToggle: 0 + m_ClothGravity: {x: 0, y: -9.81, z: 0} + m_ContactPairsMode: 0 + m_BroadphaseType: 0 + m_WorldBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 250, y: 250, z: 250} + m_WorldSubdivisions: 8 + m_FrictionType: 0 + m_EnableEnhancedDeterminism: 0 + m_EnableUnifiedHeightmaps: 1 + m_SolverType: 0 + m_DefaultMaxAngularSpeed: 50 diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000..d057ba3 --- /dev/null +++ b/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,13 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: + - enabled: 1 + path: Assets/Scenes/SampleScene.unity + guid: 99c9720ab356a0642a771bea13969a05 + m_configObjects: + com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3} + m_UseUCBPForAssetBundles: 0 diff --git a/ProjectSettings/EditorSettings.asset b/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000..878c4cb --- /dev/null +++ b/ProjectSettings/EditorSettings.asset @@ -0,0 +1,50 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 15 + m_SerializationMode: 2 + m_LineEndingsForNewScripts: 0 + m_DefaultBehaviorMode: 0 + m_PrefabRegularEnvironment: {fileID: 0} + m_PrefabUIEnvironment: {fileID: 0} + m_SpritePackerMode: 0 + m_SpritePackerCacheSize: 10 + m_SpritePackerPaddingPower: 1 + m_Bc7TextureCompressor: 0 + m_EtcTextureCompressorBehavior: 1 + m_EtcTextureFastCompressor: 1 + m_EtcTextureNormalCompressor: 2 + m_EtcTextureBestCompressor: 4 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref + m_ProjectGenerationRootNamespace: + m_EnableTextureStreamingInEditMode: 1 + m_EnableTextureStreamingInPlayMode: 1 + m_EnableEditorAsyncCPUTextureLoading: 0 + m_AsyncShaderCompilation: 1 + m_PrefabModeAllowAutoSave: 1 + m_EnterPlayModeOptionsEnabled: 1 + m_EnterPlayModeOptions: 0 + m_GameObjectNamingDigits: 1 + m_GameObjectNamingScheme: 0 + m_AssetNamingUsesSpace: 1 + m_InspectorUseIMGUIDefaultInspector: 0 + m_UseLegacyProbeSampleCount: 0 + m_SerializeInlineMappingsOnOneLine: 1 + m_DisableCookiesInLightmapper: 0 + m_ShadowmaskStitching: 0 + m_AssetPipelineMode: 1 + m_RefreshImportMode: 0 + m_CacheServerMode: 0 + m_CacheServerEndpoint: + m_CacheServerNamespacePrefix: default + m_CacheServerEnableDownload: 1 + m_CacheServerEnableUpload: 1 + m_CacheServerEnableAuth: 0 + m_CacheServerEnableTls: 0 + m_CacheServerValidationMode: 2 + m_CacheServerDownloadBatchSize: 128 + m_EnableEnlightenBakedGI: 0 + m_ReferencedClipsExactNaming: 1 + m_ForceAssetUnloadAndGCOnSceneLoad: 1 diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000..aa5a1c3 --- /dev/null +++ b/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,70 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 16 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_VideoShadersIncludeMode: 2 + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_PreloadShadersBatchTimeLimit: -1 + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, + type: 0} + m_CustomRenderPipeline: {fileID: 11400000, guid: 4b83569d67af61e458304325a23e5dfd, + type: 2} + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 0, z: 1} + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_InstancingStripping: 0 + m_BrgStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 + m_AlbedoSwatchInfos: [] + m_RenderPipelineGlobalSettingsMap: + UnityEngine.Rendering.Universal.UniversalRenderPipeline: {fileID: 11400000, guid: 18dc0cd2c080841dea60987a38ce93fa, + type: 2} + m_LightsUseLinearIntensity: 1 + m_LightsUseColorTemperature: 1 + m_LogWhenShaderIsCompiled: 0 + m_LightProbeOutsideHullStrategy: 0 + m_CameraRelativeLightCulling: 0 + m_CameraRelativeShadowCulling: 0 diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset new file mode 100644 index 0000000..b16147e --- /dev/null +++ b/ProjectSettings/InputManager.asset @@ -0,0 +1,487 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Enable Debug Button 1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: joystick button 8 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Enable Debug Button 2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: backspace + altNegativeButton: + altPositiveButton: joystick button 9 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Reset + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Next + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: page down + altNegativeButton: + altPositiveButton: joystick button 5 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Previous + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: page up + altNegativeButton: + altPositiveButton: joystick button 4 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Validate + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Persistent + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: right shift + altNegativeButton: + altPositiveButton: joystick button 2 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Multiplier + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: joystick button 3 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 2 + axis: 6 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 2 + axis: 5 + joyNum: 0 diff --git a/ProjectSettings/MemorySettings.asset b/ProjectSettings/MemorySettings.asset new file mode 100644 index 0000000..5b5face --- /dev/null +++ b/ProjectSettings/MemorySettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!387306366 &1 +MemorySettings: + m_ObjectHideFlags: 0 + m_EditorMemorySettings: + m_MainAllocatorBlockSize: -1 + m_ThreadAllocatorBlockSize: -1 + m_MainGfxBlockSize: -1 + m_ThreadGfxBlockSize: -1 + m_CacheBlockSize: -1 + m_TypetreeBlockSize: -1 + m_ProfilerBlockSize: -1 + m_ProfilerEditorBlockSize: -1 + m_BucketAllocatorGranularity: -1 + m_BucketAllocatorBucketsCount: -1 + m_BucketAllocatorBlockSize: -1 + m_BucketAllocatorBlockCount: -1 + m_ProfilerBucketAllocatorGranularity: -1 + m_ProfilerBucketAllocatorBucketsCount: -1 + m_ProfilerBucketAllocatorBlockSize: -1 + m_ProfilerBucketAllocatorBlockCount: -1 + m_TempAllocatorSizeMain: -1 + m_JobTempAllocatorBlockSize: -1 + m_BackgroundJobTempAllocatorBlockSize: -1 + m_JobTempAllocatorReducedBlockSize: -1 + m_TempAllocatorSizeGIBakingWorker: -1 + m_TempAllocatorSizeNavMeshWorker: -1 + m_TempAllocatorSizeAudioWorker: -1 + m_TempAllocatorSizeCloudWorker: -1 + m_TempAllocatorSizeGfx: -1 + m_TempAllocatorSizeJobWorker: -1 + m_TempAllocatorSizeBackgroundWorker: -1 + m_TempAllocatorSizePreloadManager: -1 + m_PlatformMemorySettings: {} diff --git a/ProjectSettings/MultiplayerManager.asset b/ProjectSettings/MultiplayerManager.asset new file mode 100644 index 0000000..2a93664 --- /dev/null +++ b/ProjectSettings/MultiplayerManager.asset @@ -0,0 +1,7 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!655991488 &1 +MultiplayerManager: + m_ObjectHideFlags: 0 + m_EnableMultiplayerRoles: 0 + m_StrippingTypes: {} diff --git a/ProjectSettings/NavMeshAreas.asset b/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000..3b0b7c3 --- /dev/null +++ b/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + m_LastAgentTypeID: -887442657 + m_Settings: + - serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.75 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_SettingNames: + - Humanoid diff --git a/ProjectSettings/PackageManagerSettings.asset b/ProjectSettings/PackageManagerSettings.asset new file mode 100644 index 0000000..be4a797 --- /dev/null +++ b/ProjectSettings/PackageManagerSettings.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_EnablePreviewPackages: 0 + m_EnablePackageDependencies: 0 + m_AdvancedSettingsExpanded: 1 + m_ScopedRegistriesSettingsExpanded: 1 + oneTimeWarningShown: 0 + m_Registries: + - m_Id: main + m_Name: + m_Url: https://packages.unity.com + m_Scopes: [] + m_IsDefault: 1 + m_Capabilities: 7 + m_UserSelectedRegistryName: + m_UserAddingNewScopedRegistry: 0 + m_RegistryInfoDraft: + m_ErrorMessage: + m_Original: + m_Id: + m_Name: + m_Url: + m_Scopes: [] + m_IsDefault: 0 + m_Capabilities: 0 + m_Modified: 0 + m_Name: + m_Url: + m_Scopes: + - + m_SelectedScopeIndex: 0 diff --git a/ProjectSettings/Physics2DSettings.asset b/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000..6c5cf8a --- /dev/null +++ b/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,56 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_DefaultContactOffset: 0.01 + m_JobOptions: + serializedVersion: 2 + useMultithreading: 0 + useConsistencySorting: 0 + m_InterpolationPosesPerJob: 100 + m_NewContactsPerJob: 30 + m_CollideContactsPerJob: 100 + m_ClearFlagsPerJob: 200 + m_ClearBodyForcesPerJob: 200 + m_SyncDiscreteFixturesPerJob: 50 + m_SyncContinuousFixturesPerJob: 50 + m_FindNearestContactsPerJob: 100 + m_UpdateTriggerContactsPerJob: 100 + m_IslandSolverCostThreshold: 100 + m_IslandSolverBodyCostScale: 1 + m_IslandSolverContactCostScale: 10 + m_IslandSolverJointCostScale: 10 + m_IslandSolverBodiesPerJob: 50 + m_IslandSolverContactsPerJob: 50 + m_AutoSimulation: 1 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_CallbacksOnDisable: 1 + m_ReuseCollisionCallbacks: 0 + m_AutoSyncTransforms: 0 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/ProjectSettings/PresetManager.asset b/ProjectSettings/PresetManager.asset new file mode 100644 index 0000000..67a94da --- /dev/null +++ b/ProjectSettings/PresetManager.asset @@ -0,0 +1,7 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1386491679 &1 +PresetManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_DefaultPresets: {} diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000..8c6a392 --- /dev/null +++ b/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,956 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 28 + productGUID: 665fc3ee08626468d8861b4edd442e17 + AndroidProfiler: 0 + AndroidFilterTouchesWhenObscured: 0 + AndroidEnableSustainedPerformanceMode: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: GuildTycoon + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1024 + defaultScreenHeight: 768 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 1 + unsupportedMSAAFallback: 0 + m_SpriteBatchMaxVertexCount: 65535 + m_SpriteBatchVertexThreshold: 300 + m_MTRendering: 1 + mipStripping: 0 + numberOfMipsStripped: 0 + numberOfMipsStrippedPerMipmapLimitGroup: {} + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + iosUseCustomAppBackgroundBehavior: 0 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + preserveFramebufferAlpha: 0 + disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 1 + androidUseSwappy: 0 + androidBlitType: 0 + androidResizeableActivity: 1 + androidDefaultWindowWidth: 1920 + androidDefaultWindowHeight: 1080 + androidMinimumWindowWidth: 400 + androidMinimumWindowHeight: 300 + androidFullscreenMode: 1 + androidAutoRotationBehavior: 1 + androidPredictiveBackSupport: 1 + androidApplicationEntry: 2 + defaultIsNativeResolution: 1 + macRetinaSupport: 1 + runInBackground: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + audioSpatialExperience: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 + submitAnalytics: 1 + usePlayerLog: 1 + dedicatedServerOptimizations: 1 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + useFlipModelSwapchain: 1 + resizableWindow: 0 + useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games + gpuSkinning: 1 + meshDeformation: 2 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 1 + allowFullscreenSwitch: 1 + fullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 + xboxOneResolution: 0 + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOneEnableTypeOptimization: 0 + xboxOnePresentImmediateThreshold: 0 + switchQueueCommandMemory: 1048576 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 + switchGpuScratchPoolGranularity: 2097152 + switchAllowGpuScratchShrinking: 0 + switchNVNMaxPublicTextureIDCount: 0 + switchNVNMaxPublicSamplerIDCount: 0 + switchMaxWorkerMultiple: 8 + switchNVNGraphicsFirmwareMemory: 32 + switchGraphicsJobsSyncAfterKick: 1 + vulkanNumSwapchainBuffers: 3 + vulkanEnableSetSRGBWrite: 0 + vulkanEnablePreTransform: 1 + vulkanEnableLateAcquireNextImage: 0 + vulkanEnableCommandBufferRecycling: 1 + loadStoreDebugModeEnabled: 0 + visionOSBundleVersion: 1.0 + tvOSBundleVersion: 1.0 + bundleVersion: 0.1.0 + preloadedAssets: [] + metroInputSource: 0 + wsaTransparentSwapchain: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 1 + xboxOneEnable7thCore: 1 + vrSettings: + enable360StereoCapture: 0 + isWsaHolographicRemotingEnabled: 0 + enableFrameTimingStats: 0 + enableOpenGLProfilerGPURecorders: 1 + allowHDRDisplaySupport: 0 + useHDRDisplay: 0 + hdrBitDepth: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 30 + resolutionScalingMode: 0 + resetResolutionOnWindowResize: 0 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.4 + androidMinAspectRatio: 1 + applicationIdentifier: + Android: com.UnityTechnologies.com.unity.template.urpblank + Standalone: com.Unity-Technologies.com.unity.template.urp-blank + iPhone: com.Unity-Technologies.com.unity.template.urp-blank + buildNumber: + Standalone: 0 + VisionOS: 0 + iPhone: 0 + tvOS: 0 + overrideDefaultApplicationIdentifier: 1 + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 23 + AndroidTargetSdkVersion: 0 + AndroidPreferredInstallLocation: 1 + aotOptions: + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + androidSplitApplicationBinary: 0 + keepLoadedShadersAlive: 0 + StripUnusedMeshComponents: 0 + strictShaderVariantMatching: 0 + VertexChannelCompressionMask: 4054 + iPhoneSdkVersion: 988 + iOSSimulatorArchitecture: 0 + iOSTargetOSVersionString: 13.0 + tvOSSdkVersion: 0 + tvOSSimulatorArchitecture: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 13.0 + VisionOSSdkVersion: 0 + VisionOSTargetOSVersionString: 1.0 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreenCustomStoryboardPath: + iOSLaunchScreeniPadCustomStoryboardPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + macOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + metalCompileShaderBinary: 0 + iOSRenderExtraFrameOnPause: 0 + iosCopyPluginsCodeInsteadOfSymlink: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + VisionOSManualSigningProvisioningProfileID: + iOSManualSigningProvisioningProfileType: 0 + tvOSManualSigningProvisioningProfileType: 0 + VisionOSManualSigningProvisioningProfileType: 0 + appleEnableAutomaticSigning: 0 + iOSRequireARKit: 0 + iOSAutomaticallyDetectAndAddCapabilities: 1 + appleEnableProMotion: 0 + shaderPrecisionModel: 0 + clonedFromGUID: 3c72c65a16f0acb438eed22b8b16c24a + templatePackageId: com.unity.template.urp-blank@17.0.14 + templateDefaultScene: Assets/Scenes/SampleScene.unity + useCustomMainManifest: 0 + useCustomLauncherManifest: 0 + useCustomMainGradleTemplate: 0 + useCustomLauncherGradleManifest: 0 + useCustomBaseGradleTemplate: 0 + useCustomGradlePropertiesTemplate: 0 + useCustomGradleSettingsTemplate: 0 + useCustomProguardFile: 0 + AndroidTargetArchitectures: 2 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidEnableArmv9SecurityFeatures: 0 + AndroidEnableArm64MTE: 0 + AndroidBuildApkPerCpuArchitecture: 0 + AndroidTVCompatibility: 0 + AndroidIsGame: 1 + androidAppCategory: 3 + useAndroidAppCategory: 1 + androidAppCategoryOther: + AndroidEnableTango: 0 + androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + androidUseCustomKeystore: 0 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + AndroidMinifyRelease: 0 + AndroidMinifyDebug: 0 + AndroidValidateAppBundleSize: 1 + AndroidAppBundleSizeToValidate: 150 + AndroidReportGooglePlayAppDependencies: 1 + androidSymbolsSizeThreshold: 800 + m_BuildTargetIcons: [] + m_BuildTargetPlatformIcons: + - m_BuildTarget: iPhone + m_Icons: + - m_Textures: [] + m_Width: 180 + m_Height: 180 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 167 + m_Height: 167 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 152 + m_Height: 152 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 76 + m_Height: 76 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 87 + m_Height: 87 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 60 + m_Height: 60 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 20 + m_Height: 20 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 1024 + m_Height: 1024 + m_Kind: 4 + m_SubKind: App Store + - m_BuildTarget: Android + m_Icons: + - m_Textures: [] + m_Width: 432 + m_Height: 432 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 324 + m_Height: 324 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 216 + m_Height: 216 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 162 + m_Height: 162 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 108 + m_Height: 108 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 81 + m_Height: 81 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 0 + m_SubKind: + - m_BuildTarget: tvOS + m_Icons: + - m_Textures: [] + m_Width: 1280 + m_Height: 768 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 800 + m_Height: 480 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 400 + m_Height: 240 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 4640 + m_Height: 1440 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 2320 + m_Height: 720 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 3840 + m_Height: 1440 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 1920 + m_Height: 720 + m_Kind: 1 + m_SubKind: + m_BuildTargetBatching: [] + m_BuildTargetShaderSettings: [] + m_BuildTargetGraphicsJobs: [] + m_BuildTargetGraphicsJobMode: [] + m_BuildTargetGraphicsAPIs: + - m_BuildTarget: iOSSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: AndroidPlayer + m_APIs: 150000000b000000 + m_Automatic: 0 + m_BuildTargetVRSettings: [] + m_DefaultShaderChunkSizeInMB: 16 + m_DefaultShaderChunkCount: 0 + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + openGLRequireES32: 0 + m_TemplateCustomTags: {} + mobileMTRendering: + Android: 1 + iPhone: 1 + tvOS: 1 + m_BuildTargetGroupLightmapEncodingQuality: + - serializedVersion: 2 + m_BuildTarget: Android + m_EncodingQuality: 1 + m_BuildTargetGroupHDRCubemapEncodingQuality: [] + m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetGroupLoadStoreDebugModeSettings: [] + m_BuildTargetNormalMapEncoding: + - m_BuildTarget: Android + m_Encoding: 1 + m_BuildTargetDefaultTextureCompressionFormat: + - serializedVersion: 3 + m_BuildTarget: Android + m_Formats: 03000000 + playModeTestRunnerEnabled: 0 + runPlayModeTestAsEditModeTest: 0 + actionOnDotNetUnhandledException: 1 + editorGfxJobOverride: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + bluetoothUsageDescription: + macOSTargetOSVersion: 11.0 + switchNMETAOverride: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchEnableFileSystemTrace: 0 + switchLTOSetting: 0 + switchApplicationID: 0x01004b9000490000 + switchNSODependencies: + switchCompilerFlags: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchTitleNames_15: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchPublisherNames_15: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchIcons_15: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchSmallIcons_15: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: -1 + switchCardSpecClock: -1 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchRatingsInt_12: 0 + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 + switchSupportedNpadStyles: 22 + switchNativeFsCacheSize: 32 + switchIsHoldTypeHorizontal: 0 + switchSupportedNpadCount: 8 + switchEnableTouchScreen: 1 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchDisableHTCSPlayerConnection: 0 + switchUseNewStyleFilepaths: 0 + switchUseLegacyFmodPriorities: 0 + switchUseMicroSleepForYield: 1 + switchEnableRamDiskSupport: 0 + switchMicroSleepForYieldTime: 25 + switchRamDiskSpaceSize: 12 + switchUpgradedPlayerSettingsToNMETA: 0 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 11 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 60 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4ExtraSceSysFile: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 2 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + playerPrefsMaxSize: 32768 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + enableApplicationExit: 0 + resetTempFolder: 1 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4UseLowGarlicFragmentationMode: 1 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 2 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4CompatibilityPS5: 0 + ps4AllowPS5Detection: 0 + ps4GPU800MHz: 1 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + ps4attribVROutputEnabled: 0 + monoEnv: + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + blurSplashScreenBackground: 1 + spritePackerPolicy: + webGLMemorySize: 32 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLShowDiagnostics: 0 + webGLDataCaching: 1 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLCompressionFormat: 0 + webGLWasmArithmeticExceptions: 0 + webGLLinkerTarget: 1 + webGLThreadsSupport: 0 + webGLDecompressionFallback: 0 + webGLInitialMemorySize: 32 + webGLMaximumMemorySize: 2048 + webGLMemoryGrowthMode: 2 + webGLMemoryLinearGrowthStep: 16 + webGLMemoryGeometricGrowthStep: 0.2 + webGLMemoryGeometricGrowthCap: 96 + webGLPowerPreference: 2 + webGLWebAssemblyTable: 0 + webGLWebAssemblyBigInt: 0 + webGLCloseOnQuit: 0 + webWasm2023: 0 + webEnableSubmoduleStrippingCompatibility: 0 + scriptingDefineSymbols: + Android: DOTWEEN + EmbeddedLinux: DOTWEEN + GameCoreScarlett: DOTWEEN + GameCoreXboxOne: DOTWEEN + Kepler: DOTWEEN + LinuxHeadlessSimulation: DOTWEEN + Nintendo Switch: DOTWEEN + PS4: DOTWEEN + PS5: DOTWEEN + QNX: DOTWEEN + ReservedCFE: DOTWEEN + Standalone: DOTWEEN + VisionOS: DOTWEEN + WebGL: DOTWEEN + Windows Store Apps: DOTWEEN + XboxOne: DOTWEEN + iPhone: DOTWEEN + tvOS: DOTWEEN + additionalCompilerArguments: {} + platformArchitecture: {} + scriptingBackend: + Android: 1 + il2cppCompilerConfiguration: {} + il2cppCodeGeneration: {} + il2cppStacktraceInformation: {} + managedStrippingLevel: {} + incrementalIl2cppBuild: {} + suppressCommonWarnings: 1 + allowUnsafeCode: 0 + useDeterministicCompilation: 1 + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + gcIncremental: 1 + gcWBarrierValidation: 0 + apiCompatibilityLevelPerPlatform: {} + editorAssembliesCompatibilityLevel: 1 + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: GuildTycoon + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: GuildTycoon + wsaImages: {} + metroTileShortName: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} + metroSplashScreenUseBackgroundColor: 0 + syncCapabilities: 0 + platformCapabilities: {} + metroTargetDeviceFamilies: {} + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + vcxProjDefaultLanguage: + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOneVersion: 1.0.0.0 + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnhancedXboxCompatibilityMode: 0 + XboxOneEnableGPUVariability: 1 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + XboxOneXTitleMemory: 8 + XboxOneOverrideIdentityName: + XboxOneOverrideIdentityPublisher: + vrEditorSettings: {} + cloudServicesEnabled: {} + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_SignPackage: 1 + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: + hmiPlayerDataPath: + hmiForceSRGBBlit: 1 + embeddedLinuxEnableGamepadInput: 0 + hmiCpuConfiguration: + hmiLogStartupTiming: 0 + qnxGraphicConfPath: + apiCompatibilityLevel: 6 + captureStartupLogs: {} + activeInputHandler: 1 + windowsGamepadBackendHint: 0 + cloudProjectId: + framebufferDepthMemorylessMode: 0 + qualitySettingsNames: [] + projectName: + organizationId: + cloudEnabled: 0 + legacyClampBlendShapeWeights: 0 + hmiLoadingImage: {fileID: 0} + platformRequiresReadableAssets: 0 + virtualTexturingSupportEnabled: 0 + insecureHttpOption: 0 + androidVulkanDenyFilterList: [] + androidVulkanAllowFilterList: [] + androidVulkanDeviceFilterListAsset: {fileID: 0} + d3d12DeviceFilterListAsset: {fileID: 0} diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..b3ee2d4 --- /dev/null +++ b/ProjectSettings/ProjectVersion.txt @@ -0,0 +1,2 @@ +m_EditorVersion: 6000.2.7f2 +m_EditorVersionWithRevision: 6000.2.7f2 (2b518236b676) diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000..f55198a --- /dev/null +++ b/ProjectSettings/QualitySettings.asset @@ -0,0 +1,134 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 1 + m_QualitySettings: + - serializedVersion: 4 + name: Mobile + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + skinWeights: 2 + globalTextureMipmapLimit: 0 + textureMipmapLimitSettings: [] + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 1 + useLegacyDetailDistribution: 1 + adaptiveVsync: 0 + vSyncCount: 0 + realtimeGICPUUsage: 100 + adaptiveVsyncExtraA: 0 + adaptiveVsyncExtraB: 0 + lodBias: 1 + maximumLODLevel: 0 + enableLODCrossFade: 1 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 11400000, guid: 5e6cbd92db86f4b18aec3ed561671858, + type: 2} + terrainQualityOverrides: 0 + terrainPixelError: 1 + terrainDetailDensityScale: 1 + terrainBasemapDistance: 1000 + terrainDetailDistance: 80 + terrainTreeDistance: 5000 + terrainBillboardStart: 50 + terrainFadeLength: 5 + terrainMaxTrees: 50 + excludedTargetPlatforms: + - Standalone + - serializedVersion: 4 + name: PC + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + skinWeights: 4 + globalTextureMipmapLimit: 0 + textureMipmapLimitSettings: [] + anisotropicTextures: 2 + antiAliasing: 0 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 1 + useLegacyDetailDistribution: 1 + adaptiveVsync: 0 + vSyncCount: 0 + realtimeGICPUUsage: 100 + adaptiveVsyncExtraA: 0 + adaptiveVsyncExtraB: 0 + lodBias: 2 + maximumLODLevel: 0 + enableLODCrossFade: 1 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 11400000, guid: 4b83569d67af61e458304325a23e5dfd, + type: 2} + terrainQualityOverrides: 0 + terrainPixelError: 1 + terrainDetailDensityScale: 1 + terrainBasemapDistance: 1000 + terrainDetailDistance: 80 + terrainTreeDistance: 5000 + terrainBillboardStart: 50 + terrainFadeLength: 5 + terrainMaxTrees: 50 + excludedTargetPlatforms: + - Android + - iPhone + m_TextureMipmapLimitGroupNames: [] + m_PerPlatformDefaultQuality: + Android: 0 + GameCoreScarlett: 1 + GameCoreXboxOne: 1 + Lumin: 0 + Nintendo Switch: 1 + PS4: 1 + PS5: 1 + Server: 0 + Stadia: 0 + Standalone: 1 + WebGL: 0 + Windows Store Apps: 0 + XboxOne: 0 + iPhone: 0 + tvOS: 0 diff --git a/ProjectSettings/ShaderGraphSettings.asset b/ProjectSettings/ShaderGraphSettings.asset new file mode 100644 index 0000000..ce8c243 --- /dev/null +++ b/ProjectSettings/ShaderGraphSettings.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de02f9e1d18f588468e474319d09a723, type: 3} + m_Name: + m_EditorClassIdentifier: + shaderVariantLimit: 128 + overrideShaderVariantLimit: 0 + customInterpolatorErrorThreshold: 32 + customInterpolatorWarningThreshold: 16 + customHeatmapValues: {fileID: 0} diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset new file mode 100644 index 0000000..6413d11 --- /dev/null +++ b/ProjectSettings/TagManager.asset @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: [] + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 + m_RenderingLayers: + - Default + - Light Layer 1 + - Light Layer 2 + - Light Layer 3 + - Light Layer 4 + - Light Layer 5 + - Light Layer 6 + - Light Layer 7 + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - diff --git a/ProjectSettings/TimeManager.asset b/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000..558a017 --- /dev/null +++ b/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.33333334 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/ProjectSettings/URPProjectSettings.asset b/ProjectSettings/URPProjectSettings.asset new file mode 100644 index 0000000..64a8674 --- /dev/null +++ b/ProjectSettings/URPProjectSettings.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 247994e1f5a72c2419c26a37e9334c01, type: 3} + m_Name: + m_EditorClassIdentifier: + m_LastMaterialVersion: 10 diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..029ad8b --- /dev/null +++ b/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 1 + m_Enabled: 0 + m_TestMode: 0 + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com + m_DashboardUrl: https://dashboard.unity3d.com + m_TestInitMode: 0 + InsightsSettings: + m_EngineDiagnosticsEnabled: 1 + m_Enabled: 0 + CrashReportingSettings: + serializedVersion: 2 + m_EventUrl: https://perf-events.cloud.unity3d.com + m_EnableCloudDiagnosticsReporting: 0 + m_LogBufferSize: 10 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_TestMode: 0 + m_InitializeOnStartup: 1 + m_PackageRequiringCoreStatsPresent: 0 + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_IosGameId: + m_AndroidGameId: + m_GameIds: {} + m_GameId: + PerformanceReportingSettings: + m_Enabled: 0 diff --git a/ProjectSettings/VFXManager.asset b/ProjectSettings/VFXManager.asset new file mode 100644 index 0000000..3a95c98 --- /dev/null +++ b/ProjectSettings/VFXManager.asset @@ -0,0 +1,12 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!937362698 &1 +VFXManager: + m_ObjectHideFlags: 0 + m_IndirectShader: {fileID: 0} + m_CopyBufferShader: {fileID: 0} + m_SortShader: {fileID: 0} + m_StripUpdateShader: {fileID: 0} + m_RenderPipeSettingsPath: + m_FixedTimeStep: 0.016666668 + m_MaxDeltaTime: 0.05 diff --git a/ProjectSettings/VersionControlSettings.asset b/ProjectSettings/VersionControlSettings.asset new file mode 100644 index 0000000..dca2881 --- /dev/null +++ b/ProjectSettings/VersionControlSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!890905787 &1 +VersionControlSettings: + m_ObjectHideFlags: 0 + m_Mode: Visible Meta Files + m_CollabEditorSettings: + inProgressEnabled: 1 diff --git a/ProjectSettings/XRSettings.asset b/ProjectSettings/XRSettings.asset new file mode 100644 index 0000000..482590c --- /dev/null +++ b/ProjectSettings/XRSettings.asset @@ -0,0 +1,10 @@ +{ + "m_SettingKeys": [ + "VR Device Disabled", + "VR Device User Alert" + ], + "m_SettingValues": [ + "False", + "False" + ] +} \ No newline at end of file