using System; using System.Collections.Generic; using System.Threading.Tasks; using UnityEngine; using UnityEngine.U2D; namespace DDD { public class DataManager : Singleton, IManager { public ItemDataSo ItemDataSo { get; private set; } public RecipeDataSo RecipeDataSo { get; private set; } public FoodDataSo FoodDataSo { get; private set; } public DrinkDataSo DrinkDataSo { get; private set; } public IngredientDataSo IngredientDataSo { get; private set; } public TasteDataSo TasteDataSo { get; private set; } public EnvironmentDataSo EnvironmentDataSo { get; private set; } private Dictionary _spriteAtlas; public bool IsInitialized { get; private set; } public void PreInit() { } public async Task Init() { ItemDataSo = await AssetManager.LoadAsset(DataConstants.ItemDataSo); RecipeDataSo = await AssetManager.LoadAsset(DataConstants.RecipeDataSo); FoodDataSo = await AssetManager.LoadAsset(DataConstants.FoodDataSo); DrinkDataSo = await AssetManager.LoadAsset(DataConstants.DrinkDataSo); IngredientDataSo = await AssetManager.LoadAsset(DataConstants.IngredientDataSo); TasteDataSo = await AssetManager.LoadAsset(DataConstants.TasteDataSo); EnvironmentDataSo = await AssetManager.LoadAsset(DataConstants.EnvironmentDataSo); List spriteAtlases = await AssetManager.LoadAssetsByLabel(DataConstants.AtlasLabel); _spriteAtlas = new Dictionary(spriteAtlases.Count); foreach (var atlas in spriteAtlases) { if (atlas == null) continue; var count = atlas.spriteCount; if (count == 0) continue; var sprites = new Sprite[count]; atlas.GetSprites(sprites); foreach (var sprite in sprites) { if (sprite == null) continue; var key = sprite.name.Replace(CommonConstants.Clone, string.Empty).Trim(); _spriteAtlas.TryAdd(key, sprite); } } IsInitialized = true; } public void PostInit() { } public async Task WaitUntilInitialized() { while (!IsInitialized) { await Task.Yield(); } } public Sprite GetSprite(string key) => _spriteAtlas.GetValueOrDefault(key); // TODO : So가 늘어나는 경우 관리 방법 변경 필요성이 있음 // GetItemType(id) // GetItemImage // GetItemName } }