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
}
}