123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- using UnityEngine;
- using UnityEngine.Events;
- using System.Collections;
- using System.Collections.Generic;
- using System.Xml;
- using LitJson;
- public class EquipManager
- {
- public UnityEvent InventoryUpdate;
- private Dictionary<int, EquipData> dataDict;
- private Dictionary<int, EquipedData> equipedDict;
- private List<Equipment> inventoryList;
- private List<Equipment> hpList;
- private List<Equipment> dmgList;
- private List<Equipment> moveList;
- private bool m_Initialized;
- public bool initialized
- {
- get{
- return m_Initialized;
- }
- }
- public EquipManager()
- {
- InventoryUpdate = new UnityEvent ();
- dataDict = new Dictionary<int, EquipData>();
- InitByXML("XML/Config/All/equip_config");
- equipedDict = new Dictionary<int, EquipedData> ();
- inventoryList = new List<Equipment> ();
- hpList = new List<Equipment> ();
- dmgList = new List<Equipment> ();
- moveList = new List<Equipment> ();
- }
- 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++)
- {
- EquipData data = new EquipData(nodeList[i] as XmlElement);
- if(!dataDict.ContainsKey(data.id))
- dataDict.Add(data.id, data);
- else
- Debuger.LogError("Equipment " + data.id + " has duplicate");
- }
- }
- public EquipData GetData(int id)
- {
- EquipData data = null;
- dataDict.TryGetValue (id, out data);
- return data;
- }
- public void RequestInventory()
- {
- if (m_Initialized) {
- InventoryUpdate.Invoke ();
- return;
- }
- EquipRequest.Inventory ().ResultEvent.AddListener ((bool success, JsonData data)=>{
- if(success)
- {
- InitEquipInventory(data);
- }
- });
- }
- private void InitEquipInventory(JsonData jsonArr)
- {
- inventoryList.Clear ();
- hpList.Clear ();
- dmgList.Clear ();
- moveList.Clear ();
- for(int i=0; i<jsonArr.Count; i++)
- {
- JsonData data = jsonArr [i];
- int id = JsonUtil.ToInt (data["id"]);
- int itemId = JsonUtil.ToInt (data["item_id"]);
- int level = JsonUtil.ToInt (data["level"]);
- int count = JsonUtil.ToInt (data["count"]);
- Equipment equipment = new Equipment (id, GetData (itemId));
- equipment.SetCount (count);
- equipment.SetLevel (level);
- AddEquipment (equipment);
- }
- SortRecommand ();
- InitEquiped ();
- InventoryUpdate.Invoke ();
- }
- public Equipment GetEquipment(int id)
- {
- for(int i=0; i<inventoryList.Count; i++)
- {
- Equipment equipment = inventoryList [i];
- if(equipment.GetId() == id)
- {
- return equipment;
- }
- }
- return null;
- }
- public void RewardEquipment(int id, int itemId, int count)
- {
- bool isNew = false;
- Equipment equipment = GetEquipment (id);
- if(equipment == null)
- {
- equipment = new Equipment (id, GetData (itemId));
- equipment.SetLevel (1);
- isNew = true;
- }
- equipment.SetCount (count);
- AddEquipment (equipment);
- if(isNew)
- {
- RefreshAllRecommandEquiped ();
- }
- }
- private void AddEquipment(Equipment equipment)
- {
- inventoryList.Add (equipment);
- if (equipment.HasHpProperty ())
- hpList.Add (equipment);
- if (equipment.HasDamageProperty ())
- dmgList.Add (equipment);
-
- moveList.Add (equipment);
- }
- private void SortRecommand()
- {
- hpList.Sort (HpCompare);
- dmgList.Sort (DamageCompare);
- moveList.Sort (MoveCompare);
- }
- private static int HpCompare(Equipment a, Equipment b)
- {
- if (a.GetHpProperty () > b.GetHpProperty ())
- return -1;
- else if (a.GetHpProperty () < b.GetHpProperty ())
- return 1;
- return 0;
- }
- private static int DamageCompare(Equipment a, Equipment b)
- {
- if (a.GetDamageProperty () > b.GetDamageProperty ())
- return -1;
- else if (a.GetDamageProperty () < b.GetDamageProperty ())
- return 1;
- return 0;
- }
- private static int MoveCompare(Equipment a, Equipment b)
- {
- if (a.GetMoveProperty () > b.GetMoveProperty ()) {
- return -1;
- }
- else if (a.GetMoveProperty () < b.GetMoveProperty ()) {
- return 1;
- }
- float ap = a.GetHpProperty () + a.GetDamageProperty ();
- float bp = a.GetDamageProperty () + a.GetDamageProperty ();
- if (ap > bp)
- return -1;
- else if (ap < bp)
- return 1;
- return 0;
- }
- public List<Equipment> GetInventoryList()
- {
- return inventoryList;
- }
- private void InitEquiped()
- {
- equipedDict.Clear ();
- List<CraftConfigData> list = CraftManager.GetInstance ().GetDataList ();
- for(int i=0; i<list.Count; i++)
- {
- CraftConfigData data = list [i];
- EquipedData equipedData = new EquipedData (data.id);
- equipedDict.Add (data.id, equipedData);
- }
- m_Initialized = true;
- }
- public EquipedData GetEquipedData(int craftId)
- {
- if(equipedDict.ContainsKey(craftId))
- return equipedDict [craftId];
- return null;
- }
- public void RefreshAllRecommandEquiped()
- {
- SortRecommand ();
- List<CraftConfigData> list = CraftManager.GetInstance ().GetDataList ();
- for(int i=0; i<list.Count; i++)
- {
- EquipedData equipedData = GetEquipedData (list[i].id);
- if(equipedData != null)
- {
- equipedData.UpdateRecommandList ();
- }
- }
- }
- public Equipment GetHpPriority(Dictionary<int, Equipment> rcmdDict)
- {
- for(int i=0; i<hpList.Count; i++)
- {
- Equipment equipment = hpList [i];
- if(!rcmdDict.ContainsKey(equipment.GetData().id))
- {
- return equipment;
- }
- }
- return null;
- }
- public Equipment GetDamagePriority(Dictionary<int, Equipment> rcmdDict)
- {
- for(int i=0; i<dmgList.Count; i++)
- {
- Equipment equipment = dmgList [i];
- if(!rcmdDict.ContainsKey(equipment.GetData().id))
- {
- return equipment;
- }
- }
- return null;
- }
- public Equipment GetMovePriority(Dictionary<int, Equipment> rcmdDict)
- {
- for(int i=0; i<moveList.Count; i++)
- {
- Equipment equipment = moveList [i];
- if(!rcmdDict.ContainsKey(equipment.GetData().id))
- {
- return equipment;
- }
- }
- return null;
- }
- private static EquipManager instance;
- public static EquipManager GetInstance()
- {
- if(instance == null)
- {
- instance = new EquipManager ();
- }
- return instance;
- }
- }
|