매니저 초기화 순서 보장

This commit is contained in:
Jeonghyeon Ha 2025-09-01 19:52:07 +09:00
parent f07d3f196b
commit 7d82436c0c
15 changed files with 135 additions and 51 deletions

View File

@ -47,14 +47,25 @@ protected override void OnApplicationQuit()
ReleaseAllCached();
}
public void PreInit() { }
public void PreInit()
{
}
public async Task Init()
public async Task PreInitAsync()
{
await Addressables.InitializeAsync().Task;
}
public void PostInit() { }
public Task InitAsync()
{
return Task.CompletedTask;
}
public Task PostInitAsync()
{
return Task.CompletedTask;
}
private string GetSafeAssetName(AssetReference assetReference)
{

View File

@ -36,14 +36,19 @@ public void PreInit()
_cinemachineBrain = GetComponent<CinemachineBrain>();
}
public Task Init()
public Task PreInitAsync()
{
return Task.CompletedTask;
}
public void PostInit()
public Task InitAsync()
{
return Task.CompletedTask;
}
public Task PostInitAsync()
{
return Task.CompletedTask;
}
public void RegisterCamera(CameraGameObject cameraGameObject)

View File

@ -22,15 +22,21 @@ public void PreInit()
RegisterFlowHandler();
}
public async Task Init()
public Task PreInitAsync()
{
return Task.CompletedTask;
}
public async Task InitAsync()
{
await LoadData();
await GetGameData().LoadData();
await InitializeAllFlowControllers();
}
public void PostInit()
public Task PostInitAsync()
{
return Task.CompletedTask;
}
private void CreateGameState()

View File

@ -17,20 +17,24 @@ public class DataManager : Singleton<DataManager>, IManager
public void PreInit()
{
}
public async Task Init()
public async Task PreInitAsync()
{
await LoadAllGameDataAssets();
await LoadSpriteAtlas();
}
public void PostInit()
public Task InitAsync()
{
return Task.CompletedTask;
}
public Task PostInitAsync()
{
return Task.CompletedTask;
}
private async Task LoadAllGameDataAssets()
{
var assets = await AssetManager.Instance.LoadAssetsByLabel<ScriptableObject>(AssetLabel);

View File

@ -26,12 +26,17 @@ public void PreInit()
GameFlowDataSo.CurrentGameState = GameFlowState.None;
}
public Task Init()
public Task PreInitAsync()
{
return Task.CompletedTask;
}
public async void PostInit()
public Task InitAsync()
{
return Task.CompletedTask;
}
public async Task PostInitAsync()
{
if (IsGameStarted() == false)
{
@ -39,7 +44,7 @@ public async void PostInit()
}
}
private bool IsGameStarted() => GameFlowDataSo.CurrentGameState != GameFlowState.None;
public bool IsGameStarted() => GameFlowDataSo.CurrentGameState != GameFlowState.None;
public async Task ChangeFlow(GameFlowState newFlowState)
{

View File

@ -57,7 +57,7 @@ private async Task Initialize()
}
}
// PreInit 단계 실행
// Start 이전 초기화 보장
foreach (var managerInstance in _managerInstances)
{
if (managerInstance is IManager manager)
@ -65,22 +65,31 @@ private async Task Initialize()
manager.PreInit();
}
}
// PreInit 단계 실행 ( 데이터 준비 등 )
foreach (var managerInstance in _managerInstances)
{
if (managerInstance is IManager manager)
{
await manager.PreInitAsync();
}
}
// Init 단계 실행 (비동기)
foreach (var managerInstance in _managerInstances)
{
if (managerInstance is IManager manager)
{
await manager.Init();
await manager.InitAsync();
}
}
// PostInit 단계 실행
// PostInit 단계 실행 ( 사실상 게임 시작된 상태 )
foreach (var managerInstance in _managerInstances)
{
if (managerInstance is IManager manager)
{
manager.PostInit();
await manager.PostInitAsync();
}
}
}

View File

@ -5,7 +5,8 @@ namespace DDD
public interface IManager
{
void PreInit();
Task Init();
void PostInit();
Task PreInitAsync();
Task InitAsync();
Task PostInitAsync();
}
}

View File

@ -18,8 +18,12 @@ public class LocalizationManager : Singleton<LocalizationManager>, IManager
private const string Description = "_description";
private readonly List<object> _singleArgBuffer = new(1);
public async void PreInit()
public void PreInit()
{
}
public async Task PreInitAsync()
{
_localizedCache.Clear();
_currentLocaleCode = GetCurrentLocaleCode();
@ -55,14 +59,14 @@ public async void PreInit()
_isInitialized = true;
}
public Task Init()
public Task InitAsync()
{
return Task.CompletedTask;
}
public void PostInit()
public Task PostInitAsync()
{
return Task.CompletedTask;
}
/// <summary>

View File

@ -51,9 +51,16 @@ private void OnDestroy()
EventBus.Unregister<SmartVariablesDirtyEvent>(this);
}
public void PreInit() { }
public void PreInit()
{
}
public async Task Init()
public Task PreInitAsync()
{
return Task.CompletedTask;
}
public async Task InitAsync()
{
Set(_smartStringKeys[SmartStringKey.Day], GetGameLevelState().Level);
Set(_smartStringKeys[SmartStringKey.ChecklistFoodCount], GetRestaurantManagementData().ChecklistFoodCount);
@ -66,10 +73,11 @@ public async Task Init()
await Task.CompletedTask;
}
public void PostInit()
public Task PostInitAsync()
{
// 도메인 단위 더티 이벤트를 구독하여 필요한 key만 갱신
EventBus.Register<SmartVariablesDirtyEvent>(this);
return Task.CompletedTask;
}
public void HandleEvent(SmartVariablesDirtyEvent evt)

View File

@ -30,14 +30,19 @@ public class SceneManager : Singleton<SceneManager>, IManager
private readonly Dictionary<GameFlowState, SceneData> _loadedSceneDatas = new();
private readonly Dictionary<string, SceneData> _assetKeyToSceneData = new();
public void PreInit()
{
_loadedSceneDatas.Clear();
_assetKeyToSceneData.Clear();
}
public async Task Init()
public Task PreInitAsync()
{
return Task.CompletedTask;
}
public async Task InitAsync()
{
var activeScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene();
#if UNITY_EDITOR
@ -64,9 +69,9 @@ public async Task Init()
await PreloadAll();
}
public void PostInit()
public Task PostInitAsync()
{
return Task.CompletedTask;
}
public async Task PreloadAll()

View File

@ -11,21 +11,26 @@ public class TimeManager : Singleton<TimeManager>, IManager, IEventHandler<TimeS
public float CurrentTimeScale { get; private set; } = 1f;
private float _baseFixedDeltaTime;
public void PreInit()
{
_baseFixedDeltaTime = Time.fixedDeltaTime;
EventBus.Register(this);
}
public Task Init()
public Task PreInitAsync()
{
return Task.CompletedTask;
}
public void PostInit()
public Task InitAsync()
{
return Task.CompletedTask;
}
public Task PostInitAsync()
{
return Task.CompletedTask;
}
private void OnDestroy()

View File

@ -30,20 +30,25 @@ public class InventoryManager : Singleton<InventoryManager>, IManager
[SerializeField]
private InventoryTestDataSo _inventoryTestDataSo;
#endif
public void PreInit()
{
}
public Task Init()
public Task PreInitAsync()
{
return Task.CompletedTask;
}
public void PostInit()
public Task InitAsync()
{
return Task.CompletedTask;
}
public Task PostInitAsync()
{
InitializeItemData();
return Task.CompletedTask;
}
private void InitializeItemData()

View File

@ -29,7 +29,12 @@ public void PreInit()
GameFlowManager.Instance.FlowHandlers.Add(this);
}
public Task Init()
public Task PreInitAsync()
{
return Task.CompletedTask;
}
public Task InitAsync()
{
var flowToUiMapping = UiData.FlowToUiMapping;
foreach (var flowToUis in flowToUiMapping)
@ -48,9 +53,9 @@ public Task Init()
return Task.CompletedTask;
}
public void PostInit()
public Task PostInitAsync()
{
return Task.CompletedTask;
}
public Task OnReadyNewFlow(GameFlowState newFlowState)

View File

@ -51,11 +51,10 @@ public class InputManager : Singleton<InputManager>, IManager
public InputActionMaps CurrentInputActionMap { get; private set; }
private readonly Dictionary<(InputActionMaps, string), InputAction> _cachedActions = new();
public void PreInit()
{
_currentPlayerInput = GetComponent<PlayerInput>();
_cachedActions.Clear();
foreach (var actionMap in _currentPlayerInput.actions.actionMaps)
{
@ -68,14 +67,19 @@ public void PreInit()
}
}
public Task Init()
public Task PreInitAsync()
{
return Task.CompletedTask;
}
public void PostInit()
public Task InitAsync()
{
return Task.CompletedTask;
}
public Task PostInitAsync()
{
return Task.CompletedTask;
}
private bool IsNullCurrentPlayerInput()

View File

@ -31,20 +31,27 @@ public void PreInit()
RegisterFlowHandler();
}
public async Task Init()
public Task PreInitAsync()
{
return Task.CompletedTask;
}
public async Task InitAsync()
{
await LoadData();
await GetRestaurantData().LoadData();
await InitializeAllFlowControllers();
}
public void PostInit()
public Task PostInitAsync()
{
var allInteractables = GetRestaurantState().EnvironmentState.GetAllInteractables();
foreach (var interactable in allInteractables)
{
}
return Task.CompletedTask;
}
private void CreateRestaurantState()