UAVManager.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. using UnityEngine;
  2. using UnityEngine.Events;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Xml;
  6. using Sfs2X.Entities.Data;
  7. public class UAVManager
  8. {
  9. public UnityEvent EquipedUAVChanged;
  10. private Dictionary<int, UAVData> dataDict;
  11. private Dictionary<int, UAVData> dataEquipDict;
  12. private List<UAVData> dataList;
  13. private List<Equipment> inventoryList;
  14. private Dictionary<int, UAVItem> inventoryDict;
  15. public UAVManager()
  16. {
  17. EquipedUAVChanged = new UnityEvent ();
  18. dataDict = new Dictionary<int, UAVData>();
  19. dataEquipDict = new Dictionary<int, UAVData> ();
  20. dataList = new List<UAVData>();
  21. InitByXML("XML/Config/All/uav_config");
  22. inventoryList = new List<Equipment> ();
  23. inventoryDict = new Dictionary<int, UAVItem> ();
  24. }
  25. public void InitByXML(string path)
  26. {
  27. TextAsset textAsset = (TextAsset)Resources.Load(path);
  28. XmlDocument xml = new XmlDocument();
  29. xml.LoadXml(textAsset.text);
  30. XmlNode mapNode = xml.SelectSingleNode("data");
  31. XmlNodeList nodeList = mapNode.SelectNodes("item");
  32. for(int i=0; i<nodeList.Count; i++)
  33. {
  34. UAVData data = new UAVData(nodeList[i] as XmlElement);
  35. if(!dataDict.ContainsKey(data.id))
  36. {
  37. dataDict.Add(data.id, data);
  38. dataList.Add(data);
  39. dataEquipDict.Add (data.equip, data);
  40. }
  41. else
  42. Debuger.LogError("uav " + data.id + " has duplicate");
  43. }
  44. }
  45. private static UAVManager instance;
  46. public static UAVManager GetInstance()
  47. {
  48. if(instance == null)
  49. {
  50. instance = new UAVManager();
  51. }
  52. return instance;
  53. }
  54. public UAVData GetData(int id)
  55. {
  56. if(dataDict.ContainsKey(id))
  57. return dataDict[id];
  58. Debuger.LogWarning("can not find uav["+id+"]");
  59. return null;
  60. }
  61. public UAVData GetDataByEquipId(int equipId)
  62. {
  63. if (dataEquipDict.ContainsKey (equipId))
  64. return dataEquipDict [equipId];
  65. Debuger.LogWarning ("can not find uav data by equip["+equipId+"]");
  66. return null;
  67. }
  68. public void ClearInventory()
  69. {
  70. inventoryDict.Clear ();
  71. inventoryList.Clear ();
  72. }
  73. private UAVItem equipedItem;
  74. public UAVItem GetEquipedItem()
  75. {
  76. return equipedItem;
  77. }
  78. public void SetEquipedItem(UAVItem uavItem)
  79. {
  80. this.equipedItem = uavItem;
  81. EquipedUAVChanged.Invoke ();
  82. }
  83. public UAVItem AddUAVItem(Equipment equipment)
  84. {
  85. UAVData uavData = GetDataByEquipId (equipment.GetData().id);
  86. UAVItem item = new UAVItem (uavData, equipment);
  87. inventoryDict.Add (equipment.GetData().id, item);
  88. inventoryList.Add (equipment);
  89. if (equipedItem == null)
  90. SetEquipedItem (item);
  91. return item;
  92. }
  93. public UAVItem GetUAVItem(int equipId)
  94. {
  95. UAVItem uavItem = null;
  96. inventoryDict.TryGetValue (equipId, out uavItem);
  97. return uavItem;
  98. }
  99. public List<Equipment> GetInventoryList()
  100. {
  101. return inventoryList;
  102. }
  103. public static ISFSObject GetMyUAVSFSData()
  104. {
  105. return GetUAVSFSData (UAVManager.GetInstance().GetEquipedItem());
  106. }
  107. public static ISFSObject GetUAVSFSData(UAVItem item)
  108. {
  109. ISFSObject data = new SFSObject ();
  110. if(item != null)
  111. {
  112. data.PutInt ("t", item.GetData ().id);
  113. data.PutInt ("l", item.GetEquipment().GetLevel ());
  114. }
  115. return data;
  116. }
  117. public static UAVItem ParseUAVItem(ISFSObject data)
  118. {
  119. if(data != null && data.ContainsKey("t"))
  120. {
  121. int itemId = data.GetInt ("t");
  122. int level = data.GetInt ("l");
  123. UAVData uavData = UAVManager.GetInstance ().GetData (itemId);
  124. Equipment equipment = new Equipment (0, EquipManager.GetInstance ().GetData (uavData.equip));
  125. equipment.SetLevel (level);
  126. UAVItem item = new UAVItem (uavData, equipment);
  127. return item;
  128. }
  129. return null;
  130. }
  131. }