From 4435a2c6b6ffa20213c69209296202739e45ef25 Mon Sep 17 00:00:00 2001 From: Konstantin Dyachenko Date: Wed, 27 May 2026 03:56:38 +0700 Subject: [PATCH] =?UTF-8?q?=EF=BB=BFfeat:=20add=20bootstrap=20architecture?= =?UTF-8?q?=20and=20common=20utilities=20for=20Unity=20project?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add GameLifetimeScope for dependency injection with Zenject - Implement boot flow service with entry point and interfaces - Create boot state machine (Splash, Menu, Load states) - Add UI views for boot screens - Add common services base class and interface - Implement generic state machine controller - Add base UI view components and ViewModel interface - Update SampleScene.unity - Add BootSettings asset Добавлена архитектура bootstrap и общие утилиты для Unity проекта: - Добавлен GameLifetimeScope для внедрения зависимостей (Zenject) - Реализован сервис потока загрузки с точкой входа и интерфейсами - Создана машина состояний загрузки (Splash, Menu, Load состояния) - Добавлены UI представления для экранов загрузки - Добавлены базовые классы сервисов и интерфейс IService - Реализован контроллер машины состояний - Добавлены базовые компоненты UI вида и интерфейс ViewModel - Обновлена сцена SampleScene.unity - Добавлен ассет BootSettings --- Assets/Scenes/SampleScene.unity | 176 ++++++++++++++++++ Assets/Scripts.meta | 8 + Assets/Scripts/Boot.meta | 8 + Assets/Scripts/Boot/Composition.meta | 8 + .../Boot/Composition/GameLifetimeScope.cs | 43 +++++ .../Composition/GameLifetimeScope.cs.meta | 11 ++ Assets/Scripts/Boot/Flow.meta | 8 + Assets/Scripts/Boot/Flow/BootFlowService.cs | 19 ++ .../Scripts/Boot/Flow/BootFlowService.cs.meta | 11 ++ .../Scripts/Boot/Flow/BootstrapEntryPoint.cs | 53 ++++++ .../Boot/Flow/BootstrapEntryPoint.cs.meta | 11 ++ Assets/Scripts/Boot/Flow/IBootFlowService.cs | 8 + .../Boot/Flow/IBootFlowService.cs.meta | 11 ++ Assets/Scripts/Boot/Settings.meta | 8 + Assets/Scripts/Boot/Settings/BootSettings.cs | 12 ++ .../Boot/Settings/BootSettings.cs.meta | 11 ++ Assets/Scripts/Boot/States.meta | 8 + Assets/Scripts/Boot/States/BootStateCode.cs | 9 + .../Scripts/Boot/States/BootStateCode.cs.meta | 11 ++ .../Boot/States/BootStatesController.cs | 29 +++ .../Boot/States/BootStatesController.cs.meta | 11 ++ Assets/Scripts/Boot/States/LoadState.cs | 29 +++ Assets/Scripts/Boot/States/LoadState.cs.meta | 11 ++ Assets/Scripts/Boot/States/MenuState.cs | 29 +++ Assets/Scripts/Boot/States/MenuState.cs.meta | 11 ++ Assets/Scripts/Boot/States/SplashState.cs | 29 +++ .../Scripts/Boot/States/SplashState.cs.meta | 11 ++ Assets/Scripts/Boot/UI.meta | 8 + Assets/Scripts/Boot/UI/LoadingUIView.cs | 8 + Assets/Scripts/Boot/UI/LoadingUIView.cs.meta | 11 ++ Assets/Scripts/Boot/UI/MenuUIView.cs | 8 + Assets/Scripts/Boot/UI/MenuUIView.cs.meta | 11 ++ Assets/Scripts/Boot/UI/SplashUIView.cs | 8 + Assets/Scripts/Boot/UI/SplashUIView.cs.meta | 11 ++ Assets/Scripts/Common.meta | 8 + Assets/Scripts/Common/Services.meta | 8 + Assets/Scripts/Common/Services/IService.cs | 11 ++ .../Scripts/Common/Services/IService.cs.meta | 11 ++ Assets/Scripts/Common/Services/Service.cs | 18 ++ .../Scripts/Common/Services/Service.cs.meta | 11 ++ Assets/Scripts/Common/StateMachine.meta | 8 + Assets/Scripts/Common/StateMachine/IState.cs | 11 ++ .../Common/StateMachine/IState.cs.meta | 11 ++ .../Common/StateMachine/IStatesController.cs | 10 + .../StateMachine/IStatesController.cs.meta | 11 ++ .../Common/StateMachine/StatesController.cs | 34 ++++ .../StateMachine/StatesController.cs.meta | 11 ++ Assets/Scripts/Common/UI.meta | 8 + Assets/Scripts/Common/UI/IUIViewModel.cs | 6 + Assets/Scripts/Common/UI/IUIViewModel.cs.meta | 11 ++ Assets/Scripts/Common/UI/UIView.Generic.cs | 18 ++ .../Scripts/Common/UI/UIView.Generic.cs.meta | 11 ++ Assets/Scripts/Common/UI/UIView.cs | 17 ++ Assets/Scripts/Common/UI/UIView.cs.meta | 11 ++ Assets/Settings.meta | 8 + Assets/Settings/BootSettings.asset | 17 ++ Assets/Settings/BootSettings.asset.meta | 8 + 57 files changed, 937 insertions(+) create mode 100644 Assets/Scripts.meta create mode 100644 Assets/Scripts/Boot.meta create mode 100644 Assets/Scripts/Boot/Composition.meta create mode 100644 Assets/Scripts/Boot/Composition/GameLifetimeScope.cs create mode 100644 Assets/Scripts/Boot/Composition/GameLifetimeScope.cs.meta create mode 100644 Assets/Scripts/Boot/Flow.meta create mode 100644 Assets/Scripts/Boot/Flow/BootFlowService.cs create mode 100644 Assets/Scripts/Boot/Flow/BootFlowService.cs.meta create mode 100644 Assets/Scripts/Boot/Flow/BootstrapEntryPoint.cs create mode 100644 Assets/Scripts/Boot/Flow/BootstrapEntryPoint.cs.meta create mode 100644 Assets/Scripts/Boot/Flow/IBootFlowService.cs create mode 100644 Assets/Scripts/Boot/Flow/IBootFlowService.cs.meta create mode 100644 Assets/Scripts/Boot/Settings.meta create mode 100644 Assets/Scripts/Boot/Settings/BootSettings.cs create mode 100644 Assets/Scripts/Boot/Settings/BootSettings.cs.meta create mode 100644 Assets/Scripts/Boot/States.meta create mode 100644 Assets/Scripts/Boot/States/BootStateCode.cs create mode 100644 Assets/Scripts/Boot/States/BootStateCode.cs.meta create mode 100644 Assets/Scripts/Boot/States/BootStatesController.cs create mode 100644 Assets/Scripts/Boot/States/BootStatesController.cs.meta create mode 100644 Assets/Scripts/Boot/States/LoadState.cs create mode 100644 Assets/Scripts/Boot/States/LoadState.cs.meta create mode 100644 Assets/Scripts/Boot/States/MenuState.cs create mode 100644 Assets/Scripts/Boot/States/MenuState.cs.meta create mode 100644 Assets/Scripts/Boot/States/SplashState.cs create mode 100644 Assets/Scripts/Boot/States/SplashState.cs.meta create mode 100644 Assets/Scripts/Boot/UI.meta create mode 100644 Assets/Scripts/Boot/UI/LoadingUIView.cs create mode 100644 Assets/Scripts/Boot/UI/LoadingUIView.cs.meta create mode 100644 Assets/Scripts/Boot/UI/MenuUIView.cs create mode 100644 Assets/Scripts/Boot/UI/MenuUIView.cs.meta create mode 100644 Assets/Scripts/Boot/UI/SplashUIView.cs create mode 100644 Assets/Scripts/Boot/UI/SplashUIView.cs.meta create mode 100644 Assets/Scripts/Common.meta create mode 100644 Assets/Scripts/Common/Services.meta create mode 100644 Assets/Scripts/Common/Services/IService.cs create mode 100644 Assets/Scripts/Common/Services/IService.cs.meta create mode 100644 Assets/Scripts/Common/Services/Service.cs create mode 100644 Assets/Scripts/Common/Services/Service.cs.meta create mode 100644 Assets/Scripts/Common/StateMachine.meta create mode 100644 Assets/Scripts/Common/StateMachine/IState.cs create mode 100644 Assets/Scripts/Common/StateMachine/IState.cs.meta create mode 100644 Assets/Scripts/Common/StateMachine/IStatesController.cs create mode 100644 Assets/Scripts/Common/StateMachine/IStatesController.cs.meta create mode 100644 Assets/Scripts/Common/StateMachine/StatesController.cs create mode 100644 Assets/Scripts/Common/StateMachine/StatesController.cs.meta create mode 100644 Assets/Scripts/Common/UI.meta create mode 100644 Assets/Scripts/Common/UI/IUIViewModel.cs create mode 100644 Assets/Scripts/Common/UI/IUIViewModel.cs.meta create mode 100644 Assets/Scripts/Common/UI/UIView.Generic.cs create mode 100644 Assets/Scripts/Common/UI/UIView.Generic.cs.meta create mode 100644 Assets/Scripts/Common/UI/UIView.cs create mode 100644 Assets/Scripts/Common/UI/UIView.cs.meta create mode 100644 Assets/Settings.meta create mode 100644 Assets/Settings/BootSettings.asset create mode 100644 Assets/Settings/BootSettings.asset.meta diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 9421266..fd94fe4 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -206,3 +206,179 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1000000001 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1000000002} + - component: {fileID: 1000000003} + m_Layer: 0 + m_Name: GameLifetimeScope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1000000002 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000000001} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1000000003 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000000001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a1111111111111111111111111111111, type: 3} + m_Name: + m_EditorClassIdentifier: + k__BackingField: {fileID: 11400000, guid: c1111111111111111111111111111111, type: 2} + k__BackingField: {fileID: 1000000103} + k__BackingField: {fileID: 1000000203} + k__BackingField: {fileID: 1000000303} +--- !u!1 &1000000101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1000000102} + - component: {fileID: 1000000103} + m_Layer: 0 + m_Name: SplashView + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1000000102 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000000101} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1000000103 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000000101} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b1111111111111111111111111111111, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1000000201 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1000000202} + - component: {fileID: 1000000203} + m_Layer: 0 + m_Name: LoadingView + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1000000202 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000000201} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1000000203 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000000201} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b2222222222222222222222222222222, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1000000301 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1000000302} + - component: {fileID: 1000000303} + m_Layer: 0 + m_Name: MenuView + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1000000302 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000000301} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1000000303 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000000301} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b3333333333333333333333333333333, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Scripts.meta b/Assets/Scripts.meta new file mode 100644 index 0000000..2d95882 --- /dev/null +++ b/Assets/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d1111111111111111111111111111111 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot.meta b/Assets/Scripts/Boot.meta new file mode 100644 index 0000000..7649e05 --- /dev/null +++ b/Assets/Scripts/Boot.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d2222222222222222222222222222222 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/Composition.meta b/Assets/Scripts/Boot/Composition.meta new file mode 100644 index 0000000..f2d80fc --- /dev/null +++ b/Assets/Scripts/Boot/Composition.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3333333333333333333333333333333 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/Composition/GameLifetimeScope.cs b/Assets/Scripts/Boot/Composition/GameLifetimeScope.cs new file mode 100644 index 0000000..d2ee5f6 --- /dev/null +++ b/Assets/Scripts/Boot/Composition/GameLifetimeScope.cs @@ -0,0 +1,43 @@ +using QuizPleaseTest.Boot.Flow; +using QuizPleaseTest.Boot.Settings; +using QuizPleaseTest.Boot.States; +using QuizPleaseTest.Boot.UI; +using QuizPleaseTest.Common.Services; +using QuizPleaseTest.Common.StateMachine; +using UnityEngine; +using VContainer; +using VContainer.Unity; + +namespace QuizPleaseTest.Boot.Composition +{ + public class GameLifetimeScope : LifetimeScope + { + [field: SerializeField] public BootSettings BootSettings { get; private set; } + [field: SerializeField] public SplashUIView SplashView { get; private set; } + [field: SerializeField] public LoadingUIView LoadingView { get; private set; } + [field: SerializeField] public MenuUIView MenuView { get; private set; } + + protected override void Configure(IContainerBuilder builder) + { + builder.RegisterInstance(BootSettings); + + builder.RegisterComponent(SplashView); + builder.RegisterComponent(LoadingView); + builder.RegisterComponent(MenuView); + + builder.Register(Lifetime.Singleton) + .As() + .As(); + + builder.Register(Lifetime.Singleton) + .As>() + .AsSelf(); + + builder.Register(Lifetime.Singleton); + builder.Register(Lifetime.Singleton); + builder.Register(Lifetime.Singleton); + + builder.RegisterEntryPoint(); + } + } +} diff --git a/Assets/Scripts/Boot/Composition/GameLifetimeScope.cs.meta b/Assets/Scripts/Boot/Composition/GameLifetimeScope.cs.meta new file mode 100644 index 0000000..98bbaa4 --- /dev/null +++ b/Assets/Scripts/Boot/Composition/GameLifetimeScope.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a1111111111111111111111111111111 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/Flow.meta b/Assets/Scripts/Boot/Flow.meta new file mode 100644 index 0000000..de2efcf --- /dev/null +++ b/Assets/Scripts/Boot/Flow.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d4444444444444444444444444444444 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/Flow/BootFlowService.cs b/Assets/Scripts/Boot/Flow/BootFlowService.cs new file mode 100644 index 0000000..e3923d4 --- /dev/null +++ b/Assets/Scripts/Boot/Flow/BootFlowService.cs @@ -0,0 +1,19 @@ +using System.Threading; +using Cysharp.Threading.Tasks; +using QuizPleaseTest.Common.Services; + +namespace QuizPleaseTest.Boot.Flow +{ + public class BootFlowService : Service, IBootFlowService + { + public override UniTask InitializeAsync(CancellationToken ct) + { + return UniTask.CompletedTask; + } + + public override UniTask ReleaseAsync(CancellationToken ct) + { + return UniTask.CompletedTask; + } + } +} diff --git a/Assets/Scripts/Boot/Flow/BootFlowService.cs.meta b/Assets/Scripts/Boot/Flow/BootFlowService.cs.meta new file mode 100644 index 0000000..145af24 --- /dev/null +++ b/Assets/Scripts/Boot/Flow/BootFlowService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3333333333333333333333333333333 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/Flow/BootstrapEntryPoint.cs b/Assets/Scripts/Boot/Flow/BootstrapEntryPoint.cs new file mode 100644 index 0000000..2fab4ae --- /dev/null +++ b/Assets/Scripts/Boot/Flow/BootstrapEntryPoint.cs @@ -0,0 +1,53 @@ +using System; +using System.Threading; +using Cysharp.Threading.Tasks; +using UnityEngine; +using VContainer.Unity; + +namespace QuizPleaseTest.Boot.Flow +{ + public class BootstrapEntryPoint : IStartable, IDisposable + { + private readonly IBootFlowService _bootFlowService; + private CancellationTokenSource _lifetimeCts; + + public BootstrapEntryPoint(IBootFlowService bootFlowService) + { + _bootFlowService = bootFlowService; + } + + public void Start() + { + _lifetimeCts = new CancellationTokenSource(); + RunAsync(_lifetimeCts.Token).Forget(); + } + + public void Dispose() + { + if (_lifetimeCts == null) + { + return; + } + + _lifetimeCts.Cancel(); + _bootFlowService.ReleaseAsync(CancellationToken.None).Forget(); + _lifetimeCts.Dispose(); + _lifetimeCts = null; + } + + private async UniTask RunAsync(CancellationToken ct) + { + try + { + await _bootFlowService.InitializeAsync(ct); + } + catch (OperationCanceledException) when (ct.IsCancellationRequested) + { + } + catch (Exception exception) + { + Debug.LogException(exception); + } + } + } +} diff --git a/Assets/Scripts/Boot/Flow/BootstrapEntryPoint.cs.meta b/Assets/Scripts/Boot/Flow/BootstrapEntryPoint.cs.meta new file mode 100644 index 0000000..16e3985 --- /dev/null +++ b/Assets/Scripts/Boot/Flow/BootstrapEntryPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f4444444444444444444444444444444 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/Flow/IBootFlowService.cs b/Assets/Scripts/Boot/Flow/IBootFlowService.cs new file mode 100644 index 0000000..1c2c489 --- /dev/null +++ b/Assets/Scripts/Boot/Flow/IBootFlowService.cs @@ -0,0 +1,8 @@ +using QuizPleaseTest.Common.Services; + +namespace QuizPleaseTest.Boot.Flow +{ + public interface IBootFlowService : IService + { + } +} diff --git a/Assets/Scripts/Boot/Flow/IBootFlowService.cs.meta b/Assets/Scripts/Boot/Flow/IBootFlowService.cs.meta new file mode 100644 index 0000000..f328a66 --- /dev/null +++ b/Assets/Scripts/Boot/Flow/IBootFlowService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f2222222222222222222222222222222 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/Settings.meta b/Assets/Scripts/Boot/Settings.meta new file mode 100644 index 0000000..1305dc2 --- /dev/null +++ b/Assets/Scripts/Boot/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d5555555555555555555555555555555 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/Settings/BootSettings.cs b/Assets/Scripts/Boot/Settings/BootSettings.cs new file mode 100644 index 0000000..fa9815e --- /dev/null +++ b/Assets/Scripts/Boot/Settings/BootSettings.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace QuizPleaseTest.Boot.Settings +{ + [CreateAssetMenu(fileName = "BootSettings", menuName = "QuizPleaseTest/Boot Settings")] + public class BootSettings : ScriptableObject + { + [field: SerializeField] public float SplashDurationSeconds { get; private set; } = 1f; + [field: SerializeField] public int LoadSteps { get; private set; } = 5; + [field: SerializeField] public int LoadStepDurationMs { get; private set; } = 200; + } +} diff --git a/Assets/Scripts/Boot/Settings/BootSettings.cs.meta b/Assets/Scripts/Boot/Settings/BootSettings.cs.meta new file mode 100644 index 0000000..f259772 --- /dev/null +++ b/Assets/Scripts/Boot/Settings/BootSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b4444444444444444444444444444444 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/States.meta b/Assets/Scripts/Boot/States.meta new file mode 100644 index 0000000..d382c2a --- /dev/null +++ b/Assets/Scripts/Boot/States.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d6666666666666666666666666666666 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/States/BootStateCode.cs b/Assets/Scripts/Boot/States/BootStateCode.cs new file mode 100644 index 0000000..13561e8 --- /dev/null +++ b/Assets/Scripts/Boot/States/BootStateCode.cs @@ -0,0 +1,9 @@ +namespace QuizPleaseTest.Boot.States +{ + public enum BootStateCode + { + Splash, + Load, + Menu + } +} diff --git a/Assets/Scripts/Boot/States/BootStateCode.cs.meta b/Assets/Scripts/Boot/States/BootStateCode.cs.meta new file mode 100644 index 0000000..0481477 --- /dev/null +++ b/Assets/Scripts/Boot/States/BootStateCode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5555555555555555555555555555555 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/States/BootStatesController.cs b/Assets/Scripts/Boot/States/BootStatesController.cs new file mode 100644 index 0000000..2a4efd0 --- /dev/null +++ b/Assets/Scripts/Boot/States/BootStatesController.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using QuizPleaseTest.Common.StateMachine; + +namespace QuizPleaseTest.Boot.States +{ + public class BootStatesController : StatesController + { + public BootStatesController( + SplashState splashState, + LoadState loadState, + MenuState menuState) + : base(CreateStates(splashState, loadState, menuState)) + { + } + + private static IReadOnlyDictionary CreateStates( + SplashState splashState, + LoadState loadState, + MenuState menuState) + { + return new Dictionary + { + { BootStateCode.Splash, splashState }, + { BootStateCode.Load, loadState }, + { BootStateCode.Menu, menuState } + }; + } + } +} diff --git a/Assets/Scripts/Boot/States/BootStatesController.cs.meta b/Assets/Scripts/Boot/States/BootStatesController.cs.meta new file mode 100644 index 0000000..b600d9a --- /dev/null +++ b/Assets/Scripts/Boot/States/BootStatesController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6666666666666666666666666666666 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/States/LoadState.cs b/Assets/Scripts/Boot/States/LoadState.cs new file mode 100644 index 0000000..4820125 --- /dev/null +++ b/Assets/Scripts/Boot/States/LoadState.cs @@ -0,0 +1,29 @@ +using System.Threading; +using Cysharp.Threading.Tasks; +using QuizPleaseTest.Boot.UI; +using QuizPleaseTest.Common.StateMachine; + +namespace QuizPleaseTest.Boot.States +{ + public class LoadState : IState + { + private readonly LoadingUIView _view; + + public LoadState(LoadingUIView view) + { + _view = view; + } + + public UniTask EnterAsync(CancellationToken ct) + { + _view.Initialize(); + return UniTask.CompletedTask; + } + + public UniTask ExitAsync(CancellationToken ct) + { + _view.Release(); + return UniTask.CompletedTask; + } + } +} diff --git a/Assets/Scripts/Boot/States/LoadState.cs.meta b/Assets/Scripts/Boot/States/LoadState.cs.meta new file mode 100644 index 0000000..77791ae --- /dev/null +++ b/Assets/Scripts/Boot/States/LoadState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f8888888888888888888888888888888 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/States/MenuState.cs b/Assets/Scripts/Boot/States/MenuState.cs new file mode 100644 index 0000000..e058b15 --- /dev/null +++ b/Assets/Scripts/Boot/States/MenuState.cs @@ -0,0 +1,29 @@ +using System.Threading; +using Cysharp.Threading.Tasks; +using QuizPleaseTest.Boot.UI; +using QuizPleaseTest.Common.StateMachine; + +namespace QuizPleaseTest.Boot.States +{ + public class MenuState : IState + { + private readonly MenuUIView _view; + + public MenuState(MenuUIView view) + { + _view = view; + } + + public UniTask EnterAsync(CancellationToken ct) + { + _view.Initialize(); + return UniTask.CompletedTask; + } + + public UniTask ExitAsync(CancellationToken ct) + { + _view.Release(); + return UniTask.CompletedTask; + } + } +} diff --git a/Assets/Scripts/Boot/States/MenuState.cs.meta b/Assets/Scripts/Boot/States/MenuState.cs.meta new file mode 100644 index 0000000..ecd37fc --- /dev/null +++ b/Assets/Scripts/Boot/States/MenuState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9999999999999999999999999999999 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/States/SplashState.cs b/Assets/Scripts/Boot/States/SplashState.cs new file mode 100644 index 0000000..0b8696e --- /dev/null +++ b/Assets/Scripts/Boot/States/SplashState.cs @@ -0,0 +1,29 @@ +using System.Threading; +using Cysharp.Threading.Tasks; +using QuizPleaseTest.Boot.UI; +using QuizPleaseTest.Common.StateMachine; + +namespace QuizPleaseTest.Boot.States +{ + public class SplashState : IState + { + private readonly SplashUIView _view; + + public SplashState(SplashUIView view) + { + _view = view; + } + + public UniTask EnterAsync(CancellationToken ct) + { + _view.Initialize(); + return UniTask.CompletedTask; + } + + public UniTask ExitAsync(CancellationToken ct) + { + _view.Release(); + return UniTask.CompletedTask; + } + } +} diff --git a/Assets/Scripts/Boot/States/SplashState.cs.meta b/Assets/Scripts/Boot/States/SplashState.cs.meta new file mode 100644 index 0000000..d1a8bee --- /dev/null +++ b/Assets/Scripts/Boot/States/SplashState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7777777777777777777777777777777 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/UI.meta b/Assets/Scripts/Boot/UI.meta new file mode 100644 index 0000000..5cf2c57 --- /dev/null +++ b/Assets/Scripts/Boot/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d7777777777777777777777777777777 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/UI/LoadingUIView.cs b/Assets/Scripts/Boot/UI/LoadingUIView.cs new file mode 100644 index 0000000..6a42e5c --- /dev/null +++ b/Assets/Scripts/Boot/UI/LoadingUIView.cs @@ -0,0 +1,8 @@ +using QuizPleaseTest.Common.UI; + +namespace QuizPleaseTest.Boot.UI +{ + public class LoadingUIView : UIView + { + } +} diff --git a/Assets/Scripts/Boot/UI/LoadingUIView.cs.meta b/Assets/Scripts/Boot/UI/LoadingUIView.cs.meta new file mode 100644 index 0000000..afb00bd --- /dev/null +++ b/Assets/Scripts/Boot/UI/LoadingUIView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2222222222222222222222222222222 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/UI/MenuUIView.cs b/Assets/Scripts/Boot/UI/MenuUIView.cs new file mode 100644 index 0000000..9574baa --- /dev/null +++ b/Assets/Scripts/Boot/UI/MenuUIView.cs @@ -0,0 +1,8 @@ +using QuizPleaseTest.Common.UI; + +namespace QuizPleaseTest.Boot.UI +{ + public class MenuUIView : UIView + { + } +} diff --git a/Assets/Scripts/Boot/UI/MenuUIView.cs.meta b/Assets/Scripts/Boot/UI/MenuUIView.cs.meta new file mode 100644 index 0000000..8b96ade --- /dev/null +++ b/Assets/Scripts/Boot/UI/MenuUIView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b3333333333333333333333333333333 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boot/UI/SplashUIView.cs b/Assets/Scripts/Boot/UI/SplashUIView.cs new file mode 100644 index 0000000..26982ad --- /dev/null +++ b/Assets/Scripts/Boot/UI/SplashUIView.cs @@ -0,0 +1,8 @@ +using QuizPleaseTest.Common.UI; + +namespace QuizPleaseTest.Boot.UI +{ + public class SplashUIView : UIView + { + } +} diff --git a/Assets/Scripts/Boot/UI/SplashUIView.cs.meta b/Assets/Scripts/Boot/UI/SplashUIView.cs.meta new file mode 100644 index 0000000..6d18013 --- /dev/null +++ b/Assets/Scripts/Boot/UI/SplashUIView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b1111111111111111111111111111111 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Common.meta b/Assets/Scripts/Common.meta new file mode 100644 index 0000000..9200aef --- /dev/null +++ b/Assets/Scripts/Common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d8888888888888888888888888888888 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Common/Services.meta b/Assets/Scripts/Common/Services.meta new file mode 100644 index 0000000..ee2a9e1 --- /dev/null +++ b/Assets/Scripts/Common/Services.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d9999999999999999999999999999999 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Common/Services/IService.cs b/Assets/Scripts/Common/Services/IService.cs new file mode 100644 index 0000000..1d9b733 --- /dev/null +++ b/Assets/Scripts/Common/Services/IService.cs @@ -0,0 +1,11 @@ +using System.Threading; +using Cysharp.Threading.Tasks; + +namespace QuizPleaseTest.Common.Services +{ + public interface IService + { + UniTask InitializeAsync(CancellationToken ct); + UniTask ReleaseAsync(CancellationToken ct); + } +} diff --git a/Assets/Scripts/Common/Services/IService.cs.meta b/Assets/Scripts/Common/Services/IService.cs.meta new file mode 100644 index 0000000..1ef5708 --- /dev/null +++ b/Assets/Scripts/Common/Services/IService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3333333333333333333333333333333 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Common/Services/Service.cs b/Assets/Scripts/Common/Services/Service.cs new file mode 100644 index 0000000..13d8e3b --- /dev/null +++ b/Assets/Scripts/Common/Services/Service.cs @@ -0,0 +1,18 @@ +using System.Threading; +using Cysharp.Threading.Tasks; + +namespace QuizPleaseTest.Common.Services +{ + public class Service : IService + { + public virtual UniTask InitializeAsync(CancellationToken ct) + { + return UniTask.CompletedTask; + } + + public virtual UniTask ReleaseAsync(CancellationToken ct) + { + return UniTask.CompletedTask; + } + } +} diff --git a/Assets/Scripts/Common/Services/Service.cs.meta b/Assets/Scripts/Common/Services/Service.cs.meta new file mode 100644 index 0000000..988f91e --- /dev/null +++ b/Assets/Scripts/Common/Services/Service.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4444444444444444444444444444444 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Common/StateMachine.meta b/Assets/Scripts/Common/StateMachine.meta new file mode 100644 index 0000000..6750bda --- /dev/null +++ b/Assets/Scripts/Common/StateMachine.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e1111111111111111111111111111111 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Common/StateMachine/IState.cs b/Assets/Scripts/Common/StateMachine/IState.cs new file mode 100644 index 0000000..3b1ff2f --- /dev/null +++ b/Assets/Scripts/Common/StateMachine/IState.cs @@ -0,0 +1,11 @@ +using System.Threading; +using Cysharp.Threading.Tasks; + +namespace QuizPleaseTest.Common.StateMachine +{ + public interface IState + { + UniTask EnterAsync(CancellationToken ct); + UniTask ExitAsync(CancellationToken ct); + } +} diff --git a/Assets/Scripts/Common/StateMachine/IState.cs.meta b/Assets/Scripts/Common/StateMachine/IState.cs.meta new file mode 100644 index 0000000..b7bddbe --- /dev/null +++ b/Assets/Scripts/Common/StateMachine/IState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5555555555555555555555555555555 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Common/StateMachine/IStatesController.cs b/Assets/Scripts/Common/StateMachine/IStatesController.cs new file mode 100644 index 0000000..d4fa682 --- /dev/null +++ b/Assets/Scripts/Common/StateMachine/IStatesController.cs @@ -0,0 +1,10 @@ +using System.Threading; +using Cysharp.Threading.Tasks; + +namespace QuizPleaseTest.Common.StateMachine +{ + public interface IStatesController + { + UniTask EnterStateAsync(TEnum code, CancellationToken ct); + } +} diff --git a/Assets/Scripts/Common/StateMachine/IStatesController.cs.meta b/Assets/Scripts/Common/StateMachine/IStatesController.cs.meta new file mode 100644 index 0000000..1e96e0c --- /dev/null +++ b/Assets/Scripts/Common/StateMachine/IStatesController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6666666666666666666666666666666 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Common/StateMachine/StatesController.cs b/Assets/Scripts/Common/StateMachine/StatesController.cs new file mode 100644 index 0000000..a76ff93 --- /dev/null +++ b/Assets/Scripts/Common/StateMachine/StatesController.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using Cysharp.Threading.Tasks; + +namespace QuizPleaseTest.Common.StateMachine +{ + public class StatesController : IStatesController + { + private readonly IReadOnlyDictionary _states; + private IState _currentState; + + public StatesController(IReadOnlyDictionary states) + { + _states = states; + } + + public async UniTask EnterStateAsync(TEnum code, CancellationToken ct) + { + if (!_states.TryGetValue(code, out IState newState)) + { + throw new InvalidOperationException($"State is not registered: {code}"); + } + + if (_currentState != null) + { + await _currentState.ExitAsync(ct); + } + + _currentState = newState; + await _currentState.EnterAsync(ct); + } + } +} diff --git a/Assets/Scripts/Common/StateMachine/StatesController.cs.meta b/Assets/Scripts/Common/StateMachine/StatesController.cs.meta new file mode 100644 index 0000000..3eae7ee --- /dev/null +++ b/Assets/Scripts/Common/StateMachine/StatesController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e7777777777777777777777777777777 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Common/UI.meta b/Assets/Scripts/Common/UI.meta new file mode 100644 index 0000000..98916a3 --- /dev/null +++ b/Assets/Scripts/Common/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e2222222222222222222222222222222 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Common/UI/IUIViewModel.cs b/Assets/Scripts/Common/UI/IUIViewModel.cs new file mode 100644 index 0000000..ddff33d --- /dev/null +++ b/Assets/Scripts/Common/UI/IUIViewModel.cs @@ -0,0 +1,6 @@ +namespace QuizPleaseTest.Common.UI +{ + public interface IUIViewModel + { + } +} diff --git a/Assets/Scripts/Common/UI/IUIViewModel.cs.meta b/Assets/Scripts/Common/UI/IUIViewModel.cs.meta new file mode 100644 index 0000000..3adcaed --- /dev/null +++ b/Assets/Scripts/Common/UI/IUIViewModel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8888888888888888888888888888888 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Common/UI/UIView.Generic.cs b/Assets/Scripts/Common/UI/UIView.Generic.cs new file mode 100644 index 0000000..7cf977e --- /dev/null +++ b/Assets/Scripts/Common/UI/UIView.Generic.cs @@ -0,0 +1,18 @@ +namespace QuizPleaseTest.Common.UI +{ + public class UIView : UIView where TVm : IUIViewModel + { + public TVm ViewModel { get; private set; } + + public virtual void Bind(TVm viewModel) + { + ViewModel = viewModel; + } + + public override void Release() + { + base.Release(); + ViewModel = default; + } + } +} diff --git a/Assets/Scripts/Common/UI/UIView.Generic.cs.meta b/Assets/Scripts/Common/UI/UIView.Generic.cs.meta new file mode 100644 index 0000000..8858033 --- /dev/null +++ b/Assets/Scripts/Common/UI/UIView.Generic.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1111111111111111111111111111111 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Common/UI/UIView.cs b/Assets/Scripts/Common/UI/UIView.cs new file mode 100644 index 0000000..d32f872 --- /dev/null +++ b/Assets/Scripts/Common/UI/UIView.cs @@ -0,0 +1,17 @@ +using UnityEngine; + +namespace QuizPleaseTest.Common.UI +{ + public class UIView : MonoBehaviour + { + public virtual void Initialize() + { + gameObject.SetActive(true); + } + + public virtual void Release() + { + gameObject.SetActive(false); + } + } +} diff --git a/Assets/Scripts/Common/UI/UIView.cs.meta b/Assets/Scripts/Common/UI/UIView.cs.meta new file mode 100644 index 0000000..76da144 --- /dev/null +++ b/Assets/Scripts/Common/UI/UIView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9999999999999999999999999999999 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings.meta b/Assets/Settings.meta new file mode 100644 index 0000000..bf32960 --- /dev/null +++ b/Assets/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c2222222222222222222222222222222 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/BootSettings.asset b/Assets/Settings/BootSettings.asset new file mode 100644 index 0000000..faa9a6d --- /dev/null +++ b/Assets/Settings/BootSettings.asset @@ -0,0 +1,17 @@ +%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: b4444444444444444444444444444444, type: 3} + m_Name: BootSettings + m_EditorClassIdentifier: + k__BackingField: 1 + k__BackingField: 5 + k__BackingField: 200 diff --git a/Assets/Settings/BootSettings.asset.meta b/Assets/Settings/BootSettings.asset.meta new file mode 100644 index 0000000..c98ff43 --- /dev/null +++ b/Assets/Settings/BootSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c1111111111111111111111111111111 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: