using System; using System.Collections.Generic; using System.Linq; using BlueWater.Audios; using UnityEngine; using Sirenix.OdinInspector; namespace BlueWater.Tycoons { public class TycoonManager : Singleton { [field: Title("컴포넌트")] [field: SerializeField] public CustomerTableController CustomerTableController { get; private set; } [field: SerializeField] public TycoonStageController TycoonStageController { get; private set; } [SerializeField] private string _dailyBgm; [SerializeField, Required] private LevelDataSo _levelDataSo; private Dictionary _levelDatas; public Action OnTycoonOpenedEvent; public Action OnTycoonClosedEvent; protected override void OnAwake() { InitializeComponents(); _levelDatas = InitializeDictionary(_levelDataSo.Datas, data => data.Idx); } private void Start() { if (!string.IsNullOrEmpty(_dailyBgm)) { AudioManager.Instance.PlayBgm(_dailyBgm); } } [Button("컴포넌트 초기화")] private void InitializeComponents() { CustomerTableController = GetComponent(); TycoonStageController = GetComponent(); } private Dictionary InitializeDictionary(List dataList, Func keySelector) { return dataList.ToDictionary(keySelector); } public T GetDataByIdx(Dictionary dataDictionary, string idx) where T : class { if (dataDictionary.TryGetValue(idx, out var data)) return data; Debug.LogError($"{idx}와 일치하는 아이템이 없습니다."); return null; } public LevelData GetLevelDataByIdx(string idx) => GetDataByIdx(_levelDatas, idx); } }