|
- 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<Building>();
- this._name.LocalizedString = component.LocalName;
- this.FillViews(component);
- }
-
- public void SetBuilding(Building building, Action<BuildDemolishItem, Building> 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<GridTile>().requiredGridType;
- GridTile component = building.GetComponent<GridTile>();
- 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<SurfaceSpriteAssetCollection>.Instance.ContainsAsset(requiredGridType))
- {
- asset = SingletonMonobehaviour<SurfaceSpriteAssetCollection>.Instance.GetAsset(requiredGridType);
- }
- else
- {
- asset = SingletonMonobehaviour<SurfaceSpriteAssetCollection>.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<BuildDemolishItem, Building> _cancelDemolishCallback;
-
- private CIGBuilderManager.BuildInfo _info;
-
- private Coroutine _updateTimeLeftRoutine;
- }
|