데이터를 로드하는 인터페이스를 구현
public interface ILoader<Key, Item>
{
Dictionary<Key, Item> MakeDic();
bool Validate();
}
데이터를 불러오기 위해 로더와 데이터 두 개의 클래스를 구현
public class ShopData
{
public int ID;
public int name;
public ShopConditionType condition;
...
}
데이터 클래스는 불러올 데이터들을 멤버 변수로만 가지고 있음
public class ShopDataLoader : ILoader<int, ShopData>
{
[XmlElement("ShopData")]
public List<ShopData> _shopDatas = new List<ShopData>();
public Dictionary<int, ShopData> MakeDic()
{
Dictionary<int, ShopData> dic = new Dictionary<int, ShopData>();
foreach (ShopData data in _shopDatas)
dic.Add(data.ID, data);
return dic;
}
...
}
로더 클래스는 파일로부터 실제 데이터 파싱하여 읽어오고
데이터 클래스로 만들어 dictionary로 만들어 반환
xml 파일이 데이터 list로 들어오는 부분은 아래와 같은데 잘 이해가 가진 않는다
private Loader LoadXml<Loader, Key, Item>(string name) where Loader : ILoader<Key, Item>, new()
{
XmlSerializer xs = new XmlSerializer(typeof(Loader));
TextAsset textAsset = Resources.Load<TextAsset>("Data/" + name);
using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(textAsset.text)))
return (Loader)xs.Deserialize(stream);
}
text asset을 읽어온 후 해당 데이터들을 deserialize하며
자동으로 list에 넣는 것으로 생각 됨