using System; using Engine.DependencyTree; using SUISS.Core; using UnityEngine; using UnityEngine.UI; public class DailyQuestButton : MonoBehaviour { private void OnDestroy() { if (this._quest != null) { this._quest.AchievedChangedEvent -= this.OnAchievedChanged; this._quest.RewardClaimedEvent -= this.OnRewardClaimed; this._quest = null; } if (this._level != null) { this._level.AchievedChangedEvent -= this.OnAchievedChanged; this._level.ProgressValueChangedEvent -= this.OnProgressChanged; this._level = null; } } public void Init(Dependency quest) { if (this._quest != null) { this._quest.AchievedChangedEvent -= this.OnAchievedChanged; this._quest.RewardClaimedEvent -= this.OnRewardClaimed; } if (this._level != null) { this._level.AchievedChangedEvent -= this.OnAchievedChanged; this._level.ProgressValueChangedEvent -= this.OnProgressChanged; } this._quest = quest; this._quest.AchievedChangedEvent += this.OnAchievedChanged; this._quest.RewardClaimedEvent += this.OnRewardClaimed; this.FindCurrentLevel(); } private void UpdateVisual() { this._questSprite.sprite = SingletonMonobehaviour.Instance.GetAsset(this._quest.SpriteName); this._progressBar.fillAmount = (float)this._level.ProgressValue / (float)this._level.ProgressMaximumValue; this._achievedSprite.gameObject.SetActive(this._quest.IsAchieved && !this._quest.RewardClaimed); this._collectedSprite.gameObject.SetActive(this._quest.IsAchieved && this._quest.RewardClaimed); } private void FindCurrentLevel() { if (this._level != null) { this._level.AchievedChangedEvent -= this.OnAchievedChanged; this._level.ProgressValueChangedEvent -= this.OnProgressChanged; } this._level = this._quest.GetFirstIncompletedChild(); this._level.AchievedChangedEvent += this.OnAchievedChanged; this._level.ProgressValueChangedEvent += this.OnProgressChanged; this.UpdateVisual(); } private void OnAchievedChanged(Dependency dependency, bool achieved) { this.UpdateVisual(); } private void OnProgressChanged(Dependency dependency, int progress) { this.UpdateVisual(); } private void OnRewardClaimed(Dependency dependency, bool claimed) { this.UpdateVisual(); } [SerializeField] private Image _questSprite; [SerializeField] private Image _achievedSprite; [SerializeField] private Image _collectedSprite; [SerializeField] private Image _progressBar; private Dependency _quest; private Dependency _level; }