using System; using System.Collections.Generic; using System.Linq; using Cute; using UnityEngine; namespace Wizard; public class QuestPointConfirmDialog : MonoBehaviour { [SerializeField] private SimpleScrollViewUI _questPointScrollView; [SerializeField] private UILabel _pointTitleLabel; [SerializeField] private UILabel _pointLabel; [SerializeField] private UILabel _pointCompletedLabel; [SerializeField] private GameObject _pointAmountGaugeRoot; [SerializeField] private UIGauge _pointAmountGauge; [SerializeField] private UIButton _receiveButton; [SerializeField] private ResourceHandler _resourceHandler; private Action _updateRewardRecieveNumber; private List _rewardInfoList; private int UnreceiveRewardCount => _rewardInfoList.Count((QuestRewardInfo d) => d.Status == QuestRewardInfo.QuestRewardStatusList.NotReceived); public void CreateQuestConfirmDialog(Action updateRewardRecieveNumber) { _updateRewardRecieveNumber = updateRewardRecieveNumber; RequestQuestPointInfoTask(); } public void OnCloseQuestConfirmnDialog() { _resourceHandler.UnloadAll(); } private void RequestQuestPointInfoTask() { QuestPointInfoTask task = new QuestPointInfoTask(); StartCoroutine(Toolbox.NetworkManager.Connect(task, delegate { _rewardInfoList = task.RewardInfoList; _questPointScrollView.CreateScrollView(_rewardInfoList.Count, InitializePlate); SetPointCollectionPeriod(task.StartTime, task.EndTime); SetPoint(task.TotalPoint, task.MaxPoint); SetReceiveAllButton(); _updateRewardRecieveNumber.Call(UnreceiveRewardCount); })); } private void SetPointCollectionPeriod(DateTime start, DateTime end) { _pointTitleLabel.text = Data.SystemText.Get("Quest_0008", ConvertTime.ToLocal(start, end)); _pointTitleLabel.gameObject.SetActive(value: true); } private void SetPoint(int totalPoint, int maxPoint) { bool flag = totalPoint >= maxPoint; _pointCompletedLabel.gameObject.SetActive(flag); _pointLabel.gameObject.SetActive(!flag); if (!flag) { _pointLabel.text = Data.SystemText.Get("Quest_0010", totalPoint.ToString(), maxPoint.ToString()); } _pointAmountGaugeRoot.gameObject.SetActive(value: true); if (totalPoint != 0 && maxPoint != 0) { float num = (float)totalPoint / (float)maxPoint; if (num > 1f) { num = 1f; } _pointAmountGauge.Value = num; } else { _pointAmountGauge.Value = 0f; } } private void SetReceiveAllButton() { _receiveButton.gameObject.SetActive(value: true); UIManager.SetObjectToGrey(_receiveButton.gameObject, UnreceiveRewardCount == 0); _receiveButton.onClick.Clear(); _receiveButton.onClick.Add(new EventDelegate(delegate { GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_COMMON_BUTTON); ReceiveAllPointRewards(); })); } private void InitializePlate(int index, GameObject plate) { if (index < _rewardInfoList.Count) { SetRewardItem(plate, _rewardInfoList[index]); } } private void SetRewardItem(GameObject item, QuestRewardInfo reward) { AchievementWindowBase component = item.GetComponent(); switch (reward.Status) { case QuestRewardInfo.QuestRewardStatusList.NotAcheived: component.SetQuestPoint(reward, AchievementWindowBase.AchievementType.PointRunning, _resourceHandler, RequestQuestPointInfoTask); break; case QuestRewardInfo.QuestRewardStatusList.NotReceived: component.SetQuestPoint(reward, AchievementWindowBase.AchievementType.PointClear, _resourceHandler, RequestQuestPointInfoTask); break; case QuestRewardInfo.QuestRewardStatusList.Received: component.SetQuestPoint(reward, AchievementWindowBase.AchievementType.PointReceived, _resourceHandler, RequestQuestPointInfoTask); break; } } private void ReceiveAllPointRewards() { QuestRewardReceiveAllTask task = new QuestRewardReceiveAllTask(); StartCoroutine(Toolbox.NetworkManager.Connect(task, delegate { DialogCreator.CreateRewardReceiveDialog(task.ReceiveRewardList); RequestQuestPointInfoTask(); })); } }