您不能選擇超過 %s 個話題 話題必須以字母或數字為開頭,可包含連接號 ('-') 且最長為 35 個字
 
 
 

145 行
4.4 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using CIG;
  5. using SUISS.Core.Utilities;
  6. public class BalloonManager : ICanSerialize
  7. {
  8. public BalloonManager()
  9. {
  10. this._cashBalloonFactory = new CashBalloonFactory();
  11. this._cityAdvisorBalloonFactory = new CityAdvisorBalloonFactory();
  12. this._xpBalloonFactory = new XPBalloonFactory();
  13. this.CollectFactories();
  14. }
  15. public BalloonManager(StorageDictionary storage)
  16. {
  17. this._storage = storage;
  18. if (this._storage.Contains("CashBalloonFactoryStorage"))
  19. {
  20. this._cashBalloonFactory = new CashBalloonFactory(this._storage.GetStorageDict("CashBalloonFactoryStorage"));
  21. }
  22. if (this._storage.Contains("CityAdvisorBalloonFactoryStorage"))
  23. {
  24. this._cityAdvisorBalloonFactory = new CityAdvisorBalloonFactory(this._storage.GetStorageDict("CityAdvisorBalloonFactoryStorage"));
  25. }
  26. if (this._storage.Contains("XPBalloonFactoryStorage"))
  27. {
  28. this._xpBalloonFactory = new XPBalloonFactory(this._storage.GetStorageDict("XPBalloonFactoryStorage"));
  29. }
  30. this.CollectFactories();
  31. }
  32. //[DebuggerBrowsable(DebuggerBrowsableState.Never)]
  33. public event BalloonManager.BalloonSpawnedEventHandler BalloonSpawnedEvent;
  34. private void FireBalloonSpawnedEvent(Balloon balloon)
  35. {
  36. if (this.BalloonSpawnedEvent != null)
  37. {
  38. this.BalloonSpawnedEvent(balloon);
  39. }
  40. }
  41. //[DebuggerBrowsable(DebuggerBrowsableState.Never)]
  42. public event BalloonManager.BalloonExpiredEventHandler BalloonExpiredEvent;
  43. private void FireBalloonExpiredEvent(Balloon balloon)
  44. {
  45. if (this.BalloonExpiredEvent != null)
  46. {
  47. this.BalloonExpiredEvent(balloon);
  48. }
  49. }
  50. //[DebuggerBrowsable(DebuggerBrowsableState.Never)]
  51. public event BalloonManager.BalloonCollectedEventHandler BalloonCollectedEvent;
  52. private void FireBalloonCollectedEvent(Balloon balloon)
  53. {
  54. if (this.BalloonCollectedEvent != null)
  55. {
  56. this.BalloonCollectedEvent(balloon);
  57. }
  58. }
  59. public Balloon SpawnBalloon(BalloonFactory factory)
  60. {
  61. Balloon balloon = factory.ProduceBalloon();
  62. if (balloon != null)
  63. {
  64. balloon.CollectedEvent += this.OnBalloonCollected;
  65. balloon.ExpiredEvent += this.OnBalloonExpired;
  66. this.FireBalloonSpawnedEvent(balloon);
  67. }
  68. return balloon;
  69. }
  70. public BalloonFactory PickRandomVehicleBalloonFactory()
  71. {
  72. List<BalloonFactory> list = this._vehicleBalloonFactories.FindAll((BalloonFactory x) => x.CanProduce());
  73. if (list.Count > 0)
  74. {
  75. return list.PickRandom<BalloonFactory>();
  76. }
  77. return null;
  78. }
  79. private void CollectFactories()
  80. {
  81. this._vehicleBalloonFactories.Add(this._cashBalloonFactory);
  82. this._vehicleBalloonFactories.Add(this._cityAdvisorBalloonFactory);
  83. this._vehicleBalloonFactories.Add(this._xpBalloonFactory);
  84. }
  85. private void OnBalloonExpired(Balloon balloon)
  86. {
  87. balloon.CollectedEvent -= this.OnBalloonCollected;
  88. balloon.ExpiredEvent -= this.OnBalloonExpired;
  89. this.FireBalloonExpiredEvent(balloon);
  90. }
  91. private void OnBalloonCollected(Balloon balloon)
  92. {
  93. balloon.CollectedEvent -= this.OnBalloonCollected;
  94. balloon.ExpiredEvent -= this.OnBalloonExpired;
  95. this.FireBalloonCollectedEvent(balloon);
  96. }
  97. public StorageDictionary Serialize()
  98. {
  99. if (this._storage == null)
  100. {
  101. this._storage = new StorageDictionary();
  102. }
  103. this._storage.Set<CashBalloonFactory>("CashBalloonFactoryStorage", this._cashBalloonFactory);
  104. this._storage.Set<CityAdvisorBalloonFactory>("CityAdvisorBalloonFactoryStorage", this._cityAdvisorBalloonFactory);
  105. this._storage.Set<XPBalloonFactory>("XPBalloonFactoryStorage", this._xpBalloonFactory);
  106. return this._storage;
  107. }
  108. private readonly List<BalloonFactory> _vehicleBalloonFactories = new List<BalloonFactory>();
  109. private CashBalloonFactory _cashBalloonFactory;
  110. private CityAdvisorBalloonFactory _cityAdvisorBalloonFactory;
  111. private XPBalloonFactory _xpBalloonFactory;
  112. private const string CashBalloonFactoryStorageKey = "CashBalloonFactoryStorage";
  113. private const string CityAdvisorBalloonFactoryStorageKey = "CityAdvisorBalloonFactoryStorage";
  114. private const string XPBalloonFactoryStorageKey = "XPBalloonFactoryStorage";
  115. private StorageDictionary _storage;
  116. public delegate void BalloonSpawnedEventHandler(Balloon balloon);
  117. public delegate void BalloonExpiredEventHandler(Balloon balloon);
  118. public delegate void BalloonCollectedEventHandler(Balloon balloon);
  119. }