123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- using System.Xml;
- using LitJson;
- public class SkinManager {
- private Dictionary<int, SkinData> dataDict;
- private Dictionary<int, List<SkinData>> dataListByCraftId;
- public SkinData defaultData;
- private bool isPriceGot;
- private int startEquipedId;
- private int currentEquipedId;
- public SkinManager()
- {
- dataDict = new Dictionary<int, SkinData>();
- dataListByCraftId = new Dictionary<int, List<SkinData>>();
- InitByXML("XML/Config/All/skin_config");
- }
-
- public void InitByXML(string path)
- {
- TextAsset textAsset = (TextAsset)Resources.Load(path);
-
- XmlDocument xml = new XmlDocument();
- xml.LoadXml(textAsset.text);
-
- XmlNode mapNode = xml.SelectSingleNode("data");
-
- XmlNodeList nodeList = mapNode.SelectNodes("item");
- for(int i=0; i<nodeList.Count; i++)
- {
- SkinData data = new SkinData(nodeList[i]);
- if(data.id == 0)
- {
- defaultData = data;
- defaultData.bought = true;
- continue;
- }
- if(!dataDict.ContainsKey(data.id))
- {
- dataDict.Add(data.id, data);
- FillDataListByCraftId(data);
- }
- else
- Debuger.LogError("skin " + data.id + " has duplicate");
- }
- }
- private void FillDataListByCraftId(SkinData data)
- {
- int craftId = data.craftId;
- if(!dataListByCraftId.ContainsKey(craftId))
- {
- dataListByCraftId.Add(craftId, new List<SkinData>());
- }
- dataListByCraftId[craftId].Add(data);
- }
-
- private static SkinManager instance;
- public static SkinManager GetInstance()
- {
- if(instance == null)
- {
- instance = new SkinManager();
- }
- return instance;
- }
- public SkinData GetData(int id)
- {
- if(dataDict.ContainsKey(id))
- return dataDict[id];
- return null;
- }
- public int GetSkinId(int craftId)
- {
- if(dataListByCraftId.ContainsKey(craftId))
- {
- List<SkinData> list = dataListByCraftId[craftId];
- for(int i=0; i<list.Count; i++)
- {
- SkinData data = list[i];
- if(data.equiped > 0)
- {
- return data.id;
- }
- }
- }
- return 0;
- }
- public Texture GetSkinTexture(int craftId, int id)
- {
- SkinData data = GetData(id);
- if(data != null)
- {
- return Resources.Load<Texture>("Textures/CraftSkin/"+data.model+"/"+craftId);
- }
- return Resources.Load<Texture>("Textures/CraftSkin/"+craftId);
- }
- public void InitDataState(JsonData json)
- {
- for(int i=0; i<json.Count; i++)
- {
- JsonData o = json[i];
- int itemId = JsonUtil.ToInt(o["itemid"]);
- int equiped = JsonUtil.ToInt(o["equiped"]);
- if(equiped > 0)
- Equip(itemId, equiped, equiped);
- Bought(itemId);
- }
- }
- public void RequestDataList(CallBackUtil.SimpleCallBack callBack)
- {
- if(!isPriceGot)
- Session.GetInstance().GetNetworkManager().ShopList(BuyUtil.ItemType.Skin, callBack);
- else
- callBack();
- }
- public List<SkinData> GetDataList(int craftId)
- {
- if(dataListByCraftId.ContainsKey(craftId))
- return dataListByCraftId[craftId];
- return new List<SkinData>();
- }
- public void SetDataList(JsonData json)
- {
- isPriceGot = true;
- for(int i=0; i<json.Count; i++)
- {
- JsonData o = json[i];
- int itemId = JsonUtil.ToInt(o["itemid"]);
- int currency = JsonUtil.ToInt(o["currency"]);
- int price = JsonUtil.ToInt(o["price"]);
- SkinData data = GetData(itemId);
- data.currency = currency;
- data.price = price;
- }
- }
- public void Bought(int id)
- {
- SkinData data = GetData(id);
- if(data != null)
- data.bought = true;
- }
- public void RecordStartEquipId(int craftId)
- {
- startEquipedId = currentEquipedId = GetSkinId(craftId);
- }
- public void SyncEquipId(int craftId)
- {
- if(startEquipedId != currentEquipedId)
- {
- SkinData data = GetData(currentEquipedId);
- if(data != null)
- Session.GetInstance().GetNetworkManager().Equip(BuyUtil.ItemType.Skin, data.id, data.equiped);
- else
- Session.GetInstance().GetNetworkManager().Equip(BuyUtil.ItemType.Skin, startEquipedId, 0);
- }
- }
- public void Equip(int id, int value, int craftId)
- {
- SkinData data = GetData(id);
- if (data != null) {
- if (value != 0) {
- data.equiped = data.craftId;
- currentEquipedId = data.id;
- } else {
- data.equiped = 0;
- currentEquipedId = 0;
- }
- } else {
- currentEquipedId = 0;
- }
- if(dataListByCraftId.ContainsKey(craftId))
- {
- List<SkinData> dataList = dataListByCraftId[craftId];
- for(int i=0; i<dataList.Count; i++)
- {
- data = dataList[i];
- if(data.id != id)
- {
- data.equiped = 0;
- }
- }
- }
- }
- }
|