Files
back_cantanBuilding/Assets/Scripts/Duel/UI/EventFishingDuelRewardPopupPanel.cs
2026-05-26 16:15:54 +08:00

138 lines
5.5 KiB
C#

using asap.core;
using cfg;
using GameCore;
using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class EventFishingDuelRewardPopupPanel : MonoBehaviour
{
Button btn_close;
Button btn_mask;
TMP_Text text_time;
TMP_Text text_points;
GameObject item;
Image bar;
Tables tables;
FishingEventData fishingEventData;
Timer timer;
private void Awake()
{
tables = GContext.container.Resolve<Tables>();
fishingEventData = GContext.container.Resolve<FishingEventData>();
btn_mask = transform.Find("mask").GetComponent<Button>();
btn_close = transform.Find("btn_close").GetComponent<Button>();
text_time = transform.Find("root/text_time").GetComponent<TMP_Text>();
text_points = transform.Find("root/info/icon_ticket/text_num").GetComponent<TMP_Text>();
bar = transform.Find("root/root_reward/ScrollView/Viewport/Content/bg_bar/bar").GetComponent<Image>();
item = transform.Find("root/root_reward/ScrollView/Viewport/Content/item").gameObject;
item.SetActive(false);
SetData();
}
async void SetData()
{
Transform content = transform.Find("root/root_reward/ScrollView/Viewport/Content");
List<EventSolomain> eventSolomain = tables.TbEventSolomain.DataList;
EventSolomain solomain = eventSolomain[0];
float progress = fishingEventData.duelData.progress;
text_points.text = ConvertTools.GetNumberString2(fishingEventData.duelData.progress);
bar.fillAmount = progress / (float)solomain.TrophyRange[0];
IUIService uiService = GContext.container.Resolve<IUIService>();
int nextIndex = -1;
DuelRankRewardItem duelRewardItem = null;
for (int i = 0; i < eventSolomain.Count; i++)
{
GameObject go = Instantiate(item, content);
go.SetActive(true);
duelRewardItem = go.GetComponent<DuelRankRewardItem>();
uiService.SetImageSprite(duelRewardItem.icon_rank, solomain.RankIcon);
duelRewardItem.text_rank.text = LocalizationMgr.GetText(solomain.RankText_l10n_key);
duelRewardItem.text_point.text = solomain.TrophyRange[0].ToString();
List<ItemData> rewardItemData = GContext.container.Resolve<PlayerItemData>()
.GetItemDataByDropId(solomain.SeasonReward);
if (rewardItemData != null)
{
int dataCount = rewardItemData.Count;
int rewardCount = duelRewardItem.rewardItems.Count;
for (int j = 0; j < rewardCount; j++)
{
if (j < dataCount)
{
duelRewardItem.rewardItems[j].SetData(rewardItemData[j]);
}
else
{
duelRewardItem.rewardItems[j].gameObject.SetActive(false);
}
}
}
duelRewardItem.bg_gray.SetActive(progress > solomain.TrophyRange[1]);
duelRewardItem.bg_normal.SetActive(false);
duelRewardItem.bg_next.SetActive(progress < solomain.TrophyRange[0]);
if (progress >= solomain.TrophyRange[0] && progress <= solomain.TrophyRange[1])
{
duelRewardItem.bg_normal.SetActive(true);
nextIndex = i;
}
if (i < eventSolomain.Count - 1)
{
duelRewardItem.bar.fillAmount = (progress - solomain.TrophyRange[0]) / (solomain.TrophyRange[1] - solomain.TrophyRange[0]);
solomain = eventSolomain[i + 1];
}
}
if (duelRewardItem != null)
{
duelRewardItem.bar.fillAmount = (progress - solomain.TrophyRange[0]) / (eventSolomain[eventSolomain.Count - 2].TrophyRange[1] - eventSolomain[eventSolomain.Count - 2].TrophyRange[0]);
duelRewardItem.bar_root.transform.localScale = new Vector3(1, 0.5f, 1);
}
if (nextIndex == -1)
{
nextIndex = eventSolomain.Count - 2;
}
await Awaiters.NextFrame;
content.GetComponent<RectTransform>().anchoredPosition = new Vector2(0, -nextIndex * 280);
}
private void Start()
{
btn_mask.onClick.AddListener(OnClickClose);
btn_close.onClick.AddListener(OnClickClose);
SetTimer();
}
void OnClickClose()
{
UIManager.Instance.DestroyUI(UITypes.EventFishingDuelRewardPopupPanel);
}
void SetTimer()
{
DateTime endDateTime = fishingEventData.GetEventEndTime(fishingEventData.duelData.eventID)
.AddSeconds(-tables.TbEventSoloConfig.SettlementTime);
TimeSpan now = endDateTime - ZZTimeHelper.UtcNow().UtcNowOffset();
text_time.text = LocalizationMgr.GetFormatTextValue("UI_COMMON_end",
ConvertTools.ConvertTime2(now.Days, now.Hours, now.Minutes, now.Seconds));
double seconds = now.TotalSeconds;
timer = this.AttachTimer((float)seconds, Refresh,
(elapsed) =>
{
now = endDateTime - ZZTimeHelper.UtcNow().UtcNowOffset();
text_time.text = LocalizationMgr.GetFormatTextValue("UI_COMMON_end",
ConvertTools.ConvertTime2(now.Days, now.Hours, now.Minutes, now.Seconds));
}, useRealTime: true);
}
void Refresh()
{
timer?.Cancel();
timer = null;
//OnClickClose();
}
private void OnDestroy()
{
timer?.Cancel();
timer = null;
}
}