CapersProject/Assets/02.Scripts/Tycoon/TycoonManager.cs
2024-09-09 18:50:37 +09:00

67 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using BlueWater.Audios;
using UnityEngine;
using Sirenix.OdinInspector;
namespace BlueWater.Tycoons
{
public class TycoonManager : Singleton<TycoonManager>
{
[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<string, LevelData> _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<CustomerTableController>();
TycoonStageController = GetComponent<TycoonStageController>();
}
private Dictionary<string, T> InitializeDictionary<T>(List<T> dataList, Func<T, string> keySelector)
{
return dataList.ToDictionary(keySelector);
}
public T GetDataByIdx<T>(Dictionary<string, T> 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);
}
}