using System.Collections.Generic; using BlueWater.Interfaces; using UnityEngine; using Random = UnityEngine.Random; namespace BlueWater.Items { public class DataSo : ScriptableObject, IDataContainer { [SerializeField] protected List> _serializedDataList = new(); protected Dictionary _datas; private void OnEnable() { InitializeDictionary(); } /// /// 에디터에서 값이 변경되었을 때 호출되는 함수 /// private void OnValidate() { InitializeDictionary(); } private void InitializeDictionary() { _datas = new Dictionary(); foreach (var kvp in _serializedDataList) { if (!_datas.ContainsKey(kvp.Key)) { _datas.Add(kvp.Key, kvp.Value); } } } /// /// 에디터에서 변환할 때 사용하는 함수 /// public List> GetSerializedDataList() { return _serializedDataList; } /// /// 에디터에서 변환할 때 사용하는 함수 /// public void SetSerializedDataList(List> datas) { _serializedDataList = datas; } public Dictionary GetData() { return _datas; } public void SetData(Dictionary datas) { _datas = datas; } public T GetDataByIdx(string idx) { if (!_datas.TryGetValue(idx, out var data)) { Debug.LogError($"{idx}에 해당하는 값을 찾을 수 없습니다."); return default; } return data; } public int GetDataCount() { return _datas.Count; } /// /// 데이터 전체에서 랜덤한 Key에 접근해 Value를 리턴해주는 함수 /// public T GetRandomValue() { var randomIndex = Random.Range(0, GetDataCount()); var keys = new List(_datas.Keys); var randomKey = keys[randomIndex]; return _datas[randomKey]; } } }