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

95 行
2.6 KiB

  1. using System;
  2. using Engine.DependencyTree;
  3. using SUISS.Core;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. public class DailyQuestButton : MonoBehaviour
  7. {
  8. private void OnDestroy()
  9. {
  10. if (this._quest != null)
  11. {
  12. this._quest.AchievedChangedEvent -= this.OnAchievedChanged;
  13. this._quest.RewardClaimedEvent -= this.OnRewardClaimed;
  14. this._quest = null;
  15. }
  16. if (this._level != null)
  17. {
  18. this._level.AchievedChangedEvent -= this.OnAchievedChanged;
  19. this._level.ProgressValueChangedEvent -= this.OnProgressChanged;
  20. this._level = null;
  21. }
  22. }
  23. public void Init(Dependency quest)
  24. {
  25. if (this._quest != null)
  26. {
  27. this._quest.AchievedChangedEvent -= this.OnAchievedChanged;
  28. this._quest.RewardClaimedEvent -= this.OnRewardClaimed;
  29. }
  30. if (this._level != null)
  31. {
  32. this._level.AchievedChangedEvent -= this.OnAchievedChanged;
  33. this._level.ProgressValueChangedEvent -= this.OnProgressChanged;
  34. }
  35. this._quest = quest;
  36. this._quest.AchievedChangedEvent += this.OnAchievedChanged;
  37. this._quest.RewardClaimedEvent += this.OnRewardClaimed;
  38. this.FindCurrentLevel();
  39. }
  40. private void UpdateVisual()
  41. {
  42. this._questSprite.sprite = SingletonMonobehaviour<QuestSpriteAssetCollection>.Instance.GetAsset(this._quest.SpriteName);
  43. this._progressBar.fillAmount = (float)this._level.ProgressValue / (float)this._level.ProgressMaximumValue;
  44. this._achievedSprite.gameObject.SetActive(this._quest.IsAchieved && !this._quest.RewardClaimed);
  45. this._collectedSprite.gameObject.SetActive(this._quest.IsAchieved && this._quest.RewardClaimed);
  46. }
  47. private void FindCurrentLevel()
  48. {
  49. if (this._level != null)
  50. {
  51. this._level.AchievedChangedEvent -= this.OnAchievedChanged;
  52. this._level.ProgressValueChangedEvent -= this.OnProgressChanged;
  53. }
  54. this._level = this._quest.GetFirstIncompletedChild();
  55. this._level.AchievedChangedEvent += this.OnAchievedChanged;
  56. this._level.ProgressValueChangedEvent += this.OnProgressChanged;
  57. this.UpdateVisual();
  58. }
  59. private void OnAchievedChanged(Dependency dependency, bool achieved)
  60. {
  61. this.UpdateVisual();
  62. }
  63. private void OnProgressChanged(Dependency dependency, int progress)
  64. {
  65. this.UpdateVisual();
  66. }
  67. private void OnRewardClaimed(Dependency dependency, bool claimed)
  68. {
  69. this.UpdateVisual();
  70. }
  71. [SerializeField]
  72. private Image _questSprite;
  73. [SerializeField]
  74. private Image _achievedSprite;
  75. [SerializeField]
  76. private Image _collectedSprite;
  77. [SerializeField]
  78. private Image _progressBar;
  79. private Dependency _quest;
  80. private Dependency _level;
  81. }