From 1b578067f3b6e2265ead8864b63fe3d0e7e9f3fb Mon Sep 17 00:00:00 2001 From: ThomasCharester Date: Thu, 26 Feb 2026 13:19:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83?= =?UTF-8?q?=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/AddressableAssetsData.meta | 8 + .../AddressableAssetSettings.asset | 121 ++++ .../AddressableAssetSettings.asset.meta | 8 + .../AssetGroupTemplates.meta | 8 + .../AssetGroupTemplates/Packed Assets.asset | 79 +++ .../Packed Assets.asset.meta | 8 + Assets/AddressableAssetsData/AssetGroups.meta | 8 + .../AssetGroups/Default Local Group.asset | 65 +++ .../Default Local Group.asset.meta | 8 + .../AssetGroups/Schemas.meta | 8 + ... Local Group_BundledAssetGroupSchema.asset | 48 ++ ...l Group_BundledAssetGroupSchema.asset.meta | 8 + ...Local Group_ContentUpdateGroupSchema.asset | 16 + ... Group_ContentUpdateGroupSchema.asset.meta | 8 + .../AddressableAssetsData/DataBuilders.meta | 8 + .../DataBuilders/BuildScriptFastMode.asset | 20 + .../BuildScriptFastMode.asset.meta | 8 + .../DataBuilders/BuildScriptPackedMode.asset | 20 + .../BuildScriptPackedMode.asset.meta | 8 + .../BuildScriptPackedPlayMode.asset | 20 + .../BuildScriptPackedPlayMode.asset.meta | 8 + .../AddressableAssetsData/DefaultObject.asset | 15 + .../DefaultObject.asset.meta | 8 + Assets/Code/Calendar.meta | 3 + Assets/Code/Calendar/DataStructures.meta | 3 + .../Calendar/DataStructures/DataStructs.cs | 21 + .../DataStructures/DataStructs.cs.meta | 3 + .../Infrastructure/App/AppStateMachine.cs | 3 - .../Code/Infrastructure/App/PapaInstaller.cs | 73 +-- .../App/States/BootstrapState.cs | 13 +- .../Code/Infrastructure/Audio/AudioFactory.cs | 1 - .../Code/Infrastructure/Audio/AudioNames.cs | 3 +- .../Infrastructure/Configs/LayerMaskType.cs | 2 +- .../Infrastructure/Input/ActionMappings.cs | 8 +- .../Infrastructure/SceneLoader/SceneId.cs | 5 +- Assets/Code/Infrastructure/UI/UIPanelType.cs | 9 +- Assets/InputSystem_Actions.inputactions | 516 ++---------------- Assets/Plugins/NativeFilePicker.meta | 9 + Assets/Plugins/NativeFilePicker/Android.meta | 9 + .../Android/FPCallbackHelper.cs | 52 ++ .../Android/FPCallbackHelper.cs.meta | 19 + .../Android/FPPermissionCallbackAndroid.cs | 24 + .../FPPermissionCallbackAndroid.cs.meta | 19 + .../Android/FPResultCallbackAndroid.cs | 71 +++ .../Android/FPResultCallbackAndroid.cs.meta | 19 + .../Android/NativeFilePicker.aar | Bin 0 -> 31159 bytes .../Android/NativeFilePicker.aar.meta | 40 ++ Assets/Plugins/NativeFilePicker/Editor.meta | 9 + .../Editor/NativeFilePicker.Editor.asmdef | 15 + .../NativeFilePicker.Editor.asmdef.meta | 14 + .../Editor/NativeFilePickerCustomTypes.cs | 65 +++ .../NativeFilePickerCustomTypes.cs.meta | 19 + .../NativeFilePickerPostProcessBuild.cs | 199 +++++++ .../NativeFilePickerPostProcessBuild.cs.meta | 19 + .../NativeFilePicker.Runtime.asmdef | 3 + .../NativeFilePicker.Runtime.asmdef.meta | 14 + .../NativeFilePicker/NativeFilePicker.cs | 411 ++++++++++++++ .../NativeFilePicker/NativeFilePicker.cs.meta | 19 + Assets/Plugins/NativeFilePicker/README.txt | 6 + .../Plugins/NativeFilePicker/README.txt.meta | 15 + Assets/Plugins/NativeFilePicker/iOS.meta | 9 + .../iOS/FPResultCallbackiOS.cs | 155 ++++++ .../iOS/FPResultCallbackiOS.cs.meta | 19 + .../NativeFilePicker/iOS/NativeFilePicker.mm | 213 ++++++++ .../iOS/NativeFilePicker.mm.meta | 40 ++ .../Configs/InputServiceConfig.asset | 2 +- Assets/Resources_moved/UI/Canvas.prefab | 228 ++++---- .../Scenes/{SampleScene.unity => Main.unity} | 354 +++++++----- ...SampleScene.unity.meta => Main.unity.meta} | 2 +- ...structure.App.AppStateMachine.Generated.cs | 15 - .../ConfigLocator.Generated.cs | 37 +- .../SceneLoader.Generated.cs | 8 - .../SystemConfigsReferences.Generated.cs | 28 +- MojSad/.obsidian/workspace.json | 4 +- MojSad/Дела/Задача.md | 6 +- MojSad/Дела/Растение.md | 4 +- Packages/manifest.json | 2 +- Packages/packages-lock.json | 19 +- ProjectSettings/EditorBuildSettings.asset | 2 +- ProjectSettings/ProjectSettings.asset | 100 +++- ProjectSettings/QualitySettings.asset | 19 +- ProjectSettings/SceneTemplateSettings.json | 121 ++++ 82 files changed, 2692 insertions(+), 944 deletions(-) create mode 100644 Assets/AddressableAssetsData.meta create mode 100644 Assets/AddressableAssetsData/AddressableAssetSettings.asset create mode 100644 Assets/AddressableAssetsData/AddressableAssetSettings.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroupTemplates.meta create mode 100644 Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset create mode 100644 Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset.meta create mode 100644 Assets/AddressableAssetsData/DataBuilders.meta create mode 100644 Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset create mode 100644 Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset.meta create mode 100644 Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset create mode 100644 Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset.meta create mode 100644 Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset create mode 100644 Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset.meta create mode 100644 Assets/AddressableAssetsData/DefaultObject.asset create mode 100644 Assets/AddressableAssetsData/DefaultObject.asset.meta create mode 100644 Assets/Code/Calendar.meta create mode 100644 Assets/Code/Calendar/DataStructures.meta create mode 100644 Assets/Code/Calendar/DataStructures/DataStructs.cs create mode 100644 Assets/Code/Calendar/DataStructures/DataStructs.cs.meta create mode 100644 Assets/Plugins/NativeFilePicker.meta create mode 100644 Assets/Plugins/NativeFilePicker/Android.meta create mode 100644 Assets/Plugins/NativeFilePicker/Android/FPCallbackHelper.cs create mode 100644 Assets/Plugins/NativeFilePicker/Android/FPCallbackHelper.cs.meta create mode 100644 Assets/Plugins/NativeFilePicker/Android/FPPermissionCallbackAndroid.cs create mode 100644 Assets/Plugins/NativeFilePicker/Android/FPPermissionCallbackAndroid.cs.meta create mode 100644 Assets/Plugins/NativeFilePicker/Android/FPResultCallbackAndroid.cs create mode 100644 Assets/Plugins/NativeFilePicker/Android/FPResultCallbackAndroid.cs.meta create mode 100644 Assets/Plugins/NativeFilePicker/Android/NativeFilePicker.aar create mode 100644 Assets/Plugins/NativeFilePicker/Android/NativeFilePicker.aar.meta create mode 100644 Assets/Plugins/NativeFilePicker/Editor.meta create mode 100644 Assets/Plugins/NativeFilePicker/Editor/NativeFilePicker.Editor.asmdef create mode 100644 Assets/Plugins/NativeFilePicker/Editor/NativeFilePicker.Editor.asmdef.meta create mode 100644 Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerCustomTypes.cs create mode 100644 Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerCustomTypes.cs.meta create mode 100644 Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerPostProcessBuild.cs create mode 100644 Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerPostProcessBuild.cs.meta create mode 100644 Assets/Plugins/NativeFilePicker/NativeFilePicker.Runtime.asmdef create mode 100644 Assets/Plugins/NativeFilePicker/NativeFilePicker.Runtime.asmdef.meta create mode 100644 Assets/Plugins/NativeFilePicker/NativeFilePicker.cs create mode 100644 Assets/Plugins/NativeFilePicker/NativeFilePicker.cs.meta create mode 100644 Assets/Plugins/NativeFilePicker/README.txt create mode 100644 Assets/Plugins/NativeFilePicker/README.txt.meta create mode 100644 Assets/Plugins/NativeFilePicker/iOS.meta create mode 100644 Assets/Plugins/NativeFilePicker/iOS/FPResultCallbackiOS.cs create mode 100644 Assets/Plugins/NativeFilePicker/iOS/FPResultCallbackiOS.cs.meta create mode 100644 Assets/Plugins/NativeFilePicker/iOS/NativeFilePicker.mm create mode 100644 Assets/Plugins/NativeFilePicker/iOS/NativeFilePicker.mm.meta rename Assets/Scenes/{SampleScene.unity => Main.unity} (50%) rename Assets/Scenes/{SampleScene.unity.meta => Main.unity.meta} (74%) create mode 100644 ProjectSettings/SceneTemplateSettings.json diff --git a/Assets/AddressableAssetsData.meta b/Assets/AddressableAssetsData.meta new file mode 100644 index 0000000..71c003d --- /dev/null +++ b/Assets/AddressableAssetsData.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7dbf51973acd79342811956d53d4f199 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AddressableAssetSettings.asset b/Assets/AddressableAssetsData/AddressableAssetSettings.asset new file mode 100644 index 0000000..14314eb --- /dev/null +++ b/Assets/AddressableAssetsData/AddressableAssetSettings.asset @@ -0,0 +1,121 @@ +%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: 468a46d0ae32c3544b7d98094e6448a9, type: 3} + m_Name: AddressableAssetSettings + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.AddressableAssetSettings + m_DefaultGroup: 61413ea24ac5d754f9bfe1eff712957a + m_currentHash: + serializedVersion: 2 + Hash: cbf960f9f88de008b8321897911b184c + m_OptimizeCatalogSize: 0 + m_BuildRemoteCatalog: 0 + m_CatalogRequestsTimeout: 0 + m_DisableCatalogUpdateOnStart: 0 + m_InternalIdNamingMode: 0 + m_InternalBundleIdMode: 1 + m_AssetLoadMode: 0 + m_BundledAssetProviderType: + m_AssemblyName: + m_ClassName: + m_AssetBundleProviderType: + m_AssemblyName: + m_ClassName: + m_IgnoreUnsupportedFilesInBuild: 0 + m_UniqueBundleIds: 0 + m_EnableJsonCatalog: 0 + m_NonRecursiveBuilding: 1 + m_AllowNestedBundleFolders: 0 + m_CCDEnabled: 0 + m_maxConcurrentWebRequests: 3 + m_UseUWRForLocalBundles: 0 + m_BundleTimeout: 0 + m_BundleRetryCount: 0 + m_BundleRedirectLimit: -1 + m_SharedBundleSettings: 0 + m_SharedBundleSettingsCustomGroupIndex: 0 + m_simulatedLoadDelay: 0.1 + m_ContiguousBundles: 1 + m_StripUnityVersionFromBundleBuild: 0 + m_DisableVisibleSubAssetRepresentations: 0 + m_BuiltInBundleNaming: 0 + mBuiltInBundleCustomNaming: + m_MonoScriptBundleNaming: 0 + m_CheckForContentUpdateRestrictionsOption: 0 + m_MonoScriptBundleCustomNaming: + m_RemoteCatalogBuildPath: + m_Id: + m_RemoteCatalogLoadPath: + m_Id: + m_ContentStateBuildPathProfileVariableName: + m_CustomContentStateBuildPath: + m_ContentStateBuildPath: + m_BuildAddressablesWithPlayerBuild: 0 + m_overridePlayerVersion: '[UnityEditor.PlayerSettings.bundleVersion]' + m_GroupAssets: + - {fileID: 11400000, guid: 0b54ca7e3c1f10c4aa8c629911d21407, type: 2} + m_BuildSettings: + m_LogResourceManagerExceptions: 1 + m_BundleBuildPath: Temp/com.unity.addressables/AssetBundles + m_ProfileSettings: + m_Profiles: + - m_InheritedParent: + m_Id: ef3cbfe13b0a7fd41b27467a106568be + m_ProfileName: Default + m_Values: + - m_Id: 1340b70ab1d52f8479833e8f0a9cafde + m_Value: 'ServerData/[BuildTarget]' + - m_Id: 2aaf0e1e4cb77d542bd161d82008c891 + m_Value: '[UnityEngine.AddressableAssets.Addressables.BuildPath]/[BuildTarget]' + - m_Id: 43b77d74af9beab45ae5d41d29ac0cd4 + m_Value: + - m_Id: 680c997045764e447b878f1e5b95e18f + m_Value: '[UnityEditor.EditorUserBuildSettings.activeBuildTarget]' + - m_Id: e3620fb388c9f7a40985fd8cc363aa36 + m_Value: '{UnityEngine.AddressableAssets.Addressables.RuntimePath}/[BuildTarget]' + m_ProfileEntryNames: + - m_Id: 1340b70ab1d52f8479833e8f0a9cafde + m_Name: Remote.BuildPath + m_InlineUsage: 0 + - m_Id: 2aaf0e1e4cb77d542bd161d82008c891 + m_Name: Local.BuildPath + m_InlineUsage: 0 + - m_Id: 43b77d74af9beab45ae5d41d29ac0cd4 + m_Name: Remote.LoadPath + m_InlineUsage: 0 + - m_Id: 680c997045764e447b878f1e5b95e18f + m_Name: BuildTarget + m_InlineUsage: 0 + - m_Id: e3620fb388c9f7a40985fd8cc363aa36 + m_Name: Local.LoadPath + m_InlineUsage: 0 + m_ProfileVersion: 1 + m_LabelTable: + m_LabelNames: + - default + - AudioSettingsConfig + - AudioInfoConfig + - UIPanelConfig + - SceneConfig + - LayerMaskConfig + m_SchemaTemplates: [] + m_GroupTemplateObjects: + - {fileID: 11400000, guid: 73eda305665711b4cafd86da588a0749, type: 2} + m_InitializationObjects: [] + m_CertificateHandlerType: + m_AssemblyName: + m_ClassName: + m_ActivePlayerDataBuilderIndex: 2 + m_DataBuilders: + - {fileID: 11400000, guid: c70649c57ca44ee4ea4385d9512ba0f1, type: 2} + - {fileID: 11400000, guid: 1d285e998ac65cc478b5b01920b37aba, type: 2} + - {fileID: 11400000, guid: d714cf688eefdfb45b9d432a28e4458c, type: 2} + m_ActiveProfileId: ef3cbfe13b0a7fd41b27467a106568be diff --git a/Assets/AddressableAssetsData/AddressableAssetSettings.asset.meta b/Assets/AddressableAssetsData/AddressableAssetSettings.asset.meta new file mode 100644 index 0000000..1095fbe --- /dev/null +++ b/Assets/AddressableAssetsData/AddressableAssetSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 98a60ee5f4a8add4b85833d6a400e8b9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroupTemplates.meta b/Assets/AddressableAssetsData/AssetGroupTemplates.meta new file mode 100644 index 0000000..4a7cd2a --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroupTemplates.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 66e2ad62aa7087a4d9e31210ef9b99bc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset b/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset new file mode 100644 index 0000000..80e227f --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset @@ -0,0 +1,79 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2676213784644493915 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: e5d17a21594effb4e9591490b009e7aa, type: 3} + m_Name: BundledAssetGroupSchema + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.GroupSchemas.BundledAssetGroupSchema + m_Group: {fileID: 0} + m_InternalBundleIdMode: 1 + m_Compression: 1 + m_IncludeAddressInCatalog: 1 + m_IncludeGUIDInCatalog: 1 + m_IncludeLabelsInCatalog: 1 + m_InternalIdNamingMode: 0 + m_CacheClearBehavior: 0 + m_IncludeInBuild: 1 + m_BundledAssetProviderType: + m_AssemblyName: + m_ClassName: + m_StripDownloadOptions: 0 + m_ForceUniqueProvider: 0 + m_UseAssetBundleCache: 1 + m_UseAssetBundleCrc: 1 + m_UseAssetBundleCrcForCachedBundles: 1 + m_UseUWRForLocalBundles: 0 + m_Timeout: 0 + m_ChunkedTransfer: 0 + m_RedirectLimit: -1 + m_RetryCount: 0 + m_BuildPath: + m_Id: + m_LoadPath: + m_Id: + m_BundleMode: 0 + m_AssetBundleProviderType: + m_AssemblyName: + m_ClassName: + m_UseDefaultSchemaSettings: 0 + m_SelectedPathPairIndex: 0 + m_BundleNaming: 0 + m_AssetLoadMode: 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: 1a3c5d64ac83548c09dd1678b9f6f1cd, type: 3} + m_Name: Packed Assets + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.AddressableAssetGroupTemplate + m_SchemaObjects: + - {fileID: -2676213784644493915} + - {fileID: 2339472115359725477} + m_Description: Pack assets into asset bundles. + m_Settings: {fileID: 11400000, guid: 98a60ee5f4a8add4b85833d6a400e8b9, type: 2} +--- !u!114 &2339472115359725477 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 5834b5087d578d24c926ce20cd31e6d6, type: 3} + m_Name: ContentUpdateGroupSchema + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.GroupSchemas.ContentUpdateGroupSchema + m_Group: {fileID: 0} + m_StaticContent: 0 diff --git a/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset.meta b/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset.meta new file mode 100644 index 0000000..406a948 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 73eda305665711b4cafd86da588a0749 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups.meta b/Assets/AddressableAssetsData/AssetGroups.meta new file mode 100644 index 0000000..b2c593b --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f3821ca8f63df4b4981de92e29c888c3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset b/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset new file mode 100644 index 0000000..8502919 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset @@ -0,0 +1,65 @@ +%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: bbb281ee3bf0b054c82ac2347e9e782c, type: 3} + m_Name: Default Local Group + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.AddressableAssetGroup + m_GroupName: Default Local Group + m_GUID: 61413ea24ac5d754f9bfe1eff712957a + m_SerializeEntries: + - m_GUID: 17c5e56eb6c99db40b6093c9d543bb4f + m_Address: Assets/Resources_moved/Configs/UI/CanvasSettingsConfig.asset + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: 2471ee3760db4ecfe8c313bb2c00daf0 + m_Address: Assets/Resources_moved/Configs/Audio/Audio Source.prefab + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: 2bcd2660ca9b64942af0de543d8d7100 + m_Address: Assets/InputSystem_Actions.inputactions + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: 4bf97e6c7f046f849912182e4ded6c9e + m_Address: Assets/Resources_moved/Configs/Audio/Settings/Full3D.asset + m_ReadOnly: 0 + m_SerializedLabels: + - AudioSettingsConfig + FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: d7dd69cfadda3d6e18ec390724be0d80 + m_Address: Assets/Resources_moved/Configs/Audio/AudioSourcePrefabConfig.asset + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: e1fbe5b2798657342b569f723d16c9de + m_Address: Assets/Resources_moved/UI/Canvas.prefab + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: eab71c0cf90c4b94294e497d3734cfe1 + m_Address: Assets/Resources_moved/Configs/InputServiceConfig.asset + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: ec0362c4c0d045cccbe89aee2231c3be + m_Address: Assets/Resources_moved/Configs/Audio/Settings/NoBlend.asset + m_ReadOnly: 0 + m_SerializedLabels: + - AudioSettingsConfig + FlaggedDuringContentUpdateRestriction: 0 + m_ReadOnly: 0 + m_Settings: {fileID: 11400000, guid: 98a60ee5f4a8add4b85833d6a400e8b9, type: 2} + m_SchemaSet: + m_Schemas: + - {fileID: 11400000, guid: b840758b9c4900944bbca06c0e9dcdbc, type: 2} + - {fileID: 11400000, guid: 8b288d3dcf7d03941be7bd165daced89, type: 2} diff --git a/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset.meta new file mode 100644 index 0000000..8757816 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b54ca7e3c1f10c4aa8c629911d21407 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas.meta new file mode 100644 index 0000000..0474cee --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6017328ab48507a499ac9939549cb044 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset new file mode 100644 index 0000000..9377b11 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset @@ -0,0 +1,48 @@ +%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: e5d17a21594effb4e9591490b009e7aa, type: 3} + m_Name: Default Local Group_BundledAssetGroupSchema + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.GroupSchemas.BundledAssetGroupSchema + m_Group: {fileID: 11400000, guid: 0b54ca7e3c1f10c4aa8c629911d21407, type: 2} + m_InternalBundleIdMode: 1 + m_Compression: 1 + m_IncludeAddressInCatalog: 1 + m_IncludeGUIDInCatalog: 1 + m_IncludeLabelsInCatalog: 1 + m_InternalIdNamingMode: 0 + m_CacheClearBehavior: 0 + m_IncludeInBuild: 1 + m_BundledAssetProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider + m_StripDownloadOptions: 0 + m_ForceUniqueProvider: 0 + m_UseAssetBundleCache: 1 + m_UseAssetBundleCrc: 1 + m_UseAssetBundleCrcForCachedBundles: 1 + m_UseUWRForLocalBundles: 0 + m_Timeout: 0 + m_ChunkedTransfer: 0 + m_RedirectLimit: -1 + m_RetryCount: 0 + m_BuildPath: + m_Id: 2aaf0e1e4cb77d542bd161d82008c891 + m_LoadPath: + m_Id: e3620fb388c9f7a40985fd8cc363aa36 + m_BundleMode: 0 + m_AssetBundleProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider + m_UseDefaultSchemaSettings: 0 + m_SelectedPathPairIndex: 0 + m_BundleNaming: 0 + m_AssetLoadMode: 0 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset.meta new file mode 100644 index 0000000..9878859 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b840758b9c4900944bbca06c0e9dcdbc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset new file mode 100644 index 0000000..efd58d6 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset @@ -0,0 +1,16 @@ +%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: 5834b5087d578d24c926ce20cd31e6d6, type: 3} + m_Name: Default Local Group_ContentUpdateGroupSchema + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.GroupSchemas.ContentUpdateGroupSchema + m_Group: {fileID: 11400000, guid: 0b54ca7e3c1f10c4aa8c629911d21407, type: 2} + m_StaticContent: 0 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset.meta new file mode 100644 index 0000000..204eff9 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8b288d3dcf7d03941be7bd165daced89 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DataBuilders.meta b/Assets/AddressableAssetsData/DataBuilders.meta new file mode 100644 index 0000000..caf93d3 --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 67562c706ac0b6644a863e0537d31357 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset b/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset new file mode 100644 index 0000000..12ab1d2 --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset @@ -0,0 +1,20 @@ +%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: 88d21199f5d473f4db36845f2318f180, type: 3} + m_Name: BuildScriptFastMode + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Build.DataBuilders.BuildScriptFastMode + instanceProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider + sceneProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.SceneProvider diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset.meta b/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset.meta new file mode 100644 index 0000000..c769828 --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c70649c57ca44ee4ea4385d9512ba0f1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset new file mode 100644 index 0000000..d8c59fd --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset @@ -0,0 +1,20 @@ +%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: 3e2e0ffa088c91d41a086d0b8cb16bdc, type: 3} + m_Name: BuildScriptPackedMode + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Build.DataBuilders.BuildScriptPackedMode + instanceProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider + sceneProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.SceneProvider diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset.meta b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset.meta new file mode 100644 index 0000000..6a15858 --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d714cf688eefdfb45b9d432a28e4458c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset new file mode 100644 index 0000000..d566c2c --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset @@ -0,0 +1,20 @@ +%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: ad8c280d42ee0ed41a27db23b43dd2bf, type: 3} + m_Name: BuildScriptPackedPlayMode + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Build.DataBuilders.BuildScriptPackedPlayMode + instanceProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider + sceneProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.SceneProvider diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset.meta b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset.meta new file mode 100644 index 0000000..3449aed --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d285e998ac65cc478b5b01920b37aba +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DefaultObject.asset b/Assets/AddressableAssetsData/DefaultObject.asset new file mode 100644 index 0000000..eb24acb --- /dev/null +++ b/Assets/AddressableAssetsData/DefaultObject.asset @@ -0,0 +1,15 @@ +%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: 3a189bb168d8d90478a09ea08c2f3d72, type: 3} + m_Name: DefaultObject + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.AddressableAssetSettingsDefaultObject + m_AddressableAssetSettingsGuid: 98a60ee5f4a8add4b85833d6a400e8b9 diff --git a/Assets/AddressableAssetsData/DefaultObject.asset.meta b/Assets/AddressableAssetsData/DefaultObject.asset.meta new file mode 100644 index 0000000..af1bc3c --- /dev/null +++ b/Assets/AddressableAssetsData/DefaultObject.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 149da3fe95eb9ef4ebb11d520d55cb81 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Code/Calendar.meta b/Assets/Code/Calendar.meta new file mode 100644 index 0000000..b2cb31c --- /dev/null +++ b/Assets/Code/Calendar.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 14e2378107474634a7cef1a78de2bad1 +timeCreated: 1772098281 \ No newline at end of file diff --git a/Assets/Code/Calendar/DataStructures.meta b/Assets/Code/Calendar/DataStructures.meta new file mode 100644 index 0000000..99120bd --- /dev/null +++ b/Assets/Code/Calendar/DataStructures.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 05301ce17b624f25af29ec9e408dcef6 +timeCreated: 1772098338 \ No newline at end of file diff --git a/Assets/Code/Calendar/DataStructures/DataStructs.cs b/Assets/Code/Calendar/DataStructures/DataStructs.cs new file mode 100644 index 0000000..a74894f --- /dev/null +++ b/Assets/Code/Calendar/DataStructures/DataStructs.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; + +namespace Code.Calendar.DataStructures +{ + public struct Plant + { + public string Name; + public string IconPath; + public int Id; + } + public struct Task + { + public string Description; + public DateTime Date; + public bool IsPeriodic; + public int PeriodicInterval; + public int PlantId; + public List PhotoPaths; + } +} \ No newline at end of file diff --git a/Assets/Code/Calendar/DataStructures/DataStructs.cs.meta b/Assets/Code/Calendar/DataStructures/DataStructs.cs.meta new file mode 100644 index 0000000..3b2d8dc --- /dev/null +++ b/Assets/Code/Calendar/DataStructures/DataStructs.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bde98849445a4c769f5c1cf41e561f87 +timeCreated: 1772098360 \ No newline at end of file diff --git a/Assets/Code/Infrastructure/App/AppStateMachine.cs b/Assets/Code/Infrastructure/App/AppStateMachine.cs index c7c06d5..1667fe1 100644 --- a/Assets/Code/Infrastructure/App/AppStateMachine.cs +++ b/Assets/Code/Infrastructure/App/AppStateMachine.cs @@ -1,5 +1,4 @@ using Code.Infrastructure.Audio; -using Code.Infrastructure.Camera; using Code.Infrastructure.Input; using Code.Infrastructure.UI; using Reflex.Attributes; @@ -17,8 +16,6 @@ namespace Code.Infrastructure.App public class AppStateMachineContext { [Inject] public SceneLoader.SceneLoader SceneLoader { get; set; } - [Inject] public CameraStateMachine Camera { get; set; } - [Inject] public CameraFactory CameraFactory { get; set; } [Inject] public IUIService UIService { get; set; } [Inject] public IAudioFactory AudioFactory { get; set; } [Inject] public IAudioService AudioService { get; set; } diff --git a/Assets/Code/Infrastructure/App/PapaInstaller.cs b/Assets/Code/Infrastructure/App/PapaInstaller.cs index 122d25d..6df21e4 100644 --- a/Assets/Code/Infrastructure/App/PapaInstaller.cs +++ b/Assets/Code/Infrastructure/App/PapaInstaller.cs @@ -1,16 +1,12 @@ -using Code.Debug; using Code.Infrastructure.Audio; -using Code.Infrastructure.Camera; using Code.Infrastructure.Configs; using Code.Infrastructure.Input; using Code.Infrastructure.Loadings; using Code.Infrastructure.SceneLoader; using Code.Infrastructure.UI; -using Code.Infrastructure.Volume; using Reflex.Core; using Reflex.Enums; using Reflex.Injectors; -using Unity.Cinemachine; using UnityEngine; using UnityEngine.Rendering.Universal; using Resolution = Reflex.Enums.Resolution; @@ -20,14 +16,10 @@ namespace Code.Infrastructure.App public class PapaInstaller : MonoBehaviour, IInstaller, ISceneConfigsLoadedHandle, IInputServiceInitializedHandle, - ICameraInitializedHandle, IUIInitializedHandle, IUIPanelLoaded, - IVolumesInitializedHandle, - IVolumeLoaded, IAudioSourcePoolInitializedHandle, IAudioConfigsLoadedHandle, - ICinematicMachineHandle, ILayerMasksInitializedHandle { public void InstallBindings(ContainerBuilder containerBuilder) @@ -46,19 +38,11 @@ namespace Code.Infrastructure.App containerBuilder.RegisterType(typeof(AppStateMachine), Lifetime.Singleton, Resolution.Lazy); containerBuilder.RegisterType(typeof(AppStateMachineContext), Lifetime.Singleton, Resolution.Lazy); - containerBuilder.RegisterType(typeof(CameraFactory), Lifetime.Singleton, Resolution.Lazy); - containerBuilder.RegisterType(typeof(CameraStateMachine), Lifetime.Singleton, Resolution.Lazy); - containerBuilder.RegisterType(typeof(CameraStateMachineContext), Lifetime.Singleton, Resolution.Lazy); - containerBuilder.RegisterType(typeof(UIFactory), new[] { typeof(IUIFactory) }, Lifetime.Singleton, Resolution.Eager); containerBuilder.RegisterType(typeof(UIService), new[] { typeof(IUIService) }, Lifetime.Singleton, Resolution.Eager); - containerBuilder.RegisterType(typeof(VolumeService), new[] { typeof(IVolumeService) }, Lifetime.Singleton, - Resolution.Lazy); - containerBuilder.RegisterType(typeof(VolumeFactory), new[] { typeof(IVolumeFactory) }, Lifetime.Singleton, - Resolution.Eager); containerBuilder.RegisterType(typeof(AudioFactory), new[] { typeof(IAudioFactory) }, Lifetime.Singleton, Resolution.Eager); @@ -74,26 +58,14 @@ namespace Code.Infrastructure.App // Logo // Scene configs // Input service - // Camera - // Volume Factory - // Loading volume // Audio Factory // Audio Pool - // Cinemachine Camera // Layer masks - _initialLoading = new Loading(11, () => EssentialLoadEnded(_thatRightContainer)); + _initialLoading = new Loading(7, () => EssentialLoadEnded(_thatRightContainer)); - _ui2CamLoading = new Loading(2, - () => - { - _thatRightContainer.Resolve().SetCanvasCamera(_thatRightContainer - .Resolve().cameraLoadedData.Camera); - - }); } private Loading _initialLoading; - private Loading _ui2CamLoading; private Container _thatRightContainer; private void Bootstrap(Container container) @@ -104,9 +76,6 @@ namespace Code.Infrastructure.App ConstructorInjector.Construct(typeof(LayerMasks), container); - var cameraFactory = container.Resolve(); - cameraFactory.CreateCameraStateMachine(container.Resolve()) - .Forget(); } private void EssentialLoadEnded(Container container) @@ -128,24 +97,9 @@ namespace Code.Infrastructure.App _initialLoading.DoProgress(); } - public void CameraInitialized(CameraStateMachineContext.CameraLoadedData data) - { - _thatRightContainer.Resolve().cameraLoadedData = data; - _thatRightContainer.Resolve().SwitchState(CameraMode.None) - .AllowStateTransition(CameraMode.ThirdPerson) - .AllowStateTransition(CameraMode.Platformer); - - data.Camera.GetUniversalAdditionalCameraData().renderPostProcessing = true; - - _ui2CamLoading.DoProgress(); - _initialLoading.DoProgress(); - - _thatRightContainer.Resolve().LoadCinemachineCamera(CameraMode.None).Forget(); - } public void UIInitialized() { - _ui2CamLoading.DoProgress(); _initialLoading.DoProgress(); _thatRightContainer.Resolve().TryLoadPanel(UIPanelType.Logo); @@ -170,26 +124,6 @@ namespace Code.Infrastructure.App } } - public void VolumesInitialized() - { - _initialLoading.DoProgress(); - - _thatRightContainer.Resolve().TryLoadVolume(VolumeId.MenuRetro); - } - - public void VolumeLoaded(VolumeId volumeId) - { - switch (volumeId) - { - case VolumeId.MenuRetro: - _initialLoading.DoProgress(); - break; - default: - Application.Quit(); - break; - } - } - public void AudioSourcePoolInitialized() { _initialLoading.DoProgress(); @@ -200,11 +134,6 @@ namespace Code.Infrastructure.App _initialLoading.DoProgress(); } - public void CinemachineLoaded(CinemachineCamera cinemachineCamera) - { - _initialLoading.DoProgress(); - } - public void LayerMasksInitialized() { _initialLoading.DoProgress(); diff --git a/Assets/Code/Infrastructure/App/States/BootstrapState.cs b/Assets/Code/Infrastructure/App/States/BootstrapState.cs index 17d99c0..0ba27cf 100644 --- a/Assets/Code/Infrastructure/App/States/BootstrapState.cs +++ b/Assets/Code/Infrastructure/App/States/BootstrapState.cs @@ -1,5 +1,4 @@ using System.Threading; -using Code.Debug; using Code.Infrastructure.Audio; using Code.Infrastructure.Generators; using Code.Infrastructure.UI; @@ -23,26 +22,24 @@ namespace Code.Infrastructure.App.States Context.UIService.TryRemovePanel(UIPanelType.Logo); - Context.UIService.TryLoadPanel(UIPanelType.DebugSceneChooser); - Context.AudioFactory.LoadAudioClips(AudioNames.UISounds); + // Context.AudioFactory.LoadAudioClips(AudioNames.UISounds); } protected override void OnExitState() { // Context.AudioFactory.ReleaseAudios(AudioNames.UISounds); - Context.UIService.TryRemovePanel(UIPanelType.DebugSceneChooser); _eventBus.Unsubscribe(this); } public void UILoaded(UIPanelType uiPanelType) { - if (uiPanelType != UIPanelType.DebugSceneChooser) return; - - Context.UIService.OpenPanel(uiPanelType); + // if (uiPanelType != UIPanelType.DebugSceneChooser) return; + // + // Context.UIService.OpenPanel(uiPanelType); } public void OnReadyToPlay(AudioNames groupName) { - Context.AudioService.PlayRepeatedly(AudioNames.UISounds,0); + // Context.AudioService.PlayRepeatedly(AudioNames.UISounds,0); } } } \ No newline at end of file diff --git a/Assets/Code/Infrastructure/Audio/AudioFactory.cs b/Assets/Code/Infrastructure/Audio/AudioFactory.cs index eb0d599..bc9eee4 100644 --- a/Assets/Code/Infrastructure/Audio/AudioFactory.cs +++ b/Assets/Code/Infrastructure/Audio/AudioFactory.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Threading; using Code.Infrastructure.Configs; using Code.Infrastructure.EventBus; using Cysharp.Threading.Tasks; diff --git a/Assets/Code/Infrastructure/Audio/AudioNames.cs b/Assets/Code/Infrastructure/Audio/AudioNames.cs index 96c3f70..8c828a9 100644 --- a/Assets/Code/Infrastructure/Audio/AudioNames.cs +++ b/Assets/Code/Infrastructure/Audio/AudioNames.cs @@ -2,7 +2,6 @@ namespace Code.Infrastructure.Audio { public enum AudioNames { - UISounds, - EnemySFX + UISounds } } \ No newline at end of file diff --git a/Assets/Code/Infrastructure/Configs/LayerMaskType.cs b/Assets/Code/Infrastructure/Configs/LayerMaskType.cs index 0460f83..2859591 100644 --- a/Assets/Code/Infrastructure/Configs/LayerMaskType.cs +++ b/Assets/Code/Infrastructure/Configs/LayerMaskType.cs @@ -1,7 +1,7 @@ namespace Code.Infrastructure.Configs { + // Если забыл, это енам масок, пиши тип и -=-=- конфиги public enum LayerMaskType { - PlatformerGround } } \ No newline at end of file diff --git a/Assets/Code/Infrastructure/Input/ActionMappings.cs b/Assets/Code/Infrastructure/Input/ActionMappings.cs index 736dbc6..8e5058b 100644 --- a/Assets/Code/Infrastructure/Input/ActionMappings.cs +++ b/Assets/Code/Infrastructure/Input/ActionMappings.cs @@ -2,15 +2,9 @@ namespace Code.Infrastructure.Input { public enum ActionMappings { - MainMenu, - Gameplay, + MainMenu, Debug } - public enum GameplayActions - { - Move, - Brake, - } public enum DebugActions { Debug1, diff --git a/Assets/Code/Infrastructure/SceneLoader/SceneId.cs b/Assets/Code/Infrastructure/SceneLoader/SceneId.cs index 7f7d44f..2c25b58 100644 --- a/Assets/Code/Infrastructure/SceneLoader/SceneId.cs +++ b/Assets/Code/Infrastructure/SceneLoader/SceneId.cs @@ -5,9 +5,6 @@ namespace Code.Infrastructure.SceneLoader [SceneIdEnum] public enum SceneId { - MainMenu, - Gameplay, - SoundTest, - Platformer + MainMenu } } \ No newline at end of file diff --git a/Assets/Code/Infrastructure/UI/UIPanelType.cs b/Assets/Code/Infrastructure/UI/UIPanelType.cs index a73cf8e..e363328 100644 --- a/Assets/Code/Infrastructure/UI/UIPanelType.cs +++ b/Assets/Code/Infrastructure/UI/UIPanelType.cs @@ -3,13 +3,6 @@ namespace Code.Infrastructure.UI public enum UIPanelType { Logo, - Loading, - DebugSceneChooser, - // Race - PlayerScoreCounter, - WinScreen, - PlayerScores, - // - DebugMenu + Loading } } \ No newline at end of file diff --git a/Assets/InputSystem_Actions.inputactions b/Assets/InputSystem_Actions.inputactions index 1a12cb9..251d2cd 100644 --- a/Assets/InputSystem_Actions.inputactions +++ b/Assets/InputSystem_Actions.inputactions @@ -1,482 +1,9 @@ { + "version": 1, "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", + "name": "UI2", "id": "272f6d14-89ba-496f-b7ff-215263d3219f", "actions": [ { @@ -990,6 +517,45 @@ "isPartOfComposite": false } ] + }, + { + "name": "UI", + "id": "25ff9d37-6575-4d06-b0fb-2de5f3f1d702", + "actions": [ + { + "name": "Tap", + "type": "Button", + "id": "c4df1467-275d-44ef-bc1c-a8ad2ee5680e", + "expectedControlType": "", + "processors": "", + "interactions": "", + "initialStateCheck": false + } + ], + "bindings": [ + { + "name": "", + "id": "364ed97d-5297-46da-bdfe-d0f6f4e1d1d2", + "path": "", + "interactions": "", + "processors": "", + "groups": "", + "action": "Tap", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "953277fe-14f7-4bcd-aeb2-43baf49f2ad0", + "path": "", + "interactions": "", + "processors": "", + "groups": "", + "action": "Tap", + "isComposite": false, + "isPartOfComposite": false + } + ] } ], "controlSchemes": [ diff --git a/Assets/Plugins/NativeFilePicker.meta b/Assets/Plugins/NativeFilePicker.meta new file mode 100644 index 0000000..b08e6e4 --- /dev/null +++ b/Assets/Plugins/NativeFilePicker.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fbefdb800f5c8e4468bf456469caaf61 +folderAsset: yes +timeCreated: 1596983915 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NativeFilePicker/Android.meta b/Assets/Plugins/NativeFilePicker/Android.meta new file mode 100644 index 0000000..784d67c --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/Android.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e5c273c78eb8ebb47a9c6005d4041d73 +folderAsset: yes +timeCreated: 1596971200 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NativeFilePicker/Android/FPCallbackHelper.cs b/Assets/Plugins/NativeFilePicker/Android/FPCallbackHelper.cs new file mode 100644 index 0000000..f8b9c0c --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/Android/FPCallbackHelper.cs @@ -0,0 +1,52 @@ +#if UNITY_EDITOR || UNITY_ANDROID +using System; +using UnityEngine; + +namespace NativeFilePickerNamespace +{ + public class FPCallbackHelper : MonoBehaviour + { + private bool autoDestroyWithCallback; + private Action mainThreadAction = null; + + public static FPCallbackHelper Create( bool autoDestroyWithCallback ) + { + FPCallbackHelper result = new GameObject( "FPCallbackHelper" ).AddComponent(); + result.autoDestroyWithCallback = autoDestroyWithCallback; + DontDestroyOnLoad( result.gameObject ); + return result; + } + + public void CallOnMainThread( Action function ) + { + lock( this ) + { + mainThreadAction += function; + } + } + + private void Update() + { + if( mainThreadAction != null ) + { + try + { + Action temp; + lock( this ) + { + temp = mainThreadAction; + mainThreadAction = null; + } + + temp(); + } + finally + { + if( autoDestroyWithCallback ) + Destroy( gameObject ); + } + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Plugins/NativeFilePicker/Android/FPCallbackHelper.cs.meta b/Assets/Plugins/NativeFilePicker/Android/FPCallbackHelper.cs.meta new file mode 100644 index 0000000..b41aaff --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/Android/FPCallbackHelper.cs.meta @@ -0,0 +1,19 @@ +fileFormatVersion: 2 +guid: 41423473566db0b4ebd62882996f08bc +timeCreated: 1596973837 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 173238 + packageName: Native File Picker for Android & iOS + packageVersion: 1.4.1 + assetPath: Assets/Plugins/NativeFilePicker/Android/FPCallbackHelper.cs + uploadId: 757770 diff --git a/Assets/Plugins/NativeFilePicker/Android/FPPermissionCallbackAndroid.cs b/Assets/Plugins/NativeFilePicker/Android/FPPermissionCallbackAndroid.cs new file mode 100644 index 0000000..4ea3ee1 --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/Android/FPPermissionCallbackAndroid.cs @@ -0,0 +1,24 @@ +#if UNITY_EDITOR || UNITY_ANDROID +using UnityEngine; + +namespace NativeFilePickerNamespace +{ + public class FPPermissionCallbackAndroid : AndroidJavaProxy + { + private readonly NativeFilePicker.PermissionCallback callback; + private readonly FPCallbackHelper callbackHelper; + + public FPPermissionCallbackAndroid( NativeFilePicker.PermissionCallback callback ) : base( "com.yasirkula.unity.NativeFilePickerPermissionReceiver" ) + { + this.callback = callback; + callbackHelper = FPCallbackHelper.Create( true ); + } + + [UnityEngine.Scripting.Preserve] + public void OnPermissionResult( int result ) + { + callbackHelper.CallOnMainThread( () => callback( (NativeFilePicker.Permission) result ) ); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Plugins/NativeFilePicker/Android/FPPermissionCallbackAndroid.cs.meta b/Assets/Plugins/NativeFilePicker/Android/FPPermissionCallbackAndroid.cs.meta new file mode 100644 index 0000000..b2df21c --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/Android/FPPermissionCallbackAndroid.cs.meta @@ -0,0 +1,19 @@ +fileFormatVersion: 2 +guid: 5f8c2de0178a90140b030975551436a5 +timeCreated: 1596973837 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 173238 + packageName: Native File Picker for Android & iOS + packageVersion: 1.4.1 + assetPath: Assets/Plugins/NativeFilePicker/Android/FPPermissionCallbackAndroid.cs + uploadId: 757770 diff --git a/Assets/Plugins/NativeFilePicker/Android/FPResultCallbackAndroid.cs b/Assets/Plugins/NativeFilePicker/Android/FPResultCallbackAndroid.cs new file mode 100644 index 0000000..ecc5360 --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/Android/FPResultCallbackAndroid.cs @@ -0,0 +1,71 @@ +#if UNITY_EDITOR || UNITY_ANDROID +using UnityEngine; + +namespace NativeFilePickerNamespace +{ + public class FPResultCallbackAndroid : AndroidJavaProxy + { + private readonly NativeFilePicker.FilePickedCallback pickCallback; + private readonly NativeFilePicker.MultipleFilesPickedCallback pickCallbackMultiple; + private readonly NativeFilePicker.FilesExportedCallback exportCallback; + + private readonly FPCallbackHelper callbackHelper; + + public FPResultCallbackAndroid( NativeFilePicker.FilePickedCallback pickCallback, NativeFilePicker.MultipleFilesPickedCallback pickCallbackMultiple, NativeFilePicker.FilesExportedCallback exportCallback ) : base( "com.yasirkula.unity.NativeFilePickerResultReceiver" ) + { + this.pickCallback = pickCallback; + this.pickCallbackMultiple = pickCallbackMultiple; + this.exportCallback = exportCallback; + + callbackHelper = FPCallbackHelper.Create( true ); + } + + [UnityEngine.Scripting.Preserve] + public void OnFilePicked( string path ) + { + callbackHelper.CallOnMainThread( () => pickCallback( !string.IsNullOrEmpty( path ) ? path : null ) ); + } + + [UnityEngine.Scripting.Preserve] + public void OnMultipleFilesPicked( string paths ) + { + string[] result = null; + if( !string.IsNullOrEmpty( paths ) ) + { + string[] pathsSplit = paths.Split( '>' ); + + int validPathCount = 0; + for( int i = 0; i < pathsSplit.Length; i++ ) + { + if( !string.IsNullOrEmpty( pathsSplit[i] ) ) + validPathCount++; + } + + if( validPathCount == 0 ) + pathsSplit = new string[0]; + else if( validPathCount != pathsSplit.Length ) + { + string[] validPaths = new string[validPathCount]; + for( int i = 0, j = 0; i < pathsSplit.Length; i++ ) + { + if( !string.IsNullOrEmpty( pathsSplit[i] ) ) + validPaths[j++] = pathsSplit[i]; + } + + pathsSplit = validPaths; + } + + result = pathsSplit; + } + + callbackHelper.CallOnMainThread( () => pickCallbackMultiple( ( result != null && result.Length > 0 ) ? result : null ) ); + } + + [UnityEngine.Scripting.Preserve] + public void OnFilesExported( bool result ) + { + callbackHelper.CallOnMainThread( () => exportCallback( result ) ); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Plugins/NativeFilePicker/Android/FPResultCallbackAndroid.cs.meta b/Assets/Plugins/NativeFilePicker/Android/FPResultCallbackAndroid.cs.meta new file mode 100644 index 0000000..5d392d9 --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/Android/FPResultCallbackAndroid.cs.meta @@ -0,0 +1,19 @@ +fileFormatVersion: 2 +guid: f43d316f7eb1cdf4abcf327a1fbc025b +timeCreated: 1596973837 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 173238 + packageName: Native File Picker for Android & iOS + packageVersion: 1.4.1 + assetPath: Assets/Plugins/NativeFilePicker/Android/FPResultCallbackAndroid.cs + uploadId: 757770 diff --git a/Assets/Plugins/NativeFilePicker/Android/NativeFilePicker.aar b/Assets/Plugins/NativeFilePicker/Android/NativeFilePicker.aar new file mode 100644 index 0000000000000000000000000000000000000000..040bf8264d7405490c849e5332ffa52483f627fa GIT binary patch literal 31159 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 0 ) + instance = AssetDatabase.LoadAssetAtPath( AssetDatabase.GUIDToAssetPath( instances[0] ) ); + + if( !instance && createIfNotExists ) + { + Directory.CreateDirectory( Path.GetDirectoryName( INITIAL_SAVE_PATH ) ); + + AssetDatabase.CreateAsset( CreateInstance(), INITIAL_SAVE_PATH ); + AssetDatabase.SaveAssets(); + instance = AssetDatabase.LoadAssetAtPath( INITIAL_SAVE_PATH ); + + Debug.Log( "Created NativeFilePickerCustomTypes file at " + INITIAL_SAVE_PATH + ". You can move this file around freely.", instance ); + } + + return instance; + } + + public static TypeHolder[] GetCustomTypes() + { + NativeFilePickerCustomTypes instance = GetInstance( false ); + return instance ? instance.customTypes : null; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerCustomTypes.cs.meta b/Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerCustomTypes.cs.meta new file mode 100644 index 0000000..a36eab5 --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerCustomTypes.cs.meta @@ -0,0 +1,19 @@ +fileFormatVersion: 2 +guid: f281670325986984c95fde82c23195e0 +timeCreated: 1592237398 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 173238 + packageName: Native File Picker for Android & iOS + packageVersion: 1.4.1 + assetPath: Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerCustomTypes.cs + uploadId: 757770 diff --git a/Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerPostProcessBuild.cs b/Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerPostProcessBuild.cs new file mode 100644 index 0000000..002674d --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerPostProcessBuild.cs @@ -0,0 +1,199 @@ +using System.IO; +using UnityEditor; +using UnityEngine; +#if UNITY_IOS +using System.Collections.Generic; +using UnityEditor.Callbacks; +using UnityEditor.iOS.Xcode; +#endif + +namespace NativeFilePickerNamespace +{ + [System.Serializable] + public class Settings + { + private const string SAVE_PATH = "ProjectSettings/NativeFilePicker.json"; + + public bool AutoSetupFrameworks = true; + public bool AutoSetupiCloud = false; + + private static Settings m_instance = null; + public static Settings Instance + { + get + { + if( m_instance == null ) + { + try + { + if( File.Exists( SAVE_PATH ) ) + m_instance = JsonUtility.FromJson( File.ReadAllText( SAVE_PATH ) ); + else + m_instance = new Settings(); + } + catch( System.Exception e ) + { + Debug.LogException( e ); + m_instance = new Settings(); + } + } + + return m_instance; + } + } + + public void Save() + { + File.WriteAllText( SAVE_PATH, JsonUtility.ToJson( this, true ) ); + } + + [SettingsProvider] + public static SettingsProvider CreatePreferencesGUI() + { + return new SettingsProvider( "Project/yasirkula/Native File Picker", SettingsScope.Project ) + { + guiHandler = ( searchContext ) => PreferencesGUI(), + keywords = new System.Collections.Generic.HashSet() { "Native", "File", "Picker", "Android", "iOS" } + }; + } + + public static void PreferencesGUI() + { + EditorGUI.BeginChangeCheck(); + + Instance.AutoSetupFrameworks = EditorGUILayout.Toggle( new GUIContent( "Auto Setup Frameworks", "Automatically adds MobileCoreServices and CloudKit frameworks to the generated Xcode project" ), Instance.AutoSetupFrameworks ); + Instance.AutoSetupiCloud = EditorGUILayout.Toggle( new GUIContent( "Auto Setup iCloud", "Automatically enables iCloud capability of the generated Xcode project" ), Instance.AutoSetupiCloud ); + + if( EditorGUI.EndChangeCheck() ) + Instance.Save(); + } + } + + public class NativeFilePickerPostProcessBuild + { +#if UNITY_IOS +#pragma warning disable 0162 + [PostProcessBuild] + public static void OnPostprocessBuild( BuildTarget target, string buildPath ) + { + // Add declared custom types to Info.plist + if( target == BuildTarget.iOS ) + { + NativeFilePickerCustomTypes.TypeHolder[] customTypes = NativeFilePickerCustomTypes.GetCustomTypes(); + if( customTypes != null ) + { + string plistPath = Path.Combine( buildPath, "Info.plist" ); + + PlistDocument plist = new PlistDocument(); + plist.ReadFromString( File.ReadAllText( plistPath ) ); + + PlistElementDict rootDict = plist.root; + + for( int i = 0; i < customTypes.Length; i++ ) + { + NativeFilePickerCustomTypes.TypeHolder customType = customTypes[i]; + PlistElementArray customTypesArray = GetCustomTypesArray( rootDict, customType.isExported ); + + // Don't allow duplicate entries + RemoveCustomTypeIfExists( customTypesArray, customType.identifier ); + + PlistElementDict customTypeDict = customTypesArray.AddDict(); + customTypeDict.SetString( "UTTypeIdentifier", customType.identifier ); + customTypeDict.SetString( "UTTypeDescription", customType.description ); + + PlistElementArray conformsTo = customTypeDict.CreateArray( "UTTypeConformsTo" ); + for( int j = 0; j < customType.conformsTo.Length; j++ ) + conformsTo.AddString( customType.conformsTo[j] ); + + PlistElementDict tagSpecification = customTypeDict.CreateDict( "UTTypeTagSpecification" ); + PlistElementArray tagExtensions = tagSpecification.CreateArray( "public.filename-extension" ); + for( int j = 0; j < customType.extensions.Length; j++ ) + tagExtensions.AddString( customType.extensions[j] ); + } + + File.WriteAllText( plistPath, plist.WriteToString() ); + } + } + + // Rest of the function shouldn't execute unless build post-processing is enabled + if( !Settings.Instance.AutoSetupFrameworks && !Settings.Instance.AutoSetupiCloud ) + return; + + if( target == BuildTarget.iOS ) + { + string pbxProjectPath = PBXProject.GetPBXProjectPath( buildPath ); + + PBXProject pbxProject = new PBXProject(); + pbxProject.ReadFromFile( pbxProjectPath ); + + string targetGUID = pbxProject.GetUnityFrameworkTargetGuid(); + if( Settings.Instance.AutoSetupFrameworks ) + { + pbxProject.AddFrameworkToProject( targetGUID, "MobileCoreServices.framework", false ); + pbxProject.AddFrameworkToProject( targetGUID, "CloudKit.framework", false ); + } + + File.WriteAllText( pbxProjectPath, pbxProject.WriteToString() ); + + if( Settings.Instance.AutoSetupiCloud ) + { + ProjectCapabilityManager manager = new ProjectCapabilityManager( pbxProjectPath, "iCloud.entitlements", "Unity-iPhone" ); + manager.AddiCloud( false, true, false, true, null ); + manager.WriteToFile(); + } + } + } + + // Adding PRODUCT_BUNDLE_IDENTIFIER if not exists (if another plugin also fills this value, we must not touch it) + [PostProcessBuild( 99 )] + public static void OnPostprocessBuild2( BuildTarget target, string buildPath ) + { + if( !Settings.Instance.AutoSetupFrameworks && !Settings.Instance.AutoSetupiCloud ) + return; + + if( target == BuildTarget.iOS ) + { + string pbxProjectPath = PBXProject.GetPBXProjectPath( buildPath ); + + PBXProject pbxProject = new PBXProject(); + pbxProject.ReadFromFile( pbxProjectPath ); + + string targetGUID = pbxProject.GetUnityFrameworkTargetGuid(); + if( string.IsNullOrEmpty( pbxProject.GetBuildPropertyForAnyConfig( targetGUID, "PRODUCT_BUNDLE_IDENTIFIER" ) ) ) + pbxProject.AddBuildProperty( targetGUID, "PRODUCT_BUNDLE_IDENTIFIER", PlayerSettings.applicationIdentifier ); + + File.WriteAllText( pbxProjectPath, pbxProject.WriteToString() ); + } + } + + private static PlistElementArray GetCustomTypesArray( PlistElementDict rootDict, bool isExported ) + { + string key = isExported ? "UTExportedTypeDeclarations" : "UTImportedTypeDeclarations"; + PlistElementArray result = rootDict[key] as PlistElementArray; + if( result == null ) + result = rootDict.CreateArray( key ); + + return result; + } + + private static void RemoveCustomTypeIfExists( PlistElementArray customTypesArray, string UTI ) + { + List values = customTypesArray.values; + if( values == null ) + return; + + for( int i = values.Count - 1; i >= 0; i-- ) + { + PlistElementDict exportedType = values[i] as PlistElementDict; + if( exportedType != null ) + { + PlistElementString exportedTypeID = exportedType["UTTypeIdentifier"] as PlistElementString; + if( exportedTypeID != null && exportedTypeID.value == UTI ) + values.RemoveAt( i ); + } + } + } +#pragma warning restore 0162 +#endif + } +} \ No newline at end of file diff --git a/Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerPostProcessBuild.cs.meta b/Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerPostProcessBuild.cs.meta new file mode 100644 index 0000000..f8bb48c --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerPostProcessBuild.cs.meta @@ -0,0 +1,19 @@ +fileFormatVersion: 2 +guid: d466ecf51c239f9419715f6b59348d6c +timeCreated: 1521452119 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 173238 + packageName: Native File Picker for Android & iOS + packageVersion: 1.4.1 + assetPath: Assets/Plugins/NativeFilePicker/Editor/NativeFilePickerPostProcessBuild.cs + uploadId: 757770 diff --git a/Assets/Plugins/NativeFilePicker/NativeFilePicker.Runtime.asmdef b/Assets/Plugins/NativeFilePicker/NativeFilePicker.Runtime.asmdef new file mode 100644 index 0000000..28d0b3b --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/NativeFilePicker.Runtime.asmdef @@ -0,0 +1,3 @@ +{ + "name": "NativeFilePicker.Runtime" +} diff --git a/Assets/Plugins/NativeFilePicker/NativeFilePicker.Runtime.asmdef.meta b/Assets/Plugins/NativeFilePicker/NativeFilePicker.Runtime.asmdef.meta new file mode 100644 index 0000000..9f15868 --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/NativeFilePicker.Runtime.asmdef.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 250e096504da3aa4f851a4df12262950 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 173238 + packageName: Native File Picker for Android & iOS + packageVersion: 1.4.1 + assetPath: Assets/Plugins/NativeFilePicker/NativeFilePicker.Runtime.asmdef + uploadId: 757770 diff --git a/Assets/Plugins/NativeFilePicker/NativeFilePicker.cs b/Assets/Plugins/NativeFilePicker/NativeFilePicker.cs new file mode 100644 index 0000000..7fb2fd7 --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/NativeFilePicker.cs @@ -0,0 +1,411 @@ +using System; +using System.IO; +using UnityEngine; +using System.Threading.Tasks; +#if UNITY_ANDROID || UNITY_IOS +using NativeFilePickerNamespace; +#endif + +public static class NativeFilePicker +{ + public delegate void PermissionCallback( Permission permission ); + public delegate void FilePickedCallback( string path ); + public delegate void MultipleFilesPickedCallback( string[] paths ); + public delegate void FilesExportedCallback( bool success ); + + public enum Permission { Denied = 0, Granted = 1, ShouldAsk = 2 }; + + #region Platform Specific Elements +#if !UNITY_EDITOR && UNITY_ANDROID + private static AndroidJavaClass m_ajc = null; + private static AndroidJavaClass AJC + { + get + { + if( m_ajc == null ) + m_ajc = new AndroidJavaClass( "com.yasirkula.unity.NativeFilePicker" ); + + return m_ajc; + } + } + + private static AndroidJavaObject m_context = null; + private static AndroidJavaObject Context + { + get + { + if( m_context == null ) + { + using( AndroidJavaObject unityClass = new AndroidJavaClass( "com.unity3d.player.UnityPlayer" ) ) + { + m_context = unityClass.GetStatic( "currentActivity" ); + } + } + + return m_context; + } + } +#elif !UNITY_EDITOR && UNITY_IOS + [System.Runtime.InteropServices.DllImport( "__Internal" )] + private static extern int _NativeFilePicker_CanPickMultipleFiles(); + + [System.Runtime.InteropServices.DllImport( "__Internal" )] + private static extern string _NativeFilePicker_ConvertExtensionToUTI( string extension ); + + [System.Runtime.InteropServices.DllImport( "__Internal" )] + private static extern void _NativeFilePicker_PickFile( string[] UTIs, int UTIsCount ); + + [System.Runtime.InteropServices.DllImport( "__Internal" )] + private static extern void _NativeFilePicker_PickMultipleFiles( string[] UTIs, int UTIsCount ); + + [System.Runtime.InteropServices.DllImport( "__Internal" )] + private static extern void _NativeFilePicker_ExportFiles( string[] files, int filesCount ); +#endif + #endregion + +#if !UNITY_EDITOR && UNITY_ANDROID + private static string m_selectedFilePath = null; + private static string SelectedFilePath + { + get + { + if( m_selectedFilePath == null ) + { + m_selectedFilePath = Path.Combine( Application.temporaryCachePath, "pickedFile" ); + Directory.CreateDirectory( Application.temporaryCachePath ); + } + + return m_selectedFilePath; + } + } +#endif + + #region Runtime Permissions + public static bool CheckPermission( bool readPermissionOnly = false ) + { +#if !UNITY_EDITOR && UNITY_ANDROID + return AJC.CallStatic( "CheckPermission", Context, readPermissionOnly ) == 1; +#else + return true; +#endif + } + + public static void RequestPermissionAsync( PermissionCallback callback, bool readPermissionOnly = false ) + { +#if !UNITY_EDITOR && UNITY_ANDROID + FPPermissionCallbackAndroid nativeCallback = new( callback ); + AJC.CallStatic( "RequestPermission", Context, nativeCallback, readPermissionOnly ); +#else + callback( Permission.Granted ); +#endif + } + + public static Task RequestPermissionAsync( bool readPermissionOnly = false ) + { + TaskCompletionSource tcs = new TaskCompletionSource(); + RequestPermissionAsync( ( permission ) => tcs.SetResult( permission ), readPermissionOnly ); + return tcs.Task; + } + + public static void OpenSettings() + { +#if !UNITY_EDITOR && UNITY_ANDROID + AJC.CallStatic( "OpenSettings", Context ); +#endif + } + #endregion + + #region Helper Functions + public static bool CanPickMultipleFiles() + { +#if !UNITY_EDITOR && UNITY_ANDROID + return AJC.CallStatic( "CanPickMultipleFiles" ); +#elif !UNITY_EDITOR && UNITY_IOS + return _NativeFilePicker_CanPickMultipleFiles() == 1; +#else + return false; +#endif + } + + public static bool CanExportFiles() + { +#if UNITY_EDITOR + return true; +#elif UNITY_ANDROID + return AJC.CallStatic( "CanExportFiles" ); +#elif UNITY_IOS + return true; +#else + return false; +#endif + } + + public static bool CanExportMultipleFiles() + { +#if UNITY_EDITOR + return true; +#elif UNITY_ANDROID + return AJC.CallStatic( "CanExportMultipleFiles" ); +#elif UNITY_IOS + return _NativeFilePicker_CanPickMultipleFiles() == 1; +#else + return false; +#endif + } + + public static bool IsFilePickerBusy() + { +#if !UNITY_EDITOR && UNITY_IOS + return FPResultCallbackiOS.IsBusy; +#else + return false; +#endif + } + + public static string ConvertExtensionToFileType( string extension ) + { + if( string.IsNullOrEmpty( extension ) ) + return null; + + if( extension.IndexOf( '*' ) >= 0 ) + { + // So many users try to do this that it's now necessary to throw an exception for this particular scenario + throw new ArgumentException( "See: https://github.com/yasirkula/UnityNativeFilePicker#faq" ); + } + +#if !UNITY_EDITOR && UNITY_ANDROID + return AJC.CallStatic( "GetMimeTypeFromExtension", extension.ToLowerInvariant() ); +#elif !UNITY_EDITOR && UNITY_IOS + return _NativeFilePicker_ConvertExtensionToUTI( extension.ToLowerInvariant() ); +#else + return extension; +#endif + } + #endregion + + #region Import Functions + public static void PickFile( FilePickedCallback callback, params string[] allowedFileTypes ) + { + // If no file type is specified, allow all file types + if( allowedFileTypes == null || allowedFileTypes.Length == 0 ) + { +#if UNITY_ANDROID + allowedFileTypes = new string[] { "*/*" }; +#else + allowedFileTypes = new string[] { "public.item", "public.content" }; +#endif + } + + RequestPermissionAsync( ( permission ) => + { + if( permission != Permission.Granted || IsFilePickerBusy() ) + { + callback?.Invoke( null ); + return; + } + +#if UNITY_EDITOR + // Accept Android and iOS UTIs when possible, for user's convenience + string[] editorFilters = new string[allowedFileTypes.Length * 2]; + for( int i = 0; i < allowedFileTypes.Length; i++ ) + { + if( allowedFileTypes[i].IndexOf( '*' ) >= 0 ) + { + if( allowedFileTypes[i] == "image/*" ) + { + editorFilters[i * 2] = "Image files"; + editorFilters[i * 2 + 1] = "png,jpg,jpeg"; + } + else if( allowedFileTypes[i] == "video/*" ) + { + editorFilters[i * 2] = "Video files"; + editorFilters[i * 2 + 1] = "mp4,mov,webm,avi"; + } + else if( allowedFileTypes[i] == "audio/*" ) + { + editorFilters[i * 2] = "Audio files"; + editorFilters[i * 2 + 1] = "mp3,wav,aac,flac"; + } + else + { + editorFilters[i * 2] = "All files"; + editorFilters[i * 2 + 1] = "*"; + } + } + else + { + editorFilters[i * 2] = allowedFileTypes[i]; + + if( allowedFileTypes[i].IndexOf( '/' ) >= 0 ) // Android UTIs like 'image/png' + editorFilters[i * 2 + 1] = allowedFileTypes[i].Substring( allowedFileTypes[i].IndexOf( '/' ) + 1 ); + else if( allowedFileTypes[i].StartsWith( "public." ) ) // iOS UTIs like 'public.png' + editorFilters[i * 2 + 1] = allowedFileTypes[i].Substring( 7 ); + else if( allowedFileTypes[i].IndexOf( '.' ) == 0 ) // Extensions starting with period like '.png' + editorFilters[i * 2 + 1] = allowedFileTypes[i].Substring( 1 ); + else + editorFilters[i * 2 + 1] = allowedFileTypes[i]; + } + } + + string pickedFile = UnityEditor.EditorUtility.OpenFilePanelWithFilters( "Select file", "", editorFilters ); + + if( callback != null ) + callback( pickedFile != "" ? pickedFile : null ); +#elif UNITY_ANDROID + AJC.CallStatic( "PickFiles", Context, new FPResultCallbackAndroid( callback, null, null ), false, SelectedFilePath, allowedFileTypes, "" ); +#elif UNITY_IOS + FPResultCallbackiOS.Initialize( callback, null, null ); + _NativeFilePicker_PickFile( allowedFileTypes, allowedFileTypes.Length ); +#else + if( callback != null ) + callback( null ); +#endif + }, true ); + } + + public static void PickMultipleFiles( MultipleFilesPickedCallback callback, params string[] allowedFileTypes ) + { + // If no file type is specified, allow all file types + if( allowedFileTypes == null || allowedFileTypes.Length == 0 ) + { +#if UNITY_ANDROID + allowedFileTypes = new string[] { "*/*" }; +#else + allowedFileTypes = new string[] { "public.item", "public.content" }; +#endif + } + + RequestPermissionAsync( ( permission ) => + { + if( permission != Permission.Granted || IsFilePickerBusy() ) + { + callback?.Invoke( null ); + return; + } + + if( CanPickMultipleFiles() ) + { +#if !UNITY_EDITOR && UNITY_ANDROID + AJC.CallStatic( "PickFiles", Context, new FPResultCallbackAndroid( null, callback, null ), true, SelectedFilePath, allowedFileTypes, "" ); +#elif !UNITY_EDITOR && UNITY_IOS + FPResultCallbackiOS.Initialize( null, callback, null ); + _NativeFilePicker_PickMultipleFiles( allowedFileTypes, allowedFileTypes.Length ); +#endif + } + else if( callback != null ) + callback( null ); + }, true ); + } + #endregion + + #region Export Functions + public static void ExportFile( string filePath, FilesExportedCallback callback = null ) + { + if( string.IsNullOrEmpty( filePath ) ) + throw new ArgumentException( "Parameter 'filePath' is null or empty!" ); + + RequestPermissionAsync( ( permission ) => + { + if( permission != Permission.Granted || IsFilePickerBusy() ) + { + callback?.Invoke( false ); + return; + } + + if( CanExportFiles() ) + { +#if UNITY_EDITOR + string extension = Path.GetExtension( filePath ); + if( extension == null ) + extension = ""; + else if( extension.IndexOf( '.' ) == 0 ) + extension = extension.Substring( 1 ); + + string destination = UnityEditor.EditorUtility.SaveFilePanel( "Select destination", Path.GetDirectoryName( filePath ), Path.GetFileName( filePath ), extension ); + if( string.IsNullOrEmpty( destination ) ) + { + if( callback != null ) + callback( false ); + } + else + { + try + { + File.Copy( filePath, destination, true ); + + if( callback != null ) + callback( true ); + } + catch( Exception e ) + { + Debug.LogException( e ); + + if( callback != null ) + callback( false ); + } + } +#elif UNITY_ANDROID + AJC.CallStatic( "ExportFiles", Context, new FPResultCallbackAndroid( null, null, callback ), new string[1] { filePath }, 1 ); +#elif UNITY_IOS + FPResultCallbackiOS.Initialize( null, null, callback ); + _NativeFilePicker_ExportFiles( new string[1] { filePath }, 1 ); +#endif + } + else if( callback != null ) + callback( false ); + }, false ); + } + + public static void ExportMultipleFiles( string[] filePaths, FilesExportedCallback callback = null ) + { + if( filePaths == null || filePaths.Length == 0 ) + throw new ArgumentException( "Parameter 'filePaths' is null or empty!" ); + + RequestPermissionAsync( ( permission ) => + { + if( permission != Permission.Granted || IsFilePickerBusy() ) + { + callback?.Invoke( false ); + return; + } + + if( CanExportMultipleFiles() ) + { +#if UNITY_EDITOR + string destination = UnityEditor.EditorUtility.OpenFolderPanel( "Select destination", Path.GetDirectoryName( filePaths[0] ), "" ); + if( string.IsNullOrEmpty( destination ) ) + { + if( callback != null ) + callback( false ); + } + else + { + try + { + for( int i = 0; i < filePaths.Length; i++ ) + File.Copy( filePaths[i], Path.Combine( destination, Path.GetFileName( filePaths[i] ) ), true ); + + if( callback != null ) + callback( true ); + } + catch( Exception e ) + { + Debug.LogException( e ); + + if( callback != null ) + callback( false ); + } + } +#elif UNITY_ANDROID + AJC.CallStatic( "ExportFiles", Context, new FPResultCallbackAndroid( null, null, callback ), filePaths, filePaths.Length ); +#elif UNITY_IOS + FPResultCallbackiOS.Initialize( null, null, callback ); + _NativeFilePicker_ExportFiles( filePaths, filePaths.Length ); +#endif + } + else if( callback != null ) + callback( false ); + }, false ); + } + #endregion +} \ No newline at end of file diff --git a/Assets/Plugins/NativeFilePicker/NativeFilePicker.cs.meta b/Assets/Plugins/NativeFilePicker/NativeFilePicker.cs.meta new file mode 100644 index 0000000..25fe134 --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/NativeFilePicker.cs.meta @@ -0,0 +1,19 @@ +fileFormatVersion: 2 +guid: 5ecdc359fc7b7e448a5aa6433eafcb8b +timeCreated: 1498722610 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 173238 + packageName: Native File Picker for Android & iOS + packageVersion: 1.4.1 + assetPath: Assets/Plugins/NativeFilePicker/NativeFilePicker.cs + uploadId: 757770 diff --git a/Assets/Plugins/NativeFilePicker/README.txt b/Assets/Plugins/NativeFilePicker/README.txt new file mode 100644 index 0000000..8af156b --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/README.txt @@ -0,0 +1,6 @@ += Native File Picker for Android & iOS (v1.4.1) = + +Documentation: https://github.com/yasirkula/UnityNativeFilePicker +FAQ: https://github.com/yasirkula/UnityNativeFilePicker#faq +Example code: https://github.com/yasirkula/UnityNativeFilePicker#example-code +E-mail: yasirkula@gmail.com \ No newline at end of file diff --git a/Assets/Plugins/NativeFilePicker/README.txt.meta b/Assets/Plugins/NativeFilePicker/README.txt.meta new file mode 100644 index 0000000..db68b97 --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/README.txt.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: a0357092d6d35434c8b136abfe2b6260 +timeCreated: 1563308465 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 173238 + packageName: Native File Picker for Android & iOS + packageVersion: 1.4.1 + assetPath: Assets/Plugins/NativeFilePicker/README.txt + uploadId: 757770 diff --git a/Assets/Plugins/NativeFilePicker/iOS.meta b/Assets/Plugins/NativeFilePicker/iOS.meta new file mode 100644 index 0000000..2d639e9 --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/iOS.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8d99a20b76631e440a062e4fad822fc8 +folderAsset: yes +timeCreated: 1592132993 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NativeFilePicker/iOS/FPResultCallbackiOS.cs b/Assets/Plugins/NativeFilePicker/iOS/FPResultCallbackiOS.cs new file mode 100644 index 0000000..5517e25 --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/iOS/FPResultCallbackiOS.cs @@ -0,0 +1,155 @@ +#if UNITY_EDITOR || UNITY_IOS +using UnityEngine; + +namespace NativeFilePickerNamespace +{ + public class FPResultCallbackiOS : MonoBehaviour + { + private static FPResultCallbackiOS instance; + + private NativeFilePicker.FilePickedCallback pickCallback; + private NativeFilePicker.MultipleFilesPickedCallback pickCallbackMultiple; + private NativeFilePicker.FilesExportedCallback exportCallback; + + private float nextBusyCheckTime; + + public static bool IsBusy { get; private set; } + + [System.Runtime.InteropServices.DllImport( "__Internal" )] + private static extern int _NativeFilePicker_IsFilePickerBusy(); + + public static void Initialize( NativeFilePicker.FilePickedCallback pickCallback, NativeFilePicker.MultipleFilesPickedCallback pickCallbackMultiple, NativeFilePicker.FilesExportedCallback exportCallback ) + { + if( IsBusy ) + return; + + if( instance == null ) + { + instance = new GameObject( "FPResultCallbackiOS" ).AddComponent(); + DontDestroyOnLoad( instance.gameObject ); + } + + instance.pickCallback = pickCallback; + instance.pickCallbackMultiple = pickCallbackMultiple; + instance.exportCallback = exportCallback; + + instance.nextBusyCheckTime = Time.realtimeSinceStartup + 1f; + IsBusy = true; + } + + private void Update() + { + if( IsBusy ) + { + if( Time.realtimeSinceStartup >= nextBusyCheckTime ) + { + nextBusyCheckTime = Time.realtimeSinceStartup + 1f; + + if( _NativeFilePicker_IsFilePickerBusy() == 0 ) + OnOperationCancelled( null ); + } + } + } + + [UnityEngine.Scripting.Preserve] + public void OnFilePicked( string path ) + { + IsBusy = false; + + if( string.IsNullOrEmpty( path ) ) + path = null; + + NativeFilePicker.FilePickedCallback _pickCallback = pickCallback; + pickCallback = null; + + if( _pickCallback != null ) + _pickCallback( path ); + } + + [UnityEngine.Scripting.Preserve] + public void OnMultipleFilesPicked( string paths ) + { + IsBusy = false; + + string[] _paths = SplitPaths( paths ); + if( _paths != null && _paths.Length == 0 ) + _paths = null; + + NativeFilePicker.MultipleFilesPickedCallback _pickCallbackMultiple = pickCallbackMultiple; + pickCallbackMultiple = null; + + if( _pickCallbackMultiple != null ) + _pickCallbackMultiple( _paths ); + } + + [UnityEngine.Scripting.Preserve] + public void OnFilesExported( string message ) + { + IsBusy = false; + + NativeFilePicker.FilesExportedCallback _exportCallback = exportCallback; + exportCallback = null; + + if( _exportCallback != null ) + _exportCallback( message == "1" ); + } + + [UnityEngine.Scripting.Preserve] + public void OnOperationCancelled( string message ) + { + IsBusy = false; + + NativeFilePicker.FilePickedCallback _pickCallback = pickCallback; + NativeFilePicker.MultipleFilesPickedCallback _pickCallbackMultiple = pickCallbackMultiple; + NativeFilePicker.FilesExportedCallback _exportCallback = exportCallback; + + pickCallback = null; + pickCallbackMultiple = null; + exportCallback = null; + + if( _pickCallback != null ) + _pickCallback( null ); + + if( _pickCallbackMultiple != null ) + _pickCallbackMultiple( null ); + + if( _exportCallback != null ) + _exportCallback( false ); + } + + private string[] SplitPaths( string paths ) + { + string[] result = null; + if( !string.IsNullOrEmpty( paths ) ) + { + string[] pathsSplit = paths.Split( '>' ); + + int validPathCount = 0; + for( int i = 0; i < pathsSplit.Length; i++ ) + { + if( !string.IsNullOrEmpty( pathsSplit[i] ) ) + validPathCount++; + } + + if( validPathCount == 0 ) + pathsSplit = new string[0]; + else if( validPathCount != pathsSplit.Length ) + { + string[] validPaths = new string[validPathCount]; + for( int i = 0, j = 0; i < pathsSplit.Length; i++ ) + { + if( !string.IsNullOrEmpty( pathsSplit[i] ) ) + validPaths[j++] = pathsSplit[i]; + } + + pathsSplit = validPaths; + } + + result = pathsSplit; + } + + return result; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Plugins/NativeFilePicker/iOS/FPResultCallbackiOS.cs.meta b/Assets/Plugins/NativeFilePicker/iOS/FPResultCallbackiOS.cs.meta new file mode 100644 index 0000000..3d30b04 --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/iOS/FPResultCallbackiOS.cs.meta @@ -0,0 +1,19 @@ +fileFormatVersion: 2 +guid: b11d2999e16ca864f8974988d73c2017 +timeCreated: 1519060539 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 173238 + packageName: Native File Picker for Android & iOS + packageVersion: 1.4.1 + assetPath: Assets/Plugins/NativeFilePicker/iOS/FPResultCallbackiOS.cs + uploadId: 757770 diff --git a/Assets/Plugins/NativeFilePicker/iOS/NativeFilePicker.mm b/Assets/Plugins/NativeFilePicker/iOS/NativeFilePicker.mm new file mode 100644 index 0000000..d2358f0 --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/iOS/NativeFilePicker.mm @@ -0,0 +1,213 @@ +#import + +extern UIViewController* UnityGetGLViewController(); + +@interface UNativeFilePicker:NSObject ++ (void)pickFiles:(BOOL)allowMultipleSelection withUTIs:(NSArray *)allowedUTIs; ++ (void)exportFiles:(NSArray *)paths; ++ (int)canPickMultipleFiles; ++ (int)isFilePickerBusy; ++ (char *)convertExtensionToUTI:(NSString *)extension; +@end + +@implementation UNativeFilePicker + +static UIDocumentPickerViewController *filePicker; +static BOOL pickingMultipleFiles; +static int filePickerState = 0; // 0 -> none, 1 -> showing, 2 -> finished + ++ (void)pickFiles:(BOOL)allowMultipleSelection withUTIs:(NSArray *)allowedUTIs +{ + filePicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:allowedUTIs inMode:UIDocumentPickerModeImport]; + filePicker.delegate = (id) self; + + if( @available(iOS 11.0, *) ) + filePicker.allowsMultipleSelection = allowMultipleSelection; + + // Show file extensions if possible + if( @available(iOS 13.0, *) ) + filePicker.shouldShowFileExtensions = YES; + + pickingMultipleFiles = allowMultipleSelection; + filePickerState = 1; + + [UnityGetGLViewController() presentViewController:filePicker animated:NO completion:^{ filePickerState = 0; }]; +} + ++ (void)exportFiles:(NSArray *)paths +{ + if( paths != nil && [paths count] > 0 ) + { + if ([paths count] > 1 && [self canPickMultipleFiles] == 1) + filePicker = [[UIDocumentPickerViewController alloc] initWithURLs:paths inMode:UIDocumentPickerModeExportToService]; + else + filePicker = [[UIDocumentPickerViewController alloc] initWithURL:paths[0] inMode:UIDocumentPickerModeExportToService]; + + filePicker.delegate = (id) self; + + // Show file extensions if possible + if( @available(iOS 13.0, *) ) + filePicker.shouldShowFileExtensions = YES; + + filePickerState = 1; + [UnityGetGLViewController() presentViewController:filePicker animated:NO completion:^{ filePickerState = 0; }]; + } +} + ++ (int)canPickMultipleFiles +{ + if( @available(iOS 11.0, *) ) + return 1; + + return 0; +} + ++ (int)isFilePickerBusy +{ + if( filePickerState == 2 ) + return 1; + + if( filePicker != nil ) + { + if( filePickerState == 1 || [filePicker presentingViewController] == UnityGetGLViewController() ) + return 1; + else + { + filePicker = nil; + return 0; + } + } + else + return 0; +} + +// Credit: https://lists.apple.com/archives/cocoa-dev/2012/Jan/msg00052.html ++ (char *)convertExtensionToUTI:(NSString *)extension +{ + CFStringRef fileUTI = UTTypeCreatePreferredIdentifierForTag( kUTTagClassFilenameExtension, (__bridge CFStringRef) extension, NULL ); + char *result = [self getCString:(__bridge NSString *) fileUTI]; + CFRelease( fileUTI ); + + return result; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" ++ (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url +{ + [self documentPickerCompleted:controller documents:@[url]]; +} +#pragma clang diagnostic pop + ++ (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray *)urls +{ + [self documentPickerCompleted:controller documents:urls]; +} + ++ (void)documentPickerCompleted:(UIDocumentPickerViewController *)controller documents:(NSArray *)urls +{ + filePicker = nil; + filePickerState = 2; + + if( controller.documentPickerMode == UIDocumentPickerModeImport ) + { + if( !pickingMultipleFiles || [urls count] <= 1 ) + { + const char* filePath; + if( [urls count] == 0 ) + filePath = ""; + else + filePath = [self getCString:[urls[0] path]]; + + if( pickingMultipleFiles ) + UnitySendMessage( "FPResultCallbackiOS", "OnMultipleFilesPicked", filePath ); + else + UnitySendMessage( "FPResultCallbackiOS", "OnFilePicked", filePath ); + } + else + { + NSMutableArray *filePaths = [NSMutableArray arrayWithCapacity:[urls count]]; + for( int i = 0; i < [urls count]; i++ ) + [filePaths addObject:[urls[i] path]]; + + UnitySendMessage( "FPResultCallbackiOS", "OnMultipleFilesPicked", [self getCString:[filePaths componentsJoinedByString:@">"]] ); + } + } + else if( controller.documentPickerMode == UIDocumentPickerModeExportToService ) + { + if( [urls count] > 0 ) + UnitySendMessage( "FPResultCallbackiOS", "OnFilesExported", "1" ); + else + UnitySendMessage( "FPResultCallbackiOS", "OnFilesExported", "0" ); + } + + [controller dismissViewControllerAnimated:NO completion:nil]; +} + ++ (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller +{ + filePicker = nil; + UnitySendMessage( "FPResultCallbackiOS", "OnOperationCancelled", "" ); + + [controller dismissViewControllerAnimated:NO completion:nil]; +} + +// Credit: https://stackoverflow.com/a/37052118/2373034 ++ (char *)getCString:(NSString *)source +{ + if( source == nil ) + source = @""; + + const char *sourceUTF8 = [source UTF8String]; + char *result = (char*) malloc( strlen( sourceUTF8 ) + 1 ); + strcpy(result, sourceUTF8); + + return result; +} + +@end + +extern "C" void _NativeFilePicker_PickFile( const char* UTIs[], int UTIsCount ) +{ + NSMutableArray *allowedUTIs = [NSMutableArray arrayWithCapacity:UTIsCount]; + for( int i = 0; i < UTIsCount; i++ ) + [allowedUTIs addObject:[NSString stringWithUTF8String:UTIs[i]]]; + + [UNativeFilePicker pickFiles:NO withUTIs:allowedUTIs]; +} + +extern "C" void _NativeFilePicker_PickMultipleFiles( const char* UTIs[], int UTIsCount ) +{ + NSMutableArray *allowedUTIs = [NSMutableArray arrayWithCapacity:UTIsCount]; + for( int i = 0; i < UTIsCount; i++ ) + [allowedUTIs addObject:[NSString stringWithUTF8String:UTIs[i]]]; + + [UNativeFilePicker pickFiles:YES withUTIs:allowedUTIs]; +} + +extern "C" void _NativeFilePicker_ExportFiles( const char* files[], int filesCount ) +{ + NSMutableArray *paths = [NSMutableArray arrayWithCapacity:filesCount]; + for( int i = 0; i < filesCount; i++ ) + { + NSString *filePath = [NSString stringWithUTF8String:files[i]]; + [paths addObject:[NSURL fileURLWithPath:filePath]]; + } + + [UNativeFilePicker exportFiles:paths]; +} + +extern "C" int _NativeFilePicker_CanPickMultipleFiles() +{ + return [UNativeFilePicker canPickMultipleFiles]; +} + +extern "C" int _NativeFilePicker_IsFilePickerBusy() +{ + return [UNativeFilePicker isFilePickerBusy]; +} + +extern "C" char* _NativeFilePicker_ConvertExtensionToUTI( const char* extension ) +{ + return [UNativeFilePicker convertExtensionToUTI:[NSString stringWithUTF8String:extension]]; +} \ No newline at end of file diff --git a/Assets/Plugins/NativeFilePicker/iOS/NativeFilePicker.mm.meta b/Assets/Plugins/NativeFilePicker/iOS/NativeFilePicker.mm.meta new file mode 100644 index 0000000..b83c6a2 --- /dev/null +++ b/Assets/Plugins/NativeFilePicker/iOS/NativeFilePicker.mm.meta @@ -0,0 +1,40 @@ +fileFormatVersion: 2 +guid: 4c65eb8688946be4ea1af62f377f8891 +timeCreated: 1498722774 +licenseType: Store +PluginImporter: + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + data: + first: + Any: + second: + enabled: 0 + settings: {} + data: + first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + data: + first: + iPhone: iOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 173238 + packageName: Native File Picker for Android & iOS + packageVersion: 1.4.1 + assetPath: Assets/Plugins/NativeFilePicker/iOS/NativeFilePicker.mm + uploadId: 757770 diff --git a/Assets/Resources_moved/Configs/InputServiceConfig.asset b/Assets/Resources_moved/Configs/InputServiceConfig.asset index 13b9b15..55e8b35 100644 --- a/Assets/Resources_moved/Configs/InputServiceConfig.asset +++ b/Assets/Resources_moved/Configs/InputServiceConfig.asset @@ -12,4 +12,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: ab6d921463750b04aaccb1bf3b2d9608, type: 3} m_Name: InputServiceConfig m_EditorClassIdentifier: Assembly-CSharp::Code.Infrastructure.Input.InputServiceConfig - inputActionAsset: {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3} + inputActionAsset: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3} diff --git a/Assets/Resources_moved/UI/Canvas.prefab b/Assets/Resources_moved/UI/Canvas.prefab index 6b4be4d..5bcdbee 100644 --- a/Assets/Resources_moved/UI/Canvas.prefab +++ b/Assets/Resources_moved/UI/Canvas.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &3093252495306112961 +--- !u!1 &6650273595372551440 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,111 +8,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 85526656748497033} - - component: {fileID: 5474172051638134131} - - component: {fileID: 4522556149065460202} - - component: {fileID: 3454116689055038688} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &85526656748497033 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3093252495306112961} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 9125308170007725291} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!223 &5474172051638134131 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3093252495306112961} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 1 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_VertexColorAlwaysGammaSpace: 1 - m_AdditionalShaderChannelsFlag: 0 - m_UpdateRectTransformForStandalone: 0 - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!114 &4522556149065460202 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3093252495306112961} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} - m_Name: - m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 - m_PresetInfoIsWorld: 0 ---- !u!114 &3454116689055038688 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3093252495306112961} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} - m_Name: - m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!1 &6243395250032418262 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9125308170007725291} - - component: {fileID: 3667409677689196428} - - component: {fileID: 3342802897908395069} + - component: {fileID: 4575823044398036904} + - component: {fileID: 2630666168266589900} + - component: {fileID: 659249921352961972} m_Layer: 0 m_Name: EventSystem m_TagString: Untagged @@ -120,28 +18,28 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &9125308170007725291 +--- !u!4 &4575823044398036904 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6243395250032418262} + m_GameObject: {fileID: 6650273595372551440} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -640, y: -360, z: 0} + m_LocalPosition: {x: -360, y: -640, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 85526656748497033} + m_Father: {fileID: 6715626251186477161} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &3667409677689196428 +--- !u!114 &2630666168266589900 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6243395250032418262} + m_GameObject: {fileID: 6650273595372551440} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} @@ -150,13 +48,13 @@ MonoBehaviour: m_FirstSelected: {fileID: 0} m_sendNavigationEvents: 1 m_DragThreshold: 10 ---- !u!114 &3342802897908395069 +--- !u!114 &659249921352961972 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6243395250032418262} + m_GameObject: {fileID: 6650273595372551440} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3} @@ -181,3 +79,105 @@ MonoBehaviour: m_PointerBehavior: 0 m_CursorLockBehavior: 0 m_ScrollDeltaPerTick: 6 +--- !u!1 &7008556861191420908 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6715626251186477161} + - component: {fileID: 6976550510986434516} + - component: {fileID: 4324417118856064204} + - component: {fileID: 6577896291693304153} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6715626251186477161 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7008556861191420908} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4575823044398036904} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &6976550510986434516 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7008556861191420908} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 1 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &4324417118856064204 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7008556861191420908} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!114 &6577896291693304153 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7008556861191420908} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/Main.unity similarity index 50% rename from Assets/Scenes/SampleScene.unity rename to Assets/Scenes/Main.unity index 7b420f6..a5d9835 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/Main.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,12 +66,9 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 - m_BakeBackend: 1 + m_BakeBackend: 2 m_PVRSampling: 1 m_PVRDirectSampleCount: 32 m_PVRSampleCount: 512 @@ -89,22 +85,22 @@ LightmapSettings: m_PVREnvironmentMIS: 1 m_PVRCulling: 1 m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} m_LightingSettings: {fileID: 0} --- !u!196 &4 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,13 +113,13 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &519420028 +--- !u!1 &1327277297 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -131,10 +127,54 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 519420032} - - component: {fileID: 519420031} - - component: {fileID: 519420029} - - component: {fileID: 519420030} + - component: {fileID: 1327277299} + - component: {fileID: 1327277298} + m_Layer: 0 + m_Name: SceneScope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1327277298 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1327277297} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5312032623c34414a54ea00e35a7eb8e, type: 3} + m_Name: + m_EditorClassIdentifier: Reflex::Reflex.Core.ContainerScope +--- !u!4 &1327277299 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1327277297} + 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!1 &2025479801 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2025479805} + - component: {fileID: 2025479804} + - component: {fileID: 2025479803} + - component: {fileID: 2025479802} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -142,27 +182,19 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!81 &519420029 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519420028} - m_Enabled: 1 ---- !u!114 &519420030 +--- !u!114 &2025479802 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519420028} + m_GameObject: {fileID: 2025479801} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} m_Name: - m_EditorClassIdentifier: - m_RenderShadows: 1 + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData + m_RenderShadows: 0 m_RequiresDepthTextureOption: 2 m_RequiresOpaqueTextureOption: 2 m_CameraType: 0 @@ -172,6 +204,7 @@ MonoBehaviour: serializedVersion: 2 m_Bits: 1 m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 m_RenderPostProcessing: 0 m_Antialiasing: 0 m_AntialiasingQuality: 2 @@ -179,26 +212,53 @@ MonoBehaviour: 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_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 m_Version: 2 ---- !u!20 &519420031 +--- !u!81 &2025479803 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2025479801} + m_Enabled: 1 +--- !u!20 &2025479804 Camera: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519420028} + m_GameObject: {fileID: 2025479801} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 2 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_BackGroundColor: {r: 0.95251465, g: 0.9716981, b: 0.8937789, 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_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -207,7 +267,7 @@ Camera: height: 1 near clip plane: 0.3 far clip plane: 1000 - field of view: 34 + field of view: 60 orthographic: 1 orthographic size: 5 m_Depth: -1 @@ -217,136 +277,130 @@ Camera: m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 - m_TargetEye: 0 - m_HDR: 1 - m_AllowMSAA: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 - m_OcclusionCulling: 0 + m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 ---- !u!4 &519420032 +--- !u!4 &2025479805 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519420028} + m_GameObject: {fileID: 2025479801} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &619394800 -GameObject: +--- !u!1001 &7382841504400031287 +PrefabInstance: m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 619394802} - - component: {fileID: 619394801} - m_Layer: 0 - m_Name: Global Light 2D - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &619394801 -MonoBehaviour: + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6715626251186477161, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7008556861191420908, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} + propertyPath: m_Name + value: Canvas + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e1fbe5b2798657342b569f723d16c9de, type: 3} +--- !u!1660057539 &9223372036854775807 +SceneRoots: m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 619394800} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_ComponentVersion: 1 - m_LightType: 4 - m_BlendStyleIndex: 0 - m_FalloffIntensity: 0.5 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 - m_LightVolumeIntensity: 1 - m_LightVolumeIntensityEnabled: 0 - m_ApplyToSortingLayers: 00000000 - m_LightCookieSprite: {fileID: 0} - m_DeprecatedPointLightCookieSprite: {fileID: 0} - m_LightOrder: 0 - m_OverlapOperation: 0 - m_NormalMapDistance: 3 - m_NormalMapQuality: 2 - m_UseNormalMap: 0 - m_ShadowIntensityEnabled: 0 - m_ShadowIntensity: 0.75 - m_ShadowVolumeIntensityEnabled: 0 - m_ShadowVolumeIntensity: 0.75 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 - m_LocalBounds: - m_Center: {x: 0, y: -0.00000011920929, z: 0} - m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} - m_PointLightInnerAngle: 360 - m_PointLightOuterAngle: 360 - m_PointLightInnerRadius: 0 - m_PointLightOuterRadius: 1 - m_ShapeLightParametricSides: 5 - m_ShapeLightParametricAngleOffset: 0 - m_ShapeLightParametricRadius: 1 - m_ShapeLightFalloffSize: 0.5 - m_ShapeLightFalloffOffset: {x: 0, y: 0} - m_ShapePath: - - {x: -0.5, y: -0.5, z: 0} - - {x: 0.5, y: -0.5, z: 0} - - {x: 0.5, y: 0.5, z: 0} - - {x: -0.5, y: 0.5, z: 0} ---- !u!4 &619394802 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 619394800} - 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_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Roots: + - {fileID: 2025479805} + - {fileID: 7382841504400031287} + - {fileID: 1327277299} diff --git a/Assets/Scenes/SampleScene.unity.meta b/Assets/Scenes/Main.unity.meta similarity index 74% rename from Assets/Scenes/SampleScene.unity.meta rename to Assets/Scenes/Main.unity.meta index 963ff8e..696dfcd 100644 --- a/Assets/Scenes/SampleScene.unity.meta +++ b/Assets/Scenes/Main.unity.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8c9cfa26abfee488c85f1582747f6a02 +guid: 90e4de6cc3fe5d0489cc3309fe1ec4d6 DefaultImporter: externalObjects: {} userData: diff --git a/Assets/UnityCodeGen.Generated/Code.Infrastructure.App.AppStateMachine.Generated.cs b/Assets/UnityCodeGen.Generated/Code.Infrastructure.App.AppStateMachine.Generated.cs index 37d18c2..9802bb0 100644 --- a/Assets/UnityCodeGen.Generated/Code.Infrastructure.App.AppStateMachine.Generated.cs +++ b/Assets/UnityCodeGen.Generated/Code.Infrastructure.App.AppStateMachine.Generated.cs @@ -3,12 +3,6 @@ #pragma warning disable CS0105 using Code.Infrastructure.StateMachine; -using Code.Infrastructure.App.States; - -using Code.Infrastructure.App.States; - -using Code.Example.Platformer; - using Code.Infrastructure.App.States; #pragma warning restore CS0105 @@ -21,18 +15,9 @@ public partial class AppStateMachine : AbstractStateMachine AllowedStates.HasFlag(nextState); diff --git a/Assets/UnityCodeGen.Generated/ConfigLocator.Generated.cs b/Assets/UnityCodeGen.Generated/ConfigLocator.Generated.cs index 076d311..feceb1c 100644 --- a/Assets/UnityCodeGen.Generated/ConfigLocator.Generated.cs +++ b/Assets/UnityCodeGen.Generated/ConfigLocator.Generated.cs @@ -1,18 +1,13 @@ #pragma warning disable CS0105 - using Code.Example.Race.Racer; -using Code.Infrastructure.Configs; -using Code.Infrastructure.Camera; + using Code.Infrastructure.UI; using Code.Infrastructure.Audio; -using Code.Infrastructure.Camera; -using Code.Infrastructure.UI; using Code.Infrastructure.UI; +using Code.Infrastructure.Audio; using Code.Infrastructure.SceneLoader; -using Code.Infrastructure.Audio; -using Code.Infrastructure.Volume; -using Code.Example.Platformer.Entity; -using Code.Infrastructure.Audio; using Code.Infrastructure.Input; +using Code.Infrastructure.Configs; +using Code.Infrastructure.Audio; using UnityEngine; #pragma warning restore CS0105 @@ -26,32 +21,22 @@ using Code.Infrastructure.Input; { SystemConfigsReferences systemConfigsReferences = Resources.Load("SystemConfigsReferences"); - _multipleConfigReferences.Add(typeof(Code.Example.Race.Racer.RacerSettingsConfig), systemConfigsReferences.RacerSettings); - - _multipleConfigReferences.Add(typeof(Code.Infrastructure.Configs.LayerMasksConfigConfig), systemConfigsReferences.LayerMasksConfig); - - _multipleConfigReferences.Add(typeof(Code.Infrastructure.Camera.CameraSettingsConfig), systemConfigsReferences.CameraSettings); - - _singleConfigReferences.Add(typeof(Code.Infrastructure.Audio.AudioSourcePrefabConfig), systemConfigsReferences.AudioSourcePrefab); - - _singleConfigReferences.Add(typeof(Code.Infrastructure.Camera.GameCameraConfig), systemConfigsReferences.GameCamera); - _singleConfigReferences.Add(typeof(Code.Infrastructure.UI.CanvasSettingsConfig), systemConfigsReferences.CanvasSettings); - _multipleConfigReferences.Add(typeof(Code.Infrastructure.UI.UIPanelSettingsConfig), systemConfigsReferences.UIPanelSettings); - - _multipleConfigReferences.Add(typeof(Code.Infrastructure.SceneLoader.SceneInfoConfig), systemConfigsReferences.SceneInfo); - _multipleConfigReferences.Add(typeof(Code.Infrastructure.Audio.AudioInfoConfig), systemConfigsReferences.AudioInfo); - _multipleConfigReferences.Add(typeof(Code.Infrastructure.Volume.VolumeSettingsConfig), systemConfigsReferences.VolumeSettings); - - _multipleConfigReferences.Add(typeof(Code.Example.Platformer.Entity.PlatformerEnemySettingsConfig), systemConfigsReferences.PlatformerEnemySettings); + _multipleConfigReferences.Add(typeof(Code.Infrastructure.UI.UIPanelSettingsConfig), systemConfigsReferences.UIPanelSettings); _multipleConfigReferences.Add(typeof(Code.Infrastructure.Audio.AudioSourceSettingsConfig), systemConfigsReferences.AudioSourceSettings); + _multipleConfigReferences.Add(typeof(Code.Infrastructure.SceneLoader.SceneInfoConfig), systemConfigsReferences.SceneInfo); + _singleConfigReferences.Add(typeof(Code.Infrastructure.Input.InputServiceConfig), systemConfigsReferences.InputService); + _multipleConfigReferences.Add(typeof(Code.Infrastructure.Configs.LayerMasksConfigConfig), systemConfigsReferences.LayerMasksConfig); + + _singleConfigReferences.Add(typeof(Code.Infrastructure.Audio.AudioSourcePrefabConfig), systemConfigsReferences.AudioSourcePrefab); + //_singleConfigReferences.Add(typeof(ScenesAssetReferences), systemConfigsReferences.scenesAssetReferences); } } diff --git a/Assets/UnityCodeGen.Generated/SceneLoader.Generated.cs b/Assets/UnityCodeGen.Generated/SceneLoader.Generated.cs index 57f7dd6..ae69718 100644 --- a/Assets/UnityCodeGen.Generated/SceneLoader.Generated.cs +++ b/Assets/UnityCodeGen.Generated/SceneLoader.Generated.cs @@ -14,14 +14,6 @@ partial void SetupScenesInfo(){ _scenesActions.Add(SceneId.MainMenu,() => _eventBus.RaiseEvent(h=> h.OnMainMenuSceneLoaded())); - _scenesActions.Add(SceneId.Gameplay,() => _eventBus.RaiseEvent(h=> h.OnGameplaySceneLoaded())); - - - _scenesActions.Add(SceneId.SoundTest,() => _eventBus.RaiseEvent(h=> h.OnSoundTestSceneLoaded())); - - - _scenesActions.Add(SceneId.Platformer,() => _eventBus.RaiseEvent(h=> h.OnPlatformerSceneLoaded())); - } } diff --git a/Assets/UnityCodeGen.Generated/SystemConfigsReferences.Generated.cs b/Assets/UnityCodeGen.Generated/SystemConfigsReferences.Generated.cs index f871764..657595f 100644 --- a/Assets/UnityCodeGen.Generated/SystemConfigsReferences.Generated.cs +++ b/Assets/UnityCodeGen.Generated/SystemConfigsReferences.Generated.cs @@ -1,18 +1,13 @@ #pragma warning disable CS0105 - using Code.Example.Race.Racer; -using Code.Infrastructure.Configs; -using Code.Infrastructure.Camera; + using Code.Infrastructure.UI; using Code.Infrastructure.Audio; -using Code.Infrastructure.Camera; -using Code.Infrastructure.UI; using Code.Infrastructure.UI; +using Code.Infrastructure.Audio; using Code.Infrastructure.SceneLoader; -using Code.Infrastructure.Audio; -using Code.Infrastructure.Volume; -using Code.Example.Platformer.Entity; -using Code.Infrastructure.Audio; using Code.Infrastructure.Input; +using Code.Infrastructure.Configs; +using Code.Infrastructure.Audio; using UnityEngine.AddressableAssets; #pragma warning restore CS0105 @@ -20,19 +15,14 @@ using Code.Infrastructure.Input; namespace Code.Infrastructure.Configs{ public partial class SystemConfigsReferences { - public string RacerSettings; -public string LayerMasksConfig; -public string CameraSettings; -public AssetReference AudioSourcePrefab; -public AssetReference GameCamera; -public AssetReference CanvasSettings; -public string UIPanelSettings; -public string SceneInfo; + public AssetReference CanvasSettings; public string AudioInfo; -public string VolumeSettings; -public string PlatformerEnemySettings; +public string UIPanelSettings; public string AudioSourceSettings; +public string SceneInfo; public AssetReference InputService; +public string LayerMasksConfig; +public AssetReference AudioSourcePrefab; } } diff --git a/MojSad/.obsidian/workspace.json b/MojSad/.obsidian/workspace.json index 0484438..accc1d1 100644 --- a/MojSad/.obsidian/workspace.json +++ b/MojSad/.obsidian/workspace.json @@ -15,8 +15,8 @@ "state": { "file": "ПоложениеДел.canvas", "viewState": { - "x": -188.26963317624688, - "y": -7.632843469190497, + "x": 553.6011385858071, + "y": -276.6317874287139, "zoom": -0.5016010904808839 } }, diff --git a/MojSad/Дела/Задача.md b/MojSad/Дела/Задача.md index 68a8b18..00e09bc 100644 --- a/MojSad/Дела/Задача.md +++ b/MojSad/Дела/Задача.md @@ -1,8 +1,8 @@ - [ ] Хранение задач пользователя -- [ ] Периодические задачи (во время) -- [ ] Одноразовые задачи (по дате) +- [x] Периодические задачи (во время) +- [x] Одноразовые задачи (по дате) - [ ] Привязка к растению -- [ ] Описание +- [x] Описание - [ ] Фотографии - [ ] PUSH-Уведомления задач \ No newline at end of file diff --git a/MojSad/Дела/Растение.md b/MojSad/Дела/Растение.md index 099a55c..7970411 100644 --- a/MojSad/Дела/Растение.md +++ b/MojSad/Дела/Растение.md @@ -1,6 +1,6 @@ Общие -- [ ] Навзание -- [ ] Фотография(иконка) +- [x] Навзание +- [x] Фотография(иконка) Из базы - [ ] Кодовое название в базе diff --git a/Packages/manifest.json b/Packages/manifest.json index 12535dd..65ef4db 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,6 +1,7 @@ { "dependencies": { "com.annulusgames.unity-codegen": "https://github.com/AnnulusGames/UnityCodeGen.git?path=/Assets/UnityCodeGen", + "com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#2.5.10", "com.gustavopsantos.reflex": "https://github.com/gustavopsantos/reflex.git?path=/Assets/Reflex/#14.2.0", "com.kyrylokuzyk.primetween": "file:../Assets/Plugins/PrimeTween/internal/com.kyrylokuzyk.primetween.tgz", "com.unity.2d.animation": "13.0.4", @@ -16,7 +17,6 @@ "com.unity.inputsystem": "1.18.0", "com.unity.render-pipelines.universal": "17.3.0", "com.unity.test-framework": "1.6.0", - "com.unity.timeline": "1.8.10", "com.unity.ugui": "2.0.0", "com.unity.visualscripting": "1.9.10", "com.unity.modules.accessibility": "1.0.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 0ee72f6..99ff129 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -7,6 +7,13 @@ "dependencies": {}, "hash": "f938d8a010a32498bd5cf04187fa3caaa51c5d93" }, + "com.cysharp.unitask": { + "version": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#2.5.10", + "depth": 0, + "source": "git", + "dependencies": {}, + "hash": "7c0f199fe0d3fc528024488ccd671e6c7b27745b" + }, "com.gustavopsantos.reflex": { "version": "https://github.com/gustavopsantos/reflex.git?path=/Assets/Reflex/#14.2.0", "depth": 0, @@ -281,18 +288,6 @@ }, "url": "https://packages.unity.com" }, - "com.unity.timeline": { - "version": "1.8.10", - "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, diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index d712d2d..13d6723 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -9,5 +9,5 @@ EditorBuildSettings: path: Assets/Scenes/SampleScene.unity guid: 8c9cfa26abfee488c85f1582747f6a02 m_configObjects: - com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3} + com.unity.addressableassets: {fileID: 11400000, guid: 149da3fe95eb9ef4ebb11d520d55cb81, type: 2} m_UseUCBPForAssetBundles: 0 diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 6ff1b2c..98fdfab 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -166,6 +166,7 @@ PlayerSettings: androidMaxAspectRatio: 2.4 androidMinAspectRatio: 1 applicationIdentifier: + Android: com.bsatu.stooidei Standalone: com.DefaultCompany.2D-URP buildNumber: Standalone: 0 @@ -295,7 +296,99 @@ PlayerSettings: AndroidReportGooglePlayAppDependencies: 1 androidSymbolsSizeThreshold: 800 m_BuildTargetIcons: [] - m_BuildTargetPlatformIcons: [] + m_BuildTargetPlatformIcons: + - 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_BuildTargetBatching: [] m_BuildTargetShaderSettings: [] m_BuildTargetGraphicsJobs: [] @@ -317,7 +410,10 @@ PlayerSettings: m_BuildTargetGroupLightmapSettings: [] m_BuildTargetGroupLoadStoreDebugModeSettings: [] m_BuildTargetNormalMapEncoding: [] - m_BuildTargetDefaultTextureCompressionFormat: [] + m_BuildTargetDefaultTextureCompressionFormat: + - serializedVersion: 3 + m_BuildTarget: Android + m_Formats: 01000000 playModeTestRunnerEnabled: 0 runPlayModeTestAsEditModeTest: 0 actionOnDotNetUnhandledException: 1 diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset index 45c190c..32e2437 100644 --- a/ProjectSettings/QualitySettings.asset +++ b/ProjectSettings/QualitySettings.asset @@ -6,7 +6,7 @@ QualitySettings: serializedVersion: 5 m_CurrentQuality: 0 m_QualitySettings: - - serializedVersion: 4 + - serializedVersion: 5 name: Very Low pixelLightCount: 0 shadows: 0 @@ -34,6 +34,7 @@ QualitySettings: adaptiveVsyncExtraA: 0 adaptiveVsyncExtraB: 0 lodBias: 0.3 + meshLodThreshold: 1 maximumLODLevel: 0 enableLODCrossFade: 1 streamingMipmapsActive: 0 @@ -58,7 +59,7 @@ QualitySettings: terrainFadeLength: 5 terrainMaxTrees: 50 excludedTargetPlatforms: [] - - serializedVersion: 4 + - serializedVersion: 5 name: Low pixelLightCount: 0 shadows: 0 @@ -86,6 +87,7 @@ QualitySettings: adaptiveVsyncExtraA: 0 adaptiveVsyncExtraB: 0 lodBias: 0.4 + meshLodThreshold: 1 maximumLODLevel: 0 enableLODCrossFade: 1 streamingMipmapsActive: 0 @@ -110,7 +112,7 @@ QualitySettings: terrainFadeLength: 5 terrainMaxTrees: 50 excludedTargetPlatforms: [] - - serializedVersion: 4 + - serializedVersion: 5 name: Medium pixelLightCount: 1 shadows: 1 @@ -138,6 +140,7 @@ QualitySettings: adaptiveVsyncExtraA: 0 adaptiveVsyncExtraB: 0 lodBias: 0.7 + meshLodThreshold: 1 maximumLODLevel: 0 enableLODCrossFade: 1 streamingMipmapsActive: 0 @@ -162,7 +165,7 @@ QualitySettings: terrainFadeLength: 5 terrainMaxTrees: 50 excludedTargetPlatforms: [] - - serializedVersion: 4 + - serializedVersion: 5 name: High pixelLightCount: 2 shadows: 2 @@ -190,6 +193,7 @@ QualitySettings: adaptiveVsyncExtraA: 0 adaptiveVsyncExtraB: 0 lodBias: 1 + meshLodThreshold: 1 maximumLODLevel: 0 enableLODCrossFade: 1 streamingMipmapsActive: 0 @@ -214,7 +218,7 @@ QualitySettings: terrainFadeLength: 5 terrainMaxTrees: 50 excludedTargetPlatforms: [] - - serializedVersion: 4 + - serializedVersion: 5 name: Very High pixelLightCount: 3 shadows: 2 @@ -242,6 +246,7 @@ QualitySettings: adaptiveVsyncExtraA: 0 adaptiveVsyncExtraB: 0 lodBias: 1.5 + meshLodThreshold: 1 maximumLODLevel: 0 enableLODCrossFade: 1 streamingMipmapsActive: 0 @@ -266,7 +271,7 @@ QualitySettings: terrainFadeLength: 5 terrainMaxTrees: 50 excludedTargetPlatforms: [] - - serializedVersion: 4 + - serializedVersion: 5 name: Ultra pixelLightCount: 4 shadows: 2 @@ -294,6 +299,7 @@ QualitySettings: adaptiveVsyncExtraA: 0 adaptiveVsyncExtraB: 0 lodBias: 2 + meshLodThreshold: 1 maximumLODLevel: 0 enableLODCrossFade: 1 streamingMipmapsActive: 0 @@ -325,6 +331,7 @@ QualitySettings: GameCoreXboxOne: 5 Lumin: 5 Nintendo Switch: 5 + Nintendo Switch 2: 5 PS4: 5 PS5: 5 Stadia: 5 diff --git a/ProjectSettings/SceneTemplateSettings.json b/ProjectSettings/SceneTemplateSettings.json new file mode 100644 index 0000000..ede5887 --- /dev/null +++ b/ProjectSettings/SceneTemplateSettings.json @@ -0,0 +1,121 @@ +{ + "templatePinStates": [], + "dependencyTypeInfos": [ + { + "userAdded": false, + "type": "UnityEngine.AnimationClip", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.Animations.AnimatorController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.AnimatorOverrideController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.Audio.AudioMixerController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.ComputeShader", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Cubemap", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.GameObject", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.LightingDataAsset", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.LightingSettings", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Material", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.MonoScript", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicsMaterial", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicsMaterial2D", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.VolumeProfile", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.SceneAsset", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Shader", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.ShaderVariantCollection", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Texture", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Texture2D", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Timeline.TimelineAsset", + "defaultInstantiationMode": 0 + } + ], + "defaultDependencyTypeInfo": { + "userAdded": false, + "type": "", + "defaultInstantiationMode": 1 + }, + "newSceneOverride": 0 +} \ No newline at end of file