diff --git a/Assets/_DDD/_Scripts/GameFlow/GameFlowManager.cs b/Assets/_DDD/_Scripts/GameFlow/GameFlowManager.cs index 109080e86..5c4cf76e4 100644 --- a/Assets/_DDD/_Scripts/GameFlow/GameFlowManager.cs +++ b/Assets/_DDD/_Scripts/GameFlow/GameFlowManager.cs @@ -17,8 +17,8 @@ public enum GameFlowState public class GameFlowManager : Singleton, IManager { public GameFlowDataSo GameFlowDataSo; - public GameFlowAssetsSo GameFlowAssetsSo; public GameFlowSceneMappingSo GameFlowSceneMappingSo; + public List FlowHandlers = new List(); public void Init() { @@ -69,27 +69,6 @@ private async Task ReadyNewFlow(GameFlowState newFlowState) { GameFlowDataSo.CurrentGameState = newFlowState; - if (GameFlowAssetsSo.FlowItems.TryGetValue(newFlowState, out var stringKeys)) - { - foreach (var key in stringKeys) - { - await AssetManager.LoadAsset(key); - } - } - - if (GameFlowAssetsSo.FlowAssets.TryGetValue(newFlowState, out var assetRefs)) - { - foreach (var assetRef in assetRefs) - { - var obj = await AssetManager.LoadAsset(assetRef); - - if (obj is GameFlowReadyHandler handler) - { - await handler.OnReadyNewFlow(newFlowState); - } - } - } - OpenFlowScene(newFlowState); StartFlow(); diff --git a/Assets/_DDD/_Scripts/GameFlow/GameFlowReadyHandler.cs b/Assets/_DDD/_Scripts/GameFlow/GameFlowTask.cs similarity index 69% rename from Assets/_DDD/_Scripts/GameFlow/GameFlowReadyHandler.cs rename to Assets/_DDD/_Scripts/GameFlow/GameFlowTask.cs index 3f79cd3b7..fbc42f2fa 100644 --- a/Assets/_DDD/_Scripts/GameFlow/GameFlowReadyHandler.cs +++ b/Assets/_DDD/_Scripts/GameFlow/GameFlowTask.cs @@ -3,7 +3,7 @@ namespace DDD { - public abstract class GameFlowReadyHandler : ScriptableObject + public abstract class GameFlowTask : ScriptableObject { public abstract Task OnReadyNewFlow(GameFlowState newFlowState); } diff --git a/Assets/_DDD/_Scripts/GameFlow/IGameFlowHandler.cs b/Assets/_DDD/_Scripts/GameFlow/IGameFlowHandler.cs new file mode 100644 index 000000000..3089ff6cb --- /dev/null +++ b/Assets/_DDD/_Scripts/GameFlow/IGameFlowHandler.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace DDD +{ + public interface IGameFlowHandler + { + public Task OnReadyNewFlow(GameFlowState newFlowState); + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/CreateRestaurantPlayer.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/CreateRestaurantPlayer.cs index 81e29ce4e..2fc6891b4 100644 --- a/Assets/_DDD/_Scripts/RestaurantCharacter/CreateRestaurantPlayer.cs +++ b/Assets/_DDD/_Scripts/RestaurantCharacter/CreateRestaurantPlayer.cs @@ -4,7 +4,7 @@ namespace DDD { [CreateAssetMenu(fileName = "CreateRestaurantPlayer", menuName = "GameFlow/CreateRestaurantPlayer")] - public class CreateRestaurantPlayer : GameFlowReadyHandler + public class CreateRestaurantPlayer : GameFlowTask { [SerializeField] private Vector3 _spawnPosition; diff --git a/Assets/_DDD/_Scripts/RestaurantController/RestaurantController.cs b/Assets/_DDD/_Scripts/RestaurantController/RestaurantController.cs new file mode 100644 index 000000000..f1a449a95 --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantController/RestaurantController.cs @@ -0,0 +1,76 @@ +using System.Threading.Tasks; +using UnityEngine; + +namespace DDD +{ + public class RestaurantController : Singleton, IManager, IGameFlowHandler + { + private RestaurantEnvironmentState _restaurantEnvironmentState; + public RestaurantEnvironmentState RestaurantEnvironmentState => _restaurantEnvironmentState; + + // TODO : GameManager에 등록되게 So에 추가해주세요. + + public void Init() + { + LoadOrCreateRestaurantState(); + RegisterFlowHandler(); + } + + public void PostInit() + { + GenerateDummyEnvironmentProps();// XXX : DUMMY! REMOVE THIS + } + + private void RegisterFlowHandler() + { + GameFlowManager.Instance.FlowHandlers.Add(this); + } + + private void LoadOrCreateRestaurantState() + { + // TODO : Load states from saved files. if none, create them. + _restaurantEnvironmentState = new RestaurantEnvironmentState(); + } + + private void GenerateDummyEnvironmentProps() + { + // Make dummy placement data + foreach (EnvironmentData prop in DataManager.Instance.EnvironmentDataSo.GetDataList()) + { + if (prop.EnvironmentType != EnvironmentType.Prop) + { + continue; + } + + for (int i = 0; i < 10; i++) + { + // Make random position + Vector2 randomPos = new Vector2( + Random.Range(-10f, 10f), + Random.Range(10f, 20f) + ); + RestaurantEnvironmentData randomPropData = new RestaurantEnvironmentData(); + randomPropData.Position = randomPos; + randomPropData.Id = prop.Id; + _restaurantEnvironmentState.RestaurantEnvironmentProps.Add(randomPropData); + } + } + } + + + public 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); + // Combine handles and return it + return Task.WhenAll(playerHandle, propHandle); + } + + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironment.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironment.cs index 9a023babe..cebb28c5b 100644 --- a/Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironment.cs +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironment.cs @@ -4,34 +4,18 @@ namespace DDD { [CreateAssetMenu(fileName = "CreateEnvironment", menuName = "GameFlow/CreateEnvironment")] - public class CreateEnvironment : GameFlowReadyHandler + public class CreateEnvironment : GameFlowTask { public override async Task OnReadyNewFlow(GameFlowState newFlowState) { var baseRestaurantEnvironmentPrefab = await AssetManager.LoadAsset(CommonConstants.BaseRestaurantEnvironment); - for (int i = 0; i < 10; i++) + var props = RestaurantController.Instance.RestaurantEnvironmentState.RestaurantEnvironmentProps; + foreach (var prop in props) { - var restaurantEnvironment = Instantiate(baseRestaurantEnvironmentPrefab).GetComponent(); - restaurantEnvironment.Initialize("Item_Environment_001"); - } - - for (int i = 0; i < 10; i++) - { - var restaurantEnvironment = Instantiate(baseRestaurantEnvironmentPrefab).GetComponent(); - restaurantEnvironment.Initialize("Item_Environment_002"); - } - - for (int i = 0; i < 10; i++) - { - var restaurantEnvironment = Instantiate(baseRestaurantEnvironmentPrefab).GetComponent(); - restaurantEnvironment.Initialize("Item_Environment_003"); - } - - for (int i = 0; i < 10; i++) - { - var restaurantEnvironment = Instantiate(baseRestaurantEnvironmentPrefab).GetComponent(); - restaurantEnvironment.Initialize("Item_Environment_004"); + var restaurantEnvironment = + Instantiate(baseRestaurantEnvironmentPrefab).GetComponent(); + restaurantEnvironment.Initialize(prop); } } } diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs index 4103c4c36..21d5a7152 100644 --- a/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs @@ -12,11 +12,11 @@ public class RestaurantEnvironment : MonoBehaviour private Transform _visualLook; private Renderer _renderer; - public async void Initialize(string id) + public async void Initialize(RestaurantEnvironmentData data) { await DataManager.Instance.WaitUntilInitialized(); - EnvironmentData environmentData = DataManager.Instance.EnvironmentDataSo.GetDataById(id); + EnvironmentData environmentData = DataManager.Instance.EnvironmentDataSo.GetDataById(data.Id); _collider = GetComponent(); _visualLook = transform.Find(CommonConstants.VisualLook); @@ -48,12 +48,7 @@ public async void Initialize(string id) _collider.isTrigger = environmentData.IsTrigger == 1; - Vector2 randomPos = new Vector2( - Random.Range(-10f, 10f), - Random.Range(10f, 20f) - ); - - transform.position = new Vector3(randomPos.x, 0f, randomPos.y); + transform.position = new Vector3(data.Position.x, 0f, data.Position.y); transform.localScale = Vector3.one * environmentData.Size; } } diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentData.cs b/Assets/_DDD/_Scripts/RestaurantState/RestaurantEnvironmentData.cs similarity index 100% rename from Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentData.cs rename to Assets/_DDD/_Scripts/RestaurantState/RestaurantEnvironmentData.cs diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentDataSo.cs b/Assets/_DDD/_Scripts/RestaurantState/RestaurantEnvironmentDataSo.cs similarity index 100% rename from Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentDataSo.cs rename to Assets/_DDD/_Scripts/RestaurantState/RestaurantEnvironmentDataSo.cs diff --git a/Assets/_DDD/_Scripts/RestaurantState/RestaurantEnvironmentState.cs b/Assets/_DDD/_Scripts/RestaurantState/RestaurantEnvironmentState.cs new file mode 100644 index 000000000..e8e53c3d3 --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantState/RestaurantEnvironmentState.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace DDD +{ + // [CreateAssetMenu(fileName = "FILENAME", menuName = "MENUNAME", order = 0)] + public class RestaurantEnvironmentState : ScriptableObject + { + // TODO : Public??? + public List RestaurantEnvironmentProps = new List(); + public List RestaurantEnvironmentObjects = new List(); + } +} \ No newline at end of file