Compare commits

..

3 Commits

Author SHA1 Message Date
378b00096a Merge pull request 'work_branch' (#13) from work_branch into main
Reviewed-on: #13
2026-05-29 10:40:47 +02:00
Mausham
6d9b096e8e added anim 2026-05-29 14:24:03 +05:45
Mausham
919169157e added some features in artbook 2026-05-29 12:47:21 +05:45
235 changed files with 73975 additions and 30470 deletions

View File

@@ -13,8 +13,6 @@ MonoBehaviour:
m_Name: AddressableAssetGroupSortSettings m_Name: AddressableAssetGroupSortSettings
m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.GroupSchemas.AddressableAssetGroupSortSettings m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.GroupSchemas.AddressableAssetGroupSortSettings
sortOrder: sortOrder:
- 2c56f39dfa281426bbb0636a757c203b
- 01d1da4daa82a469884449cd7ea9e22e
- 86e13c2ac495848d99c739840b7d38e9 - 86e13c2ac495848d99c739840b7d38e9
- 0e030d5498bfe4ffd8443c796618c539 - 0e030d5498bfe4ffd8443c796618c539
- c0e2d4d32411e46a6a3dd5cdfa6dbe7e - c0e2d4d32411e46a6a3dd5cdfa6dbe7e

View File

@@ -15,7 +15,7 @@ MonoBehaviour:
m_DefaultGroup: 0e030d5498bfe4ffd8443c796618c539 m_DefaultGroup: 0e030d5498bfe4ffd8443c796618c539
m_currentHash: m_currentHash:
serializedVersion: 2 serializedVersion: 2
Hash: 1fd67e8e9a29e9ab741aedf586900b96 Hash: 11994545ace6358214de1d969c8c1309
m_OptimizeCatalogSize: 0 m_OptimizeCatalogSize: 0
m_BuildRemoteCatalog: 0 m_BuildRemoteCatalog: 0
m_CatalogRequestsTimeout: 0 m_CatalogRequestsTimeout: 0
@@ -24,11 +24,11 @@ MonoBehaviour:
m_InternalBundleIdMode: 1 m_InternalBundleIdMode: 1
m_AssetLoadMode: 0 m_AssetLoadMode: 0
m_BundledAssetProviderType: m_BundledAssetProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null m_AssemblyName:
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider m_ClassName:
m_AssetBundleProviderType: m_AssetBundleProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null m_AssemblyName:
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider m_ClassName:
m_IgnoreUnsupportedFilesInBuild: 0 m_IgnoreUnsupportedFilesInBuild: 0
m_UniqueBundleIds: 0 m_UniqueBundleIds: 0
m_EnableJsonCatalog: 0 m_EnableJsonCatalog: 0
@@ -61,9 +61,7 @@ MonoBehaviour:
m_BuildAddressablesWithPlayerBuild: 0 m_BuildAddressablesWithPlayerBuild: 0
m_overridePlayerVersion: '[UnityEditor.PlayerSettings.bundleVersion]' m_overridePlayerVersion: '[UnityEditor.PlayerSettings.bundleVersion]'
m_GroupAssets: m_GroupAssets:
- {fileID: 11400000, guid: ec9d910e81be14a1484f351f20d32f6f, type: 2}
- {fileID: 11400000, guid: 884c7b3ae8a8543379b1b771a9b8ab47, type: 2} - {fileID: 11400000, guid: 884c7b3ae8a8543379b1b771a9b8ab47, type: 2}
- {fileID: 11400000, guid: 9fdea8257283a49d4a1a7181623bdade, type: 2}
- {fileID: 11400000, guid: fda2e763202c2462b857e04c29824b23, type: 2} - {fileID: 11400000, guid: fda2e763202c2462b857e04c29824b23, type: 2}
- {fileID: 11400000, guid: 9813579a74a7640e182c85c4bdeb3852, type: 2} - {fileID: 11400000, guid: 9813579a74a7640e182c85c4bdeb3852, type: 2}
m_BuildSettings: m_BuildSettings:
@@ -105,7 +103,6 @@ MonoBehaviour:
m_LabelTable: m_LabelTable:
m_LabelNames: m_LabelNames:
- default - default
- drawing
m_SchemaTemplates: [] m_SchemaTemplates: []
m_GroupTemplateObjects: m_GroupTemplateObjects:
- {fileID: 11400000, guid: 08cea37bc40c14d2696479a6530b6f35, type: 2} - {fileID: 11400000, guid: 08cea37bc40c14d2696479a6530b6f35, type: 2}

View File

@@ -14,17 +14,7 @@ MonoBehaviour:
m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.AddressableAssetGroup m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.AddressableAssetGroup
m_GroupName: Default Local Group m_GroupName: Default Local Group
m_GUID: 0e030d5498bfe4ffd8443c796618c539 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_ReadOnly: 0
m_Settings: {fileID: 11400000, guid: 4a94ef317c3674edd8270e4ed15031f6, type: 2} m_Settings: {fileID: 11400000, guid: 4a94ef317c3674edd8270e4ed15031f6, type: 2}
m_SchemaSet: m_SchemaSet:

View File

@@ -1,29 +0,0 @@
%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}

View File

@@ -1,28 +0,0 @@
%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}

View File

@@ -1,48 +0,0 @@
%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

View File

@@ -1,16 +0,0 @@
%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

View File

@@ -1,48 +0,0 @@
%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

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 5c191a09b8bef451b9f74c11840d3273
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,16 +0,0 @@
%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

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: e42d0727bb3974fe596fc2f19e02b7a0
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 46449f63247f4179976c276c22d17393
timeCreated: 1780040939

View File

@@ -1,9 +0,0 @@
using System.Threading;
using Cysharp.Threading.Tasks;
namespace Darkmatter.Core.Contracts.Features.Capture;
public interface ICaptureFeature
{
UniTask<byte[]> CapturePngAsync(bool saveToGallery = false, CancellationToken ct = default);
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: ccf092b5e4744b9ca769205f0bc49368
timeCreated: 1780040946

View File

@@ -1,13 +1,12 @@
using System.Threading;
using Cysharp.Threading.Tasks; using Cysharp.Threading.Tasks;
namespace Darkmatter.Core.Contracts.Features.GameplayFlow namespace Darkmatter.Core.Contracts.Features.GameplayFlow
{ {
public interface IGameplayFlowController public interface IGameplayFlowController
{ {
UniTask BackAsync(CancellationToken cancellationToken); UniTask BackAsync();
UniTask SaveAsync(CancellationToken cancellationToken); UniTask SaveAsync();
UniTask NextAsync(CancellationToken cancellationToken); UniTask NextAsync();
void OnApplicationPaused(); void OnApplicationPaused();
} }
} }

View File

@@ -13,6 +13,5 @@ public interface IShapeBuilderController
IReadOnlyCollection<string> preSnappedIds, CancellationToken ct); IReadOnlyCollection<string> preSnappedIds, CancellationToken ct);
IReadOnlyCollection<string> GetSnappedPieceIds(); IReadOnlyCollection<string> GetSnappedPieceIds();
void DespawnDrawing();
void Clear(); void Clear();
} }

View File

@@ -6,7 +6,7 @@ namespace Darkmatter.Core.Contracts.Services.Capture
{ {
public interface ICaptureService public interface ICaptureService
{ {
UniTask<byte[]> CapturePngAsync(GameObject captureObject, float scale, UniTask<Sprite> CapturePngAsync(GameObject captureObject, float captureSize,
CancellationToken cancellationToken = default); CancellationToken cancellationToken = default);
} }
} }

View File

@@ -1,4 +1,3 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using Darkmatter.Core.Contracts.Features.DrawingCatalog; using Darkmatter.Core.Contracts.Features.DrawingCatalog;
using Darkmatter.Core.Data.Dynamic.Features.Coloring; using Darkmatter.Core.Data.Dynamic.Features.Coloring;
@@ -10,47 +9,13 @@ namespace Darkmatter.Core.Data.Static.Features.DrawingTemplate
[CreateAssetMenu(menuName = "Darkmatter/Drawing/New Drawing Template")] [CreateAssetMenu(menuName = "Darkmatter/Drawing/New Drawing Template")]
public class DrawingTemplateSO : ScriptableObject, IDrawingTemplate public class DrawingTemplateSO : ScriptableObject, IDrawingTemplate
{ {
[SerializeField] private string id; [field: SerializeField] public string Id { get; private set; }
[SerializeField] private string displayName; [field: SerializeField] public string DisplayName { get; private set; }
[SerializeField] private Sprite defaultThumbnail; [field: SerializeField] public Sprite DefaultThumbnail { get; private set; }
[SerializeField] private GameObject drawingPrefab; [field: SerializeField] public GameObject DrawingPrefab { get; private set; }
[SerializeField] private GameObject coloringPrefab; [field: SerializeField] public GameObject ColoringPrefab { get; private set; }
[SerializeField] private List<ShapeSO> pieces = new(); [field: SerializeField] public IReadOnlyList<ShapeSO> Pieces { get; private set; }
[SerializeField] private List<RegionAuthoring> regions = new(); [field: SerializeField] public IReadOnlyList<ColorRegionDTO> Regions { get; private set; }
[SerializeField] private string colorPaletteId = "defaultPalette"; [field: SerializeField] public string ColorPaletteId { get; private set; } = "defaultPalette";
public string Id => id;
public string DisplayName => displayName;
public Sprite DefaultThumbnail => defaultThumbnail;
public GameObject DrawingPrefab => drawingPrefab;
public GameObject ColoringPrefab => coloringPrefab;
public IReadOnlyList<ShapeSO> Pieces => pieces;
public IReadOnlyList<ColorRegionDTO> Regions => Array.Empty<ColorRegionDTO>();
public string ColorPaletteId => colorPaletteId;
public IReadOnlyList<RegionAuthoring> AuthoredRegions => regions;
#if UNITY_EDITOR
public void EditorSet(string newId, string newDisplayName, Sprite thumbnail,
GameObject drawing, GameObject coloring, List<ShapeSO> newPieces,
List<RegionAuthoring> newRegions, string paletteId)
{
id = newId;
displayName = newDisplayName;
defaultThumbnail = thumbnail;
drawingPrefab = drawing;
coloringPrefab = coloring;
pieces = newPieces ?? new List<ShapeSO>();
regions = newRegions ?? new List<RegionAuthoring>();
colorPaletteId = paletteId;
}
#endif
}
[Serializable]
public struct RegionAuthoring
{
public string RegionId;
public Color InitialColor;
} }
} }

View File

@@ -17,21 +17,16 @@ namespace Darkmatter.Features.AppBoot.Flow
private readonly AppBootSceneRefs _sceneRefs; private readonly AppBootSceneRefs _sceneRefs;
private readonly ISceneService _sceneService; private readonly ISceneService _sceneService;
private readonly IEventBus _eventBus; 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; _sceneRefs = sceneRefs;
_sceneService = sceneService; _sceneService = sceneService;
_eventBus = eventBus; _eventBus = eventBus;
_progression = progression;
} }
public async UniTask StartAsync(CancellationToken cancellation = default) public async UniTask StartAsync(CancellationToken cancellation = default)
{ {
await _progression.LoadAsync();
var tcs = new UniTaskCompletionSource(); var tcs = new UniTaskCompletionSource();
var player = _sceneRefs.IntroVideoPlayer; var player = _sceneRefs.IntroVideoPlayer;

View File

@@ -5,7 +5,9 @@
"GUID:6a0a834eb41764f12ba55c3fb04a40cb", "GUID:6a0a834eb41764f12ba55c3fb04a40cb",
"GUID:b0214a6008ed146ff8f122a6a9c2f6cc", "GUID:b0214a6008ed146ff8f122a6a9c2f6cc",
"GUID:c1c03c0e5b2f4412b9f2be1c20d6a9b1", "GUID:c1c03c0e5b2f4412b9f2be1c20d6a9b1",
"GUID:b4c9f7fbf1e144933a1797dc208ece5f" "GUID:b4c9f7fbf1e144933a1797dc208ece5f",
"GUID:f51ebe6a0ceec4240a699833d6309b23",
"GUID:6055be8ebefd69e48b49212b09b47b2f"
], ],
"includePlatforms": [], "includePlatforms": [],
"excludePlatforms": [], "excludePlatforms": [],

View File

@@ -0,0 +1,7 @@
using System;
using UnityEngine;
namespace Darkmatter.Features.Artbook
{
public record struct ArtbookEntry(string Id, string Name, Texture2D Thumbnail, DateTime UpdatedUtc);
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 6821df5d7eb2fe345aeeebd1290d84b3

View File

@@ -1,32 +1,165 @@
using System; using System;
using System.Collections.Generic;
using System.Threading;
using Cysharp.Threading.Tasks;
using Darkmatter.Core; using Darkmatter.Core;
using Darkmatter.Core.Contracts.Features.DrawingCatalog;
using Darkmatter.Core.Contracts.Features.Progression;
using Darkmatter.Core.Contracts.Services.Gallery;
using Darkmatter.Core.Data.Signals.Features.Drawing;
using Darkmatter.Libs.Observer; using Darkmatter.Libs.Observer;
using UnityEngine; using UnityEngine;
using VContainer.Unity; using VContainer.Unity;
namespace Darkmatter.Features.Artbook namespace Darkmatter.Features.Artbook
{ {
public class ArtbookPresenter: IStartable public class ArtbookPresenter : IStartable, IDisposable
{ {
private const int EntriesPerSpread = 2;
private readonly ArtbookView _view; private readonly ArtbookView _view;
private readonly IEventBus _eventBus; private readonly IEventBus _eventBus;
private readonly IProgressionSystem _progression;
private readonly IDrawingTemplateCatalog _catalog;
private readonly IGalleryService _gallery;
public ArtbookPresenter(ArtbookView view, IEventBus eventBus) private readonly List<ArtbookEntry> _entries = new();
private readonly List<Sprite> _ownedSprites = new();
private readonly List<Texture2D> _ownedTextures = new();
private CancellationTokenSource _cts;
private IDisposable _openSubscription;
private int _currentSpread;
public ArtbookPresenter(
ArtbookView view,
IEventBus eventBus,
IProgressionSystem progression,
IDrawingTemplateCatalog catalog,
IGalleryService gallery)
{ {
_view = view; _view = view;
_eventBus = eventBus; _eventBus = eventBus;
_progression = progression;
_catalog = catalog;
_gallery = gallery;
} }
public void Start() public void Start()
{ {
_view.OnBackButtonClicked += HandleBackButtonClicked; _view.OnBackButtonClicked += HandleBackButtonClicked;
_view.OnColorbookButtonClicked += HandleColorbookButtonClicked; _view.OnColorbookButtonClicked += HandleColorbookButtonClicked;
_eventBus.Subscribe<OpenArtBookSignal>(HandleOpenArtbookEvent); _view.OnPrevSpreadClicked += HandlePrevSpreadClicked;
_view.OnNextSpreadClicked += HandleNextSpreadClicked;
_view.OnLeftSaveClicked += HandleLeftSaveClicked;
_view.OnRightSaveClicked += HandleRightSaveClicked;
_view.OnLeftEditClicked += HandleLeftEditClicked;
_view.OnRightEditClicked += HandleRightEditClicked;
_openSubscription = _eventBus.Subscribe<OpenArtBookSignal>(HandleOpenArtbookEvent);
} }
private void HandleOpenArtbookEvent(OpenArtBookSignal signal) private void HandleOpenArtbookEvent(OpenArtBookSignal signal)
{ {
_view.Show(); _view.Show();
_cts?.Cancel();
_cts?.Dispose();
_cts = new CancellationTokenSource();
LoadAndShowAsync(_cts.Token).Forget();
}
private async UniTaskVoid LoadAndShowAsync(CancellationToken ct)
{
ClearOwnedAssets();
_entries.Clear();
_currentSpread = 0;
await _catalog.FetchAsync();
if (ct.IsCancellationRequested) return;
foreach (var id in _catalog.AllTemplateIds)
{
if (ct.IsCancellationRequested) return;
var progress = _progression.GetProgress(id);
if (progress is not { hasThumbnail: true }) continue;
var texture = await _progression.GetCachedThumbnailAsync(id);
if (ct.IsCancellationRequested) return;
if (texture == null) continue;
var template = await _catalog.LoadAsync(id);
if (ct.IsCancellationRequested) return;
_ownedTextures.Add(texture);
_entries.Add(new ArtbookEntry(id, template.DisplayName, texture, progress.Value.UpdatedUtc));
}
_entries.Sort((a, b) => b.UpdatedUtc.CompareTo(a.UpdatedUtc));
RenderSpread();
}
private void HandlePrevSpreadClicked()
{
if (_currentSpread <= 0) return;
_currentSpread--;
RenderSpread();
}
private void HandleNextSpreadClicked()
{
if (_currentSpread >= TotalSpreads - 1) return;
_currentSpread++;
RenderSpread();
}
private int TotalSpreads => Mathf.Max(1, Mathf.CeilToInt(_entries.Count / (float)EntriesPerSpread));
private void RenderSpread()
{
_view.SetSpread(GetLeftEntry(), SpriteFor(GetLeftEntry()), GetRightEntry(), SpriteFor(GetRightEntry()));
_view.SetNavigation(_currentSpread > 0, _currentSpread < TotalSpreads - 1);
}
private ArtbookEntry? GetLeftEntry()
{
var idx = _currentSpread * EntriesPerSpread;
return idx < _entries.Count ? _entries[idx] : null;
}
private ArtbookEntry? GetRightEntry()
{
var idx = _currentSpread * EntriesPerSpread + 1;
return idx < _entries.Count ? _entries[idx] : null;
}
private Sprite SpriteFor(ArtbookEntry? entry)
{
if (!entry.HasValue) return null;
var tex = entry.Value.Thumbnail;
if (tex == null) return null;
var sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f), 100f);
_ownedSprites.Add(sprite);
return sprite;
}
private void HandleLeftSaveClicked() => SaveToGalleryAsync(GetLeftEntry()).Forget();
private void HandleRightSaveClicked() => SaveToGalleryAsync(GetRightEntry()).Forget();
private async UniTaskVoid SaveToGalleryAsync(ArtbookEntry? entry)
{
if (!entry.HasValue || entry.Value.Thumbnail == null) return;
var ct = _cts?.Token ?? CancellationToken.None;
await _gallery.SaveImageAsync(entry.Value.Thumbnail, entry.Value.Id, ct);
}
private void HandleLeftEditClicked() => OpenForEdit(GetLeftEntry());
private void HandleRightEditClicked() => OpenForEdit(GetRightEntry());
private void OpenForEdit(ArtbookEntry? entry)
{
if (!entry.HasValue) return;
_eventBus.Publish(new DrawingSelectedSignal(entry.Value.Id));
_view.Hide();
} }
private void HandleBackButtonClicked() private void HandleBackButtonClicked()
@@ -41,11 +174,28 @@ namespace Darkmatter.Features.Artbook
_view.Hide(); _view.Hide();
} }
private void ClearOwnedAssets()
{
foreach (var s in _ownedSprites) UnityEngine.Object.Destroy(s);
foreach (var t in _ownedTextures) UnityEngine.Object.Destroy(t);
_ownedSprites.Clear();
_ownedTextures.Clear();
}
public void Dispose() public void Dispose()
{ {
_view.OnBackButtonClicked -= HandleBackButtonClicked; _view.OnBackButtonClicked -= HandleBackButtonClicked;
_view.OnColorbookButtonClicked -= HandleColorbookButtonClicked; _view.OnColorbookButtonClicked -= HandleColorbookButtonClicked;
_view.OnPrevSpreadClicked -= HandlePrevSpreadClicked;
_view.OnNextSpreadClicked -= HandleNextSpreadClicked;
_view.OnLeftSaveClicked -= HandleLeftSaveClicked;
_view.OnRightSaveClicked -= HandleRightSaveClicked;
_view.OnLeftEditClicked -= HandleLeftEditClicked;
_view.OnRightEditClicked -= HandleRightEditClicked;
_openSubscription?.Dispose();
_cts?.Cancel();
_cts?.Dispose();
ClearOwnedAssets();
} }
} }
} }

View File

@@ -1,4 +1,5 @@
using System; using System;
using TMPro;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
@@ -9,24 +10,83 @@ namespace Darkmatter.Features.Artbook
[SerializeField] private Button backBtn; [SerializeField] private Button backBtn;
[SerializeField] private Button colorbookBtn; [SerializeField] private Button colorbookBtn;
[Header("Pages")]
[SerializeField] private Image leftPageImage;
[SerializeField] private Image rightPageImage;
[SerializeField] private TMP_Text leftPageNameText;
[SerializeField] private TMP_Text rightPageNameText;
[Header("Page Actions")]
[SerializeField] private Button leftSaveBtn;
[SerializeField] private Button rightSaveBtn;
[SerializeField] private Button leftEditBtn;
[SerializeField] private Button rightEditBtn;
[Header("Navigation")]
[SerializeField] private Button leftArrowBtn;
[SerializeField] private Button rightArrowBtn;
public event Action OnBackButtonClicked; public event Action OnBackButtonClicked;
public event Action OnColorbookButtonClicked; public event Action OnColorbookButtonClicked;
public event Action OnPrevSpreadClicked;
public event Action OnNextSpreadClicked;
public event Action OnLeftSaveClicked;
public event Action OnRightSaveClicked;
public event Action OnLeftEditClicked;
public event Action OnRightEditClicked;
void Start() void Start()
{ {
backBtn.onClick.AddListener(() => OnBackButtonClicked?.Invoke()); backBtn.onClick.AddListener(() => OnBackButtonClicked?.Invoke());
colorbookBtn.onClick.AddListener(() => OnColorbookButtonClicked?.Invoke()); colorbookBtn.onClick.AddListener(() => OnColorbookButtonClicked?.Invoke());
leftArrowBtn.onClick.AddListener(() => OnPrevSpreadClicked?.Invoke());
rightArrowBtn.onClick.AddListener(() => OnNextSpreadClicked?.Invoke());
leftSaveBtn.onClick.AddListener(() => OnLeftSaveClicked?.Invoke());
rightSaveBtn.onClick.AddListener(() => OnRightSaveClicked?.Invoke());
leftEditBtn.onClick.AddListener(() => OnLeftEditClicked?.Invoke());
rightEditBtn.onClick.AddListener(() => OnRightEditClicked?.Invoke());
} }
public void Show() public void Show()
{ {
gameObject.SetActive(true); gameObject.SetActive(true);
} }
public void Hide() public void Hide()
{ {
gameObject.SetActive(false); gameObject.SetActive(false);
} }
public void SetSpread(ArtbookEntry? left, Sprite leftSprite, ArtbookEntry? right, Sprite rightSprite)
{
ApplyPage(leftPageImage, leftPageNameText, leftSaveBtn, leftEditBtn, left, leftSprite);
ApplyPage(rightPageImage, rightPageNameText, rightSaveBtn, rightEditBtn, right, rightSprite);
}
public void SetNavigation(bool canPrev, bool canNext)
{
leftArrowBtn.interactable = canPrev;
rightArrowBtn.interactable = canNext;
}
private static void ApplyPage(Image image, TMP_Text nameText, Button saveBtn, Button editBtn,
ArtbookEntry? entry, Sprite sprite)
{
var hasEntry = entry.HasValue;
saveBtn.interactable = hasEntry;
editBtn.interactable = hasEntry;
if (!hasEntry)
{
image.enabled = false;
image.sprite = null;
nameText.text = string.Empty;
return;
}
image.sprite = sprite;
image.enabled = sprite != null;
nameText.text = entry.Value.Name;
}
} }
} }

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 80056ede5198b460198933cb79d694ff
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,24 +0,0 @@
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<ICaptureFeature, CaptureSystem>(Lifetime.Singleton);
if (captureButtonView != null)
builder.RegisterEntryPoint<CaptureButtonPresenter>().WithParameter(captureButtonView);
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 9b7df1c2a732341d3b123b5e7ae5d7b7

View File

@@ -1,15 +0,0 @@
using System;
namespace Darkmatter.Features.Capture
{
[Serializable]
public struct CaptureConfig
{
public float CaptureScale { get; }
public CaptureConfig(float captureScale)
{
CaptureScale = captureScale;
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 6f12070b2d795429a9b7f6cc0e4ae894

View File

@@ -1,50 +0,0 @@
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<byte[]> 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;
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 76bbd68f070e24d6a86130ec07c237b8

View File

@@ -1,44 +0,0 @@
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;
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: ec4fcbab1dbeb4d1690801eee2cc5940

View File

@@ -1,29 +0,0 @@
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();
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 4f0946b153da9431eb6c66bda432901f

View File

@@ -70,13 +70,8 @@ public class ColorbookFlowController : IAsyncStartable, IDisposable
private async UniTaskVoid HandleSelectionAsync(string templateId) private async UniTaskVoid HandleSelectionAsync(string templateId)
{ {
_loadingScreen.Show();
var progress = new Progress<float>(p => _loadingScreen.SetProgress(p * 0.5f));
var mappedProgress = new Progress<float>(p => _loadingScreen.SetProgress(0.5f + p * 0.25f));
await _progression.SetLastOpenedAsync(templateId); await _progression.SetLastOpenedAsync(templateId);
await _scenes.LoadSceneAsync(nameof(GameScene.Gameplay), progress: progress, cancellationToken: default); await _scenes.LoadSceneAsync(GameScene.Gameplay, progress: null, cancellationToken: default);
await _scenes.UnloadSceneAsync(nameof(GameScene.Colorbook), progress: mappedProgress,
cancellationToken: default);
} }
public void Dispose() public void Dispose()

View File

@@ -19,7 +19,7 @@ namespace Darkmatter.Features.Coloring.Systems;
public class ColoringController : IColoringController, IDisposable public class ColoringController : IColoringController, IDisposable
{ {
private const string ColorButtonPrefabKey = "ColorButton"; private const string ColorButtonPrefabKey = "colorButton";
private readonly ColoringStateRepository _repository; private readonly ColoringStateRepository _repository;
private readonly IColorButtonFactory _buttonFactory; private readonly IColorButtonFactory _buttonFactory;
@@ -27,7 +27,6 @@ public class ColoringController : IColoringController, IDisposable
private readonly IAssetProviderService _assetProviderService; private readonly IAssetProviderService _assetProviderService;
private readonly IUndoStack _history; private readonly IUndoStack _history;
private readonly IGameplaySceneRefs _refs; private readonly IGameplaySceneRefs _refs;
private readonly ColorPaletteHolderView _paletteHolder;
private GameObject _colorInstance; private GameObject _colorInstance;
private GameObject _colorButtonPrefab; private GameObject _colorButtonPrefab;
@@ -40,8 +39,7 @@ public class ColoringController : IColoringController, IDisposable
IEventBus bus, IEventBus bus,
IAssetProviderService assetProviderService, IAssetProviderService assetProviderService,
IUndoStack history, IUndoStack history,
IGameplaySceneRefs refs, IGameplaySceneRefs refs)
ColorPaletteHolderView paletteHolder)
{ {
_repository = repository; _repository = repository;
_buttonFactory = buttonFactory; _buttonFactory = buttonFactory;
@@ -49,14 +47,12 @@ public class ColoringController : IColoringController, IDisposable
_assetProviderService = assetProviderService; _assetProviderService = assetProviderService;
_history = history; _history = history;
_refs = refs; _refs = refs;
_paletteHolder = paletteHolder;
} }
public async UniTask InitializeRegionsAsync(IDrawingTemplate template, public async UniTask InitializeRegionsAsync(IDrawingTemplate template,
IReadOnlyDictionary<string, Color> savedColors, CancellationToken ct) IReadOnlyDictionary<string, Color> savedColors, CancellationToken ct)
{ {
Clear(); Clear();
_paletteHolder.Show();
await TryLoadColorButtonPrefabAsync(ct); await TryLoadColorButtonPrefabAsync(ct);
ct.ThrowIfCancellationRequested(); ct.ThrowIfCancellationRequested();
await TryLoadColorPaletteAsync(template, ct); await TryLoadColorPaletteAsync(template, ct);
@@ -71,7 +67,6 @@ public class ColoringController : IColoringController, IDisposable
if (region == null) return; if (region == null) return;
var from = region.Color; var from = region.Color;
if (from != color)
_history.Push(new ColorRegionCommand(region, from, color)); _history.Push(new ColorRegionCommand(region, from, color));
_bus.Publish(new ColorAppliedSignal(regionId, color)); _bus.Publish(new ColorAppliedSignal(regionId, color));
} }
@@ -89,8 +84,7 @@ public class ColoringController : IColoringController, IDisposable
_history.Drop(); _history.Drop();
foreach (var button in _buttons) foreach (var button in _buttons)
if (button != null) if (button != null) UnityEngine.Object.Destroy(button.gameObject);
UnityEngine.Object.Destroy(button.gameObject);
_buttons.Clear(); _buttons.Clear();
_regions.Clear(); _regions.Clear();

View File

@@ -9,9 +9,8 @@ namespace Darkmatter.Features.Coloring.UI
[RequireComponent(typeof(Button))] [RequireComponent(typeof(Button))]
public class ColorButton : MonoBehaviour public class ColorButton : MonoBehaviour
{ {
[SerializeField] private Image[] swatches; [SerializeField] private Image swatch;
[SerializeField] private GameObject activeUI; [SerializeField] private GameObject selectedUI;
[SerializeField] private GameObject inactiveUI;
private Button _button; private Button _button;
private Color _color; private Color _color;
private ColoringStateRepository _repository; private ColoringStateRepository _repository;
@@ -27,11 +26,7 @@ namespace Darkmatter.Features.Coloring.UI
_color = color; _color = color;
_repository = repository; _repository = repository;
_sfx = sfx; _sfx = sfx;
if (_button == null) _button = GetComponent<Button>();
foreach (var swatch in swatches)
{
swatch.color = color; swatch.color = color;
}
_button.onClick.AddListener(OnClick); _button.onClick.AddListener(OnClick);
_repository.SelectedIndexChanged += UpdateSelectedUI; _repository.SelectedIndexChanged += UpdateSelectedUI;
@@ -46,10 +41,8 @@ namespace Darkmatter.Features.Coloring.UI
private void UpdateSelectedUI() private void UpdateSelectedUI()
{ {
if (activeUI != null) if (selectedUI != null)
activeUI.SetActive(_repository.SelectedColor == _color); selectedUI.SetActive(_repository.SelectedColor == _color);
if (inactiveUI != null)
inactiveUI.SetActive(_repository.SelectedColor != _color);
} }
private void OnDestroy() private void OnDestroy()

View File

@@ -15,24 +15,18 @@ namespace Darkmatter.Features.Coloring.UI
private CanvasGroup _canvasGroup; private CanvasGroup _canvasGroup;
private Vector2 _shownAnchoredPos; private Vector2 _shownAnchoredPos;
private Sequence _activeSequence; private Sequence _activeSequence;
private bool _refsReady;
public RectTransform SpawnRoot => spawnRoot; public RectTransform SpawnRoot => spawnRoot;
private void Awake() => EnsureRefs(); private void Awake()
private void EnsureRefs()
{ {
if (_refsReady) return; _canvasGroup = GetComponent<CanvasGroup>();
if (_canvasGroup == null) _canvasGroup = GetComponent<CanvasGroup>();
if (animatedRoot == null) animatedRoot = (RectTransform)transform; if (animatedRoot == null) animatedRoot = (RectTransform)transform;
_shownAnchoredPos = animatedRoot.anchoredPosition; _shownAnchoredPos = animatedRoot.anchoredPosition;
_refsReady = true;
} }
public Sequence Show() public Sequence Show()
{ {
EnsureRefs();
KillActive(); KillActive();
gameObject.SetActive(true); gameObject.SetActive(true);
_canvasGroup.interactable = true; _canvasGroup.interactable = true;
@@ -46,7 +40,6 @@ namespace Darkmatter.Features.Coloring.UI
public Sequence Hide() public Sequence Hide()
{ {
EnsureRefs();
KillActive(); KillActive();
_canvasGroup.interactable = false; _canvasGroup.interactable = false;
_canvasGroup.blocksRaycasts = false; _canvasGroup.blocksRaycasts = false;
@@ -61,7 +54,6 @@ namespace Darkmatter.Features.Coloring.UI
public void HideInstant() public void HideInstant()
{ {
EnsureRefs();
KillActive(); KillActive();
animatedRoot.anchoredPosition = _shownAnchoredPos + hiddenOffset; animatedRoot.anchoredPosition = _shownAnchoredPos + hiddenOffset;
_canvasGroup.alpha = 0f; _canvasGroup.alpha = 0f;

View File

@@ -14,7 +14,6 @@ namespace Darkmatter.Features.Coloring.UI
private Image _image; private Image _image;
private event Action OnRegionClicked; private event Action OnRegionClicked;
private void Awake() private void Awake()
{ {
_image = GetComponent<Image>(); _image = GetComponent<Image>();
@@ -34,7 +33,6 @@ namespace Darkmatter.Features.Coloring.UI
public void OnPointerClick(PointerEventData eventData) public void OnPointerClick(PointerEventData eventData)
{ {
Debug.Log($"[ColorRegion] clicked '{RegionId}' on '{gameObject.name}'");
OnRegionClicked?.Invoke(); OnRegionClicked?.Invoke();
} }

View File

@@ -22,6 +22,7 @@ namespace Darkmatter.Features.DrawingCatalog
private readonly IDrawingTemplateCatalog _catalog; private readonly IDrawingTemplateCatalog _catalog;
private readonly IEventBus _eventBus; private readonly IEventBus _eventBus;
private readonly CancellationTokenSource _cts = new(); private readonly CancellationTokenSource _cts = new();
private IDisposable _openSubscription;
public DrawingCatalogPresenter(DrawingCatalogView view, IDrawingCatalogController controller, public DrawingCatalogPresenter(DrawingCatalogView view, IDrawingCatalogController controller,
IDrawingTemplateCatalog catalog, IEventBus eventBus) IDrawingTemplateCatalog catalog, IEventBus eventBus)
@@ -41,7 +42,7 @@ namespace Darkmatter.Features.DrawingCatalog
_controller.ListChanged += OnListChanged; _controller.ListChanged += OnListChanged;
_eventBus.Subscribe<OpenColorBookSignal>(HandleOpenColorBookSignal); _openSubscription = _eventBus.Subscribe<OpenColorBookSignal>(HandleOpenColorBookSignal);
} }
private void HandleOpenColorBookSignal(OpenColorBookSignal signal) private void HandleOpenColorBookSignal(OpenColorBookSignal signal)
@@ -115,6 +116,7 @@ namespace Darkmatter.Features.DrawingCatalog
_view.OnArtBookClicked -= OnArtBookBtnClicked; _view.OnArtBookClicked -= OnArtBookBtnClicked;
_view.OnLeftPageClicked -= OnLeftPageBtnClicked; _view.OnLeftPageClicked -= OnLeftPageBtnClicked;
_view.OnRightPageClicked -= OnRightPageBtnClicked; _view.OnRightPageClicked -= OnRightPageBtnClicked;
_openSubscription?.Dispose();
_cts.Cancel(); _cts.Cancel();
_cts.Dispose(); _cts.Dispose();
} }

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: fd1fab7418b3c40d09bf91807c6cefcc
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,917 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Darkmatter.Core.Data.Static.Features.Coloring;
using Darkmatter.Core.Data.Static.Features.DrawingTemplate;
using Darkmatter.Core.Data.Static.Features.ShapeBuilder;
using Darkmatter.Features.Coloring.UI;
using Darkmatter.Features.ShapeBuilder.UI;
using UnityEditor;
using UnityEditor.AddressableAssets;
using UnityEditor.AddressableAssets.Settings;
using UnityEngine;
namespace Darkmatter.Features.DrawingTemplates.Editor
{
public sealed class DrawingTemplateEditorWindow : EditorWindow
{
private const string AddressableLabel = "drawing";
private const string DrawingsGroupName = "Drawing";
private const string PalettesGroupName = "Palettes";
private const string DefaultTemplateFolder = "Assets/Darkmatter/Data/Drawings/Templates";
private const string DefaultShapeFolder = "Assets/Darkmatter/Data/Drawings/Shapes";
private const string DefaultPaletteFolder = "Assets/Darkmatter/Data/Drawings/Palettes";
private enum Tab { Templates, Shapes, Palettes }
private Tab _tab;
private Vector2 _leftScroll;
private Vector2 _rightScroll;
private string _search = string.Empty;
private readonly List<DrawingTemplateSO> _templates = new();
private readonly List<ShapeSO> _shapes = new();
private readonly List<ColorPaletteSO> _palettes = new();
private DrawingTemplateSO _selectedTemplate;
private ShapeSO _selectedShape;
private ColorPaletteSO _selectedPalette;
private readonly List<string> _validation = new();
private string _lastScanReport;
private DefaultAsset _batchShapeFolder;
private bool _autoAssignRegionIds = true;
private bool _mergeRegions = false;
[MenuItem("Tools/Darkmatter/Drawing Template Editor", priority = 10)]
public static void Open()
{
var win = GetWindow<DrawingTemplateEditorWindow>("Drawing Editor");
win.minSize = new Vector2(900, 540);
win.Refresh();
}
public static void OpenAndSelect(DrawingTemplateSO template)
{
var win = GetWindow<DrawingTemplateEditorWindow>("Drawing Editor");
win.minSize = new Vector2(900, 540);
win.Refresh();
win._tab = Tab.Templates;
win.Select(template);
}
private void OnEnable() => Refresh();
private void Refresh()
{
_templates.Clear();
_shapes.Clear();
_palettes.Clear();
_templates.AddRange(FindAllOfType<DrawingTemplateSO>());
_shapes.AddRange(FindAllOfType<ShapeSO>());
_palettes.AddRange(FindAllOfType<ColorPaletteSO>());
}
private static IEnumerable<T> FindAllOfType<T>() where T : ScriptableObject
{
var guids = AssetDatabase.FindAssets("t:" + typeof(T).Name);
foreach (var g in guids)
{
var path = AssetDatabase.GUIDToAssetPath(g);
var a = AssetDatabase.LoadAssetAtPath<T>(path);
if (a != null) yield return a;
}
}
private void OnGUI()
{
DrawToolbar();
EditorGUILayout.Space(2);
switch (_tab)
{
case Tab.Templates: DrawTemplatesTab(); break;
case Tab.Shapes: DrawShapesTab(); break;
case Tab.Palettes: DrawPalettesTab(); break;
}
}
// ─── Toolbar ──────────────────────────────────────────────────────────────
private void DrawToolbar()
{
using (new EditorGUILayout.HorizontalScope(EditorStyles.toolbar))
{
if (TabButton("Templates", _tab == Tab.Templates)) _tab = Tab.Templates;
if (TabButton("Shapes", _tab == Tab.Shapes)) _tab = Tab.Shapes;
if (TabButton("Palettes", _tab == Tab.Palettes)) _tab = Tab.Palettes;
GUILayout.FlexibleSpace();
_search = GUILayout.TextField(_search, EditorStyles.toolbarSearchField, GUILayout.Width(220));
if (GUILayout.Button("Refresh", EditorStyles.toolbarButton, GUILayout.Width(60)))
Refresh();
}
}
private static bool TabButton(string label, bool active)
{
var bg = GUI.backgroundColor;
if (active) GUI.backgroundColor = new Color(0.6f, 0.8f, 1f);
var click = GUILayout.Button(label, EditorStyles.toolbarButton, GUILayout.Width(90));
GUI.backgroundColor = bg;
return click;
}
// ─── Templates Tab ────────────────────────────────────────────────────────
private void DrawTemplatesTab()
{
using (new EditorGUILayout.HorizontalScope())
{
DrawTemplateList();
DrawSeparator();
DrawTemplateDetail();
}
}
private void DrawTemplateList()
{
using (new EditorGUILayout.VerticalScope(GUILayout.Width(260)))
{
if (GUILayout.Button("+ New Drawing Template", GUILayout.Height(26)))
CreateNewTemplate();
EditorGUILayout.LabelField($"Templates ({_templates.Count})", EditorStyles.boldLabel);
using (var scroll = new EditorGUILayout.ScrollViewScope(_leftScroll))
{
_leftScroll = scroll.scrollPosition;
foreach (var t in _templates)
{
if (t == null) continue;
if (!string.IsNullOrEmpty(_search) &&
(t.name == null || t.name.IndexOf(_search, StringComparison.OrdinalIgnoreCase) < 0) &&
(t.Id == null || t.Id.IndexOf(_search, StringComparison.OrdinalIgnoreCase) < 0))
continue;
DrawTemplateRow(t);
}
}
}
}
private void DrawTemplateRow(DrawingTemplateSO t)
{
var active = _selectedTemplate == t;
var bg = GUI.backgroundColor;
if (active) GUI.backgroundColor = new Color(0.55f, 0.8f, 1f);
using (new EditorGUILayout.HorizontalScope("box"))
{
if (t.DefaultThumbnail != null)
GUILayout.Label(AssetPreview.GetAssetPreview(t.DefaultThumbnail), GUILayout.Width(36), GUILayout.Height(36));
else
GUILayout.Label(GUIContent.none, GUILayout.Width(36), GUILayout.Height(36));
using (new EditorGUILayout.VerticalScope())
{
GUILayout.Label(string.IsNullOrEmpty(t.DisplayName) ? t.name : t.DisplayName, EditorStyles.boldLabel);
GUILayout.Label("id: " + (string.IsNullOrEmpty(t.Id) ? "<unset>" : t.Id), EditorStyles.miniLabel);
}
if (GUILayout.Button("Select", GUILayout.Width(54)))
Select(t);
}
GUI.backgroundColor = bg;
}
private void Select(DrawingTemplateSO t)
{
_selectedTemplate = t;
_lastScanReport = null;
Validate();
Repaint();
}
private void DrawTemplateDetail()
{
using (var scroll = new EditorGUILayout.ScrollViewScope(_rightScroll))
{
_rightScroll = scroll.scrollPosition;
if (_selectedTemplate == null)
{
EditorGUILayout.HelpBox("Select a template from the left list, or click '+ New Drawing Template'.", MessageType.Info);
return;
}
var t = _selectedTemplate;
var so = new SerializedObject(t);
so.Update();
EditorGUILayout.LabelField(AssetDatabase.GetAssetPath(t), EditorStyles.miniLabel);
EditorGUILayout.Space(4);
// Basic fields
EditorGUILayout.LabelField("Basics", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(so.FindProperty("id"), new GUIContent("Id (Addressable Key)"));
EditorGUILayout.PropertyField(so.FindProperty("displayName"));
EditorGUILayout.PropertyField(so.FindProperty("defaultThumbnail"));
EditorGUILayout.Space(6);
EditorGUILayout.LabelField("Prefabs", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(so.FindProperty("drawingPrefab"), new GUIContent("Drawing Prefab (SlotMarkers)"));
EditorGUILayout.PropertyField(so.FindProperty("coloringPrefab"), new GUIContent("Coloring Prefab (ColorRegionViews)"));
EditorGUILayout.Space(6);
EditorGUILayout.LabelField("Palette", EditorStyles.boldLabel);
DrawPaletteIdField(so.FindProperty("colorPaletteId"));
EditorGUILayout.Space(8);
EditorGUILayout.LabelField("Pieces", EditorStyles.boldLabel);
using (new EditorGUILayout.HorizontalScope())
{
if (GUILayout.Button("Scan Drawing Prefab", GUILayout.Height(22)))
{
ScanDrawingPrefab(t);
so.Update();
}
if (GUILayout.Button("Clear", GUILayout.Width(60)))
{
Undo.RecordObject(t, "Clear Pieces");
var emptyPieces = new List<ShapeSO>();
t.EditorSet(t.Id, t.DisplayName, t.DefaultThumbnail, t.DrawingPrefab, t.ColoringPrefab,
emptyPieces, t.AuthoredRegions.ToList(), t.ColorPaletteId);
EditorUtility.SetDirty(t);
so.Update();
}
}
EditorGUILayout.PropertyField(so.FindProperty("pieces"), includeChildren: true);
EditorGUILayout.Space(8);
EditorGUILayout.LabelField("Regions", EditorStyles.boldLabel);
using (new EditorGUILayout.HorizontalScope())
{
_autoAssignRegionIds = GUILayout.Toggle(_autoAssignRegionIds,
new GUIContent("Auto-assign blank Ids from GameObject name (writes back to prefab)"),
GUILayout.ExpandWidth(false));
}
using (new EditorGUILayout.HorizontalScope())
{
_mergeRegions = GUILayout.Toggle(_mergeRegions,
new GUIContent("Merge mode (keep existing entries' colors)"),
GUILayout.ExpandWidth(false));
}
using (new EditorGUILayout.HorizontalScope())
{
if (GUILayout.Button("Scan Coloring Prefab", GUILayout.Height(22)))
{
ScanColoringPrefab(t);
so.Update();
}
if (GUILayout.Button("Clear", GUILayout.Width(60)))
{
Undo.RecordObject(t, "Clear Regions");
t.EditorSet(t.Id, t.DisplayName, t.DefaultThumbnail, t.DrawingPrefab, t.ColoringPrefab,
t.Pieces.ToList(), new List<RegionAuthoring>(), t.ColorPaletteId);
EditorUtility.SetDirty(t);
so.Update();
}
}
EditorGUILayout.PropertyField(so.FindProperty("regions"), includeChildren: true);
so.ApplyModifiedProperties();
EditorGUILayout.Space(10);
DrawValidationBox();
EditorGUILayout.Space(4);
if (!string.IsNullOrEmpty(_lastScanReport))
EditorGUILayout.HelpBox(_lastScanReport, MessageType.Info);
EditorGUILayout.Space(8);
using (new EditorGUILayout.HorizontalScope())
{
if (GUILayout.Button("Validate", GUILayout.Height(28)))
Validate();
if (GUILayout.Button("Mark Addressable ('drawing')", GUILayout.Height(28)))
TryMakeAddressable(t);
if (GUILayout.Button("Ping Asset", GUILayout.Width(120), GUILayout.Height(28)))
EditorGUIUtility.PingObject(t);
}
}
}
private void DrawPaletteIdField(SerializedProperty prop)
{
using (new EditorGUILayout.HorizontalScope())
{
EditorGUILayout.PropertyField(prop, new GUIContent("Palette Id"));
var ids = _palettes.Where(p => p != null).Select(p => p.Id).Where(s => !string.IsNullOrEmpty(s)).Distinct().ToList();
if (ids.Count == 0)
{
GUILayout.Label("(no palettes)", EditorStyles.miniLabel, GUILayout.Width(90));
return;
}
var current = ids.IndexOf(prop.stringValue);
var newIndex = EditorGUILayout.Popup(current, ids.ToArray(), GUILayout.Width(150));
if (newIndex >= 0 && newIndex != current)
prop.stringValue = ids[newIndex];
}
}
// ─── Scans ────────────────────────────────────────────────────────────────
private void ScanDrawingPrefab(DrawingTemplateSO t)
{
if (t.DrawingPrefab == null)
{
_lastScanReport = "No Drawing Prefab assigned.";
return;
}
var path = AssetDatabase.GetAssetPath(t.DrawingPrefab);
var root = PrefabUtility.LoadPrefabContents(path);
try
{
var markers = root.GetComponentsInChildren<SlotMarker>(includeInactive: true);
var pieces = new List<ShapeSO>();
var missing = 0;
foreach (var m in markers)
{
if (m.Shape == null) { missing++; continue; }
if (!pieces.Contains(m.Shape)) pieces.Add(m.Shape);
}
Undo.RecordObject(t, "Scan Drawing Prefab");
t.EditorSet(t.Id, t.DisplayName, t.DefaultThumbnail, t.DrawingPrefab, t.ColoringPrefab,
pieces, t.AuthoredRegions.ToList(), t.ColorPaletteId);
EditorUtility.SetDirty(t);
_lastScanReport = $"Found {markers.Length} SlotMarker(s), {pieces.Count} unique ShapeSO. {missing} marker(s) had no ShapeSO assigned.";
Validate();
}
finally
{
PrefabUtility.UnloadPrefabContents(root);
}
}
private void ScanColoringPrefab(DrawingTemplateSO t)
{
if (t.ColoringPrefab == null)
{
_lastScanReport = "No Coloring Prefab assigned.";
return;
}
var path = AssetDatabase.GetAssetPath(t.ColoringPrefab);
var root = PrefabUtility.LoadPrefabContents(path);
var existingColors = _mergeRegions
? t.AuthoredRegions.ToDictionary(r => r.RegionId, r => r.InitialColor)
: new Dictionary<string, Color>();
try
{
var views = root.GetComponentsInChildren<ColorRegionView>(includeInactive: true);
var regions = new List<RegionAuthoring>();
var seen = new HashSet<string>();
var assigned = new List<string>();
var duplicates = new List<string>();
var blanks = new List<string>();
var prefabDirty = false;
foreach (var v in views)
{
var id = v.RegionId;
var goPath = GetHierarchyPath(v.transform, root.transform);
if (string.IsNullOrEmpty(id))
{
if (_autoAssignRegionIds)
{
var baseId = SanitizeId(v.gameObject.name);
id = MakeUniqueId(baseId, seen);
if (TrySetRegionId(v, id))
{
prefabDirty = true;
assigned.Add($"{goPath} → '{id}'");
}
else
{
blanks.Add($"{goPath} (could not set Id; backing field not found)");
continue;
}
}
else
{
blanks.Add(goPath);
continue;
}
}
if (!seen.Add(id))
{
duplicates.Add($"{goPath} (id='{id}')");
continue;
}
var img = v.GetComponent<UnityEngine.UI.Image>();
var col = existingColors.TryGetValue(id, out var keepCol)
? keepCol
: (img != null ? img.color : Color.white);
regions.Add(new RegionAuthoring { RegionId = id, InitialColor = col });
}
if (prefabDirty)
PrefabUtility.SaveAsPrefabAsset(root, path);
Undo.RecordObject(t, "Scan Coloring Prefab");
t.EditorSet(t.Id, t.DisplayName, t.DefaultThumbnail, t.DrawingPrefab, t.ColoringPrefab,
t.Pieces.ToList(), regions, t.ColorPaletteId);
EditorUtility.SetDirty(t);
var report = new System.Text.StringBuilder();
report.AppendLine($"Found {views.Length} ColorRegionView(s). Stored {regions.Count}. Merge mode: {_mergeRegions}.");
if (assigned.Count > 0)
{
report.AppendLine($"Auto-assigned {assigned.Count} blank Id(s) and wrote back to prefab:");
foreach (var a in assigned) report.AppendLine(" • " + a);
}
if (blanks.Count > 0)
{
report.AppendLine($"Skipped {blanks.Count} blank Id(s) (enable auto-assign to fix):");
foreach (var b in blanks) report.AppendLine(" • " + b);
}
if (duplicates.Count > 0)
{
report.AppendLine($"Skipped {duplicates.Count} duplicate Id(s):");
foreach (var d in duplicates) report.AppendLine(" • " + d);
}
_lastScanReport = report.ToString().TrimEnd();
Validate();
}
finally
{
PrefabUtility.UnloadPrefabContents(root);
}
}
private static bool TrySetRegionId(ColorRegionView v, string id)
{
var vso = new SerializedObject(v);
var prop = FindAutoProp(vso, "RegionId");
if (prop == null) return false;
prop.stringValue = id;
vso.ApplyModifiedPropertiesWithoutUndo();
EditorUtility.SetDirty(v);
return true;
}
// Robust lookup for [field: SerializeField] backing fields across Unity versions.
// Tries '<Name>k__BackingField', 'Name', 'name', 'm_Name', then iterates visible properties matching by name.
private static SerializedProperty FindAutoProp(SerializedObject so, string propertyName)
{
var prop = so.FindProperty("<" + propertyName + ">k__BackingField");
if (prop != null) return prop;
prop = so.FindProperty(propertyName);
if (prop != null) return prop;
var camel = char.ToLowerInvariant(propertyName[0]) + propertyName.Substring(1);
prop = so.FindProperty(camel);
if (prop != null) return prop;
prop = so.FindProperty("m_" + propertyName);
if (prop != null) return prop;
var iter = so.GetIterator();
if (!iter.NextVisible(true)) return null;
do
{
if (iter.name.IndexOf(propertyName, StringComparison.OrdinalIgnoreCase) >= 0)
return iter.Copy();
} while (iter.NextVisible(false));
return null;
}
private static string MakeUniqueId(string baseId, HashSet<string> taken)
{
if (!taken.Contains(baseId)) return baseId;
for (int i = 2; i < 10000; i++)
{
var candidate = baseId + "_" + i;
if (!taken.Contains(candidate)) return candidate;
}
return baseId + "_" + System.Guid.NewGuid().ToString("N").Substring(0, 6);
}
private static string GetHierarchyPath(Transform node, Transform root)
{
if (node == root) return node.name;
var parts = new List<string> { node.name };
var cur = node.parent;
while (cur != null && cur != root)
{
parts.Add(cur.name);
cur = cur.parent;
}
parts.Reverse();
return string.Join("/", parts);
}
// ─── Validation ───────────────────────────────────────────────────────────
private void Validate()
{
_validation.Clear();
var t = _selectedTemplate;
if (t == null) return;
if (string.IsNullOrWhiteSpace(t.Id)) _validation.Add("Id is empty.");
if (string.IsNullOrWhiteSpace(t.DisplayName)) _validation.Add("DisplayName is empty.");
if (t.DefaultThumbnail == null) _validation.Add("DefaultThumbnail is missing.");
if (t.DrawingPrefab == null) _validation.Add("DrawingPrefab is missing.");
if (t.ColoringPrefab == null) _validation.Add("ColoringPrefab is missing.");
if (string.IsNullOrWhiteSpace(t.ColorPaletteId)) _validation.Add("ColorPaletteId is empty.");
else if (!_palettes.Any(p => p != null && p.Id == t.ColorPaletteId))
_validation.Add($"No ColorPaletteSO with Id '{t.ColorPaletteId}' found in project.");
if (t.Pieces == null || t.Pieces.Count == 0)
_validation.Add("No Pieces assigned (use 'Scan Drawing Prefab').");
else
{
var dup = t.Pieces.GroupBy(p => p != null ? p.Id : null).Where(g => g.Count() > 1).Select(g => g.Key).ToList();
foreach (var d in dup) _validation.Add($"Duplicate piece Id '{d}'.");
if (t.Pieces.Any(p => p == null)) _validation.Add("A Piece slot is null.");
if (t.Pieces.Any(p => p != null && string.IsNullOrEmpty(p.Id))) _validation.Add("A Piece has empty Id.");
}
var ridDup = t.AuthoredRegions.GroupBy(r => r.RegionId).Where(g => g.Count() > 1).Select(g => g.Key).ToList();
foreach (var d in ridDup) _validation.Add($"Duplicate region Id '{d}'.");
// Cross-check: piece count vs slot count in DrawingPrefab
if (t.DrawingPrefab != null && t.Pieces != null)
{
var path = AssetDatabase.GetAssetPath(t.DrawingPrefab);
var root = PrefabUtility.LoadPrefabContents(path);
try
{
var markerCount = root.GetComponentsInChildren<SlotMarker>(true).Length;
if (markerCount != t.Pieces.Count)
_validation.Add($"Pieces count ({t.Pieces.Count}) does not match SlotMarker count in prefab ({markerCount}).");
}
finally { PrefabUtility.UnloadPrefabContents(root); }
}
}
private void DrawValidationBox()
{
if (_validation.Count == 0)
{
EditorGUILayout.HelpBox("Looks good.", MessageType.Info);
return;
}
EditorGUILayout.HelpBox(string.Join("\n", _validation.Select(v => "• " + v)), MessageType.Warning);
}
// ─── Addressables ─────────────────────────────────────────────────────────
private void TryMakeAddressable(UnityEngine.Object asset)
{
try
{
var settings = AddressableAssetSettingsDefaultObject.Settings;
if (settings == null)
{
EditorUtility.DisplayDialog("Addressables", "Addressables settings not found. Open Window > Asset Management > Addressables > Groups and click 'Create Addressables Settings' first.", "OK");
return;
}
var group = EnsureGroup(settings, DrawingsGroupName);
var path = AssetDatabase.GetAssetPath(asset);
var guid = AssetDatabase.AssetPathToGUID(path);
var entry = settings.CreateOrMoveEntry(guid, group);
var t = asset as DrawingTemplateSO;
if (t != null && !string.IsNullOrEmpty(t.Id))
entry.address = t.Id;
if (!settings.GetLabels().Contains(AddressableLabel))
settings.AddLabel(AddressableLabel);
entry.SetLabel(AddressableLabel, true, true, false);
settings.SetDirty(AddressableAssetSettings.ModificationEvent.EntryModified, entry, true);
_lastScanReport = $"Marked '{asset.name}' addressable in group '{group.Name}'. Address='{entry.address}', label='{AddressableLabel}'.";
}
catch (Exception e)
{
EditorUtility.DisplayDialog("Addressables", "Failed: " + e.Message, "OK");
}
}
private static AddressableAssetGroup EnsureGroup(AddressableAssetSettings settings, string groupName)
{
var group = settings.FindGroup(groupName);
if (group != null) return group;
System.Type[] schemaTypes;
if (settings.DefaultGroup != null && settings.DefaultGroup.Schemas.Count > 0)
schemaTypes = settings.DefaultGroup.Schemas.Select(s => s.GetType()).ToArray();
else
schemaTypes = new[] { typeof(UnityEditor.AddressableAssets.Settings.GroupSchemas.BundledAssetGroupSchema) };
return settings.CreateGroup(groupName, false, false, true, null, schemaTypes);
}
// ─── New Template ─────────────────────────────────────────────────────────
private void CreateNewTemplate()
{
if (!AssetDatabase.IsValidFolder(DefaultTemplateFolder))
EnsureFolder(DefaultTemplateFolder);
var path = EditorUtility.SaveFilePanelInProject(
"New Drawing Template", "NewDrawing", "asset",
"Choose where to save the drawing template asset.",
DefaultTemplateFolder);
if (string.IsNullOrEmpty(path)) return;
var t = CreateInstance<DrawingTemplateSO>();
var name = Path.GetFileNameWithoutExtension(path);
t.EditorSet(name, name, null, null, null, new List<ShapeSO>(), new List<RegionAuthoring>(), "defaultPalette");
AssetDatabase.CreateAsset(t, path);
AssetDatabase.SaveAssets();
Refresh();
Select(t);
}
// ─── Shapes Tab ───────────────────────────────────────────────────────────
private void DrawShapesTab()
{
using (new EditorGUILayout.HorizontalScope())
{
using (new EditorGUILayout.VerticalScope(GUILayout.Width(280)))
{
if (GUILayout.Button("+ New Shape from Sprite", GUILayout.Height(24)))
CreateShapePicker();
EditorGUILayout.LabelField("Batch import from folder:", EditorStyles.miniBoldLabel);
_batchShapeFolder = (DefaultAsset)EditorGUILayout.ObjectField(_batchShapeFolder, typeof(DefaultAsset), false);
using (new EditorGUI.DisabledScope(_batchShapeFolder == null))
{
if (GUILayout.Button("Batch Create From Folder"))
BatchCreateShapesFromFolder(_batchShapeFolder);
}
EditorGUILayout.Space(4);
EditorGUILayout.LabelField($"Shapes ({_shapes.Count})", EditorStyles.boldLabel);
using (var s = new EditorGUILayout.ScrollViewScope(_leftScroll))
{
_leftScroll = s.scrollPosition;
foreach (var sh in _shapes)
{
if (sh == null) continue;
if (!string.IsNullOrEmpty(_search) &&
sh.name.IndexOf(_search, StringComparison.OrdinalIgnoreCase) < 0 &&
(sh.Id == null || sh.Id.IndexOf(_search, StringComparison.OrdinalIgnoreCase) < 0)) continue;
DrawShapeRow(sh);
}
}
}
DrawSeparator();
DrawShapeDetail();
}
}
private void DrawShapeRow(ShapeSO sh)
{
using (new EditorGUILayout.HorizontalScope("box"))
{
var preview = sh.Sprite != null ? AssetPreview.GetAssetPreview(sh.Sprite) : null;
GUILayout.Label(preview, GUILayout.Width(36), GUILayout.Height(36));
using (new EditorGUILayout.VerticalScope())
{
GUILayout.Label(sh.name, EditorStyles.boldLabel);
GUILayout.Label("id: " + (string.IsNullOrEmpty(sh.Id) ? "<unset>" : sh.Id), EditorStyles.miniLabel);
}
if (GUILayout.Button("Edit", GUILayout.Width(48)))
{
_selectedShape = sh;
Repaint();
}
}
}
private void DrawShapeDetail()
{
using (var s = new EditorGUILayout.ScrollViewScope(_rightScroll))
{
_rightScroll = s.scrollPosition;
if (_selectedShape == null)
{
EditorGUILayout.HelpBox("Select a shape on the left, or create a new one.", MessageType.Info);
return;
}
var so = new SerializedObject(_selectedShape);
so.Update();
EditorGUILayout.LabelField(AssetDatabase.GetAssetPath(_selectedShape), EditorStyles.miniLabel);
EditorGUILayout.PropertyField(FindAutoProp(so, "Id"), new GUIContent("Id"));
EditorGUILayout.PropertyField(FindAutoProp(so, "Sprite"), new GUIContent("Sprite"));
EditorGUILayout.PropertyField(FindAutoProp(so, "DefaultSizeDelta"), new GUIContent("Default Size Delta"));
so.ApplyModifiedProperties();
EditorGUILayout.Space(8);
if (_selectedShape.Sprite != null)
{
var preview = AssetPreview.GetAssetPreview(_selectedShape.Sprite);
if (preview != null)
GUILayout.Label(preview, GUILayout.Width(160), GUILayout.Height(160));
}
EditorGUILayout.Space(8);
if (GUILayout.Button("Ping Asset", GUILayout.Width(120)))
EditorGUIUtility.PingObject(_selectedShape);
}
}
private void CreateShapePicker()
{
var path = EditorUtility.OpenFilePanelWithFilters(
"Pick sprite", Application.dataPath,
new[] { "Sprites", "png,jpg,jpeg,psd,asset" });
if (string.IsNullOrEmpty(path)) return;
if (!path.StartsWith(Application.dataPath))
{
EditorUtility.DisplayDialog("Pick sprite", "Sprite must be inside the project's Assets folder.", "OK");
return;
}
var relative = "Assets" + path.Substring(Application.dataPath.Length);
var sprite = AssetDatabase.LoadAssetAtPath<Sprite>(relative);
if (sprite == null)
{
EditorUtility.DisplayDialog("Pick sprite", "Selected file is not a Sprite asset.", "OK");
return;
}
CreateShape(sprite);
}
private void BatchCreateShapesFromFolder(DefaultAsset folder)
{
var folderPath = AssetDatabase.GetAssetPath(folder);
if (!AssetDatabase.IsValidFolder(folderPath))
{
EditorUtility.DisplayDialog("Batch import", "Selection is not a folder.", "OK");
return;
}
var guids = AssetDatabase.FindAssets("t:Sprite", new[] { folderPath });
int created = 0;
foreach (var g in guids)
{
var p = AssetDatabase.GUIDToAssetPath(g);
var spr = AssetDatabase.LoadAssetAtPath<Sprite>(p);
if (spr == null) continue;
CreateShape(spr, batch: true);
created++;
}
AssetDatabase.SaveAssets();
Refresh();
_lastScanReport = $"Batch created {created} ShapeSO from '{folderPath}'.";
}
private ShapeSO CreateShape(Sprite sprite, bool batch = false)
{
EnsureFolder(DefaultShapeFolder);
var idGuess = SanitizeId(sprite.name);
var path = $"{DefaultShapeFolder}/{idGuess}.asset";
path = AssetDatabase.GenerateUniqueAssetPath(path);
var shape = CreateInstance<ShapeSO>();
var so = new SerializedObject(shape);
FindAutoProp(so, "Id").stringValue = idGuess;
FindAutoProp(so, "Sprite").objectReferenceValue = sprite;
FindAutoProp(so, "DefaultSizeDelta").vector2Value = new Vector2(256, 256);
so.ApplyModifiedProperties();
AssetDatabase.CreateAsset(shape, path);
if (!batch)
{
AssetDatabase.SaveAssets();
Refresh();
_selectedShape = shape;
EditorGUIUtility.PingObject(shape);
}
return shape;
}
// ─── Palettes Tab ─────────────────────────────────────────────────────────
private void DrawPalettesTab()
{
using (new EditorGUILayout.HorizontalScope())
{
using (new EditorGUILayout.VerticalScope(GUILayout.Width(260)))
{
if (GUILayout.Button("+ New Color Palette", GUILayout.Height(24)))
CreatePalette();
EditorGUILayout.LabelField($"Palettes ({_palettes.Count})", EditorStyles.boldLabel);
using (var s = new EditorGUILayout.ScrollViewScope(_leftScroll))
{
_leftScroll = s.scrollPosition;
foreach (var p in _palettes)
{
if (p == null) continue;
using (new EditorGUILayout.HorizontalScope("box"))
{
using (new EditorGUILayout.VerticalScope())
{
GUILayout.Label(p.name, EditorStyles.boldLabel);
GUILayout.Label("id: " + (string.IsNullOrEmpty(p.Id) ? "<unset>" : p.Id), EditorStyles.miniLabel);
DrawPaletteSwatches(p);
}
if (GUILayout.Button("Edit", GUILayout.Width(48)))
{
_selectedPalette = p;
Repaint();
}
}
}
}
}
DrawSeparator();
using (var s = new EditorGUILayout.ScrollViewScope(_rightScroll))
{
_rightScroll = s.scrollPosition;
if (_selectedPalette == null)
{
EditorGUILayout.HelpBox("Select a palette on the left, or create a new one.", MessageType.Info);
return;
}
var so = new SerializedObject(_selectedPalette);
so.Update();
EditorGUILayout.LabelField(AssetDatabase.GetAssetPath(_selectedPalette), EditorStyles.miniLabel);
EditorGUILayout.PropertyField(FindAutoProp(so, "Id"), new GUIContent("Id"));
EditorGUILayout.PropertyField(FindAutoProp(so, "Colors"), new GUIContent("Colors"), includeChildren: true);
so.ApplyModifiedProperties();
EditorGUILayout.Space(6);
if (GUILayout.Button("Mark Addressable (key=Id)", GUILayout.Height(24)))
TryMakeAddressablePalette(_selectedPalette);
}
}
}
private void TryMakeAddressablePalette(ColorPaletteSO p)
{
try
{
var settings = AddressableAssetSettingsDefaultObject.Settings;
if (settings == null)
{
EditorUtility.DisplayDialog("Addressables", "Addressables settings not found. Open Window > Asset Management > Addressables > Groups and click 'Create Addressables Settings' first.", "OK");
return;
}
var group = EnsureGroup(settings, PalettesGroupName);
var path = AssetDatabase.GetAssetPath(p);
var guid = AssetDatabase.AssetPathToGUID(path);
var entry = settings.CreateOrMoveEntry(guid, group);
if (!string.IsNullOrEmpty(p.Id)) entry.address = p.Id;
settings.SetDirty(AddressableAssetSettings.ModificationEvent.EntryModified, entry, true);
_lastScanReport = $"Marked palette '{p.name}' addressable in group '{group.Name}'. Address='{entry.address}'.";
}
catch (Exception e)
{
EditorUtility.DisplayDialog("Addressables", "Failed: " + e.Message, "OK");
}
}
private static void DrawPaletteSwatches(ColorPaletteSO p)
{
if (p.Colors == null) return;
const int swatch = 14;
using (new EditorGUILayout.HorizontalScope())
{
foreach (var c in p.Colors)
{
var r = GUILayoutUtility.GetRect(swatch, swatch, GUILayout.Width(swatch), GUILayout.Height(swatch));
EditorGUI.DrawRect(r, c);
}
}
}
private void CreatePalette()
{
EnsureFolder(DefaultPaletteFolder);
var path = EditorUtility.SaveFilePanelInProject(
"New Color Palette", "NewPalette", "asset",
"Choose where to save the palette asset.",
DefaultPaletteFolder);
if (string.IsNullOrEmpty(path)) return;
var p = CreateInstance<ColorPaletteSO>();
var so = new SerializedObject(p);
FindAutoProp(so, "Id").stringValue = Path.GetFileNameWithoutExtension(path);
so.ApplyModifiedProperties();
AssetDatabase.CreateAsset(p, path);
AssetDatabase.SaveAssets();
Refresh();
_selectedPalette = p;
}
// ─── Helpers ──────────────────────────────────────────────────────────────
private static void DrawSeparator()
{
var r = GUILayoutUtility.GetRect(2, 0, GUILayout.Width(2), GUILayout.ExpandHeight(true));
EditorGUI.DrawRect(r, new Color(0, 0, 0, 0.25f));
}
private static void EnsureFolder(string assetPath)
{
if (AssetDatabase.IsValidFolder(assetPath)) return;
var parts = assetPath.Split('/');
var current = parts[0];
for (int i = 1; i < parts.Length; i++)
{
var next = current + "/" + parts[i];
if (!AssetDatabase.IsValidFolder(next))
AssetDatabase.CreateFolder(current, parts[i]);
current = next;
}
}
private static string SanitizeId(string raw)
{
if (string.IsNullOrEmpty(raw)) return "shape";
var chars = raw.Select(c => char.IsLetterOrDigit(c) || c == '_' ? c : '_').ToArray();
var s = new string(chars).Trim('_');
return string.IsNullOrEmpty(s) ? "shape" : s;
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 64a89f3acbab9486288ef3ff452a39c7

View File

@@ -1,26 +0,0 @@
using Darkmatter.Core.Data.Static.Features.DrawingTemplate;
using UnityEditor;
using UnityEngine;
namespace Darkmatter.Features.DrawingTemplates.Editor
{
[CustomEditor(typeof(DrawingTemplateSO))]
public sealed class DrawingTemplateInspector : UnityEditor.Editor
{
public override void OnInspectorGUI()
{
var t = (DrawingTemplateSO)target;
using (new EditorGUILayout.HorizontalScope())
{
if (GUILayout.Button("Open in Drawing Editor", GUILayout.Height(28)))
DrawingTemplateEditorWindow.OpenAndSelect(t);
if (GUILayout.Button("Ping", GUILayout.Width(60), GUILayout.Height(28)))
EditorGUIUtility.PingObject(t);
}
EditorGUILayout.Space(4);
DrawDefaultInspector();
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 7ac1d35307f6a427082cca127e61ab71

View File

@@ -1,23 +0,0 @@
{
"name": "Features.DrawingTemplates.Editor",
"rootNamespace": "Darkmatter.Features.DrawingTemplates.Editor",
"references": [
"GUID:6a005d98aed1c4439bc4689802fa2e3b",
"GUID:6a0a834eb41764f12ba55c3fb04a40cb",
"GUID:4cede189a43c349069c614e305683720",
"GUID:2ca8c3a66565544118d3d52d3922933b",
"GUID:9e24947de15b9834991c9d8411ea37cf",
"GUID:69448af7b92c7f342b298e06a37122aa"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@@ -52,18 +52,11 @@ namespace Darkmatter.Features.DrawingTemplates.Systems
_initialized = true; _initialized = true;
} }
public async UniTask<Sprite> GetThumbnailAsync(string id) public UniTask<Sprite> GetThumbnailAsync(string id)
{ {
if (!_byId.TryGetValue(id, out var t)) if (!_byId.TryGetValue(id, out var t))
throw new KeyNotFoundException($"Template '{id}' not in catalog. Did InitializeAsync run?"); throw new KeyNotFoundException($"Template '{id}' not in catalog. Did InitializeAsync run?");
return UniTask.FromResult(t.DefaultThumbnail);
var savedTex = await _progression.GetCachedThumbnailAsync(id);
if (savedTex != null)
{
var rect = new Rect(0, 0, savedTex.width, savedTex.height);
return Sprite.Create(savedTex, rect, new Vector2(0.5f, 0.5f));
}
return t.DefaultThumbnail;
} }
public UniTask<IDrawingTemplate> LoadAsync(string id) public UniTask<IDrawingTemplate> LoadAsync(string id)

View File

@@ -2,14 +2,11 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading; using System.Threading;
using Cysharp.Threading.Tasks; using Cysharp.Threading.Tasks;
using Darkmatter.Core.Contracts.Features.Capture;
using Darkmatter.Core.Contracts.Features.Coloring; using Darkmatter.Core.Contracts.Features.Coloring;
using Darkmatter.Core.Contracts.Features.DrawingCatalog; using Darkmatter.Core.Contracts.Features.DrawingCatalog;
using Darkmatter.Core.Contracts.Features.GameplayFlow; using Darkmatter.Core.Contracts.Features.GameplayFlow;
using Darkmatter.Core.Contracts.Features.Loading;
using Darkmatter.Core.Contracts.Features.Progression; using Darkmatter.Core.Contracts.Features.Progression;
using Darkmatter.Core.Contracts.Features.ShapeBuilder; using Darkmatter.Core.Contracts.Features.ShapeBuilder;
using Darkmatter.Core.Contracts.Services.Gallery;
using Darkmatter.Core.Contracts.Services.Scenes; using Darkmatter.Core.Contracts.Services.Scenes;
using Darkmatter.Core.Data.Dynamic.Features.Progression; using Darkmatter.Core.Data.Dynamic.Features.Progression;
using Darkmatter.Core.Data.Signals.Features.Coloring; using Darkmatter.Core.Data.Signals.Features.Coloring;
@@ -31,8 +28,6 @@ namespace Darkmatter.Features.GameplayFlow.Systems
private readonly IShapeBuilderController _shapeBuilder; private readonly IShapeBuilderController _shapeBuilder;
private readonly IColoringController _coloring; private readonly IColoringController _coloring;
private readonly ISceneService _scenes; private readonly ISceneService _scenes;
private readonly ICaptureFeature _capture;
private readonly ILoadingScreen _loadingScreen;
private readonly IEventBus _bus; private readonly IEventBus _bus;
private IDrawingTemplate _template; private IDrawingTemplate _template;
@@ -50,8 +45,6 @@ namespace Darkmatter.Features.GameplayFlow.Systems
IShapeBuilderController shapeBuilder, IShapeBuilderController shapeBuilder,
IColoringController coloring, IColoringController coloring,
ISceneService scenes, ISceneService scenes,
ICaptureFeature capture,
ILoadingScreen loadingScreen,
IEventBus bus) IEventBus bus)
{ {
_progression = progression; _progression = progression;
@@ -59,8 +52,6 @@ namespace Darkmatter.Features.GameplayFlow.Systems
_shapeBuilder = shapeBuilder; _shapeBuilder = shapeBuilder;
_coloring = coloring; _coloring = coloring;
_scenes = scenes; _scenes = scenes;
_capture = capture;
_loadingScreen = loadingScreen;
_bus = bus; _bus = bus;
} }
@@ -71,8 +62,7 @@ namespace Darkmatter.Features.GameplayFlow.Systems
_templateId = _progression.LastOpenedTemplateId; _templateId = _progression.LastOpenedTemplateId;
if (string.IsNullOrEmpty(_templateId)) if (string.IsNullOrEmpty(_templateId))
throw new Exception( throw new Exception("[GameplayFlow] No LastOpenedTemplateId set. ColorbookFlow must call _progression.SetLastOpenedAsync(id) before loading Gameplay.");
"[GameplayFlow] No LastOpenedTemplateId set. ColorbookFlow must call _progression.SetLastOpenedAsync(id) before loading Gameplay.");
_template = await _catalog.LoadAsync(_templateId); _template = await _catalog.LoadAsync(_templateId);
ct.ThrowIfCancellationRequested(); ct.ThrowIfCancellationRequested();
@@ -86,40 +76,38 @@ namespace Darkmatter.Features.GameplayFlow.Systems
_assembledSub = _bus.Subscribe<ShapeAssembledSignal>(OnShapeAssembled); _assembledSub = _bus.Subscribe<ShapeAssembledSignal>(OnShapeAssembled);
_colorAppliedSub = _bus.Subscribe<ColorAppliedSignal>(OnColorApplied); _colorAppliedSub = _bus.Subscribe<ColorAppliedSignal>(OnColorApplied);
Application.quitting += OnAppQuitting;
Application.focusChanged += OnAppFocusChanged;
_loadingScreen.SetProgress(1f);
if (_phase == DrawingPhase.Coloring) if (_phase == DrawingPhase.Coloring)
{ {
var savedColors = ToColorDict(progress?.regionColors); // Resume direct into coloring: pre-snap every piece. ShapeBuilder
await _coloring.InitializeRegionsAsync(_template, savedColors, ct); // emits ShapeAssembledSignal once counter hits expected; that path
// also triggers InitializeColoring with savedColors.
var allIds = CollectAllPieceIds(_template);
await _shapeBuilder.BuildAsync(_template, allIds, ct);
} }
else else
{ {
await _shapeBuilder.BuildAsync(_template, progress?.snappedPieces, ct); await _shapeBuilder.BuildAsync(_template, progress?.snappedPieces, ct);
} }
_loadingScreen.Hide();
} }
public async UniTask BackAsync(CancellationToken ct) public async UniTask BackAsync()
{ {
await SaveCurrentAsync(CancellationToken.None); await SaveCurrentAsync(captureThumbnail: _phase == DrawingPhase.Coloring);
_shapeBuilder.Clear(); _shapeBuilder.Clear();
_coloring.Clear(); _coloring.Clear();
await _scenes.LoadSceneAsync(GameScene.Colorbook, progress: null, cancellationToken: ct); await _scenes.LoadSceneAsync(GameScene.Colorbook, progress: null, cancellationToken: default);
} }
public async UniTask SaveAsync(CancellationToken ct) public async UniTask SaveAsync()
{ {
await SaveCurrentAsync(ct); // Explicit user-pressed save — capture thumbnail + (planned) native gallery export.
await _capture.CapturePngAsync(saveToGallery: true, ct); await SaveCurrentAsync(captureThumbnail: true);
// TODO: route through ICaptureService + IGalleryService once those exist.
} }
public async UniTask NextAsync(CancellationToken ct) public async UniTask NextAsync()
{ {
await SaveCurrentAsync(ct); await SaveCurrentAsync(captureThumbnail: true);
_progression.MarkCompleted(_templateId); _progression.MarkCompleted(_templateId);
var nextId = _catalog.GetNextTemplate(_templateId); var nextId = _catalog.GetNextTemplate(_templateId);
@@ -138,32 +126,26 @@ namespace Darkmatter.Features.GameplayFlow.Systems
public void OnApplicationPaused() public void OnApplicationPaused()
{ {
// Fire-and-forget — pause window is small; PlayerPrefs write is sync under the hood. // Fire-and-forget — pause window is small; PlayerPrefs write is sync under the hood.
SaveCurrentAsync(CancellationToken.None).Forget(); SaveCurrentAsync(captureThumbnail: false).Forget();
}
private void OnAppQuitting() => OnApplicationPaused();
private void OnAppFocusChanged(bool focused)
{
if (!focused) OnApplicationPaused();
} }
private void OnShapeAssembled(ShapeAssembledSignal signal) private void OnShapeAssembled(ShapeAssembledSignal signal)
{ {
if (signal.TemplateId != _templateId) return; if (signal.TemplateId != _templateId) return;
EnterColoringAsync(CancellationToken.None).Forget(); EnterColoringAsync().Forget();
} }
private async UniTask EnterColoringAsync(CancellationToken ct) private async UniTask EnterColoringAsync()
{ {
_phase = DrawingPhase.Coloring; _phase = DrawingPhase.Coloring;
var progress = _progression.GetProgress(_templateId); var progress = _progression.GetProgress(_templateId);
var savedColors = ToColorDict(progress?.regionColors); var savedColors = ToColorDict(progress?.regionColors);
await _coloring.InitializeRegionsAsync(_template, savedColors, _scopeCts.Token); await _coloring.InitializeRegionsAsync(_template, savedColors, _scopeCts.Token);
_shapeBuilder.DespawnDrawing();
await SaveCurrentAsync(ct); // Bare-assembled snapshot — catalog should show the puzzle outline even if
// the child never paints (per readme §12b save matrix).
await SaveCurrentAsync(captureThumbnail: true);
} }
private void OnColorApplied(ColorAppliedSignal _) private void OnColorApplied(ColorAppliedSignal _)
@@ -180,15 +162,12 @@ namespace Darkmatter.Features.GameplayFlow.Systems
try try
{ {
await UniTask.Delay(AutosaveDebounceMs, cancellationToken: ct); await UniTask.Delay(AutosaveDebounceMs, cancellationToken: ct);
await SaveCurrentAsync(ct); await SaveCurrentAsync(captureThumbnail: false);
}
catch (OperationCanceledException)
{
/* superseded by next paint or scope end */
} }
catch (OperationCanceledException) { /* superseded by next paint or scope end */ }
} }
private async UniTask SaveCurrentAsync(CancellationToken ct) private async UniTask SaveCurrentAsync(bool captureThumbnail)
{ {
if (string.IsNullOrEmpty(_templateId)) return; if (string.IsNullOrEmpty(_templateId)) return;
@@ -204,18 +183,30 @@ namespace Darkmatter.Features.GameplayFlow.Systems
phase = _phase, phase = _phase,
snappedPieces = snappedIds, snappedPieces = snappedIds,
regionColors = regionEntries, regionColors = regionEntries,
hasThumbnail = true, hasThumbnail = captureThumbnail || (existing?.hasThumbnail ?? false),
hasBeenCompleted = existing?.hasBeenCompleted ?? false, hasBeenCompleted = existing?.hasBeenCompleted ?? false,
completionCount = existing?.completionCount ?? 0, completionCount = existing?.completionCount ?? 0,
UpdatedUtc = DateTime.UtcNow, UpdatedUtc = DateTime.UtcNow,
FirstCompletedUtc = existing?.FirstCompletedUtc, FirstCompletedUtc = existing?.FirstCompletedUtc,
}; };
var thumbnailPng = await _capture.CapturePngAsync(saveToGallery: false, ct); byte[] thumbnailPng = null;
if (captureThumbnail)
{
// TODO: replace with ICaptureService.CaptureAsync() once available.
// For now we record hasThumbnail=true but write no PNG.
}
await _progression.SaveProgressAsync(progress, thumbnailPng); await _progression.SaveProgressAsync(progress, thumbnailPng);
} }
private static IReadOnlyCollection<string> CollectAllPieceIds(IDrawingTemplate template)
{
var ids = new List<string>(template.Pieces.Count);
foreach (var p in template.Pieces) ids.Add(p.Id);
return ids;
}
private static IReadOnlyDictionary<string, Color> ToColorDict(List<RegionColorEntry> entries) private static IReadOnlyDictionary<string, Color> ToColorDict(List<RegionColorEntry> entries)
{ {
var dict = new Dictionary<string, Color>(); var dict = new Dictionary<string, Color>();
@@ -228,9 +219,6 @@ namespace Darkmatter.Features.GameplayFlow.Systems
public void Dispose() public void Dispose()
{ {
Application.quitting -= OnAppQuitting;
Application.focusChanged -= OnAppFocusChanged;
_assembledSub?.Dispose(); _assembledSub?.Dispose();
_colorAppliedSub?.Dispose(); _colorAppliedSub?.Dispose();
_autosaveCts?.Cancel(); _autosaveCts?.Cancel();

View File

@@ -43,7 +43,7 @@ namespace Darkmatter.Features.History
{ {
_view.SetUndoInteractable(_undoStack.CanUndo); _view.SetUndoInteractable(_undoStack.CanUndo);
_view.SetRedoInteractable(_undoStack.CanRedo); _view.SetRedoInteractable(_undoStack.CanRedo);
_view.SetClearInteractable(_undoStack.CanUndo); _view.SetClearInteractable(_undoStack.CanUndo || _undoStack.CanRedo);
} }
public void Dispose() public void Dispose()

View File

@@ -1,3 +1,4 @@
using System;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
@@ -15,31 +16,20 @@ namespace Darkmatter.Features.History
void Start() void Start()
{ {
if (undoButton != null) undoButton.onClick.AddListener(() => OnUndoClicked?.Invoke()); undoButton.onClick.AddListener(() => OnUndoClicked?.Invoke());
if (redoButton != null) redoButton.onClick.AddListener(() => OnRedoClicked?.Invoke()); redoButton.onClick.AddListener(() => OnRedoClicked?.Invoke());
if (clearButton != null) clearButton.onClick.AddListener(() => OnClearClicked?.Invoke()); clearButton.onClick.AddListener(() => OnClearClicked?.Invoke());
} }
public void SetUndoInteractable(bool value) public void SetUndoInteractable(bool value) => undoButton.interactable = value;
{ public void SetRedoInteractable(bool value) => redoButton.interactable = value;
if (undoButton != null) undoButton.interactable = value; public void SetClearInteractable(bool value) => clearButton.interactable = value;
}
public void SetRedoInteractable(bool value)
{
if (redoButton != null) redoButton.interactable = value;
}
public void SetClearInteractable(bool value)
{
if (clearButton != null) clearButton.interactable = value;
}
private void OnDestroy() private void OnDestroy()
{ {
if (undoButton != null) undoButton.onClick.RemoveAllListeners(); undoButton.onClick.RemoveListener(() => OnUndoClicked?.Invoke());
if (redoButton != null) redoButton.onClick.RemoveAllListeners(); redoButton.onClick.RemoveListener(() => OnRedoClicked?.Invoke());
if (clearButton != null) clearButton.onClick.RemoveAllListeners(); clearButton.onClick.RemoveListener(() => OnClearClicked?.Invoke());
} }
} }
} }

View File

@@ -11,20 +11,20 @@ namespace Darkmatter.Features.ShapeBuilder.Commands
private readonly Vector2 _prevSize; private readonly Vector2 _prevSize;
private readonly Quaternion _prevRot; private readonly Quaternion _prevRot;
private readonly Transform _prevParent; private readonly Transform _prevParent;
private readonly int _prevSiblingIndex;
public SnapPieceCommand(ShapePiece piece) public SnapPieceCommand(ShapePiece piece)
{ {
_piece = piece; _piece = piece;
_prevParent = piece.HomeParent;
_prevSiblingIndex = piece.HomeSiblingIndex; var rt = piece.RectTransform;
_prevPos = piece.TrayPosition; _prevPos = rt.anchoredPosition;
_prevSize = piece.TraySize; _prevSize = rt.sizeDelta;
_prevRot = Quaternion.identity; _prevRot = rt.localRotation;
_prevParent = rt.parent;
} }
public void Execute() => _piece.SnapInternal(); public void Execute() => _piece.SnapInternal();
public void Undo() => _piece.UnsnapInternal(_prevParent, _prevSiblingIndex, _prevPos, _prevSize, _prevRot); public void Undo() => _piece.UnsnapInternal(_prevParent, _prevPos, _prevSize, _prevRot);
} }
} }

View File

@@ -20,7 +20,7 @@ namespace Darkmatter.Features.ShapeBuilder.Systems
{ {
public class ShapeBuilderController : IShapeBuilderController, IDisposable public class ShapeBuilderController : IShapeBuilderController, IDisposable
{ {
private const string PiecePrefabKey = "ShapePiece"; private const string PiecePrefabKey = "ShapeBuilder/Piece";
private string _currentTemplateId; private string _currentTemplateId;
private int _expected; private int _expected;
@@ -173,16 +173,6 @@ namespace Darkmatter.Features.ShapeBuilder.Systems
return _snappedPieceIds; return _snappedPieceIds;
} }
public void DespawnDrawing()
{
foreach (var piece in _pieces)
if (piece != null) Object.Destroy(piece.gameObject);
_pieces.Clear();
if (_drawingInstance != null) Object.Destroy(_drawingInstance);
_drawingInstance = null;
}
public void Clear() public void Clear()
{ {
_undo.Drop(); _undo.Drop();

View File

@@ -1,4 +1,3 @@
using Darkmatter.Core.Contracts.Features.GameplayFlow;
using Darkmatter.Core.Contracts.Features.History; using Darkmatter.Core.Contracts.Features.History;
using Darkmatter.Core.Contracts.Services.Audio; using Darkmatter.Core.Contracts.Services.Audio;
using Darkmatter.Core.Data.Static.Features.ShapeBuilder; using Darkmatter.Core.Data.Static.Features.ShapeBuilder;
@@ -15,22 +14,19 @@ namespace Darkmatter.Features.ShapeBuilder.Systems
private readonly ISfxPlayer _sfx; private readonly ISfxPlayer _sfx;
private readonly IEventBus _bus; private readonly IEventBus _bus;
private readonly IUndoStack _undo; private readonly IUndoStack _undo;
private readonly IGameplaySceneRefs _refs;
public ShapePieceFactory( public ShapePieceFactory(
ShapeHolderView holder, ShapeHolderView holder,
ShapeBuilderConfig cfg, ShapeBuilderConfig cfg,
ISfxPlayer sfx, ISfxPlayer sfx,
IEventBus bus, IEventBus bus,
IUndoStack undo, IUndoStack undo)
IGameplaySceneRefs refs)
{ {
_holder = holder; _holder = holder;
_cfg = cfg; _cfg = cfg;
_sfx = sfx; _sfx = sfx;
_bus = bus; _bus = bus;
_undo = undo; _undo = undo;
_refs = refs;
} }
public ShapePiece Create(GameObject prefab, ShapeSO shape, SlotMarker slot, Vector2 trayPos) public ShapePiece Create(GameObject prefab, ShapeSO shape, SlotMarker slot, Vector2 trayPos)
@@ -39,7 +35,7 @@ namespace Darkmatter.Features.ShapeBuilder.Systems
go.name = $"Piece_{shape.Id}"; go.name = $"Piece_{shape.Id}";
var piece = go.GetComponent<ShapePiece>(); var piece = go.GetComponent<ShapePiece>();
piece.Setup(shape, slot, _cfg, _sfx, _bus, _undo, trayPos, _refs.PaperRoot); piece.Setup(shape, slot, _cfg, _sfx, _bus, _undo, trayPos);
return piece; return piece;
} }
} }

View File

@@ -27,19 +27,12 @@ namespace Darkmatter.Features.ShapeBuilder.UI
private IUndoStack _undo; private IUndoStack _undo;
private Vector2 _trayPos; private Vector2 _trayPos;
private Vector2 _traySize; private Vector2 _traySize;
private RectTransform _dragRoot;
private Transform _homeParent;
private int _homeSiblingIndex;
// Per-drag state // Per-drag state
private RectTransform _rt; private RectTransform _rt;
private RectTransform _parentRect; private RectTransform _parentRect;
private Camera _eventCam; private Camera _eventCam;
private Vector2 _grabOffset; private Vector2 _grabOffset;
private Vector2 _trayPosInDragRoot;
private Vector2 _dragSizeDelta;
private Vector3 _dragLocalScale;
private Sequence _previewSeq;
private bool _locked; private bool _locked;
private bool _inPreview; private bool _inPreview;
@@ -47,10 +40,6 @@ namespace Darkmatter.Features.ShapeBuilder.UI
public string PieceId => _shape != null ? _shape.Id : null; public string PieceId => _shape != null ? _shape.Id : null;
public bool IsLocked => _locked; public bool IsLocked => _locked;
public RectTransform RectTransform => _rt != null ? _rt : (_rt = (RectTransform)transform); public RectTransform RectTransform => _rt != null ? _rt : (_rt = (RectTransform)transform);
public Transform HomeParent => _homeParent;
public int HomeSiblingIndex => _homeSiblingIndex;
public Vector2 TrayPosition => _trayPos;
public Vector2 TraySize => _traySize;
public void Setup( public void Setup(
ShapeSO shape, ShapeSO shape,
@@ -59,8 +48,7 @@ namespace Darkmatter.Features.ShapeBuilder.UI
ISfxPlayer sfx, ISfxPlayer sfx,
IEventBus bus, IEventBus bus,
IUndoStack undo, IUndoStack undo,
Vector2 trayPos, Vector2 trayPos)
RectTransform dragRoot)
{ {
_shape = shape; _shape = shape;
_slot = slot; _slot = slot;
@@ -70,10 +58,6 @@ namespace Darkmatter.Features.ShapeBuilder.UI
_undo = undo; _undo = undo;
_trayPos = trayPos; _trayPos = trayPos;
_traySize = shape.DefaultSizeDelta; _traySize = shape.DefaultSizeDelta;
_dragRoot = dragRoot;
_homeParent = RectTransform.parent;
_homeSiblingIndex = RectTransform.GetSiblingIndex();
image.sprite = shape.Sprite; image.sprite = shape.Sprite;
ApplyTrayPose(); ApplyTrayPose();
@@ -82,18 +66,8 @@ namespace Darkmatter.Features.ShapeBuilder.UI
public void OnBeginDrag(PointerEventData e) public void OnBeginDrag(PointerEventData e)
{ {
if (_locked) return; if (_locked) return;
if (_dragRoot != null && RectTransform.parent != _dragRoot)
{
RectTransform.SetParent(_dragRoot, worldPositionStays: true);
RectTransform.SetAsLastSibling();
}
_parentRect = (RectTransform)RectTransform.parent; _parentRect = (RectTransform)RectTransform.parent;
_eventCam = e.pressEventCamera; _eventCam = e.pressEventCamera;
_trayPosInDragRoot = RectTransform.anchoredPosition;
_dragSizeDelta = RectTransform.sizeDelta;
_dragLocalScale = RectTransform.localScale;
_grabOffset = RectTransform.anchoredPosition - ScreenToLocal(e.position); _grabOffset = RectTransform.anchoredPosition - ScreenToLocal(e.position);
_inPreview = false; _inPreview = false;
} }
@@ -103,122 +77,75 @@ namespace Darkmatter.Features.ShapeBuilder.UI
if (_locked) return; if (_locked) return;
var pointerLocal = ScreenToLocal(e.position) + _grabOffset; var pointerLocal = ScreenToLocal(e.position) + _grabOffset;
bool insidePreview = IsOverSlot(e.position); var slotPos = _slot.RectTransform.anchoredPosition;
float dist = Vector2.Distance(pointerLocal, slotPos);
if (insidePreview && !_inPreview) if (dist <= _cfg.PreviewRadius)
{
if (!_inPreview)
{ {
_inPreview = true; _inPreview = true;
_sfx.Play(SfxId.ShapeHover); _sfx.Play(SfxId.ShapeHover);
AnimatePreviewPose(toSlot: true);
} }
else if (!insidePreview && _inPreview) ApplyPreviewLerp(pointerLocal, dist);
}
else
{ {
_inPreview = false; _inPreview = false;
AnimatePreviewPose(toSlot: false);
}
if (!_inPreview)
RectTransform.anchoredPosition = pointerLocal; RectTransform.anchoredPosition = pointerLocal;
RectTransform.sizeDelta = _traySize;
RectTransform.localRotation = Quaternion.identity;
}
} }
public void OnEndDrag(PointerEventData e) public void OnEndDrag(PointerEventData e)
{ {
if (_locked) return; if (_locked) return;
if (IsOverSlot(e.position)) float dist = Vector2.Distance(
RectTransform.anchoredPosition,
_slot.RectTransform.anchoredPosition);
if (dist <= _cfg.SnapRadius)
_undo.Push(new SnapPieceCommand(this)); _undo.Push(new SnapPieceCommand(this));
else else
ReturnToTray(); ReturnToTray();
} }
private bool IsOverSlot(Vector2 screenPos) private void ApplyPreviewLerp(Vector2 pointerLocal, float dist)
{ {
return RectTransformUtility.RectangleContainsScreenPoint( float t = Mathf.Clamp01(1f - dist / _cfg.PreviewRadius);
_slot.RectTransform, screenPos, _eventCam); if (_cfg.PreviewCurve != null) t = _cfg.PreviewCurve.Evaluate(t);
}
private void AnimatePreviewPose(bool toSlot)
{
if (_previewSeq.isAlive) _previewSeq.Stop();
if (toSlot)
{
var slot = _slot.RectTransform; var slot = _slot.RectTransform;
_previewSeq = Sequence.Create() RectTransform.anchoredPosition = Vector2.Lerp(pointerLocal, slot.anchoredPosition, t);
.Group(Tween.UIAnchoredPosition(RectTransform, SlotPosInDragSpace(), _cfg.SnapDuration, Ease.OutQuad)) RectTransform.sizeDelta = Vector2.Lerp(_traySize, slot.sizeDelta, t);
.Group(Tween.LocalScale(RectTransform, SlotScaleInDragSpace(), _cfg.SnapDuration, Ease.OutQuad)) RectTransform.localRotation = Quaternion.Slerp(Quaternion.identity, slot.localRotation, t);
.Group(Tween.LocalRotation(RectTransform, SlotRotInDragSpace(), _cfg.SnapDuration, Ease.OutQuad))
.Group(Tween.UISizeDelta(RectTransform, slot.sizeDelta, _cfg.SnapDuration, Ease.OutQuad));
}
else
{
_previewSeq = Sequence.Create()
.Group(Tween.LocalScale(RectTransform, _dragLocalScale, _cfg.SnapDuration, Ease.OutQuad))
.Group(Tween.LocalRotation(RectTransform, Quaternion.identity, _cfg.SnapDuration, Ease.OutQuad))
.Group(Tween.UISizeDelta(RectTransform, _dragSizeDelta, _cfg.SnapDuration, Ease.OutQuad));
}
}
private Vector2 SlotPosInDragSpace()
{
Vector3 worldPos = _slot.RectTransform.position;
Vector3 local = _parentRect.InverseTransformPoint(worldPos);
Vector2 parentSize = _parentRect.rect.size;
Vector2 anchorRef = (RectTransform.anchorMin - _parentRect.pivot) * parentSize;
return new Vector2(local.x - anchorRef.x, local.y - anchorRef.y);
}
private void StopPreviewTweens()
{
if (_previewSeq.isAlive) _previewSeq.Stop();
_previewSeq = default;
_inPreview = false;
}
private Quaternion SlotRotInDragSpace()
{
return Quaternion.Inverse(_parentRect.rotation) * _slot.RectTransform.rotation;
}
private Vector3 SlotScaleInDragSpace()
{
Vector3 parentLossy = _parentRect.lossyScale;
Vector3 slotLossy = _slot.RectTransform.lossyScale;
return new Vector3(
slotLossy.x / Mathf.Max(0.0001f, parentLossy.x),
slotLossy.y / Mathf.Max(0.0001f, parentLossy.y),
slotLossy.z / Mathf.Max(0.0001f, parentLossy.z));
} }
internal void SnapInternal() internal void SnapInternal()
{ {
StopPreviewTweens();
Lock(); Lock();
var slot = _slot.RectTransform; var slot = _slot.RectTransform;
Tween.Position(RectTransform, slot.position, _cfg.SnapDuration, Ease.OutBack); Tween.UIAnchoredPosition(RectTransform, slot.anchoredPosition, _cfg.SnapDuration, Ease.OutBack);
Tween.Rotation(RectTransform, slot.rotation, _cfg.SnapDuration, Ease.OutBack); Tween.UISizeDelta (RectTransform, slot.sizeDelta, _cfg.SnapDuration, Ease.OutBack);
Tween.LocalScale(RectTransform, slot.localScale, _cfg.SnapDuration, Ease.OutBack); Tween.LocalRotation (RectTransform, slot.localRotation, _cfg.SnapDuration, Ease.OutBack);
Tween.UISizeDelta(RectTransform, slot.sizeDelta, _cfg.SnapDuration, Ease.OutBack);
_sfx.Play(SfxId.ShapeSnap); _sfx.Play(SfxId.ShapeSnap);
_bus.Publish(new PieceSnappedSignal(_shape.Id)); _bus.Publish(new PieceSnappedSignal(_shape.Id));
} }
internal void UnsnapInternal(Transform parent, int siblingIndex, Vector2 pos, Vector2 size, Quaternion rot) internal void UnsnapInternal(Transform parent, Vector2 pos, Vector2 size, Quaternion rot)
{ {
_locked = false; _locked = false;
image.raycastTarget = true; image.raycastTarget = true;
Tween.StopAll(onTarget: RectTransform);
RectTransform.SetParent(parent, worldPositionStays: false); RectTransform.SetParent(parent, worldPositionStays: false);
if (siblingIndex >= 0) RectTransform.SetSiblingIndex(siblingIndex);
RectTransform.anchoredPosition = pos; Tween.UIAnchoredPosition(RectTransform, pos, _cfg.ReturnDuration, Ease.OutQuad);
RectTransform.sizeDelta = size; Tween.UISizeDelta (RectTransform, size, _cfg.ReturnDuration, Ease.OutQuad);
RectTransform.localRotation = rot; Tween.LocalRotation (RectTransform, rot, _cfg.ReturnDuration, Ease.OutQuad);
RectTransform.localScale = Vector3.one;
_sfx.Play(SfxId.ShapeReturn); _sfx.Play(SfxId.ShapeReturn);
_bus.Publish(new PieceUnsnappedSignal(_shape.Id)); _bus.Publish(new PieceUnsnappedSignal(_shape.Id));
@@ -228,37 +155,25 @@ namespace Darkmatter.Features.ShapeBuilder.UI
{ {
Lock(); Lock();
var slot = _slot.RectTransform; var slot = _slot.RectTransform;
RectTransform.position = slot.position; RectTransform.anchoredPosition = slot.anchoredPosition;
RectTransform.rotation = slot.rotation;
RectTransform.localScale = slot.localScale;
RectTransform.sizeDelta = slot.sizeDelta; RectTransform.sizeDelta = slot.sizeDelta;
RectTransform.localRotation = slot.localRotation;
} }
private void ReturnToTray() private void ReturnToTray()
{ {
StopPreviewTweens();
_sfx.Play(SfxId.ShapeReturn); _sfx.Play(SfxId.ShapeReturn);
Sequence.Create() Sequence.Create()
.Group(Tween.UIAnchoredPosition(RectTransform, _trayPosInDragRoot, _cfg.ReturnDuration, Ease.OutQuad)) .Group(Tween.UIAnchoredPosition(RectTransform, _trayPos, _cfg.ReturnDuration, Ease.OutQuad))
.Group(Tween.LocalScale(RectTransform, _dragLocalScale, _cfg.ReturnDuration, Ease.OutQuad)) .Group(Tween.UISizeDelta (RectTransform, _traySize, _cfg.ReturnDuration, Ease.OutQuad))
.Group(Tween.LocalRotation(RectTransform, Quaternion.identity, _cfg.ReturnDuration, Ease.OutQuad)) .Group(Tween.LocalRotation (RectTransform, Quaternion.identity, _cfg.ReturnDuration, Ease.OutQuad));
.Group(Tween.UISizeDelta(RectTransform, _dragSizeDelta, _cfg.ReturnDuration, Ease.OutQuad))
.ChainCallback(RestoreToHomeParent);
}
private void RestoreToHomeParent()
{
if (this == null || RectTransform == null || _homeParent == null) return;
RectTransform.SetParent(_homeParent, worldPositionStays: false);
RectTransform.SetSiblingIndex(_homeSiblingIndex);
ApplyTrayPose();
} }
private void Lock() private void Lock()
{ {
_locked = true; _locked = true;
image.raycastTarget = false; image.raycastTarget = false;
RectTransform.SetParent(_slot.RectTransform.parent, worldPositionStays: true); RectTransform.SetParent(_slot.RectTransform.parent, worldPositionStays: false);
} }
private void ApplyTrayPose() private void ApplyTrayPose()

View File

@@ -1,88 +1,52 @@
using System.Threading; using System.Threading;
using Cysharp.Threading.Tasks; using Cysharp.Threading.Tasks;
using Darkmatter.Core.Contracts.Services.Camera;
using Darkmatter.Core.Contracts.Services.Capture; using Darkmatter.Core.Contracts.Services.Capture;
using UnityEngine; using UnityEngine;
using CameraType = Darkmatter.Core.Enums.Services.Camera.CameraType;
namespace Darkmatter.Services.Capture namespace Darkmatter.Services.Capture
{ {
public class CaptureService : ICaptureService public class CaptureService : ICaptureService
{ {
public async UniTask<byte[]> CapturePngAsync(GameObject captureObject, float scale, private readonly ICameraService _cameraService;
public CaptureService(ICameraService cameraService)
{
_cameraService = cameraService;
}
public async UniTask<Sprite> CapturePngAsync(GameObject captureObject, float captureSize,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
await UniTask.WaitForEndOfFrame(cancellationToken); var captureCamera = _cameraService.GetCamera(CameraType.CaptureCamera);
var fullScreen = ScreenCapture.CaptureScreenshotAsTexture(); await UniTask.Yield(PlayerLoopTiming.Update, cancellationToken);
try
{
Rect crop = ComputeCropRect(captureObject, fullScreen.width, fullScreen.height);
int cropW = Mathf.Max(1, (int)crop.width);
int cropH = Mathf.Max(1, (int)crop.height);
var cropped = new Texture2D(cropW, cropH, TextureFormat.RGBA32, mipChain: false); int size = Mathf.RoundToInt(captureSize);
try var renderTexture = RenderTexture.GetTemporary(size, size, 24);
{ var previousTarget = captureCamera.targetTexture;
cropped.SetPixels(fullScreen.GetPixels((int)crop.x, (int)crop.y, cropW, cropH)); var previousActive = RenderTexture.active;
cropped.Apply();
int targetW = Mathf.Max(1, Mathf.RoundToInt(cropW * scale));
int targetH = Mathf.Max(1, Mathf.RoundToInt(cropH * scale));
Texture2D output = cropped;
if (output.width != targetW || output.height != targetH)
output = Resize(cropped, targetW, targetH);
try try
{ {
return output.EncodeToPNG(); captureCamera.targetTexture = renderTexture;
}
finally
{
if (output != cropped) Object.Destroy(output);
}
}
finally
{
Object.Destroy(cropped);
}
}
finally
{
Object.Destroy(fullScreen);
}
}
private static Rect ComputeCropRect(GameObject target, int screenW, int screenH) captureCamera.Render();
{
if (target == null || target.transform is not RectTransform rt)
return new Rect(0, 0, screenW, screenH);
var corners = new Vector3[4]; RenderTexture.active = renderTexture;
rt.GetWorldCorners(corners);
// ScreenSpaceOverlay canvas: world corners are already in screen pixels.
float minX = Mathf.Clamp(corners[0].x, 0, screenW);
float minY = Mathf.Clamp(corners[0].y, 0, screenH);
float maxX = Mathf.Clamp(corners[2].x, 0, screenW);
float maxY = Mathf.Clamp(corners[2].y, 0, screenH);
return Rect.MinMaxRect(minX, minY, maxX, maxY);
}
private static Texture2D Resize(Texture2D src, int width, int height) var texture = new Texture2D(size, size, TextureFormat.RGBA32, false);
{ texture.ReadPixels(new Rect(0, 0, size, size), 0, 0);
var rt = RenderTexture.GetTemporary(width, height); texture.Apply();
var prev = RenderTexture.active;
try return Sprite.Create(texture, new Rect(0, 0, size, size), new Vector2(0.5f, 0.5f));
{
Graphics.Blit(src, rt);
RenderTexture.active = rt;
var dst = new Texture2D(width, height, TextureFormat.RGBA32, mipChain: false);
dst.ReadPixels(new Rect(0, 0, width, height), 0, 0);
dst.Apply();
return dst;
} }
finally finally
{ {
RenderTexture.active = prev; captureCamera.targetTexture = previousTarget;
RenderTexture.ReleaseTemporary(rt); RenderTexture.active = previousActive;
RenderTexture.ReleaseTemporary(renderTexture);
} }
} }
} }

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: eeefc3c8ab31d4ac983deab507c76b1f guid: d54fa8b2c22014496a84c508d897dcdd
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 88715eafa42924498a994a891b15c9dc guid: 88abeaac3da9d499288f8b5a1830cebc
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}

View File

@@ -1,11 +1,11 @@
{ {
"name": "Features.Capture", "name": "Services.Inputs",
"rootNamespace": "Darkmatter.Features.Capture", "rootNamespace": "Darkmatter.Services.Inputs",
"references": [ "references": [
"GUID:6a0a834eb41764f12ba55c3fb04a40cb", "GUID:6a0a834eb41764f12ba55c3fb04a40cb",
"GUID:c1c03c0e5b2f4412b9f2be1c20d6a9b1", "GUID:c1c03c0e5b2f4412b9f2be1c20d6a9b1",
"GUID:b0214a6008ed146ff8f122a6a9c2f6cc", "GUID:75469ad4d38634e559750d17036d5f7c",
"GUID:f51ebe6a0ceec4240a699833d6309b23" "GUID:b0214a6008ed146ff8f122a6a9c2f6cc"
], ],
"includePlatforms": [], "includePlatforms": [],
"excludePlatforms": [], "excludePlatforms": [],

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 32c91add8e49f4e1fb2121cac770862f guid: 68042734671ce4660bff89e042777454
AssemblyDefinitionImporter: AssemblyDefinitionImporter:
externalObjects: {} externalObjects: {}
userData: userData:

View File

@@ -119,19 +119,6 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: iOS
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet: spriteSheet:
serializedVersion: 2 serializedVersion: 2
sprites: [] sprites: []

View File

@@ -109,32 +109,6 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: iOS
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet: spriteSheet:
serializedVersion: 2 serializedVersion: 2
sprites: sprites:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

View File

@@ -1,182 +0,0 @@
fileFormatVersion: 2
guid: b67ad040e6b7d4ed4ad289d72b2206cf
TextureImporter:
internalIDToNameTable:
- first:
213: -2204038546871774018
second: colorbookref_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: iOS
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: colorbookref_0
rect:
serializedVersion: 2
x: 0
y: 0
width: 710
height: 399
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: eb4907e7e9ea961e0800000000000000
internalID: -2204038546871774018
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
colorbookref_0: -2204038546871774018
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: ed3abc5b1c6bc43938850705ab3e4d4b guid: 2215b6bec6046724ca51bf715c8bdbc1
PrefabImporter: PrefabImporter:
externalObjects: {} externalObjects: {}
userData: userData:

View File

@@ -7,7 +7,7 @@ TextureImporter:
mipmaps: mipmaps:
mipMapMode: 0 mipMapMode: 0
enableMipMap: 0 enableMipMap: 0
sRGBTexture: 0 sRGBTexture: 1
linearTexture: 0 linearTexture: 0
fadeOut: 0 fadeOut: 0
borderMipMap: 0 borderMipMap: 0
@@ -134,51 +134,7 @@ TextureImporter:
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet: spriteSheet:
serializedVersion: 2 serializedVersion: 2
sprites: sprites: []
- serializedVersion: 2
name: Car1_Reference(1)_0
rect:
serializedVersion: 2
x: 226
y: 329
width: 218
height: 213
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 2f976fcdaa1f340788955aad311c79d6
internalID: -1669840421
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: Car1_Reference(1)_1
rect:
serializedVersion: 2
x: 432
y: 79
width: 457
height: 463
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: bc3bcf0c16643491da2d92cfdffedc9c
internalID: -702197950
vertices: []
indices:
edges: []
weights: []
outline: [] outline: []
customData: customData:
physicsShape: [] physicsShape: []
@@ -192,9 +148,7 @@ TextureImporter:
secondaryTextures: [] secondaryTextures: []
spriteCustomMetadata: spriteCustomMetadata:
entries: [] entries: []
nameFileIdTable: nameFileIdTable: {}
Car1_Reference(1)_0: -1669840421
Car1_Reference(1)_1: -702197950
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: d420e869f19724dd5a7a58607a919b89
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: f32457d10363c40149cafb1b6e405b27
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 9ca1a5e6848984d8c89cac90663c09ad
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,395 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &50587740288594971
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 140255021915712345}
- component: {fileID: 1883818561078558899}
- component: {fileID: 704928915224039838}
- component: {fileID: 3501346190407548150}
m_Layer: 5
m_Name: Stem
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &140255021915712345
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 50587740288594971}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 3.5, y: 3.5, z: 3.5}
m_ConstrainProportionsScale: 1
m_Children: []
m_Father: {fileID: 6464301421508797729}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: 54, y: -326}
m_SizeDelta: {x: 31, y: 69}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1883818561078558899
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 50587740288594971}
m_CullTransparentMesh: 1
--- !u!114 &704928915224039838
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 50587740288594971}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: e5caa2ff8c16b5c44bc9f06ffd2e830b, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &3501346190407548150
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 50587740288594971}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7667901d8aea645d28b5125a2ed546ce, type: 3}
m_Name:
m_EditorClassIdentifier: Features.Coloring::Darkmatter.Features.Coloring.UI.ColorRegionView
<RegionId>k__BackingField: Stem
alphaHitThreshold: 0.5
--- !u!1 &1735931098048087757
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6464301421508797729}
- component: {fileID: 2018123450027732598}
m_Layer: 5
m_Name: AppleColoringPrefab
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6464301421508797729
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1735931098048087757}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2435532055949234065}
- {fileID: 140255021915712345}
- {fileID: 4751863057281583490}
- {fileID: 3538580236428514699}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2018123450027732598
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1735931098048087757}
m_CullTransparentMesh: 1
--- !u!1 &2374753269266990102
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2435532055949234065}
- component: {fileID: 4544345163211921881}
- component: {fileID: 1366380858875779886}
- component: {fileID: 6919807059513103890}
m_Layer: 5
m_Name: Body
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2435532055949234065
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2374753269266990102}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 3.5, y: 3.5, z: 3.5}
m_ConstrainProportionsScale: 1
m_Children: []
m_Father: {fileID: 6464301421508797729}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: -139}
m_SizeDelta: {x: 298, y: 239}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4544345163211921881
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2374753269266990102}
m_CullTransparentMesh: 1
--- !u!114 &1366380858875779886
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2374753269266990102}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 64e1042b9ae9b0c409d479a470953438, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &6919807059513103890
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2374753269266990102}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7667901d8aea645d28b5125a2ed546ce, type: 3}
m_Name:
m_EditorClassIdentifier: Features.Coloring::Darkmatter.Features.Coloring.UI.ColorRegionView
<RegionId>k__BackingField: Body
alphaHitThreshold: 0.5
--- !u!1 &5786905061811789401
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3538580236428514699}
- component: {fileID: 4059753188331664390}
- component: {fileID: 562267067691760084}
m_Layer: 5
m_Name: Outline
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3538580236428514699
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5786905061811789401}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 3.5, y: 3.5, z: 3.5}
m_ConstrainProportionsScale: 1
m_Children: []
m_Father: {fileID: 6464301421508797729}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 306, y: 321}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4059753188331664390
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5786905061811789401}
m_CullTransparentMesh: 1
--- !u!114 &562267067691760084
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5786905061811789401}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: f6db270b00fab4f4b9c4f2002451b690, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &6927301726631464396
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4751863057281583490}
- component: {fileID: 6558630183505278502}
- component: {fileID: 5606251243252857327}
- component: {fileID: 1129874825894614399}
m_Layer: 5
m_Name: Leaf
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4751863057281583490
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6927301726631464396}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 3.5, y: 3.5, z: 3.5}
m_ConstrainProportionsScale: 1
m_Children: []
m_Father: {fileID: 6464301421508797729}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -173, y: 415}
m_SizeDelta: {x: 102, y: 70}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &6558630183505278502
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6927301726631464396}
m_CullTransparentMesh: 1
--- !u!114 &5606251243252857327
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6927301726631464396}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: d17674c618588734bba10d4faaab248e, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &1129874825894614399
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6927301726631464396}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7667901d8aea645d28b5125a2ed546ce, type: 3}
m_Name:
m_EditorClassIdentifier: Features.Coloring::Darkmatter.Features.Coloring.UI.ColorRegionView
<RegionId>k__BackingField: Leaf
alphaHitThreshold: 0.5

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 6dcec804df896497f9313ec531b1a0a1
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 07040909b4db547f38288f2b35e040a5
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,394 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &6246945885353309008
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1272845566047700851}
- component: {fileID: 3476496333429146458}
- component: {fileID: 4136462144027782631}
m_Layer: 5
m_Name: AppleDrawing
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1272845566047700851
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6246945885353309008}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 6018433151698775925}
- {fileID: 2328743337567062327}
- {fileID: 5269914680256779840}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3476496333429146458
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6246945885353309008}
m_CullTransparentMesh: 1
--- !u!114 &4136462144027782631
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6246945885353309008}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 06c1593744b6629468f632c6b5cba376, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1001 &1278753232270531628
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1272845566047700851}
m_Modifications:
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_SizeDelta.x
value: 847
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_SizeDelta.y
value: 381
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_LocalRotation.w
value: 0.3243876
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_LocalRotation.z
value: 0.9459242
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_AnchoredPosition.x
value: -302
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_AnchoredPosition.y
value: 504
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 142.143
objectReference: {fileID: 0}
- target: {fileID: 8177199881523649195, guid: 483b170ade7354414929ed6252fa552e, type: 3}
propertyPath: m_Name
value: Oval
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 483b170ade7354414929ed6252fa552e, type: 3}
--- !u!224 &6018433151698775925 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 4772353642633016153, guid: 483b170ade7354414929ed6252fa552e, type: 3}
m_PrefabInstance: {fileID: 1278753232270531628}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &2149587108544493251
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1272845566047700851}
m_Modifications:
- target: {fileID: 4279528263583881541, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_Name
value: Recatngle
objectReference: {fileID: 0}
- target: {fileID: 4279528263583881541, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_SizeDelta.x
value: 666
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_SizeDelta.y
value: 381
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_LocalRotation.w
value: 0.7071068
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_LocalRotation.z
value: 0.7071068
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_AnchoredPosition.x
value: 15
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_AnchoredPosition.y
value: 464
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 90
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
--- !u!224 &2328743337567062327 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 4433096382570807284, guid: 70aa2daf45f0649c2823d1930e906f59, type: 3}
m_PrefabInstance: {fileID: 2149587108544493251}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &8899405897213302435
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1272845566047700851}
m_Modifications:
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_SizeDelta.x
value: 381
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_SizeDelta.y
value: 381
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_AnchoredPosition.x
value: 11
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_AnchoredPosition.y
value: -181
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4388206011285020732, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_Name
value: Circle
objectReference: {fileID: 0}
- target: {fileID: 4388206011285020732, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
--- !u!224 &5269914680256779840 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
m_PrefabInstance: {fileID: 8899405897213302435}
m_PrefabAsset: {fileID: 0}

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: a47cf50ae9bf741f9a109833adbba24a
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 11002d6d2b0a44df39cbaf7781dfc4e8
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,92 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4388206011285020732
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3648889831887995107}
- component: {fileID: 2486631034057256172}
- component: {fileID: 1825175764228994942}
- component: {fileID: 5150407165710724744}
m_Layer: 5
m_Name: Circle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3648889831887995107
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4388206011285020732}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 2.6706576, y: 2.6706576, z: 2.6706576}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 11, y: -181}
m_SizeDelta: {x: 381, y: 381}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2486631034057256172
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4388206011285020732}
m_CullTransparentMesh: 1
--- !u!114 &1825175764228994942
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4388206011285020732}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 21230839b7f2b254d97663dbf990ca3f, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &5150407165710724744
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4388206011285020732}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5d79b18d536324085b58d842648372a8, type: 3}
m_Name:
m_EditorClassIdentifier: Features.ShapeBuilder::Darkmatter.Features.ShapeBuilder.UI.SlotMarker
shape: {fileID: 11400000, guid: a3dc108a48b1e4f2196e8d49ae8e3edd, type: 2}
outline: {fileID: 0}

View File

@@ -1,92 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &8177199881523649195
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4772353642633016153}
- component: {fileID: 8323421069085763461}
- component: {fileID: 9117445751559814248}
- component: {fileID: 3901214023037864946}
m_Layer: 5
m_Name: Oval
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4772353642633016153
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8177199881523649195}
m_LocalRotation: {x: -0, y: -0, z: 0.9459242, w: 0.3243876}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.62555456, y: 0.62555456, z: 0.62555456}
m_ConstrainProportionsScale: 1
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 142.143}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -302, y: 504}
m_SizeDelta: {x: 847, y: 381}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8323421069085763461
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8177199881523649195}
m_CullTransparentMesh: 1
--- !u!114 &9117445751559814248
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8177199881523649195}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 51851f3d0b814fb4f8b9922bd5de1f00, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &3901214023037864946
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8177199881523649195}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5d79b18d536324085b58d842648372a8, type: 3}
m_Name:
m_EditorClassIdentifier: Features.ShapeBuilder::Darkmatter.Features.ShapeBuilder.UI.SlotMarker
shape: {fileID: 11400000, guid: acfdb9428bcd74a85bade833220add1c, type: 2}
outline: {fileID: 0}

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 483b170ade7354414929ed6252fa552e
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,92 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4279528263583881541
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4433096382570807284}
- component: {fileID: 501846013816502432}
- component: {fileID: 8665832532240036901}
- component: {fileID: 8513459380562180911}
m_Layer: 5
m_Name: Recatngle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4433096382570807284
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4279528263583881541}
m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.4978243, y: 0.4978243, z: 0.4978243}
m_ConstrainProportionsScale: 1
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 15, y: 464}
m_SizeDelta: {x: 666, y: 381}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &501846013816502432
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4279528263583881541}
m_CullTransparentMesh: 1
--- !u!114 &8665832532240036901
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4279528263583881541}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: f60cd8e6a72adfa46b83e807695d7af1, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &8513459380562180911
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4279528263583881541}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5d79b18d536324085b58d842648372a8, type: 3}
m_Name:
m_EditorClassIdentifier: Features.ShapeBuilder::Darkmatter.Features.ShapeBuilder.UI.SlotMarker
shape: {fileID: 11400000, guid: 4a67406eb6fe043628d2b6a4e0c970ba, type: 2}
outline: {fileID: 0}

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 70aa2daf45f0649c2823d1930e906f59
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 2feea905672c34ac0bbadb556dc40dc7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,596 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &61684755875605537
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1861261483520587996}
- component: {fileID: 7958150055264967172}
- component: {fileID: -2160862059421515116}
- component: {fileID: -1707322086006766237}
- component: {fileID: -3026731918128846365}
m_Layer: 5
m_Name: 'ColorButton '
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1861261483520587996
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 61684755875605537}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2766093670034591675}
- {fileID: 6318464729368847702}
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.5, y: 0.5}
--- !u!222 &7958150055264967172
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 61684755875605537}
m_CullTransparentMesh: 1
--- !u!114 &-2160862059421515116
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 61684755875605537}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 0}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: -3026731918128846365}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!114 &-1707322086006766237
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 61684755875605537}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e64b829b90144faa3bd2c7f5c0ad291, type: 3}
m_Name:
m_EditorClassIdentifier: Features.Coloring::Darkmatter.Features.Coloring.UI.ColorButton
swatches:
- {fileID: 212292154225726180}
- {fileID: 2369138520400586865}
activeUI: {fileID: 1441168874875522992}
inactiveUI: {fileID: 9196708408063013140}
--- !u!114 &-3026731918128846365
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 61684755875605537}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &1441168874875522992
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2766093670034591675}
- component: {fileID: 986719718820947410}
- component: {fileID: 212292154225726180}
m_Layer: 5
m_Name: Active
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2766093670034591675
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1441168874875522992}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1.2563, y: 1.2563, z: 1.2563}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 6281905931621582106}
- {fileID: 6429676726009081873}
- {fileID: 2923753503001875599}
m_Father: {fileID: 1861261483520587996}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 240, y: 256}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &986719718820947410
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1441168874875522992}
m_CullTransparentMesh: 1
--- !u!114 &212292154225726180
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1441168874875522992}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 0, b: 0, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 0557f7ac349e0d24aa00d6d7acdabe39, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &1709844389406162614
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2093629026746047281}
- component: {fileID: 2121150698235334727}
- component: {fileID: 3928275438304944320}
m_Layer: 5
m_Name: Border
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2093629026746047281
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1709844389406162614}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1.1528705, y: 1.1528705, z: 1.1528705}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 6318464729368847702}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: -1.6000566}
m_SizeDelta: {x: 270, y: 270}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2121150698235334727
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1709844389406162614}
m_CullTransparentMesh: 1
--- !u!114 &3928275438304944320
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1709844389406162614}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 4e91819a7c618f54a8a14d8d17e0fb05, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &3572422333185709674
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2923753503001875599}
- component: {fileID: 5971336274597013763}
- component: {fileID: 8894938706818619181}
m_Layer: 5
m_Name: Arrow
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2923753503001875599
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3572422333185709674}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1.2121, y: 1.2121, z: 1.2121}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2766093670034591675}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 0, y: 0.5}
m_AnchoredPosition: {x: 17.7, y: 0}
m_SizeDelta: {x: 77, y: 103}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5971336274597013763
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3572422333185709674}
m_CullTransparentMesh: 1
--- !u!114 &8894938706818619181
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3572422333185709674}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 1cf840067ea853546b043aca961a6afa, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &5322555897879012831
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6429676726009081873}
- component: {fileID: 4577136776453920855}
- component: {fileID: 5709228679189376626}
m_Layer: 5
m_Name: Border
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6429676726009081873
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5322555897879012831}
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: 2766093670034591675}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -13, y: -2}
m_SizeDelta: {x: 270, y: 270}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4577136776453920855
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5322555897879012831}
m_CullTransparentMesh: 1
--- !u!114 &5709228679189376626
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5322555897879012831}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 4e91819a7c618f54a8a14d8d17e0fb05, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &7550474751428794550
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6281905931621582106}
- component: {fileID: 4880225143252780928}
- component: {fileID: 9085515002041020556}
m_Layer: 5
m_Name: Overlay
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6281905931621582106
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7550474751428794550}
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: 2766093670034591675}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4880225143252780928
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7550474751428794550}
m_CullTransparentMesh: 1
--- !u!114 &9085515002041020556
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7550474751428794550}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 00bbd83f189f34c4f92993b5f6eaabc9, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &9196708408063013140
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6318464729368847702}
- component: {fileID: 2460416657579105195}
- component: {fileID: 2369138520400586865}
m_Layer: 5
m_Name: Inactive
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &6318464729368847702
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9196708408063013140}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.9452184, y: 0.9452184, z: 0.9452184}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2093629026746047281}
m_Father: {fileID: 1861261483520587996}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -9, y: 3}
m_SizeDelta: {x: 240, y: 256}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2460416657579105195
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9196708408063013140}
m_CullTransparentMesh: 1
--- !u!114 &2369138520400586865
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9196708408063013140}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 0, b: 0, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 7ee457b9e3697a54bbf3d6ce83d13ced, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 319873779c4b440c3ad40798aa697460
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,91 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &8269026611177622940
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2733862189269079688}
- component: {fileID: 5306952573243454458}
- component: {fileID: 6367047668729099403}
- component: {fileID: 1974065423996186686}
m_Layer: 5
m_Name: ShapePiece
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2733862189269079688
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8269026611177622940}
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}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 577.022, y: 333.759}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5306952573243454458
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8269026611177622940}
m_CullTransparentMesh: 1
--- !u!114 &6367047668729099403
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8269026611177622940}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: cbc63d77c9f7c8448b6ff8900b09cc3f, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &1974065423996186686
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8269026611177622940}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 189fa0409d676438abe96e8707e29ad0, type: 3}
m_Name:
m_EditorClassIdentifier: Features.ShapeBuilder::Darkmatter.Features.ShapeBuilder.UI.ShapePiece
image: {fileID: 6367047668729099403}

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: ba3eb5e9b32d64a50bd717a07541ee18
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -27,12 +27,12 @@ RectTransform:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1002787829030344513} m_GameObject: {fileID: 1002787829030344513}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 311360238347084570} - {fileID: 1848291166980498350}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
@@ -70,7 +70,7 @@ MonoBehaviour:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 21300000, guid: c32e75a5c9f8a654f816db8016b43f4a, type: 3} m_Sprite: {fileID: 21300000, guid: c32e75a5c9f8a654f816db8016b43f4a, type: 3}
m_Type: 0 m_Type: 0
m_PreserveAspect: 1 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
m_FillAmount: 1 m_FillAmount: 1
@@ -136,96 +136,6 @@ MonoBehaviour:
m_EditorClassIdentifier: Features.DrawingCatalog::Darkmatter.Features.DrawingCatalog.DrawingCatalogButton m_EditorClassIdentifier: Features.DrawingCatalog::Darkmatter.Features.DrawingCatalog.DrawingCatalogButton
thumbnail: {fileID: 3052182449713955122} thumbnail: {fileID: 3052182449713955122}
button: {fileID: 1375717659554091244} button: {fileID: 1375717659554091244}
--- !u!1 &6863047044953543080
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 311360238347084570}
- component: {fileID: 2291871093933523869}
- component: {fileID: 7872328643013237936}
- component: {fileID: 7829581227321367687}
m_Layer: 5
m_Name: Mask
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &311360238347084570
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6863047044953543080}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1848291166980498350}
m_Father: {fileID: 7165608992005527048}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 2.1714, y: 3.3525}
m_SizeDelta: {x: 294.6573, y: 224.4221}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2291871093933523869
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6863047044953543080}
m_CullTransparentMesh: 1
--- !u!114 &7872328643013237936
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6863047044953543080}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0.28235295}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &7829581227321367687
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6863047044953543080}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Mask
m_ShowMaskGraphic: 0
--- !u!1 &7483212002805005001 --- !u!1 &7483212002805005001
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -251,17 +161,17 @@ RectTransform:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7483212002805005001} m_GameObject: {fileID: 7483212002805005001}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1.2, y: 1.2, z: 1.2} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1 m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []
m_Father: {fileID: 311360238347084570} m_Father: {fileID: 7165608992005527048}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 1, y: 1} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 1.6053, y: 7.2107}
m_SizeDelta: {x: 0, y: 0} m_SizeDelta: {x: 178.8338, y: 199.2152}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4252515989583821464 --- !u!222 &4252515989583821464
CanvasRenderer: CanvasRenderer:
@@ -293,7 +203,7 @@ MonoBehaviour:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 21300000, guid: f6db270b00fab4f4b9c4f2002451b690, type: 3} m_Sprite: {fileID: 21300000, guid: f6db270b00fab4f4b9c4f2002451b690, type: 3}
m_Type: 0 m_Type: 0
m_PreserveAspect: 1 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
m_FillAmount: 1 m_FillAmount: 1

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -67,7 +67,7 @@ TextureImporter:
swizzle: 50462976 swizzle: 50462976
cookieLightType: 0 cookieLightType: 0
platformSettings: platformSettings:
- serializedVersion: 4 - serializedVersion: 3
buildTarget: DefaultTexturePlatform buildTarget: DefaultTexturePlatform
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -80,7 +80,7 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 3
buildTarget: Standalone buildTarget: Standalone
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -93,8 +93,8 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 3
buildTarget: iOS buildTarget: iPhone
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
textureFormat: -1 textureFormat: -1
@@ -106,7 +106,7 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 3
buildTarget: WebGL buildTarget: WebGL
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -119,7 +119,7 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 3
buildTarget: Android buildTarget: Android
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -136,7 +136,6 @@ TextureImporter:
serializedVersion: 2 serializedVersion: 2
sprites: [] sprites: []
outline: [] outline: []
customData:
physicsShape: [] physicsShape: []
bones: [] bones: []
spriteID: 5e97eb03825dee720800000000000000 spriteID: 5e97eb03825dee720800000000000000
@@ -146,8 +145,6 @@ TextureImporter:
edges: [] edges: []
weights: [] weights: []
secondaryTextures: [] secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {} nameFileIdTable: {}
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0

View File

@@ -67,7 +67,7 @@ TextureImporter:
swizzle: 50462976 swizzle: 50462976
cookieLightType: 0 cookieLightType: 0
platformSettings: platformSettings:
- serializedVersion: 4 - serializedVersion: 3
buildTarget: DefaultTexturePlatform buildTarget: DefaultTexturePlatform
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -80,7 +80,7 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 3
buildTarget: Standalone buildTarget: Standalone
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -93,7 +93,7 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 3
buildTarget: WebGL buildTarget: WebGL
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -106,7 +106,7 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 3
buildTarget: Android buildTarget: Android
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -119,24 +119,10 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: iOS
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet: spriteSheet:
serializedVersion: 2 serializedVersion: 2
sprites: [] sprites: []
outline: [] outline: []
customData:
physicsShape: [] physicsShape: []
bones: [] bones: []
spriteID: 5e97eb03825dee720800000000000000 spriteID: 5e97eb03825dee720800000000000000
@@ -146,8 +132,6 @@ TextureImporter:
edges: [] edges: []
weights: [] weights: []
secondaryTextures: [] secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {} nameFileIdTable: {}
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0

View File

@@ -67,7 +67,7 @@ TextureImporter:
swizzle: 50462976 swizzle: 50462976
cookieLightType: 0 cookieLightType: 0
platformSettings: platformSettings:
- serializedVersion: 4 - serializedVersion: 3
buildTarget: DefaultTexturePlatform buildTarget: DefaultTexturePlatform
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -80,7 +80,7 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 3
buildTarget: Standalone buildTarget: Standalone
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -93,7 +93,7 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 3
buildTarget: WebGL buildTarget: WebGL
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -106,7 +106,7 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 3
buildTarget: Android buildTarget: Android
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -119,24 +119,10 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: iOS
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet: spriteSheet:
serializedVersion: 2 serializedVersion: 2
sprites: [] sprites: []
outline: [] outline: []
customData:
physicsShape: [] physicsShape: []
bones: [] bones: []
spriteID: 5e97eb03825dee720800000000000000 spriteID: 5e97eb03825dee720800000000000000
@@ -146,8 +132,6 @@ TextureImporter:
edges: [] edges: []
weights: [] weights: []
secondaryTextures: [] secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {} nameFileIdTable: {}
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0

View File

@@ -67,7 +67,7 @@ TextureImporter:
swizzle: 50462976 swizzle: 50462976
cookieLightType: 0 cookieLightType: 0
platformSettings: platformSettings:
- serializedVersion: 4 - serializedVersion: 3
buildTarget: DefaultTexturePlatform buildTarget: DefaultTexturePlatform
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -80,7 +80,7 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 3
buildTarget: Standalone buildTarget: Standalone
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -93,7 +93,7 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 3
buildTarget: WebGL buildTarget: WebGL
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -106,7 +106,7 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 3
buildTarget: Android buildTarget: Android
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
@@ -119,24 +119,10 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: iOS
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet: spriteSheet:
serializedVersion: 2 serializedVersion: 2
sprites: [] sprites: []
outline: [] outline: []
customData:
physicsShape: [] physicsShape: []
bones: [] bones: []
spriteID: 5e97eb03825dee720800000000000000 spriteID: 5e97eb03825dee720800000000000000
@@ -146,8 +132,6 @@ TextureImporter:
edges: [] edges: []
weights: [] weights: []
secondaryTextures: [] secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {} nameFileIdTable: {}
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0

Some files were not shown because too many files have changed in this diff Show More