|
- using System;
- using System.Collections.Generic;
- using CIG.Extensions;
- using SparkLinq;
- using SUISS.Core;
- using SUISSEngine;
- using UnityEngine;
-
- namespace CIG
- {
- [RequireComponent(typeof(Serializing))]
- public class CIGBalloonManager : MonoBehaviour
- {
- private void OnDestroy()
- {
- if (SingletonMonobehaviour<CIGTutorialManager>.IsAvailable)
- {
- CIGTutorialManager instance = SingletonMonobehaviour<CIGTutorialManager>.Instance;
- instance.HasDeserializedEvent -= this.OnTutorialManagerHasDeserialized;
- instance.TutorialFinishedEvent -= this.OnTutorialFinished;
- }
- if (this._balloonManager != null)
- {
- this._balloonManager.BalloonSpawnedEvent -= this.OnBalloonSpawned;
- this._balloonManager.BalloonCollectedEvent -= this.OnBalloonCollected;
- this._balloonManager.BalloonExpiredEvent -= this.OnBalloonExpired;
- this._balloonManager = null;
- }
- }
-
- private void TrySpawningBalloon()
- {
- if (this._hasFinishedTutorial)
- {
- this.TrySpawningVehicleBalloon();
- }
- this.Invoke(new Action(this.TrySpawningBalloon), (float)this.RandomTimeBetweenBalloons, false);
- }
-
- private void TrySpawningVehicleBalloon()
- {
- List<Vehicle> list = new List<Vehicle>();
- CIGVehicleManager.RoadType[] array = (CIGVehicleManager.RoadType[])Enum.GetValues(typeof(CIGVehicleManager.RoadType));
- int num = array.Length;
- for (int i = 0; i < num; i++)
- {
- CIGVehicleManager.RoadType type = array[i];
- foreach (VehicleManager.VehicleRegistration vehicleRegistration in this._vehicleManager.GetStatsForRoadType((int)type).Registrations)
- {
- list.AddRange(vehicleRegistration.Instances);
- }
- }
- List<Vehicle> list2 = list.FindAll((Vehicle vehicle) => vehicle.Balloon != null);
- int count = list2.Count;
- int num2 = Mathf.Max(1, list.Count / 4);
- if (count < num2)
- {
- BalloonFactory balloonFactory = this._balloonManager.PickRandomVehicleBalloonFactory();
- list.RemoveAll((Vehicle vehicle) => vehicle.Balloon != null);
- if (list.Count > 0 && balloonFactory != null && balloonFactory.CanProduce())
- {
- Balloon balloon = this._balloonManager.SpawnBalloon(balloonFactory);
- if (balloon != null)
- {
- Vehicle vehicle2 = list.PickRandom<Vehicle>();
- vehicle2.ShowBalloon(balloon);
- }
- }
- }
- }
-
- private void OnBalloonSpawned(Balloon balloon)
- {
- this._serializing.Serialize();
- }
-
- private void OnBalloonExpired(Balloon balloon)
- {
- this._serializing.Serialize();
- }
-
- private void OnBalloonCollected(Balloon balloon)
- {
- this._serializing.Serialize();
- }
-
- private void OnTutorialFinished()
- {
- this._hasFinishedTutorial = true;
- SingletonMonobehaviour<CIGTutorialManager>.Instance.TutorialFinishedEvent -= this.OnTutorialFinished;
- }
-
- private void OnTutorialManagerHasDeserialized()
- {
- CIGTutorialManager instance = SingletonMonobehaviour<CIGTutorialManager>.Instance;
- instance.HasDeserializedEvent -= this.OnTutorialManagerHasDeserialized;
- this._hasFinishedTutorial = instance.IsFinished;
- if (!this._hasFinishedTutorial)
- {
- instance.TutorialFinishedEvent += this.OnTutorialFinished;
- }
- }
-
- private int RandomTimeBetweenBalloons
- {
- get
- {
- return UnityEngine.Random.Range(5, 15);
- }
- }
-
- private void OnSerialize(Dictionary<string, object> values)
- {
- values["BalloonManager"] = this._balloonManager.Serialize().InternalDictionary;
- }
-
- private void OnDeserialize(Dictionary<string, object> values)
- {
- object obj;
- if (values.TryGetValue("BalloonManager", out obj))
- {
- StorageDictionary storage = new StorageDictionary((Dictionary<string, object>)obj);
- this._balloonManager = new BalloonManager(storage);
- }
- }
-
- private void OnDeserialized()
- {
- if (this._balloonManager == null)
- {
- this._balloonManager = new BalloonManager();
- }
- this._balloonManager.BalloonSpawnedEvent += this.OnBalloonSpawned;
- this._balloonManager.BalloonCollectedEvent += this.OnBalloonCollected;
- this._balloonManager.BalloonExpiredEvent += this.OnBalloonExpired;
- CIGTutorialManager instance = SingletonMonobehaviour<CIGTutorialManager>.Instance;
- if (instance.HasDeserialized)
- {
- this.OnTutorialManagerHasDeserialized();
- }
- else
- {
- instance.HasDeserializedEvent += this.OnTutorialManagerHasDeserialized;
- }
- this.Invoke(new Action(this.TrySpawningBalloon), (float)this.RandomTimeBetweenBalloons, false);
- }
-
- private const int MinSecondsBetweenBalloons = 5;
-
- private const int MaxSecondsBetweenBalloons = 15;
-
- private const int VehicleToBalloonRatio = 4;
-
- [SerializeField]
- private Serializing _serializing;
-
- [SerializeField]
- private CIGVehicleManager _vehicleManager;
-
- private BalloonManager _balloonManager;
-
- private bool _hasFinishedTutorial;
-
- private const string BalloonManagerKey = "BalloonManager";
- }
- }
|