您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

177 行
4.8 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using CIG.Translation;
  4. using CIGEnums;
  5. using SUISS.Core;
  6. using SUISSEngine;
  7. using UnityEngine;
  8. using UnityEngine.UI;
  9. public class BuildingInfoPopupView : PopupBaseView
  10. {
  11. public override void Init()
  12. {
  13. base.Init();
  14. BuildingProperty[] allRequiredBuildingProperties = ((BuildingInfoPopupState)this.State).AllRequiredBuildingProperties;
  15. int num = allRequiredBuildingProperties.Length;
  16. for (int i = 0; i < num; i++)
  17. {
  18. this._buildingPropertyToInfoRowsMap.Add(allRequiredBuildingProperties[i], this.CreateBuildingInfoRow(allRequiredBuildingProperties[i]));
  19. }
  20. this._marginAffector.FindElements();
  21. }
  22. public void UpdateInfo(Building building)
  23. {
  24. this._title.LocalizedString = building.LocalName;
  25. this._textPropertyTextHolder.SetActive(building.ShownProperties.Contains(BuildingProperty.Text));
  26. foreach (KeyValuePair<BuildingProperty, BuildingInfoRow> keyValuePair in this._buildingPropertyToInfoRowsMap)
  27. {
  28. keyValuePair.Value.gameObject.SetActive(building.ShownProperties.Contains(keyValuePair.Key));
  29. }
  30. this._marginAffector.Recalculate();
  31. }
  32. public void HideUpgradeButton()
  33. {
  34. this._costButton.SetActive(false);
  35. }
  36. public void SetUpgradeCosts(Currencies cost)
  37. {
  38. this._costButton.SetActive(true);
  39. if (cost.IsEmpty())
  40. {
  41. this._costButtonCurrencyImage.gameObject.SetActive(false);
  42. this._costButtonText.LocalizedString = Localization.Key("free");
  43. }
  44. else
  45. {
  46. string currency;
  47. UISpriteType key;
  48. if (cost.ContainsPositive("Gold"))
  49. {
  50. currency = "Gold";
  51. key = UISpriteType.GoldSmall;
  52. }
  53. else
  54. {
  55. currency = "Cash";
  56. key = UISpriteType.CashSmall;
  57. }
  58. this._costButtonText.LocalizedString = Localization.Integer(cost.GetValue(currency));
  59. this._costButtonCurrencyImage.gameObject.SetActive(true);
  60. this._costButtonCurrencyImage.sprite = SingletonMonobehaviour<UISpriteAssetCollection>.Instance.GetAsset(key);
  61. }
  62. }
  63. public void HideSubtitle()
  64. {
  65. this._subtitle.gameObject.SetActive(false);
  66. }
  67. public void SetSubtitle(ILocalizedString text)
  68. {
  69. this._subtitle.gameObject.SetActive(true);
  70. this._subtitle.LocalizedString = text;
  71. }
  72. public void SetInfoLine(BuildingProperty property, ILocalizedString value, ILocalizedString bonus)
  73. {
  74. BuildingInfoRow buildingInfoRow;
  75. if (property == BuildingProperty.Text)
  76. {
  77. this._textPropertyText.LocalizedString = value;
  78. }
  79. else if (this._buildingPropertyToInfoRowsMap.TryGetValue(property, out buildingInfoRow))
  80. {
  81. buildingInfoRow.SetRowInfo(value, bonus);
  82. }
  83. else
  84. {
  85. UnityEngine.Debug.LogWarningFormat("Property Row `{0}` not set up!", new object[]
  86. {
  87. property
  88. });
  89. }
  90. }
  91. public void SetBuildingSprites(Building building)
  92. {
  93. this._buildingImage.sprite = building.GetComponent<SpriteRenderer>().sprite;
  94. SpriteRenderer bottomRenderer = building.GetComponent<GridTile>().bottomRenderer;
  95. Sprite sprite = (!(bottomRenderer == null) && !(bottomRenderer.sprite == null)) ? bottomRenderer.sprite : null;
  96. this._buildingBottomImage.sprite = sprite;
  97. this._buildingBottomImage.gameObject.SetActive(sprite != null);
  98. }
  99. public void SetBuildingSize(GridSize size)
  100. {
  101. this._buildingSizeText.gameObject.SetActive(true);
  102. this._buildingSizeText.text = string.Format("{0} x {1}", size.u, size.v);
  103. }
  104. public void HideBuildingSize()
  105. {
  106. this._buildingSizeText.gameObject.SetActive(false);
  107. }
  108. public void OnRequestPurchaseButtonClicked()
  109. {
  110. if (!base.PopupState.Closed)
  111. {
  112. ((BuildingInfoPopupState)this.State).RequestPurchase();
  113. }
  114. }
  115. private BuildingInfoRow CreateBuildingInfoRow(BuildingProperty property)
  116. {
  117. BuildingInfoRow buildingInfoRow = UnityEngine.Object.Instantiate<BuildingInfoRow>(this._buildingRowInfoPrefab, this._rowsHolder, false);
  118. buildingInfoRow.Init(property);
  119. return buildingInfoRow;
  120. }
  121. [SerializeField]
  122. [Header("Property Resources")]
  123. private BuildingInfoRow _buildingRowInfoPrefab;
  124. [SerializeField]
  125. private GameObject _textPropertyTextHolder;
  126. [SerializeField]
  127. private LocalizedText _textPropertyText;
  128. [SerializeField]
  129. [Header("Links")]
  130. private Image _buildingImage;
  131. [SerializeField]
  132. private Image _buildingBottomImage;
  133. [SerializeField]
  134. private Text _buildingSizeText;
  135. [SerializeField]
  136. private LocalizedText _title;
  137. [SerializeField]
  138. private MarginsAffector _marginAffector;
  139. [SerializeField]
  140. private LocalizedText _subtitle;
  141. [SerializeField]
  142. private GameObject _costButton;
  143. [SerializeField]
  144. private LocalizedText _costButtonText;
  145. [SerializeField]
  146. private Image _costButtonCurrencyImage;
  147. [SerializeField]
  148. private Transform _rowsHolder;
  149. private Dictionary<BuildingProperty, BuildingInfoRow> _buildingPropertyToInfoRowsMap = new Dictionary<BuildingProperty, BuildingInfoRow>();
  150. }