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

193 lines
7.3 KiB
C#

using System;
using System.Collections.Generic;
using asap.core;
using cfg;
using GameCore;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class FishingTargetPopupPanelBase : MonoBehaviour
{
protected FishingEventData _fishingEventData;
Button btn_close;
Button btn_mask;
RewardItemNew require;
TMP_Text text_info;
TMP_Text text_title;
TMP_Text text_time;
Timer timer;
Transform beilvpanel_max;
Transform bg_beilvlpanel;
TMP_Text text_beilvpanel_content;
TargetReward target_reward;
CollectingTargetReward targetReward1;
CollectingTargetReward targetReward2;
CollectingTargetReward targetReward3;
List<ItemData> itemData1;
List<ItemData> itemData2;
List<ItemData> itemData3;
int targetCount1;
int targetCount2;
int targetCount3;
protected virtual void Awake()
{
target_reward = transform.Find("root/target_reward").GetComponent<TargetReward>();
_fishingEventData = GContext.container.Resolve<FishingEventData>();
btn_close = transform.Find("btn_close").GetComponent<Button>();
btn_mask = transform.Find("mask").GetComponent<Button>();
require = transform.Find("root/target_reward/btn_icon/reward").GetComponent<RewardItemNew>();
text_info = transform.Find("root/bg_info/text_info").GetComponent<TMP_Text>();
text_title = transform.Find("root/text_title").GetComponent<TMP_Text>();
text_time = transform.Find("root/text_time").GetComponent<TMP_Text>();
beilvpanel_max = transform.Find("root/beilvpanel/bg_beilv_max");
if (beilvpanel_max)
{
bg_beilvlpanel = transform.Find("root/beilvpanel/bg_beilv");
text_beilvpanel_content = transform.Find("root/beilvpanel/bg_beilv/text_beilv").GetComponent<TMP_Text>();
}
}
protected void Start()
{
btn_close.onClick.AddListener(() => { UIManager.Instance.DestroyUI(UITypes.FishingTargetPopupPanel); });
btn_mask.onClick.AddListener(() => { UIManager.Instance.DestroyUI(UITypes.FishingTargetPopupPanel); });
Init();
}
private void OnEnable()
{
if (beilvpanel_max)
{
bool isMax = GContext.container.Resolve<PlayerData>().IsMaxMagnification();
beilvpanel_max.gameObject.SetActive(isMax);
bg_beilvlpanel.gameObject.SetActive(!isMax);
text_beilvpanel_content.text = isMax ? "MAX" : $"x{GContext.container.Resolve<PlayerData>().GetMagnification()}";
}
}
void Init()
{
CollectingTargetReward collectingTarget = _fishingEventData.collectingTarget;
if (collectingTarget != null)
{
PlayerItemData playerItemData = GContext.container.Resolve<PlayerItemData>();
var tables = GContext.container.Resolve<Tables>();
CollectingTargetInit collectingTargetInit = _fishingEventData.collectingTargetInit;
text_title.text = LocalizationMgr.GetText(collectingTargetInit.Title_l10n_key);
Item item = tables.TbItem[collectingTargetInit.TokenID];
require.SetData(item, isCanClick: true);
require.text_num.gameObject.SetActive(false);
SetEndTime();
SetTargetExtra(item.Icon);
var TargetList = collectingTargetInit.TargetList;
int curCount = _fishingEventData.GetCurCollectingTarget();
int curIndex = TargetList.IndexOf(collectingTarget.TaskID);
text_info.text = LocalizationMgr.GetFormatTextValue("UI_EventRankPopupPanel_2", curIndex, TargetList.Count);
float fillAmount = 1;
if (collectingTarget.NextTarget <= 0)
{
if (curCount >= collectingTarget.TokenRequired)
{
target_reward.SetDone();
text_info.text = LocalizationMgr.GetFormatTextValue("UI_EventRankPopupPanel_2", TargetList.Count, TargetList.Count);
return;
}
//最后一个
targetReward1 = tables.TbCollectingTargetReward.GetOrDefault(TargetList[^3]);
targetReward2 = tables.TbCollectingTargetReward.GetOrDefault(TargetList[^2]);
fillAmount = 1;
}
else if (collectingTarget.TaskID == TargetList[0])
{
//第一个
targetReward1 = collectingTarget;
targetReward2 = tables.TbCollectingTargetReward.GetOrDefault(collectingTarget.NextTarget);
fillAmount = curCount / ((float)collectingTarget.TokenRequired * 2);
}
else
{
targetReward1 = tables.TbCollectingTargetReward.GetOrDefault(TargetList[curIndex - 1]);
targetReward2 = collectingTarget;
fillAmount = curCount / ((float)collectingTarget.TokenRequired * 2) + 0.5f;
}
itemData1 = playerItemData.GetItemDataByDropId(targetReward1.DropID);
itemData2 = playerItemData.GetItemDataByDropId(targetReward2.DropID);
target_reward.SetBar(fillAmount, itemData1, itemData2);
if (collectingTarget.TaskID != TargetList[0])
{
target_reward.SetReceived1(true);
}
if (collectingTarget.NextTarget <= 0)
{
target_reward.SetReceived2(true);
}
CollectingTargetReward maxCollectingTarget = tables.TbCollectingTargetReward.GetOrDefault(TargetList[^1]);
//设置tips
int targetCount = 0;
for (int i = 0; i < TargetList.Count; i++)
{
var targetReward = tables.TbCollectingTargetReward.GetOrDefault(TargetList[i]);
targetCount += targetReward.TokenRequired;
if (targetReward.TaskID == targetReward1.TaskID)
{
targetCount1 = targetCount;
}
else if (targetReward.TaskID == targetReward2.TaskID)
{
targetCount2 = targetCount;
}
else if (targetReward.TaskID == maxCollectingTarget.TaskID)
{
targetCount3 = targetCount;
}
}
targetReward3 = maxCollectingTarget;
itemData3 = playerItemData.GetItemDataByDropId(maxCollectingTarget.DropID);
int allCount = _fishingEventData.GetAllCollectingTarget();
target_reward.SetReward(itemData1, itemData2, itemData3, targetReward3.Milestone != 2, item.Icon, targetCount1, targetCount2, allCount);
}
}
protected virtual void SetTargetExtra(string icon)
{
}
void SetEndTime()
{
//显示倒计时
if (timer == null)
{
DateTime endDateTime = _fishingEventData.GetCollectingTargetEndTime();
TimeSpan all = endDateTime - ZZTimeHelper.UtcNow().UtcNowOffset();
double seconds = all.TotalSeconds;
timer = this.AttachTimer((float)seconds,
() => { UIManager.Instance.DestroyUI(UITypes.FishingTargetPopupPanel); },
(elapsed) =>
{
TimeSpan now = endDateTime - ZZTimeHelper.UtcNow().UtcNowOffset();
text_time.text = ConvertTools.ConvertTime2(now.Days, now.Hours, now.Minutes, now.Seconds);
}, useRealTime: true);
}
}
}