diff --git a/Assets/AddressableAssetsData/AddressableAssetGroupSortSettings.asset b/Assets/AddressableAssetsData/AddressableAssetGroupSortSettings.asset index 7948258..592d083 100644 --- a/Assets/AddressableAssetsData/AddressableAssetGroupSortSettings.asset +++ b/Assets/AddressableAssetsData/AddressableAssetGroupSortSettings.asset @@ -13,6 +13,8 @@ MonoBehaviour: m_Name: AddressableAssetGroupSortSettings m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.GroupSchemas.AddressableAssetGroupSortSettings sortOrder: + - 2c56f39dfa281426bbb0636a757c203b + - 01d1da4daa82a469884449cd7ea9e22e - 86e13c2ac495848d99c739840b7d38e9 - 0e030d5498bfe4ffd8443c796618c539 - c0e2d4d32411e46a6a3dd5cdfa6dbe7e diff --git a/Assets/AddressableAssetsData/AddressableAssetSettings.asset b/Assets/AddressableAssetsData/AddressableAssetSettings.asset index 70414a1..575b113 100644 --- a/Assets/AddressableAssetsData/AddressableAssetSettings.asset +++ b/Assets/AddressableAssetsData/AddressableAssetSettings.asset @@ -15,7 +15,7 @@ MonoBehaviour: m_DefaultGroup: 0e030d5498bfe4ffd8443c796618c539 m_currentHash: serializedVersion: 2 - Hash: 11994545ace6358214de1d969c8c1309 + Hash: 1fd67e8e9a29e9ab741aedf586900b96 m_OptimizeCatalogSize: 0 m_BuildRemoteCatalog: 0 m_CatalogRequestsTimeout: 0 @@ -24,11 +24,11 @@ MonoBehaviour: m_InternalBundleIdMode: 1 m_AssetLoadMode: 0 m_BundledAssetProviderType: - m_AssemblyName: - m_ClassName: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider m_AssetBundleProviderType: - m_AssemblyName: - m_ClassName: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider m_IgnoreUnsupportedFilesInBuild: 0 m_UniqueBundleIds: 0 m_EnableJsonCatalog: 0 @@ -61,7 +61,9 @@ MonoBehaviour: m_BuildAddressablesWithPlayerBuild: 0 m_overridePlayerVersion: '[UnityEditor.PlayerSettings.bundleVersion]' m_GroupAssets: + - {fileID: 11400000, guid: ec9d910e81be14a1484f351f20d32f6f, type: 2} - {fileID: 11400000, guid: 884c7b3ae8a8543379b1b771a9b8ab47, type: 2} + - {fileID: 11400000, guid: 9fdea8257283a49d4a1a7181623bdade, type: 2} - {fileID: 11400000, guid: fda2e763202c2462b857e04c29824b23, type: 2} - {fileID: 11400000, guid: 9813579a74a7640e182c85c4bdeb3852, type: 2} m_BuildSettings: @@ -103,6 +105,7 @@ MonoBehaviour: m_LabelTable: m_LabelNames: - default + - drawing m_SchemaTemplates: [] m_GroupTemplateObjects: - {fileID: 11400000, guid: 08cea37bc40c14d2696479a6530b6f35, type: 2} diff --git a/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset b/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset index bb5999f..c63b335 100644 --- a/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset +++ b/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset @@ -14,7 +14,17 @@ MonoBehaviour: m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.AddressableAssetGroup m_GroupName: Default Local Group m_GUID: 0e030d5498bfe4ffd8443c796618c539 - m_SerializeEntries: [] + m_SerializeEntries: + - m_GUID: 319873779c4b440c3ad40798aa697460 + m_Address: ColorButton + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: ba3eb5e9b32d64a50bd717a07541ee18 + m_Address: ShapePiece + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 m_ReadOnly: 0 m_Settings: {fileID: 11400000, guid: 4a94ef317c3674edd8270e4ed15031f6, type: 2} m_SchemaSet: diff --git a/Assets/AddressableAssetsData/AssetGroups/Drawing.asset b/Assets/AddressableAssetsData/AssetGroups/Drawing.asset new file mode 100644 index 0000000..61ab1e5 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Drawing.asset @@ -0,0 +1,29 @@ +%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: Drawing + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.AddressableAssetGroup + m_GroupName: Drawing + m_GUID: 2c56f39dfa281426bbb0636a757c203b + m_SerializeEntries: + - m_GUID: 364f644d962504fa7ac2f382800014ea + m_Address: apple + m_ReadOnly: 0 + m_SerializedLabels: + - drawing + FlaggedDuringContentUpdateRestriction: 0 + m_ReadOnly: 0 + m_Settings: {fileID: 11400000, guid: 4a94ef317c3674edd8270e4ed15031f6, type: 2} + m_SchemaSet: + m_Schemas: + - {fileID: 11400000, guid: c68aac65911cf47a9aa8b3355994402c, type: 2} + - {fileID: 11400000, guid: 4b166a28895af465ca9a684ed07eac42, type: 2} diff --git a/Assets/AddressableAssetsData/AssetGroups/Drawing.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Drawing.asset.meta new file mode 100644 index 0000000..fea88c2 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Drawing.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9fdea8257283a49d4a1a7181623bdade +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Palettes.asset b/Assets/AddressableAssetsData/AssetGroups/Palettes.asset new file mode 100644 index 0000000..47e3e87 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Palettes.asset @@ -0,0 +1,28 @@ +%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: Palettes + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.AddressableAssetGroup + m_GroupName: Palettes + m_GUID: 01d1da4daa82a469884449cd7ea9e22e + m_SerializeEntries: + - m_GUID: 00f9beb81415a4193abff0aa201ab75b + m_Address: defaultPalette + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 + m_ReadOnly: 0 + m_Settings: {fileID: 11400000, guid: 4a94ef317c3674edd8270e4ed15031f6, type: 2} + m_SchemaSet: + m_Schemas: + - {fileID: 11400000, guid: 5c191a09b8bef451b9f74c11840d3273, type: 2} + - {fileID: 11400000, guid: e42d0727bb3974fe596fc2f19e02b7a0, type: 2} diff --git a/Assets/AddressableAssetsData/AssetGroups/Palettes.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Palettes.asset.meta new file mode 100644 index 0000000..96369fe --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Palettes.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec9d910e81be14a1484f351f20d32f6f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Drawing_BundledAssetGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/Drawing_BundledAssetGroupSchema.asset new file mode 100644 index 0000000..812d079 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Drawing_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: Drawing_BundledAssetGroupSchema + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.GroupSchemas.BundledAssetGroupSchema + m_Group: {fileID: 11400000, guid: 9fdea8257283a49d4a1a7181623bdade, 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: 1e7b566e879b2426f9a706a71f9612bf + m_LoadPath: + m_Id: e2253d243607142b0a072c38c39ccb14 + 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/Drawing_BundledAssetGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/Drawing_BundledAssetGroupSchema.asset.meta new file mode 100644 index 0000000..c29c825 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Drawing_BundledAssetGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c68aac65911cf47a9aa8b3355994402c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Drawing_ContentUpdateGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/Drawing_ContentUpdateGroupSchema.asset new file mode 100644 index 0000000..bd7d76f --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Drawing_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: Drawing_ContentUpdateGroupSchema + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.GroupSchemas.ContentUpdateGroupSchema + m_Group: {fileID: 11400000, guid: 9fdea8257283a49d4a1a7181623bdade, type: 2} + m_StaticContent: 0 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Drawing_ContentUpdateGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/Drawing_ContentUpdateGroupSchema.asset.meta new file mode 100644 index 0000000..40ed34b --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Drawing_ContentUpdateGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4b166a28895af465ca9a684ed07eac42 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Palettes_BundledAssetGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/Palettes_BundledAssetGroupSchema.asset new file mode 100644 index 0000000..3c0bf37 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Palettes_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: Palettes_BundledAssetGroupSchema + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.GroupSchemas.BundledAssetGroupSchema + m_Group: {fileID: 11400000, guid: ec9d910e81be14a1484f351f20d32f6f, 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: 1e7b566e879b2426f9a706a71f9612bf + m_LoadPath: + m_Id: e2253d243607142b0a072c38c39ccb14 + 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/Palettes_BundledAssetGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/Palettes_BundledAssetGroupSchema.asset.meta new file mode 100644 index 0000000..db94411 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Palettes_BundledAssetGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c191a09b8bef451b9f74c11840d3273 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Palettes_ContentUpdateGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/Palettes_ContentUpdateGroupSchema.asset new file mode 100644 index 0000000..4c43d50 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Palettes_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: Palettes_ContentUpdateGroupSchema + m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.GroupSchemas.ContentUpdateGroupSchema + m_Group: {fileID: 11400000, guid: ec9d910e81be14a1484f351f20d32f6f, type: 2} + m_StaticContent: 0 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Palettes_ContentUpdateGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/Palettes_ContentUpdateGroupSchema.asset.meta new file mode 100644 index 0000000..8f3a37f --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Palettes_ContentUpdateGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e42d0727bb3974fe596fc2f19e02b7a0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/Capture.meta b/Assets/Darkmatter/Code/Core/Contracts/Features/Capture.meta new file mode 100644 index 0000000..9ac0638 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Contracts/Features/Capture.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 46449f63247f4179976c276c22d17393 +timeCreated: 1780040939 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/Capture/ICaptureFeature.cs b/Assets/Darkmatter/Code/Core/Contracts/Features/Capture/ICaptureFeature.cs new file mode 100644 index 0000000..e6414f2 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Contracts/Features/Capture/ICaptureFeature.cs @@ -0,0 +1,9 @@ +using System.Threading; +using Cysharp.Threading.Tasks; + +namespace Darkmatter.Core.Contracts.Features.Capture; + +public interface ICaptureFeature +{ + UniTask CapturePngAsync(bool saveToGallery = false, CancellationToken ct = default); +} diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/Capture/ICaptureFeature.cs.meta b/Assets/Darkmatter/Code/Core/Contracts/Features/Capture/ICaptureFeature.cs.meta new file mode 100644 index 0000000..7e68135 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Contracts/Features/Capture/ICaptureFeature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ccf092b5e4744b9ca769205f0bc49368 +timeCreated: 1780040946 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/GameplayFlow/IGameplayFlowController.cs b/Assets/Darkmatter/Code/Core/Contracts/Features/GameplayFlow/IGameplayFlowController.cs index ef900f0..28c4d15 100644 --- a/Assets/Darkmatter/Code/Core/Contracts/Features/GameplayFlow/IGameplayFlowController.cs +++ b/Assets/Darkmatter/Code/Core/Contracts/Features/GameplayFlow/IGameplayFlowController.cs @@ -1,12 +1,13 @@ +using System.Threading; using Cysharp.Threading.Tasks; namespace Darkmatter.Core.Contracts.Features.GameplayFlow { public interface IGameplayFlowController { - UniTask BackAsync(); - UniTask SaveAsync(); - UniTask NextAsync(); + UniTask BackAsync(CancellationToken cancellationToken); + UniTask SaveAsync(CancellationToken cancellationToken); + UniTask NextAsync(CancellationToken cancellationToken); void OnApplicationPaused(); } } diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/ShapeBuilder/IShapeBuilderController.cs b/Assets/Darkmatter/Code/Core/Contracts/Features/ShapeBuilder/IShapeBuilderController.cs index 588bf2a..5c4a60d 100644 --- a/Assets/Darkmatter/Code/Core/Contracts/Features/ShapeBuilder/IShapeBuilderController.cs +++ b/Assets/Darkmatter/Code/Core/Contracts/Features/ShapeBuilder/IShapeBuilderController.cs @@ -13,5 +13,6 @@ public interface IShapeBuilderController IReadOnlyCollection preSnappedIds, CancellationToken ct); IReadOnlyCollection GetSnappedPieceIds(); + void DespawnDrawing(); void Clear(); } \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Contracts/Services/Capture/ICaptureService.cs b/Assets/Darkmatter/Code/Core/Contracts/Services/Capture/ICaptureService.cs index fafd5f9..93dac0a 100644 --- a/Assets/Darkmatter/Code/Core/Contracts/Services/Capture/ICaptureService.cs +++ b/Assets/Darkmatter/Code/Core/Contracts/Services/Capture/ICaptureService.cs @@ -6,7 +6,7 @@ namespace Darkmatter.Core.Contracts.Services.Capture { public interface ICaptureService { - UniTask CapturePngAsync(GameObject captureObject, float captureSize, + UniTask CapturePngAsync(GameObject captureObject, float scale, CancellationToken cancellationToken = default); } } \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Static/Features/DrawingTemplate/DrawingTemplateSO.cs b/Assets/Darkmatter/Code/Core/Data/Static/Features/DrawingTemplate/DrawingTemplateSO.cs index 0ea022b..a2b7f0b 100644 --- a/Assets/Darkmatter/Code/Core/Data/Static/Features/DrawingTemplate/DrawingTemplateSO.cs +++ b/Assets/Darkmatter/Code/Core/Data/Static/Features/DrawingTemplate/DrawingTemplateSO.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using Darkmatter.Core.Contracts.Features.DrawingCatalog; using Darkmatter.Core.Data.Dynamic.Features.Coloring; @@ -9,13 +10,47 @@ namespace Darkmatter.Core.Data.Static.Features.DrawingTemplate [CreateAssetMenu(menuName = "Darkmatter/Drawing/New Drawing Template")] public class DrawingTemplateSO : ScriptableObject, IDrawingTemplate { - [field: SerializeField] public string Id { get; private set; } - [field: SerializeField] public string DisplayName { get; private set; } - [field: SerializeField] public Sprite DefaultThumbnail { get; private set; } - [field: SerializeField] public GameObject DrawingPrefab { get; private set; } - [field: SerializeField] public GameObject ColoringPrefab { get; private set; } - [field: SerializeField] public IReadOnlyList Pieces { get; private set; } - [field: SerializeField] public IReadOnlyList Regions { get; private set; } - [field: SerializeField] public string ColorPaletteId { get; private set; } = "defaultPalette"; + [SerializeField] private string id; + [SerializeField] private string displayName; + [SerializeField] private Sprite defaultThumbnail; + [SerializeField] private GameObject drawingPrefab; + [SerializeField] private GameObject coloringPrefab; + [SerializeField] private List pieces = new(); + [SerializeField] private List regions = new(); + [SerializeField] private string colorPaletteId = "defaultPalette"; + + public string Id => id; + public string DisplayName => displayName; + public Sprite DefaultThumbnail => defaultThumbnail; + public GameObject DrawingPrefab => drawingPrefab; + public GameObject ColoringPrefab => coloringPrefab; + public IReadOnlyList Pieces => pieces; + public IReadOnlyList Regions => Array.Empty(); + public string ColorPaletteId => colorPaletteId; + + public IReadOnlyList AuthoredRegions => regions; + +#if UNITY_EDITOR + public void EditorSet(string newId, string newDisplayName, Sprite thumbnail, + GameObject drawing, GameObject coloring, List newPieces, + List newRegions, string paletteId) + { + id = newId; + displayName = newDisplayName; + defaultThumbnail = thumbnail; + drawingPrefab = drawing; + coloringPrefab = coloring; + pieces = newPieces ?? new List(); + regions = newRegions ?? new List(); + colorPaletteId = paletteId; + } +#endif } -} \ No newline at end of file + + [Serializable] + public struct RegionAuthoring + { + public string RegionId; + public Color InitialColor; + } +} diff --git a/Assets/Darkmatter/Code/Features/AppBoot/Flow/AppBootFlow.cs b/Assets/Darkmatter/Code/Features/AppBoot/Flow/AppBootFlow.cs index f9cb788..63dcf90 100644 --- a/Assets/Darkmatter/Code/Features/AppBoot/Flow/AppBootFlow.cs +++ b/Assets/Darkmatter/Code/Features/AppBoot/Flow/AppBootFlow.cs @@ -17,16 +17,21 @@ namespace Darkmatter.Features.AppBoot.Flow private readonly AppBootSceneRefs _sceneRefs; private readonly ISceneService _sceneService; private readonly IEventBus _eventBus; + private readonly IProgressionSystem _progression; - public AppBootFlow(AppBootSceneRefs sceneRefs, ISceneService sceneService, IEventBus eventBus) + public AppBootFlow(AppBootSceneRefs sceneRefs, ISceneService sceneService, IEventBus eventBus, + IProgressionSystem progression) { _sceneRefs = sceneRefs; _sceneService = sceneService; _eventBus = eventBus; + _progression = progression; } public async UniTask StartAsync(CancellationToken cancellation = default) { + await _progression.LoadAsync(); + var tcs = new UniTaskCompletionSource(); var player = _sceneRefs.IntroVideoPlayer; diff --git a/Assets/Darkmatter/Code/Services/Inputs.meta b/Assets/Darkmatter/Code/Features/Capture.meta similarity index 77% rename from Assets/Darkmatter/Code/Services/Inputs.meta rename to Assets/Darkmatter/Code/Features/Capture.meta index 297cf62..e0c7e6e 100644 --- a/Assets/Darkmatter/Code/Services/Inputs.meta +++ b/Assets/Darkmatter/Code/Features/Capture.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d54fa8b2c22014496a84c508d897dcdd +guid: eeefc3c8ab31d4ac983deab507c76b1f folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Darkmatter/Code/Services/Inputs/Services.Inputs.asmdef b/Assets/Darkmatter/Code/Features/Capture/Features.Capture.asmdef similarity index 68% rename from Assets/Darkmatter/Code/Services/Inputs/Services.Inputs.asmdef rename to Assets/Darkmatter/Code/Features/Capture/Features.Capture.asmdef index f7aceb5..020781e 100644 --- a/Assets/Darkmatter/Code/Services/Inputs/Services.Inputs.asmdef +++ b/Assets/Darkmatter/Code/Features/Capture/Features.Capture.asmdef @@ -1,11 +1,11 @@ { - "name": "Services.Inputs", - "rootNamespace": "Darkmatter.Services.Inputs", + "name": "Features.Capture", + "rootNamespace": "Darkmatter.Features.Capture", "references": [ "GUID:6a0a834eb41764f12ba55c3fb04a40cb", "GUID:c1c03c0e5b2f4412b9f2be1c20d6a9b1", - "GUID:75469ad4d38634e559750d17036d5f7c", - "GUID:b0214a6008ed146ff8f122a6a9c2f6cc" + "GUID:b0214a6008ed146ff8f122a6a9c2f6cc", + "GUID:f51ebe6a0ceec4240a699833d6309b23" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Assets/Darkmatter/Code/Services/Inputs/Services.Inputs.asmdef.meta b/Assets/Darkmatter/Code/Features/Capture/Features.Capture.asmdef.meta similarity index 76% rename from Assets/Darkmatter/Code/Services/Inputs/Services.Inputs.asmdef.meta rename to Assets/Darkmatter/Code/Features/Capture/Features.Capture.asmdef.meta index 033e27d..5a28c4b 100644 --- a/Assets/Darkmatter/Code/Services/Inputs/Services.Inputs.asmdef.meta +++ b/Assets/Darkmatter/Code/Features/Capture/Features.Capture.asmdef.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 68042734671ce4660bff89e042777454 +guid: 80056ede5198b460198933cb79d694ff AssemblyDefinitionImporter: externalObjects: {} userData: diff --git a/Assets/Darkmatter/Code/Services/Inputs/Generated.meta b/Assets/Darkmatter/Code/Features/Capture/Installers.meta similarity index 77% rename from Assets/Darkmatter/Code/Services/Inputs/Generated.meta rename to Assets/Darkmatter/Code/Features/Capture/Installers.meta index 4dce910..9547bf7 100644 --- a/Assets/Darkmatter/Code/Services/Inputs/Generated.meta +++ b/Assets/Darkmatter/Code/Features/Capture/Installers.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 88abeaac3da9d499288f8b5a1830cebc +guid: 338d273a95ef0403ca2dd1aca67f97f5 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Darkmatter/Code/Features/Capture/Installers/CaptureFeatureModule.cs b/Assets/Darkmatter/Code/Features/Capture/Installers/CaptureFeatureModule.cs new file mode 100644 index 0000000..91c06fc --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Capture/Installers/CaptureFeatureModule.cs @@ -0,0 +1,24 @@ +using Darkmatter.Core.Contracts.Features.Capture; +using Darkmatter.Features.Capture.UI; +using Darkmatter.Libs.Installers; +using UnityEngine; +using VContainer; +using VContainer.Unity; + +namespace Darkmatter.Features.Capture +{ + public class CaptureFeatureModule : MonoBehaviour, IModule + { + [SerializeField, Range(0.1f, 2f)] private float captureScale = 1f; + [SerializeField] private CaptureButtonView captureButtonView; + + public void Register(IContainerBuilder builder) + { + builder.RegisterInstance(new CaptureConfig(captureScale)); + builder.Register(Lifetime.Singleton); + + if (captureButtonView != null) + builder.RegisterEntryPoint().WithParameter(captureButtonView); + } + } +} diff --git a/Assets/Darkmatter/Code/Features/Capture/Installers/CaptureFeatureModule.cs.meta b/Assets/Darkmatter/Code/Features/Capture/Installers/CaptureFeatureModule.cs.meta new file mode 100644 index 0000000..756159c --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Capture/Installers/CaptureFeatureModule.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 9b7df1c2a732341d3b123b5e7ae5d7b7 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/Capture/Systems.meta b/Assets/Darkmatter/Code/Features/Capture/Systems.meta new file mode 100644 index 0000000..dc1e432 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Capture/Systems.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 90fa308dc501c46bdb9488e2d6d3e034 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/Capture/Systems/CaptureConfig.cs b/Assets/Darkmatter/Code/Features/Capture/Systems/CaptureConfig.cs new file mode 100644 index 0000000..9782dcd --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Capture/Systems/CaptureConfig.cs @@ -0,0 +1,15 @@ +using System; + +namespace Darkmatter.Features.Capture +{ + [Serializable] + public struct CaptureConfig + { + public float CaptureScale { get; } + + public CaptureConfig(float captureScale) + { + CaptureScale = captureScale; + } + } +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/Capture/Systems/CaptureConfig.cs.meta b/Assets/Darkmatter/Code/Features/Capture/Systems/CaptureConfig.cs.meta new file mode 100644 index 0000000..6dd4d16 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Capture/Systems/CaptureConfig.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 6f12070b2d795429a9b7f6cc0e4ae894 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/Capture/Systems/CaptureSystem.cs b/Assets/Darkmatter/Code/Features/Capture/Systems/CaptureSystem.cs new file mode 100644 index 0000000..e932b6d --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Capture/Systems/CaptureSystem.cs @@ -0,0 +1,50 @@ +using System; +using System.Threading; +using Cysharp.Threading.Tasks; +using Darkmatter.Core.Contracts.Features.Capture; +using Darkmatter.Core.Contracts.Features.GameplayFlow; +using Darkmatter.Core.Contracts.Services.Capture; +using Darkmatter.Core.Contracts.Services.Gallery; +using UnityEngine; + +namespace Darkmatter.Features.Capture +{ + public class CaptureSystem : ICaptureFeature + { + private readonly ICaptureService _captureService; + private readonly IGalleryService _galleryService; + private readonly IGameplaySceneRefs _refs; + private readonly CaptureConfig _config; + + public CaptureSystem( + ICaptureService captureService, + IGalleryService galleryService, + IGameplaySceneRefs refs, + CaptureConfig config) + { + _captureService = captureService; + _galleryService = galleryService; + _refs = refs; + _config = config; + } + + public async UniTask CapturePngAsync(bool saveToGallery = false, CancellationToken ct = default) + { + var png = await _captureService.CapturePngAsync(_refs.PaperRoot.gameObject, _config.CaptureScale, ct); + if (!saveToGallery || png == null || png.Length == 0) return png; + + var tex = new Texture2D(2, 2, TextureFormat.RGBA32, mipChain: false); + try + { + if (tex.LoadImage(png)) + await _galleryService.SaveImageAsync(tex, + $"colorbook_{DateTime.UtcNow:yyyyMMdd_HHmmss}.png", ct); + } + finally + { + UnityEngine.Object.Destroy(tex); + } + return png; + } + } +} diff --git a/Assets/Darkmatter/Code/Features/Capture/Systems/CaptureSystem.cs.meta b/Assets/Darkmatter/Code/Features/Capture/Systems/CaptureSystem.cs.meta new file mode 100644 index 0000000..815b03a --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Capture/Systems/CaptureSystem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 76bbd68f070e24d6a86130ec07c237b8 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/Capture/UI.meta b/Assets/Darkmatter/Code/Features/Capture/UI.meta new file mode 100644 index 0000000..1935a9e --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Capture/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 88715eafa42924498a994a891b15c9dc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Darkmatter/Code/Features/Capture/UI/CaptureButtonPresenter.cs b/Assets/Darkmatter/Code/Features/Capture/UI/CaptureButtonPresenter.cs new file mode 100644 index 0000000..448a7c2 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Capture/UI/CaptureButtonPresenter.cs @@ -0,0 +1,44 @@ +using System; +using Cysharp.Threading.Tasks; +using Darkmatter.Core.Contracts.Features.Capture; +using VContainer.Unity; + +namespace Darkmatter.Features.Capture.UI +{ + public class CaptureButtonPresenter : IStartable, IDisposable + { + private readonly CaptureButtonView _view; + private readonly ICaptureFeature _capture; + + public CaptureButtonPresenter(CaptureButtonView view, ICaptureFeature capture) + { + _view = view; + _capture = capture; + } + + public void Start() + { + _view.OnCaptureClicked += HandleCaptureClicked; + } + + private void HandleCaptureClicked() => CaptureAsync().Forget(); + + private async UniTaskVoid CaptureAsync() + { + _view.SetInteractable(false); + try + { + await _capture.CapturePngAsync(saveToGallery: true); + } + finally + { + _view.SetInteractable(true); + } + } + + public void Dispose() + { + _view.OnCaptureClicked -= HandleCaptureClicked; + } + } +} diff --git a/Assets/Darkmatter/Code/Features/Capture/UI/CaptureButtonPresenter.cs.meta b/Assets/Darkmatter/Code/Features/Capture/UI/CaptureButtonPresenter.cs.meta new file mode 100644 index 0000000..3e4cc7d --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Capture/UI/CaptureButtonPresenter.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ec4fcbab1dbeb4d1690801eee2cc5940 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/Capture/UI/CaptureButtonView.cs b/Assets/Darkmatter/Code/Features/Capture/UI/CaptureButtonView.cs new file mode 100644 index 0000000..ef961e8 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Capture/UI/CaptureButtonView.cs @@ -0,0 +1,29 @@ +using System; +using UnityEngine; +using UnityEngine.UI; + +namespace Darkmatter.Features.Capture.UI +{ + public class CaptureButtonView : MonoBehaviour + { + [SerializeField] private Button captureButton; + + public event Action OnCaptureClicked; + + private void Start() + { + if (captureButton != null) + captureButton.onClick.AddListener(() => OnCaptureClicked?.Invoke()); + } + + public void SetInteractable(bool value) + { + if (captureButton != null) captureButton.interactable = value; + } + + private void OnDestroy() + { + if (captureButton != null) captureButton.onClick.RemoveAllListeners(); + } + } +} diff --git a/Assets/Darkmatter/Code/Features/Capture/UI/CaptureButtonView.cs.meta b/Assets/Darkmatter/Code/Features/Capture/UI/CaptureButtonView.cs.meta new file mode 100644 index 0000000..c183e10 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/Capture/UI/CaptureButtonView.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4f0946b153da9431eb6c66bda432901f \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/ColorbookFlow/System/ColorbookFlowController.cs b/Assets/Darkmatter/Code/Features/ColorbookFlow/System/ColorbookFlowController.cs index 52985d4..6a668fe 100644 --- a/Assets/Darkmatter/Code/Features/ColorbookFlow/System/ColorbookFlowController.cs +++ b/Assets/Darkmatter/Code/Features/ColorbookFlow/System/ColorbookFlowController.cs @@ -47,7 +47,7 @@ public class ColorbookFlowController : IAsyncStartable, IDisposable _selectedSub = _bus.Subscribe(OnDrawingSelected); _loadingScreen.Hide(); } - + private void OnReturnToMainMenu(ReturnToMainMenuSignal signal) { LoadMainMenuSceneAsync().Forget(UnityEngine.Debug.LogException); @@ -70,8 +70,13 @@ public class ColorbookFlowController : IAsyncStartable, IDisposable private async UniTaskVoid HandleSelectionAsync(string templateId) { + _loadingScreen.Show(); + var progress = new Progress(p => _loadingScreen.SetProgress(p * 0.5f)); + var mappedProgress = new Progress(p => _loadingScreen.SetProgress(0.5f + p * 0.25f)); await _progression.SetLastOpenedAsync(templateId); - await _scenes.LoadSceneAsync(GameScene.Gameplay, progress: null, cancellationToken: default); + await _scenes.LoadSceneAsync(nameof(GameScene.Gameplay), progress: progress, cancellationToken: default); + await _scenes.UnloadSceneAsync(nameof(GameScene.Colorbook), progress: mappedProgress, + cancellationToken: default); } public void Dispose() @@ -79,4 +84,4 @@ public class ColorbookFlowController : IAsyncStartable, IDisposable _selectedSub?.Dispose(); _returnToMainMenuSubscription?.Dispose(); } -} +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/Coloring/Systems/ColoringController.cs b/Assets/Darkmatter/Code/Features/Coloring/Systems/ColoringController.cs index a98b6f1..8a29c4c 100644 --- a/Assets/Darkmatter/Code/Features/Coloring/Systems/ColoringController.cs +++ b/Assets/Darkmatter/Code/Features/Coloring/Systems/ColoringController.cs @@ -19,7 +19,7 @@ namespace Darkmatter.Features.Coloring.Systems; public class ColoringController : IColoringController, IDisposable { - private const string ColorButtonPrefabKey = "colorButton"; + private const string ColorButtonPrefabKey = "ColorButton"; private readonly ColoringStateRepository _repository; private readonly IColorButtonFactory _buttonFactory; @@ -27,6 +27,7 @@ public class ColoringController : IColoringController, IDisposable private readonly IAssetProviderService _assetProviderService; private readonly IUndoStack _history; private readonly IGameplaySceneRefs _refs; + private readonly ColorPaletteHolderView _paletteHolder; private GameObject _colorInstance; private GameObject _colorButtonPrefab; @@ -39,7 +40,8 @@ public class ColoringController : IColoringController, IDisposable IEventBus bus, IAssetProviderService assetProviderService, IUndoStack history, - IGameplaySceneRefs refs) + IGameplaySceneRefs refs, + ColorPaletteHolderView paletteHolder) { _repository = repository; _buttonFactory = buttonFactory; @@ -47,12 +49,14 @@ public class ColoringController : IColoringController, IDisposable _assetProviderService = assetProviderService; _history = history; _refs = refs; + _paletteHolder = paletteHolder; } public async UniTask InitializeRegionsAsync(IDrawingTemplate template, IReadOnlyDictionary savedColors, CancellationToken ct) { Clear(); + _paletteHolder.Show(); await TryLoadColorButtonPrefabAsync(ct); ct.ThrowIfCancellationRequested(); await TryLoadColorPaletteAsync(template, ct); @@ -67,7 +71,8 @@ public class ColoringController : IColoringController, IDisposable if (region == null) return; var from = region.Color; - _history.Push(new ColorRegionCommand(region, from, color)); + if (from != color) + _history.Push(new ColorRegionCommand(region, from, color)); _bus.Publish(new ColorAppliedSignal(regionId, color)); } @@ -84,7 +89,8 @@ public class ColoringController : IColoringController, IDisposable _history.Drop(); foreach (var button in _buttons) - if (button != null) UnityEngine.Object.Destroy(button.gameObject); + if (button != null) + UnityEngine.Object.Destroy(button.gameObject); _buttons.Clear(); _regions.Clear(); @@ -143,4 +149,4 @@ public class ColoringController : IColoringController, IDisposable foreach (var color in _repository.SelectedPalette.Colors) _buttons.Add(_buttonFactory.Create(_colorButtonPrefab, color)); } -} +} \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/Coloring/UI/ColorButton.cs b/Assets/Darkmatter/Code/Features/Coloring/UI/ColorButton.cs index c64d29c..e44329f 100644 --- a/Assets/Darkmatter/Code/Features/Coloring/UI/ColorButton.cs +++ b/Assets/Darkmatter/Code/Features/Coloring/UI/ColorButton.cs @@ -9,8 +9,9 @@ namespace Darkmatter.Features.Coloring.UI [RequireComponent(typeof(Button))] public class ColorButton : MonoBehaviour { - [SerializeField] private Image swatch; - [SerializeField] private GameObject selectedUI; + [SerializeField] private Image[] swatches; + [SerializeField] private GameObject activeUI; + [SerializeField] private GameObject inactiveUI; private Button _button; private Color _color; private ColoringStateRepository _repository; @@ -26,7 +27,11 @@ namespace Darkmatter.Features.Coloring.UI _color = color; _repository = repository; _sfx = sfx; - swatch.color = color; + if (_button == null) _button = GetComponent