using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; using UnityEngine; using UnityEngine.Networking; namespace WildAttack { /// /// 关卡配置结构体 /// public struct ProcessData { public int id; public List monsterId; public List> weight; public List refreshTime; } /// /// process.csv /// public class ProcessModule : Singleton, IModule { #region Member public Dictionary processDataDic; #endregion #region Override public IEnumerator LoadCSV(string fileName, Action callback) { string sPath = CSVUtils.GetStreamingAssetPath() + "/" + fileName; UnityWebRequest www = UnityWebRequest.Get(sPath); yield return www.SendWebRequest(); File.WriteAllText(Application.persistentDataPath + "/" + fileName, www.downloadHandler.text, Encoding.GetEncoding("utf-8")); www.Dispose(); SaveData(CSVUtils.GetInstance().LoadFile(Application.persistentDataPath, fileName)); callback(); } public void SaveData(string[] lineArr) { processDataDic = new Dictionary(); for (int i = 1; i < lineArr.Length; i++) { string[] data = lineArr[i].Split(','); List idList = new List(); string[] idListStr = data[2].Split('|'); for (int k = 0; k < idListStr.Length; k++) { idList.Add(int.Parse(idListStr[k])); } List> weightList = new List>(); if (idListStr.Length == 1) { string[] weightStr = data[3].Split('|'); List weight = new List(); foreach (var item in weightStr) { weight.Add(int.Parse(item)); } weightList.Add(weight); } else { for (int j = 0; j < idList.Count; j++) { List weight = new List(); string[] weightStr; if (j == 0) { weightStr = data[j + 3].Split('\"')[1].Split('|'); } else if (j == idList.Count - 1) { weightStr = data[j + 3].Split('\"')[0].Split('|'); } else { weightStr = data[j + 3].Split('|'); } foreach (var item in weightStr) { weight.Add(int.Parse(item)); } weightList.Add(weight); } } List timeList = new List(); string[] timeListStr = data[3 + idList.Count].Split('|'); for (int z = 0; z < timeListStr.Length; z++) { timeList.Add(float.Parse(timeListStr[z])); } processDataDic[int.Parse(data[0])] = new ProcessData() { id = int.Parse(data[0]), monsterId = idList, weight = weightList, refreshTime = timeList, }; } } #endregion #region Function public ProcessData GetData(int id) { ProcessData module = new ProcessData(); if (processDataDic.ContainsKey(id)) { module = processDataDic[id]; } return module; } #endregion } }