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

259 行
6.9 KiB

  1. using System;
  2. using CIG.Translation;
  3. using CIGEnums;
  4. using SUISS.Core;
  5. using Tweening;
  6. using UnityEngine;
  7. using UnityEngine.UI;
  8. public class DailyRewardItem : MonoBehaviour
  9. {
  10. public void Display(DailyReward reward, int dayRepresenting, int currentDay)
  11. {
  12. this._dayRepresenting = dayRepresenting;
  13. this._currentDay = currentDay;
  14. this._dayText.LocalizedString = this.GetDayLabel();
  15. ILocalizedString localizedString = Localization.Integer(reward.Value);
  16. if (reward.Currency == "LevelUp")
  17. {
  18. this._rewardDisplayValueText.gameObject.SetActive(true);
  19. ILocalizedString localizedString2 = Localization.Format(Localization.Key("plus"), new ILocalizedString[]
  20. {
  21. localizedString
  22. });
  23. this._rewardDisplayValueText.LocalizedString = localizedString2;
  24. localizedString = localizedString2;
  25. }
  26. else
  27. {
  28. this._rewardDisplayValueText.gameObject.SetActive(false);
  29. }
  30. this._valueRewardText.LocalizedString = localizedString;
  31. this.ApplyItemStyle(this.GetItemStyleForCurrency(reward.Currency), (float)reward.Value);
  32. this.ApplyStateLook();
  33. }
  34. public Sprite GetCurrencyDisplaySprite()
  35. {
  36. return this._rewardDisplayImage.sprite;
  37. }
  38. public ILocalizedString GetCurrentValueDisplay()
  39. {
  40. return this._valueRewardText.LocalizedString;
  41. }
  42. private void ApplyStateLook()
  43. {
  44. this._raysActiveTweener.Stop();
  45. DailyRewardItem.ItemState state = this.GetState();
  46. if (state != DailyRewardItem.ItemState.Collected)
  47. {
  48. if (state == DailyRewardItem.ItemState.Inactive || state == DailyRewardItem.ItemState.Active)
  49. {
  50. this._achievedImageObject.SetActive(false);
  51. Graphic panelImage = this._panelImage;
  52. Material material = SingletonMonobehaviour<MaterialAssetCollection>.Instance.GetAsset(MaterialType.UIClip);
  53. this._rewardDisplayImage.material = material;
  54. material = material;
  55. this._raysImage.material = material;
  56. panelImage.material = material;
  57. Graphic panelImage2 = this._panelImage;
  58. Color color = Color.white;
  59. this._rewardDisplayImage.color = color;
  60. panelImage2.color = color;
  61. }
  62. }
  63. else
  64. {
  65. this._achievedImageObject.SetActive(true);
  66. Graphic panelImage3 = this._panelImage;
  67. Material material = SingletonMonobehaviour<MaterialAssetCollection>.Instance.GetAsset(MaterialType.UIClipGreyscale);
  68. this._rewardDisplayImage.material = material;
  69. material = material;
  70. this._raysImage.material = material;
  71. panelImage3.material = material;
  72. Graphic panelImage4 = this._panelImage;
  73. Color color = new Color(0.9f, 0.9f, 0.9f);
  74. this._rewardDisplayImage.color = color;
  75. color = color;
  76. this._raysImage.color = color;
  77. panelImage4.color = color;
  78. }
  79. if (state == DailyRewardItem.ItemState.Active)
  80. {
  81. this._raysActiveTweener.Play();
  82. }
  83. }
  84. private void ApplyItemStyle(DailyRewardItem.ItemStyle itemStyle, float amountCurrency)
  85. {
  86. DailyRewardItem.ItemStyle.CurrencyValueTresholdItem item = itemStyle.GetItem(amountCurrency);
  87. this._rewardDisplayImage.sprite = item.CurrencySprite;
  88. this._panelImage.sprite = itemStyle.PanelSprite;
  89. this._rewardImageHolder.transform.localPosition = item.PlacementLocation;
  90. this._raysImage.color = itemStyle.RayColorTint;
  91. }
  92. private DailyRewardItem.ItemState GetState()
  93. {
  94. return (this._dayRepresenting != this._currentDay) ? ((this._dayRepresenting >= this._currentDay) ? DailyRewardItem.ItemState.Inactive : DailyRewardItem.ItemState.Collected) : DailyRewardItem.ItemState.Active;
  95. }
  96. private ILocalizedString GetDayLabel()
  97. {
  98. switch (this.GetState())
  99. {
  100. case DailyRewardItem.ItemState.Collected:
  101. case DailyRewardItem.ItemState.Inactive:
  102. return Localization.Format(Localization.Key("day_x"), new ILocalizedString[]
  103. {
  104. Localization.Integer(this._dayRepresenting + 1)
  105. });
  106. case DailyRewardItem.ItemState.Active:
  107. return Localization.Key("today");
  108. default:
  109. return Localization.EmptyLocalizedString;
  110. }
  111. }
  112. private DailyRewardItem.ItemStyle GetItemStyleForCurrency(string currency)
  113. {
  114. if (currency != null)
  115. {
  116. if (currency == "Cash")
  117. {
  118. return this._cashItemStyle;
  119. }
  120. if (currency == "Gold")
  121. {
  122. return this._goldItemStyle;
  123. }
  124. if (currency == "XP")
  125. {
  126. return this._xpItemStyle;
  127. }
  128. if (currency == "LevelUp")
  129. {
  130. return this._levelItemStyle;
  131. }
  132. }
  133. UnityEngine.Debug.LogErrorFormat("[DayRewardItem]: No ItemStyle found for currency {0}! Returning levelItemStyle as default", new object[]
  134. {
  135. currency
  136. });
  137. return this._levelItemStyle;
  138. }
  139. [Header("Linking")]
  140. [SerializeField]
  141. private LocalizedText _dayText;
  142. [SerializeField]
  143. private LocalizedText _valueRewardText;
  144. [SerializeField]
  145. private RectTransform _rewardImageHolder;
  146. [SerializeField]
  147. private Image _rewardDisplayImage;
  148. [SerializeField]
  149. private LocalizedText _rewardDisplayValueText;
  150. [SerializeField]
  151. private Image _panelImage;
  152. [SerializeField]
  153. private Image _raysImage;
  154. [SerializeField]
  155. private Tweener _raysActiveTweener;
  156. [SerializeField]
  157. private GameObject _achievedImageObject;
  158. [Header("Reward Assets")]
  159. [SerializeField]
  160. private DailyRewardItem.ItemStyle _xpItemStyle;
  161. [SerializeField]
  162. private DailyRewardItem.ItemStyle _cashItemStyle;
  163. [SerializeField]
  164. private DailyRewardItem.ItemStyle _goldItemStyle;
  165. [SerializeField]
  166. private DailyRewardItem.ItemStyle _levelItemStyle;
  167. private int _dayRepresenting;
  168. private int _currentDay;
  169. public enum ItemState
  170. {
  171. Collected,
  172. Active,
  173. Inactive
  174. }
  175. [Serializable]
  176. public class ItemStyle
  177. {
  178. public Sprite PanelSprite
  179. {
  180. get
  181. {
  182. return this._panelSprite;
  183. }
  184. }
  185. public Color RayColorTint
  186. {
  187. get
  188. {
  189. return this._rayColorTint;
  190. }
  191. }
  192. public DailyRewardItem.ItemStyle.CurrencyValueTresholdItem GetItem(float value)
  193. {
  194. Array.Sort<DailyRewardItem.ItemStyle.CurrencyValueTresholdItem>(this._currencySpriteData, (DailyRewardItem.ItemStyle.CurrencyValueTresholdItem a, DailyRewardItem.ItemStyle.CurrencyValueTresholdItem b) => (int)(b.MinValueForSprite - a.MinValueForSprite));
  195. int i = 0;
  196. int num = this._currencySpriteData.Length;
  197. while (i < num)
  198. {
  199. if (value >= this._currencySpriteData[i].MinValueForSprite)
  200. {
  201. return this._currencySpriteData[i];
  202. }
  203. i++;
  204. }
  205. if (this._currencySpriteData.Length > 0)
  206. {
  207. return this._currencySpriteData[0];
  208. }
  209. return default(DailyRewardItem.ItemStyle.CurrencyValueTresholdItem);
  210. }
  211. [SerializeField]
  212. private Sprite _panelSprite;
  213. [SerializeField]
  214. private Color _rayColorTint = Color.white;
  215. [SerializeField]
  216. private DailyRewardItem.ItemStyle.CurrencyValueTresholdItem[] _currencySpriteData;
  217. [Serializable]
  218. public struct CurrencyValueTresholdItem
  219. {
  220. public Sprite CurrencySprite;
  221. public Vector2 PlacementLocation;
  222. public float MinValueForSprite;
  223. }
  224. }
  225. }