diff options
Diffstat (limited to 'WorldlineKeepers/Assets/Scripts/Data')
-rw-r--r-- | WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs | 55 | ||||
-rw-r--r-- | WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs.meta | 11 | ||||
-rw-r--r-- | WorldlineKeepers/Assets/Scripts/Data/DataManager.cs | 19 |
3 files changed, 83 insertions, 2 deletions
diff --git a/WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs b/WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs new file mode 100644 index 0000000..312eba8 --- /dev/null +++ b/WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs @@ -0,0 +1,55 @@ +using JetBrains.Annotations; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Net.Mime; +using System.Reflection; +using UnityEngine; +using yutokun; +using static UnityEngine.Rendering.DebugUI; + +namespace WK.Data +{ + + public class CSVReader + { + private static Dictionary<string/*key*/, int/*index*/> m_KeyMapping = new Dictionary<string, int>(); + private static List<List<string>> m_Rows = new List<List<string>>(); + + public static List<T> Read<T>(string content) where T : new() + { + m_KeyMapping.Clear(); + m_Rows.Clear(); + + m_Rows = CSVParser.LoadFromString(content); + // µÚÒ»ÐÐÊÇkey + List<string> keys = m_Rows[0]; + for (int i = 0; i < keys.Count; ++i) + { + m_KeyMapping.Add(keys[i], i); + } + List<T> result = new List<T>(); + Type type = typeof(T); + for (int i = 1; i < m_Rows.Count; ++i) + { + if (m_Rows[i][0][0] == '#') // ×¢ÊÍ + continue; + List<string> row = m_Rows[i]; + T obj = new T(); + foreach(var key in m_KeyMapping) + { + int index = key.Value; + var fieldInfo = type.GetField(key.Key); + if(fieldInfo != null) + { + fieldInfo.SetValue(obj, Convert.ChangeType(row[index], fieldInfo.FieldType)); + } + } + result.Add(obj); + } + return result; + } + + } + +}
\ No newline at end of file diff --git a/WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs.meta b/WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs.meta new file mode 100644 index 0000000..52670ce --- /dev/null +++ b/WorldlineKeepers/Assets/Scripts/Data/CSVReader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6b35022c04390a46beb2b27711a7950 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Scripts/Data/DataManager.cs b/WorldlineKeepers/Assets/Scripts/Data/DataManager.cs index e56c80b..a3d1257 100644 --- a/WorldlineKeepers/Assets/Scripts/Data/DataManager.cs +++ b/WorldlineKeepers/Assets/Scripts/Data/DataManager.cs @@ -9,8 +9,8 @@ namespace WK.Data public class DataManager : Singleton<DataManager> { - private Dictionary<string/*uid*/, CharacterStatsMetadata> m_CharacterStatsMetadata; - private Dictionary<string/*uid*/, BuffMetadata> m_BuffMetadata; + private Dictionary<string/*uid*/, CharacterStatsMetadata> m_CharacterStatsMetadata = new Dictionary<string, CharacterStatsMetadata>(); + private Dictionary<string/*uid*/, BuffMetadata> m_BuffMetadata = new Dictionary<string, BuffMetadata>(); public CharacterStatsMetadata GetCharacterStats(string uid) { @@ -32,6 +32,21 @@ namespace WK.Data return null; } + public void Load() + { + LoadDefaultStats(); + } + + private void LoadDefaultStats() + { + TextAsset text = ResourceManager.Instance.LoadAsset<TextAsset>(StaticDefine.StatsFilePath); + List<CharacterStatsMetadata> stats = CSVReader.Read<CharacterStatsMetadata>(text.text); + for(int i = 0; i < stats.Count; ++i) + { + m_CharacterStatsMetadata.Add(stats[i].uid, stats[i]); + } + } + } }
\ No newline at end of file |