using System; using System.Collections.Generic; using System.Diagnostics; using CIG; using SUISS.Core.Utilities; public class BalloonManager : ICanSerialize { public BalloonManager() { this._cashBalloonFactory = new CashBalloonFactory(); this._cityAdvisorBalloonFactory = new CityAdvisorBalloonFactory(); this._xpBalloonFactory = new XPBalloonFactory(); this.CollectFactories(); } public BalloonManager(StorageDictionary storage) { this._storage = storage; if (this._storage.Contains("CashBalloonFactoryStorage")) { this._cashBalloonFactory = new CashBalloonFactory(this._storage.GetStorageDict("CashBalloonFactoryStorage")); } if (this._storage.Contains("CityAdvisorBalloonFactoryStorage")) { this._cityAdvisorBalloonFactory = new CityAdvisorBalloonFactory(this._storage.GetStorageDict("CityAdvisorBalloonFactoryStorage")); } if (this._storage.Contains("XPBalloonFactoryStorage")) { this._xpBalloonFactory = new XPBalloonFactory(this._storage.GetStorageDict("XPBalloonFactoryStorage")); } this.CollectFactories(); } //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event BalloonManager.BalloonSpawnedEventHandler BalloonSpawnedEvent; private void FireBalloonSpawnedEvent(Balloon balloon) { if (this.BalloonSpawnedEvent != null) { this.BalloonSpawnedEvent(balloon); } } //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event BalloonManager.BalloonExpiredEventHandler BalloonExpiredEvent; private void FireBalloonExpiredEvent(Balloon balloon) { if (this.BalloonExpiredEvent != null) { this.BalloonExpiredEvent(balloon); } } //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event BalloonManager.BalloonCollectedEventHandler BalloonCollectedEvent; private void FireBalloonCollectedEvent(Balloon balloon) { if (this.BalloonCollectedEvent != null) { this.BalloonCollectedEvent(balloon); } } public Balloon SpawnBalloon(BalloonFactory factory) { Balloon balloon = factory.ProduceBalloon(); if (balloon != null) { balloon.CollectedEvent += this.OnBalloonCollected; balloon.ExpiredEvent += this.OnBalloonExpired; this.FireBalloonSpawnedEvent(balloon); } return balloon; } public BalloonFactory PickRandomVehicleBalloonFactory() { List list = this._vehicleBalloonFactories.FindAll((BalloonFactory x) => x.CanProduce()); if (list.Count > 0) { return list.PickRandom(); } return null; } private void CollectFactories() { this._vehicleBalloonFactories.Add(this._cashBalloonFactory); this._vehicleBalloonFactories.Add(this._cityAdvisorBalloonFactory); this._vehicleBalloonFactories.Add(this._xpBalloonFactory); } private void OnBalloonExpired(Balloon balloon) { balloon.CollectedEvent -= this.OnBalloonCollected; balloon.ExpiredEvent -= this.OnBalloonExpired; this.FireBalloonExpiredEvent(balloon); } private void OnBalloonCollected(Balloon balloon) { balloon.CollectedEvent -= this.OnBalloonCollected; balloon.ExpiredEvent -= this.OnBalloonExpired; this.FireBalloonCollectedEvent(balloon); } public StorageDictionary Serialize() { if (this._storage == null) { this._storage = new StorageDictionary(); } this._storage.Set("CashBalloonFactoryStorage", this._cashBalloonFactory); this._storage.Set("CityAdvisorBalloonFactoryStorage", this._cityAdvisorBalloonFactory); this._storage.Set("XPBalloonFactoryStorage", this._xpBalloonFactory); return this._storage; } private readonly List _vehicleBalloonFactories = new List(); private CashBalloonFactory _cashBalloonFactory; private CityAdvisorBalloonFactory _cityAdvisorBalloonFactory; private XPBalloonFactory _xpBalloonFactory; private const string CashBalloonFactoryStorageKey = "CashBalloonFactoryStorage"; private const string CityAdvisorBalloonFactoryStorageKey = "CityAdvisorBalloonFactoryStorage"; private const string XPBalloonFactoryStorageKey = "XPBalloonFactoryStorage"; private StorageDictionary _storage; public delegate void BalloonSpawnedEventHandler(Balloon balloon); public delegate void BalloonExpiredEventHandler(Balloon balloon); public delegate void BalloonCollectedEventHandler(Balloon balloon); }