Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 

191 righe
5.1 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using SUISS.Core;
  5. using SUISSEngine;
  6. using UnityEngine;
  7. [RequireComponent(typeof(Serializing))]
  8. public sealed class CIGPurchasedBuildingsManager : SingletonMonobehaviour<CIGPurchasedBuildingsManager>
  9. {
  10. //[DebuggerBrowsable(DebuggerBrowsableState.Never)]
  11. public event CIGPurchasedBuildingsManager.BuildingCountChangedHandler BuildingCountChangedEvent;
  12. private void FireBuildingCountChangedEvent()
  13. {
  14. if (this.BuildingCountChangedEvent != null)
  15. {
  16. this.BuildingCountChangedEvent();
  17. }
  18. }
  19. public void AddBuilding(CIGBuilding building)
  20. {
  21. this.AddPurchasedCount(building.CachedName, 1);
  22. this._serializing.Serialize();
  23. this.FireBuildingCountChangedEvent();
  24. }
  25. public void ConsumeBuilding(CIGBuilding building)
  26. {
  27. this.AddConsumedCount(building.CachedName, 1);
  28. this._serializing.Serialize();
  29. this.FireBuildingCountChangedEvent();
  30. }
  31. public bool IsUnconsumed(CIGBuilding building)
  32. {
  33. int num;
  34. if (this._purchasedBuildings.TryGetValue(building.CachedName, out num))
  35. {
  36. int num2;
  37. if (!this._consumedBuildings.TryGetValue(building.CachedName, out num2))
  38. {
  39. num2 = 0;
  40. }
  41. return num > num2;
  42. }
  43. return false;
  44. }
  45. public Dictionary<string, int> GetUnconsumedBuildings()
  46. {
  47. Dictionary<string, int> dictionary = new Dictionary<string, int>();
  48. foreach (KeyValuePair<string, int> keyValuePair in this._purchasedBuildings)
  49. {
  50. int num;
  51. if (!this._consumedBuildings.TryGetValue(keyValuePair.Key, out num))
  52. {
  53. num = 0;
  54. }
  55. if (num < keyValuePair.Value)
  56. {
  57. dictionary.Add(keyValuePair.Key, keyValuePair.Value - num);
  58. }
  59. }
  60. return dictionary;
  61. }
  62. public int TotalUnconsumedBuildings
  63. {
  64. get
  65. {
  66. int num = 0;
  67. int num2 = 0;
  68. foreach (KeyValuePair<string, int> keyValuePair in this._purchasedBuildings)
  69. {
  70. if (keyValuePair.Value > 0)
  71. {
  72. num2 += keyValuePair.Value;
  73. }
  74. }
  75. foreach (KeyValuePair<string, int> keyValuePair2 in this._consumedBuildings)
  76. {
  77. if (keyValuePair2.Value > 0)
  78. {
  79. num += keyValuePair2.Value;
  80. }
  81. }
  82. return Math.Max(0, num2 - num);
  83. }
  84. }
  85. private void AddPurchasedCount(string buildingName, int amount)
  86. {
  87. int num;
  88. if (!this._purchasedBuildings.TryGetValue(buildingName, out num))
  89. {
  90. num = amount;
  91. }
  92. else
  93. {
  94. num += amount;
  95. }
  96. this._purchasedBuildings[buildingName] = Mathf.Max(0, num);
  97. }
  98. private void AddConsumedCount(string buildingName, int amount)
  99. {
  100. int num;
  101. if (!this._consumedBuildings.TryGetValue(buildingName, out num))
  102. {
  103. num = amount;
  104. }
  105. else
  106. {
  107. num += amount;
  108. }
  109. this._consumedBuildings[buildingName] = Mathf.Max(0, num);
  110. }
  111. private void OnSerialize(Dictionary<string, object> values)
  112. {
  113. this.SaveDictionary<int>(values, "PurchasedBuildings", this._purchasedBuildings);
  114. this.SaveDictionary<int>(values, "ConsumedBuildings", this._consumedBuildings);
  115. }
  116. private void OnDeserialize(Dictionary<string, object> values)
  117. {
  118. this._purchasedBuildings = this.LoadDictionary<int>(values, "PurchasedBuildings");
  119. this._consumedBuildings = this.LoadDictionary<int>(values, "ConsumedBuildings");
  120. }
  121. private void OnDeserialized()
  122. {
  123. if (this._purchasedBuildings == null)
  124. {
  125. this._purchasedBuildings = new Dictionary<string, int>();
  126. }
  127. if (this._consumedBuildings == null)
  128. {
  129. this._consumedBuildings = new Dictionary<string, int>();
  130. }
  131. }
  132. private void SaveDictionary<T>(Dictionary<string, object> storage, string key, Dictionary<string, T> values)
  133. {
  134. Dictionary<string, object> dictionary = new Dictionary<string, object>();
  135. foreach (KeyValuePair<string, T> keyValuePair in values)
  136. {
  137. dictionary.Add(keyValuePair.Key, keyValuePair.Value);
  138. }
  139. storage[key] = dictionary;
  140. }
  141. private Dictionary<string, T> LoadDictionary<T>(Dictionary<string, object> storage, string key)
  142. {
  143. if (!storage.ContainsKey(key))
  144. {
  145. return new Dictionary<string, T>();
  146. }
  147. if (!(storage[key] is Dictionary<string, object>))
  148. {
  149. throw new InvalidOperationException(string.Format("Found {0} at storage[{1}]. Expecting {2}", storage[key].GetType().Name, key, typeof(Dictionary<string, object>).Name));
  150. }
  151. Dictionary<string, T> dictionary = new Dictionary<string, T>();
  152. Dictionary<string, object> dictionary2 = (Dictionary<string, object>)storage[key];
  153. foreach (KeyValuePair<string, object> keyValuePair in dictionary2)
  154. {
  155. if (!(dictionary2[keyValuePair.Key] is T))
  156. {
  157. throw new InvalidOperationException(string.Format("Found {0} at storage[{1}]. Expecting {2}", storage[key].GetType().Name, key, typeof(T).Name));
  158. }
  159. dictionary.Add(keyValuePair.Key, (T)((object)dictionary2[keyValuePair.Key]));
  160. }
  161. return dictionary;
  162. }
  163. private const string PurchasedBuildingsKey = "PurchasedBuildings";
  164. private const string ConsumedBuildingsKey = "ConsumedBuildings";
  165. [SerializeField]
  166. private Serializing _serializing;
  167. private Dictionary<string, int> _purchasedBuildings;
  168. private Dictionary<string, int> _consumedBuildings;
  169. public delegate void BuildingCountChangedHandler();
  170. }