From 7ddbf3be68d27a0bd27c92dfb4a46ac9f39c4db3 Mon Sep 17 00:00:00 2001 From: NTG_Lenovo Date: Tue, 15 Jul 2025 13:48:01 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A0=88=EC=8A=A4=ED=86=A0=EB=9E=91=20ready=20?= =?UTF-8?q?flow=EC=97=90=EC=84=9C=20createEnvironment=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/_DDD/_Scripts/GameData/DataManager.cs | 24 +++++--- .../CreateEnvironment.cs | 38 ++++++++++++ .../RestaurantEnvironment.cs | 60 +++++++++++++++++++ .../RestaurantEnvironment.cs.meta | 2 + .../RestaurantEnvironmentData.cs | 12 ++++ .../RestaurantEnvironmentData.cs.meta | 2 + .../RestaurantEnvironmentDataSo.cs | 12 ++++ .../RestaurantEnvironmentDataSo.cs.meta | 2 + Assets/_DDD/_Scripts/Utilities/Constants.cs | 6 ++ 9 files changed, 151 insertions(+), 7 deletions(-) create mode 100644 Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironment.cs create mode 100644 Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs create mode 100644 Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs.meta create mode 100644 Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentData.cs create mode 100644 Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentData.cs.meta create mode 100644 Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentDataSo.cs create mode 100644 Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentDataSo.cs.meta diff --git a/Assets/_DDD/_Scripts/GameData/DataManager.cs b/Assets/_DDD/_Scripts/GameData/DataManager.cs index 56bf9541f..164606562 100644 --- a/Assets/_DDD/_Scripts/GameData/DataManager.cs +++ b/Assets/_DDD/_Scripts/GameData/DataManager.cs @@ -1,5 +1,5 @@ using System; -using System.Linq; +using System.Threading.Tasks; using UnityEngine; namespace DDD @@ -7,6 +7,10 @@ namespace DDD public class DataManager : Singleton, IManager { public ItemDataSo ItemDataSo { get; private set; } + public FoodDataSo FoodDataSo { get; private set; } + public EnvironmentDataSo EnvironmentDataSo { get; private set; } + + public bool IsInitialized { get; private set; } public void Init() { @@ -18,22 +22,28 @@ public async void PostInit() try { ItemDataSo = await AssetManager.LoadAsset(DataConstants.ItemDataSo); + FoodDataSo = await AssetManager.LoadAsset(DataConstants.FoodDataSo); + EnvironmentDataSo = await AssetManager.LoadAsset(DataConstants.EnvironmentDataSo); + + IsInitialized = true; } catch (Exception e) { Debug.LogError($"So bind failed\n{e.Message}"); } } + + public async Task WaitUntilInitialized() + { + while (!IsInitialized) + { + await Task.Yield(); + } + } // TODO : So가 늘어나는 경우 관리 방법 변경 필요성이 있음 // GetItemType(id) // GetItemImage // GetItemName - - public ItemType GetItemType(string key) - { - ItemData itemData = ItemDataSo.ItemDataList.FirstOrDefault(item => item.Id == key); - return itemData?.ItemType ?? ItemType.None; - } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironment.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironment.cs new file mode 100644 index 000000000..740b9327f --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironment.cs @@ -0,0 +1,38 @@ +using System.Threading.Tasks; +using UnityEngine; + +namespace DDD +{ + [CreateAssetMenu(fileName = "CreateEnvironment", menuName = "GameFlow/CreateEnvironment")] + public class CreateEnvironment : GameFlowReadyHandler + { + public override async Task OnReadyNewFlow(GameFlowState newFlowState) + { + var baseRestaurantEnvironmentPrefab = await AssetManager.LoadAsset(CommonConstants.BaseRestaurantEnvironment); + + 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_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"); + } + } + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs new file mode 100644 index 000000000..889d8731a --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs @@ -0,0 +1,60 @@ +using Spine.Unity; +using Unity.VisualScripting; +using UnityEngine; + +namespace DDD +{ + public class RestaurantEnvironment : MonoBehaviour + { + private RestaurantEnvironmentData _restaurantEnvironmentData; + + private Collider _collider; + private Transform _visualLook; + private Renderer _renderer; + + public async void Initialize(string id) + { + await DataManager.Instance.WaitUntilInitialized(); + + EnvironmentData environmentData = DataManager.Instance.EnvironmentDataSo.GetDataById(id); + + _collider = GetComponent(); + _visualLook = transform.Find(CommonConstants.VisualLook); + + if (environmentData == null) + { + Debug.Assert(false, "environmentData is null"); + } + + if (environmentData.RendererType == RendererType.Sprite) + { + var spriteRenderer = _visualLook.AddComponent(); + _renderer = spriteRenderer; + spriteRenderer.sprite = environmentData.Sprite; + spriteRenderer.sortingOrder = 5; + Material material = await AssetManager.LoadAsset(DataConstants.BasePropSpriteMaterial); + spriteRenderer.material = new Material(material); + } + else if (environmentData.RendererType == RendererType.Spine) + { + var skeletonAnimation = _visualLook.AddComponent(); + var skeletonDataAsset = await AssetManager.LoadAsset(environmentData.SkeletonDataName); + skeletonAnimation.skeletonDataAsset = skeletonDataAsset; + var spineController = transform.AddComponent(); + spineController.SetSkin(environmentData.SkinName); + spineController.PlayAnimation(environmentData.DefaultAnimationName, true); + _renderer = _visualLook.GetComponent(); + } + + _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.localScale = Vector3.one * environmentData.Size; + } + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs.meta b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs.meta new file mode 100644 index 000000000..0c75c2afa --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0ca3054addaa7fb4a86dfb3ad8241452 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentData.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentData.cs new file mode 100644 index 000000000..11f13505b --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentData.cs @@ -0,0 +1,12 @@ +using System; +using UnityEngine; + +namespace DDD +{ + [Serializable] + public class RestaurantEnvironmentData + { + public string Id; + public Vector2 Position; + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentData.cs.meta b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentData.cs.meta new file mode 100644 index 000000000..a535e2fe8 --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentData.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0d90911f4c827e3439a9a28d25e9bf93 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentDataSo.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentDataSo.cs new file mode 100644 index 000000000..f15957f13 --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentDataSo.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using Sirenix.OdinInspector; +using UnityEngine; + +namespace DDD +{ + [CreateAssetMenu(fileName = "RestaurantEnvironmentDataSo", menuName = "RestaurantEnvironment/RestaurantEnvironmentDataSo")] + public class RestaurantEnvironmentDataSo : SerializedScriptableObject + { + public Dictionary> RestaurantEnvironmentDatas = new(); + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentDataSo.cs.meta b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentDataSo.cs.meta new file mode 100644 index 000000000..6f91fd479 --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironmentDataSo.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 6d9bb690776b59d40a1cc2e7036d78bd \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Utilities/Constants.cs b/Assets/_DDD/_Scripts/Utilities/Constants.cs index 4a8cbeaae..7863de96a 100644 --- a/Assets/_DDD/_Scripts/Utilities/Constants.cs +++ b/Assets/_DDD/_Scripts/Utilities/Constants.cs @@ -4,12 +4,18 @@ public static class CommonConstants { public const string VisualLook = "VisualLook"; public const string RestaurantPlayer = "RestaurantPlayer"; + public const string BaseRestaurantEnvironment = "BaseRestaurantEnvironment"; } public static class DataConstants { public const string ItemDataSo = "ItemDataSo"; + public const string FoodDataSo = "FoodDataSo"; + public const string EnvironmentDataSo = "EnvironmentDataSo"; + public const string SpriteDataSo = "SpriteDataSo"; public const string RestaurantPlayerDataSo = "RestaurantPlayerDataSo"; + + public const string BasePropSpriteMaterial = "BasePropSpriteMaterial"; } public static class RestaurantPlayerAnimation