using System; using System.Collections; using CIG.Translation; using CIGEnums; using SUISS.Core; using SUISS.Scheduling; using SUISSEngine; using UnityEngine; using UnityEngine.UI; public class BuildDemolishItem : MonoBehaviour { protected void OnEnable() { if (this._updateTimeLeftRoutine == null) { this._updateTimeLeftRoutine = base.StartCoroutine(this.UpdateTimeLeftRoutine()); } } protected void OnDisable() { if (this._updateTimeLeftRoutine != null) { base.StopCoroutine(this._updateTimeLeftRoutine); this._updateTimeLeftRoutine = null; } } public void SetInfo(CIGBuilderManager.BuildInfo info) { this._building = null; this._info = info; Building component = info.prefab.GetComponent(); this._name.LocalizedString = component.LocalName; this.FillViews(component); } public void SetBuilding(Building building, Action cancelDemolishCallback) { this._building = building; this._cancelDemolishCallback = cancelDemolishCallback; this._info = null; this._name.LocalizedString = building.LocalName; this._demolishCancelled = false; this.FillViews(building); } public void OnCancelClicked() { if (!this._demolishCancelled) { this._demolishCancelled = true; this._cancelDemolishCallback(this, this._building); } } protected void FillViews(Building building) { if (building == null || this == null) { return; } base.name = string.Format("{2}:{0}:{1}", base.GetType().Name, building.name, (this.FinishTime() + 10000000.0).ToString("F3")); SurfaceType requiredGridType = (SurfaceType)building.gameObject.GetComponent().requiredGridType; GridTile component = building.GetComponent(); this._topImage.sprite = component.spriteRenderer.sprite; if (component.bottomRenderer != null) { this._bottomImage.gameObject.SetActive(true); this._bottomImage.sprite = component.bottomRenderer.sprite; } else { this._bottomImage.gameObject.SetActive(false); } Sprite asset; if (building is CIGBuilding && SingletonMonobehaviour.Instance.ContainsAsset(requiredGridType)) { asset = SingletonMonobehaviour.Instance.GetAsset(requiredGridType); } else { asset = SingletonMonobehaviour.Instance.GetAsset(SurfaceType.AnyTypeOfLand); } this._surfaceFrameImage.sprite = asset; this.UpdateTimeleft(); this._cancelButton.gameObject.SetActive(this._info == null); } protected void UpdateTimeleft() { if (this != null && this._timeLeft != null) { double num = this.FinishTime(); if (num < 1E-06) { this._timeLeft.LocalizedString = Localization.EmptyLocalizedString; return; } TimeSpan timeSpan = TimeSpan.FromSeconds(num); this._timeLeft.LocalizedString = Localization.TimeSpan(timeSpan, false); } } protected double FinishTime() { if (this._building != null && !this._demolishCancelled) { switch (this._building.state) { case BuildingState.Constructing: return this._building.ConstructionTimeLeft; case BuildingState.WaitingForDemolishing: { Destroyer destroyer = IsometricIsland.Current.destroyer; return destroyer.GetTimeTillDestroyed(this._building); } case BuildingState.Demolishing: return this._building.DemolishTimeLeft; } if (this._building is CIGBuilding) { return ((CIGBuilding)this._building).UpgradeTimeLeft; } } else if (this._info != null) { if (this._info.IsFinished) { return 0.0; } return this._info.finishTime - Timing.time; } return 0.0; } private IEnumerator UpdateTimeLeftRoutine() { for (;;) { this.UpdateTimeleft(); yield return new WaitForSeconds(1f); } yield break; } [SerializeField] private LocalizedText _timeLeft; [SerializeField] private Image _surfaceFrameImage; [SerializeField] private Image _topImage; [SerializeField] private Image _bottomImage; [SerializeField] private LocalizedText _name; [SerializeField] private Button _cancelButton; private bool _demolishCancelled; private Building _building; private Action _cancelDemolishCallback; private CIGBuilderManager.BuildInfo _info; private Coroutine _updateTimeLeftRoutine; }