게임 플로우 변경 (PreInit 추가)
This commit is contained in:
parent
ffd534cb13
commit
f0e24f4c43
@ -16,7 +16,7 @@ MonoBehaviour:
|
||||
m_GUID: 30e7f67fe9aaa7849a34c9b6e2bc53ae
|
||||
m_SerializeEntries:
|
||||
- m_GUID: 0912c3de85fd61848a41575faa2794ed
|
||||
m_Address: CreateEnvironment
|
||||
m_Address: CreateEnvironmentSo
|
||||
m_ReadOnly: 0
|
||||
m_SerializedLabels: []
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
@ -56,7 +56,7 @@ MonoBehaviour:
|
||||
- Atlas
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
- m_GUID: 47e757b9a170ab649af14c4d7b80ac41
|
||||
m_Address: CreateRestaurantPlayer
|
||||
m_Address: CreateRestaurantPlayerSo
|
||||
m_ReadOnly: 0
|
||||
m_SerializedLabels: []
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
|
@ -10,5 +10,5 @@ MonoBehaviour:
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 419e829d5eec9544e94be59817cdb69c, type: 3}
|
||||
m_Name: CreateEnvironment
|
||||
m_Name: CreateEnvironmentSo
|
||||
m_EditorClassIdentifier:
|
@ -10,6 +10,6 @@ MonoBehaviour:
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 246a7785bd15ac84b9f240005b987f1f, type: 3}
|
||||
m_Name: CreateRestaurantPlayer
|
||||
m_Name: CreateRestaurantPlayerSo
|
||||
m_EditorClassIdentifier:
|
||||
_spawnPosition: {x: 0, y: 0, z: 15}
|
@ -15,21 +15,19 @@ namespace DDD
|
||||
{
|
||||
public class AssetManager : Singleton<AssetManager>, IManager
|
||||
{
|
||||
public void Init()
|
||||
public void PreInit()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public async void PostInit()
|
||||
public async Task Init()
|
||||
{
|
||||
try
|
||||
{
|
||||
await Addressables.InitializeAsync().Task;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Assert(false, $"Addressables initialization failed\n{e}");
|
||||
}
|
||||
await Addressables.InitializeAsync().Task;
|
||||
}
|
||||
|
||||
public void PostInit()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public static async Task<T> LoadAsset<T>(string key) where T : UnityEngine.Object
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Sirenix.OdinInspector;
|
||||
using Unity.Cinemachine;
|
||||
|
||||
@ -16,12 +17,17 @@ public class CameraManager : Singleton<CameraManager>, IManager
|
||||
private Dictionary<CameraType, CameraGameObject> _cameraGameObjects = new();
|
||||
|
||||
private CinemachineBrain _cinemachineBrain;
|
||||
|
||||
public void Init()
|
||||
|
||||
public void PreInit()
|
||||
{
|
||||
_cinemachineBrain = GetComponent<CinemachineBrain>();
|
||||
}
|
||||
|
||||
public Task Init()
|
||||
{
|
||||
return Task.CompletedTask;;
|
||||
}
|
||||
|
||||
public void PostInit()
|
||||
{
|
||||
|
||||
|
@ -15,48 +15,46 @@ public class DataManager : Singleton<DataManager>, IManager
|
||||
private Dictionary<string, Sprite> _spriteAtlas;
|
||||
|
||||
public bool IsInitialized { get; private set; }
|
||||
|
||||
public void Init()
|
||||
|
||||
public void PreInit()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public async void PostInit()
|
||||
public async Task Init()
|
||||
{
|
||||
try
|
||||
ItemDataSo = await AssetManager.LoadAsset<ItemDataSo>(DataConstants.ItemDataSo);
|
||||
FoodDataSo = await AssetManager.LoadAsset<FoodDataSo>(DataConstants.FoodDataSo);
|
||||
EnvironmentDataSo = await AssetManager.LoadAsset<EnvironmentDataSo>(DataConstants.EnvironmentDataSo);
|
||||
|
||||
List<SpriteAtlas> spriteAtlases = await AssetManager.LoadAssetsByLabel<SpriteAtlas>(DataConstants.AtlasLabel);
|
||||
_spriteAtlas = new Dictionary<string, Sprite>(spriteAtlases.Count);
|
||||
|
||||
foreach (var atlas in spriteAtlases)
|
||||
{
|
||||
ItemDataSo = await AssetManager.LoadAsset<ItemDataSo>(DataConstants.ItemDataSo);
|
||||
FoodDataSo = await AssetManager.LoadAsset<FoodDataSo>(DataConstants.FoodDataSo);
|
||||
EnvironmentDataSo = await AssetManager.LoadAsset<EnvironmentDataSo>(DataConstants.EnvironmentDataSo);
|
||||
if (atlas == null) continue;
|
||||
|
||||
var count = atlas.spriteCount;
|
||||
if (count == 0) continue;
|
||||
|
||||
var sprites = new Sprite[count];
|
||||
atlas.GetSprites(sprites);
|
||||
|
||||
List<SpriteAtlas> spriteAtlases = await AssetManager.LoadAssetsByLabel<SpriteAtlas>(DataConstants.AtlasLabel);
|
||||
_spriteAtlas = new Dictionary<string, Sprite>(spriteAtlases.Count);
|
||||
|
||||
foreach (var atlas in spriteAtlases)
|
||||
foreach (var sprite in sprites)
|
||||
{
|
||||
if (atlas == null) continue;
|
||||
|
||||
var count = atlas.spriteCount;
|
||||
if (count == 0) continue;
|
||||
|
||||
var sprites = new Sprite[count];
|
||||
atlas.GetSprites(sprites);
|
||||
if (sprite == null) continue;
|
||||
|
||||
foreach (var sprite in sprites)
|
||||
{
|
||||
if (sprite == null) continue;
|
||||
|
||||
var key = sprite.name.Replace(CommonConstants.Clone, string.Empty).Trim();
|
||||
_spriteAtlas.TryAdd(key, sprite);
|
||||
}
|
||||
var key = sprite.name.Replace(CommonConstants.Clone, string.Empty).Trim();
|
||||
_spriteAtlas.TryAdd(key, sprite);
|
||||
}
|
||||
}
|
||||
|
||||
IsInitialized = true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError($"So bind failed\n{e.Message}");
|
||||
}
|
||||
IsInitialized = true;
|
||||
}
|
||||
|
||||
public void PostInit()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public async Task WaitUntilInitialized()
|
||||
|
@ -2,7 +2,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AddressableAssets;
|
||||
|
||||
namespace DDD
|
||||
{
|
||||
@ -19,24 +18,22 @@ public class GameFlowManager : Singleton<GameFlowManager>, IManager
|
||||
public GameFlowDataSo GameFlowDataSo;
|
||||
public GameFlowSceneMappingSo GameFlowSceneMappingSo;
|
||||
public List<IGameFlowHandler> FlowHandlers = new List<IGameFlowHandler>();
|
||||
|
||||
public void Init()
|
||||
|
||||
public void PreInit()
|
||||
{
|
||||
GameFlowDataSo.CurrentGameState = GameFlowState.None;
|
||||
}
|
||||
|
||||
public Task Init()
|
||||
{
|
||||
return Task.CompletedTask;;
|
||||
}
|
||||
|
||||
public void PostInit()
|
||||
{
|
||||
try
|
||||
if (IsGameStarted() == false)
|
||||
{
|
||||
if (IsGameStarted() == false)
|
||||
{
|
||||
ChangeFlow(GameFlowState.ReadyForRestaurant);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogWarning(e);
|
||||
ChangeFlow(GameFlowState.ReadyForRestaurant);
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,10 +62,15 @@ private void EndCurrentFlow()
|
||||
|
||||
}
|
||||
|
||||
private void ReadyNewFlow(GameFlowState newFlowState)
|
||||
private async void ReadyNewFlow(GameFlowState newFlowState)
|
||||
{
|
||||
GameFlowDataSo.CurrentGameState = newFlowState;
|
||||
|
||||
foreach (var handler in FlowHandlers)
|
||||
{
|
||||
await handler.OnReadyNewFlow(newFlowState);
|
||||
}
|
||||
|
||||
OpenFlowScene(newFlowState);
|
||||
|
||||
StartFlow();
|
||||
|
@ -13,12 +13,17 @@ public class FadeManager : Singleton<FadeManager>, IManager
|
||||
private float _fadeInDuration = 1f;
|
||||
|
||||
private CanvasGroup _canvasGroup;
|
||||
|
||||
public void Init()
|
||||
|
||||
public void PreInit()
|
||||
{
|
||||
_canvasGroup = GetComponent<CanvasGroup>();
|
||||
}
|
||||
|
||||
public Task Init()
|
||||
{
|
||||
return Task.CompletedTask;;
|
||||
}
|
||||
|
||||
public void PostInit()
|
||||
{
|
||||
_canvasGroup.alpha = 0f;
|
||||
|
@ -10,7 +10,7 @@ public class GameManager : Singleton<GameManager>
|
||||
|
||||
private List<Singleton> _managerInstances;
|
||||
|
||||
protected void Start()
|
||||
protected async void Start()
|
||||
{
|
||||
base.OnAwake();
|
||||
|
||||
@ -24,7 +24,7 @@ protected void Start()
|
||||
|
||||
// 매니저 초기화
|
||||
_managerInstances = new List<Singleton>(_managerDefinitionSo.ManagerClasses.Count);
|
||||
|
||||
|
||||
foreach (var managerObject in _managerDefinitionSo.ManagerClasses)
|
||||
{
|
||||
var managerInstance = Instantiate(managerObject);
|
||||
@ -33,7 +33,15 @@ protected void Start()
|
||||
_managerInstances.Add(managerInstance);
|
||||
if (managerInstance is IManager manager)
|
||||
{
|
||||
manager.Init();
|
||||
manager.PreInit();
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var managerInstance in _managerInstances)
|
||||
{
|
||||
if (managerInstance is IManager manager)
|
||||
{
|
||||
await manager.Init();
|
||||
}
|
||||
}
|
||||
foreach (var managerInstance in _managerInstances)
|
||||
|
@ -1,8 +1,11 @@
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DDD
|
||||
{
|
||||
public interface IManager
|
||||
{
|
||||
void Init();
|
||||
void PreInit();
|
||||
Task Init();
|
||||
void PostInit();
|
||||
}
|
||||
}
|
@ -23,14 +23,14 @@ public class SceneManager : Singleton<SceneManager>, IManager
|
||||
|
||||
private SceneInstance _currentSceneInstance;
|
||||
public Action<SceneInstance> OnSceneChanged;
|
||||
|
||||
public void Init()
|
||||
|
||||
public void PreInit()
|
||||
{
|
||||
Array sceneTypeArray = Enum.GetValues(typeof(SceneType));
|
||||
_loadedScenes = new Dictionary<SceneType, SceneInstance>(sceneTypeArray.Length);
|
||||
}
|
||||
|
||||
public async void PostInit()
|
||||
public async Task Init()
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -46,6 +46,11 @@ public async void PostInit()
|
||||
Debug.LogWarning($"Scene preload failed\n{e}");
|
||||
}
|
||||
}
|
||||
|
||||
public void PostInit()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public SceneInstance GetSceneInstance(SceneType sceneType) => _loadedScenes[sceneType];
|
||||
|
||||
|
@ -3,8 +3,8 @@
|
||||
|
||||
namespace DDD
|
||||
{
|
||||
[CreateAssetMenu(fileName = "CreateRestaurantPlayer", menuName = "GameFlow/CreateRestaurantPlayer")]
|
||||
public class CreateRestaurantPlayer : GameFlowTask
|
||||
[CreateAssetMenu(fileName = "CreateRestaurantPlayerSo", menuName = "GameFlow/CreateRestaurantPlayerSo")]
|
||||
public class CreateRestaurantPlayerSo : GameFlowTask
|
||||
{
|
||||
[SerializeField]
|
||||
private Vector3 _spawnPosition;
|
@ -7,15 +7,21 @@ public class RestaurantController : Singleton<RestaurantController>, IManager, I
|
||||
{
|
||||
private RestaurantEnvironmentState _restaurantEnvironmentState;
|
||||
public RestaurantEnvironmentState RestaurantEnvironmentState => _restaurantEnvironmentState;
|
||||
|
||||
// TODO : GameManager에 등록되게 So에 추가해주세요.
|
||||
|
||||
public void Init()
|
||||
|
||||
private const string CreateRestaurantPlayerSo = "CreateRestaurantPlayerSo";
|
||||
private const string CreateEnvironmentSo = "CreateEnvironmentSo";
|
||||
|
||||
public void PreInit()
|
||||
{
|
||||
LoadOrCreateRestaurantState();
|
||||
RegisterFlowHandler();
|
||||
}
|
||||
|
||||
public Task Init()
|
||||
{
|
||||
return Task.CompletedTask;;
|
||||
}
|
||||
|
||||
public void PostInit()
|
||||
{
|
||||
GenerateDummyEnvironmentProps();// XXX : DUMMY! REMOVE THIS
|
||||
@ -29,7 +35,7 @@ private void RegisterFlowHandler()
|
||||
private void LoadOrCreateRestaurantState()
|
||||
{
|
||||
// TODO : Load states from saved files. if none, create them.
|
||||
_restaurantEnvironmentState = new RestaurantEnvironmentState();
|
||||
_restaurantEnvironmentState = ScriptableObject.CreateInstance<RestaurantEnvironmentState>();
|
||||
}
|
||||
|
||||
private void GenerateDummyEnvironmentProps()
|
||||
@ -58,19 +64,17 @@ private void GenerateDummyEnvironmentProps()
|
||||
}
|
||||
|
||||
|
||||
public Task OnReadyNewFlow(GameFlowState newFlowState)
|
||||
public async Task OnReadyNewFlow(GameFlowState newFlowState)
|
||||
{
|
||||
if (newFlowState == GameFlowState.ReadyForRestaurant)
|
||||
{
|
||||
CreateRestaurantPlayer createRestaurantPlayerJob = new CreateRestaurantPlayer();
|
||||
CreateEnvironment createEnvironmentJob = new CreateEnvironment();
|
||||
var playerHandle = createRestaurantPlayerJob.OnReadyNewFlow(newFlowState);
|
||||
var propHandle = createEnvironmentJob.OnReadyNewFlow(newFlowState);
|
||||
CreateRestaurantPlayerSo createRestaurantPlayerSoJob = await AssetManager.LoadAsset<CreateRestaurantPlayerSo>(CreateRestaurantPlayerSo);
|
||||
CreateEnvironmentSo createEnvironmentSoJob = await AssetManager.LoadAsset<CreateEnvironmentSo>(CreateEnvironmentSo);
|
||||
var playerHandle = createRestaurantPlayerSoJob.OnReadyNewFlow(newFlowState);
|
||||
var propHandle = createEnvironmentSoJob.OnReadyNewFlow(newFlowState);
|
||||
// Combine handles and return it
|
||||
return Task.WhenAll(playerHandle, propHandle);
|
||||
await Task.WhenAll(playerHandle, propHandle);
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
@ -3,8 +3,8 @@
|
||||
|
||||
namespace DDD
|
||||
{
|
||||
[CreateAssetMenu(fileName = "CreateEnvironment", menuName = "GameFlow/CreateEnvironment")]
|
||||
public class CreateEnvironment : GameFlowTask
|
||||
[CreateAssetMenu(fileName = "CreateEnvironmentSo", menuName = "GameFlow/CreateEnvironmentSo")]
|
||||
public class CreateEnvironmentSo : GameFlowTask
|
||||
{
|
||||
public override async Task OnReadyNewFlow(GameFlowState newFlowState)
|
||||
{
|
||||
@ -13,8 +13,7 @@ public override async Task OnReadyNewFlow(GameFlowState newFlowState)
|
||||
var props = RestaurantController.Instance.RestaurantEnvironmentState.RestaurantEnvironmentProps;
|
||||
foreach (var prop in props)
|
||||
{
|
||||
var restaurantEnvironment =
|
||||
Instantiate(baseRestaurantEnvironmentPrefab).GetComponent<RestaurantEnvironment>();
|
||||
var restaurantEnvironment = Instantiate(baseRestaurantEnvironmentPrefab).GetComponent<RestaurantEnvironment>();
|
||||
restaurantEnvironment.Initialize(prop);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user