Files
MinFt/Client/Assets/Scripts/UI/Rank/EventRankPopupPanel.cs
Liubing\LB 3d8d4d18f3 first commit
先修复一下,错误的场景

删除不必要的钓场资产

修复into场景

update:更新meta文件,修复报错

update:修复资源

修复第一章节建造

修复建造第三章

update:删除多余内容

update:更新README.md

update:还原图标

update:更新README

update:更新配置
2026-04-28 02:17:22 +08:00

574 lines
22 KiB
C#

using asap.core;
using cfg;
using game;
using GameCore;
using System;
using System.Collections.Generic;
using TMPro;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
public class EventRankPopupPanel : MonoBehaviour
{
CanvasGroup canvasGroup;
FishingEventData _fishingEventData;
LeadboardData _leadboardData;
Tables _tables;
Button btn_close;
GameObject rewardPanel;
Button btn_claim;
Button get_reward;
Button btn_mask;
Image bg;
Button btn_questionmark;
Image bar;
RewardItemNew require;
TMP_Text text_info;
GameObject text_complete;
GameObject layout_reward;
GameObject btn_reward;
RewardItemNew reward1;
RewardItemNew reward2;
RewardItemNew reward;
TMP_Text text_title;
TMP_Text text_time;
GameObject text_end;
Timer timer;
GameObject rankRoot;
PanelScroll scrollRect;
Transform content;
GameObject item;
EventLeadboardItem selfItem;
GameObject rank;
GameObject bar_layout;
GameObject unlock;
GameObject toprank;
GameObject toprank_bg_nml;
GameObject toprank_bg_top3;
TMP_Text text_unlock_conditions;
RankTargets targetReward1;
RankTargets targetReward2;
RankTargets targetReward3;
ItemData itemData1;
ItemData itemData2;
ItemData itemData3;
int targetCount1;
int targetCount2;
int targetCount3;
List<BarItemTips> barItemTips = new List<BarItemTips>();
Image icon_unlock_conditions;
bool isOpenRank;
int curSelfRank;
float itemHigh;
List<EventLeadboardItemData> datas = new List<EventLeadboardItemData>();
List<EventLeadboardItem> items = new List<EventLeadboardItem>();
protected CompositeDisposable disposables = new CompositeDisposable();
GameObject p_text;
GameObject text_continue;
TMP_Text top_text_rank;
Head top_icon_head;
RewardItem require_item;
int SpecialShow = 100;
RewardItemNew[] top_reward1;
BgDownload bgDownload;
private void Awake()
{
canvasGroup = GetComponent<CanvasGroup>();
_fishingEventData = GContext.container.Resolve<FishingEventData>();
_leadboardData = GContext.container.Resolve<LeadboardData>();
btn_close = transform.Find("btn_close").GetComponent<Button>();
rewardPanel = transform.Find("reward").gameObject;
get_reward = transform.Find("reward/btn_play/btn_green").GetComponent<Button>();
btn_mask = transform.Find("mask").GetComponent<Button>();
btn_questionmark = transform.Find("root/rank/btn_questionmark").GetComponent<Button>();
bg = transform.Find("root/bg").GetComponent<Image>();
bar = transform.Find("root/bar_layout/bg_bar/bar").GetComponent<Image>();
require = transform.Find("root/bar_layout/btn_icon/reward").GetComponent<RewardItemNew>();
text_info = transform.Find("root/bar_layout/bg_info/text_info").GetComponent<TMP_Text>();
layout_reward = transform.Find("root/bar_layout/bg_bar/layout_reward").gameObject;
text_complete = transform.Find("root/bar_layout/bg_bar/text_complete").gameObject;
reward1 = transform.Find("root/bar_layout/bg_bar/layout_reward/reward1").GetComponent<RewardItemNew>();
reward2 = transform.Find("root/bar_layout/bg_bar/layout_reward/reward2").GetComponent<RewardItemNew>();
btn_reward = transform.Find("root/bar_layout/btn_reward").gameObject;
reward = transform.Find("root/bar_layout/btn_reward/reward").GetComponent<RewardItemNew>();
text_title = transform.Find("root/text_title").GetComponent<TMP_Text>();
text_time = transform.Find("root/text_time").GetComponent<TMP_Text>();
text_end = transform.Find("root/text_end").gameObject;
rankRoot = transform.Find("root/rank").gameObject;
scrollRect = transform.Find("root/rank/ScrollView").GetComponent<PanelScroll>();
content = transform.Find("root/rank/ScrollView/Viewport/Content").GetComponent<Transform>();
selfItem = transform.Find("root/rank/ScrollView/Viewport/Item").GetComponent<EventLeadboardItem>();
item = transform.Find("root/rank/ScrollView/Viewport/Content/Item").gameObject;
rank = transform.Find("root/rank").gameObject;
unlock = transform.Find("root/unlock").gameObject;
toprank = transform.Find("root/toprank").gameObject;
btn_claim = transform.Find("root/toprank/btn_claim/btn_green").GetComponent<Button>();
toprank_bg_nml = transform.Find("root/toprank/bg_nml").gameObject;
toprank_bg_top3 = transform.Find("root/toprank/bg_top3").gameObject;
bar_layout = transform.Find("root/bar_layout").gameObject;
text_unlock_conditions = transform.Find("root/unlock/unlock_conditions/text_unlock_conditions").GetComponent<TMP_Text>();
icon_unlock_conditions = transform.Find("root/unlock/unlock_conditions/text_unlock_conditions/icon").GetComponent<Image>();
_tables = GContext.container.Resolve<Tables>();
barItemTips.Add(transform.Find("root/EventRankTips1").GetComponent<BarItemTips>());
barItemTips.Add(transform.Find("root/EventRankTips2").GetComponent<BarItemTips>());
barItemTips.Add(transform.Find("root/EventRankTips3").GetComponent<BarItemTips>());
p_text = transform.Find("reward/btn_play/btn_green/Ani_Container/p_text").gameObject;
text_continue = transform.Find("reward/btn_play/btn_green/Ani_Container/text_continue").gameObject;
top_text_rank = transform.Find("root/toprank/text_rank").GetComponent<TMP_Text>();
top_icon_head = transform.Find("root/toprank/btn_head").GetComponent<Head>();
require_item = transform.Find("root/toprank/btn_head/icon_rank").GetComponent<RewardItem>();
top_reward1 = transform.Find("root/toprank/reward_layout").GetComponentsInChildren<RewardItemNew>();
bgDownload = transform.Find("root/download").GetComponent<BgDownload>();
}
protected void Start()
{
btn_close.onClick.AddListener(OnClose);
btn_mask.onClick.AddListener(OnClose);
btn_questionmark.OnClickAsObservable().Subscribe(async x =>
{
btn_questionmark.enabled = false;
await UIManager.Instance.ShowUI(UITypes.EventRankInfoPopupPanel);
btn_questionmark.enabled = true;
}).AddTo(disposables);
item.SetActive(false);
itemHigh = item.GetComponent<RectTransform>().rect.height;
scrollRect.loop = false;
get_reward.onClick.AddListener(OnClose);
btn_claim.onClick.AddListener(OnCloseToprank);
SetState();
}
void OnClickReward(int index)
{
barItemTips[index].gameObject.SetActive(true);
}
void SetState()
{
bool isShowReward = _leadboardData.rankItemDatas != null && _leadboardData.rankItemDatas.Count > 0;
text_time.gameObject.SetActive(!isShowReward);
btn_close.gameObject.SetActive(!isShowReward);
text_end.SetActive(isShowReward);
rewardPanel.SetActive(isShowReward);
isOpenRank = _fishingEventData.IsOpenRank() || isShowReward;
IsRank();
if (isShowReward)
{
InitReward();
}
else
{
Init();
reward1.btn_click.onClick.AddListener(() => OnClickReward(0));
reward2.btn_click.onClick.AddListener(() => OnClickReward(1));
reward.btn_click.onClick.AddListener(() => OnClickReward(2));
}
}
void OnCloseToprank()
{
CurRewardQCount curRewardQCount = new CurRewardQCount();
GContext.Publish(curRewardQCount);
if (curRewardQCount.count > 0)
{
ShowReward();
}
else
UIManager.Instance.DestroyUI(UITypes.EventRankPopupPanel);
}
void SetToprank(List<ItemData> itemDatas)
{
rewardPanel.SetActive(false);
get_reward.onClick.RemoveAllListeners();
btn_close.onClick.RemoveAllListeners();
btn_mask.onClick.RemoveAllListeners();
text_continue.SetActive(false);
p_text.SetActive(true);
rank.SetActive(false);
bar_layout.SetActive(false);
toprank.SetActive(true);
toprank_bg_nml.SetActive(selfItem.data.rank > 3);
toprank_bg_top3.SetActive(selfItem.data.rank <= 3);
require_item.SetData(selfItem.data.value);
require_item.text_num.text = ConvertTools.GetNumberString2((int)selfItem.data.value.count);
top_text_rank.text = LocalizationMgr.GetFormatTextValue("UI_EventChallengeCrocodilePanel_9", selfItem.data.rank);
top_icon_head.SetData(GContext.container.Resolve<IUserService>().AvatarUrl);
for (int i = 0; i < top_reward1.Length; i++)
{
if (i < itemDatas.Count)
{
top_reward1[i].gameObject.SetActive(true);
top_reward1[i].SetData(itemDatas[i]);
//top_reward1[i].text_num.text = $"x{ConvertTools.GetNumberString((int)itemDatas[i].count)}";
}
else
{
top_reward1[i].gameObject.SetActive(false);
}
}
//get_reward.onClick.AddListener(OnCloseToprank);
//btn_mask.onClick.AddListener(OnCloseToprank);
}
private void OnClose()
{
if (_leadboardData.rankItemDatas != null && _leadboardData.rankItemDatas.Count > 0)
{
var fishingStage = GContext.container.ResolveStage("FishingStage") as FishingStage;
//目标奖励活动获得的奖励
fishingStage.NextToQueue(LeadboardData.NextQueueKey);
CurRewardQCount curRewardQCount = new CurRewardQCount();
GContext.Publish(curRewardQCount);
if (curRewardQCount.count > 0)
{
GContext.OnEvent<RewardPanelClose>().Subscribe(x =>
{
UIManager.Instance.DestroyUI(UITypes.EventRankPopupPanel);
}).AddTo(disposables);
if (selfItem.data != null && selfItem.data.rank <= SpecialShow)
{
SetToprank(_leadboardData.rankItemDatas);
}
else
{
ShowReward();
}
}
else
{
UIManager.Instance.DestroyUI(UITypes.EventRankPopupPanel);
}
_leadboardData.rankItemDatas = null;
}
else
{
UIManager.Instance.DestroyUI(UITypes.EventRankPopupPanel);
}
}
void ShowReward()
{
GContext.Publish(new ShowData());
canvasGroup.alpha = 0;
}
void IsRank()
{
rankRoot.SetActive(isOpenRank);
unlock.gameObject.SetActive(!isOpenRank);
}
private void Init()
{
selfItem.gameObject.SetActive(false);
RankTargets rankTarget = _fishingEventData.rankTarget;
if (rankTarget != null)
{
SetReward(rankTarget, _fishingEventData.GetCurRankTarget(), _fishingEventData.rankInit);
SetEndTime();
if (isOpenRank)
{
GContext.OnEvent<EventRankData>().Subscribe(x =>
{
SetRankData();
}).AddTo(disposables);
SetRankData();
}
}
}
bool isLoading = false;
async void LoadBg(string BgTitle)
{
isLoading = true;
ShowLoad();
await GContext.container.Resolve<IUIService>().SetImageSprite(bg, BgTitle, "HomePanel");
if (isLoading)
{
bgDownload.OnLoadSucceed();
}
isLoading = false;
}
async void ShowLoad()
{
bgDownload.gameObject.SetActive(false);
await Awaiters.Seconds(1);
if (isLoading)
{
bgDownload.gameObject.SetActive(true);
}
}
void SetReward(RankTargets rankTarget, int curCount, RankInit rankInit)
{
var tables = GContext.container.Resolve<Tables>();
Item item = tables.TbItem[rankInit.TokenID];
GContext.container.Resolve<IUIService>().SetImageSprite(icon_unlock_conditions, item.Icon, "HomePanel");
text_unlock_conditions.text = LocalizationMgr.GetFormatTextValue("UI_EventRankPopupPanel_1", rankInit.UnlockPoint);
LoadBg(rankInit.BgTitle);
PlayerItemData playerItemData = GContext.container.Resolve<PlayerItemData>();
text_title.text = LocalizationMgr.GetText(rankInit.Title_l10n_key);
require.SetData(item, isCanClick: true);
require.text_num.gameObject.SetActive(false);
var TargetList = rankInit.TargetList;
int curIndex = TargetList.IndexOf(rankTarget.TaskID);
text_info.text = LocalizationMgr.GetFormatTextValue("UI_EventRankPopupPanel_2", curIndex, TargetList.Count);
if (rankTarget.NextTarget <= 0)
{
if (curCount >= rankTarget.TokenRequiredB)
{
layout_reward.SetActive(false);
text_complete.SetActive(true);
btn_reward.SetActive(false);
bar.fillAmount = 1;
text_info.text = LocalizationMgr.GetFormatTextValue("UI_EventRankPopupPanel_2", TargetList.Count, TargetList.Count);
return;
}
//最后一个
targetReward1 = tables.TbRankTargets.GetOrDefault(TargetList[^3]);
targetReward2 = tables.TbRankTargets.GetOrDefault(TargetList[^2]);
bar.fillAmount = curCount / ((float)rankTarget.TokenRequiredB * 3) + 0.666f;
}
else if (rankTarget.TaskID == TargetList[0])
{
//第一个
targetReward1 = rankTarget;
targetReward2 = tables.TbRankTargets.GetOrDefault(rankTarget.NextTarget);
bar.fillAmount = curCount / ((float)rankTarget.TokenRequiredB * 3);
}
else
{
targetReward1 = tables.TbRankTargets.GetOrDefault(TargetList[curIndex - 1]);
targetReward2 = rankTarget;
bar.fillAmount = curCount / ((float)rankTarget.TokenRequiredB * 3) + 0.333f;
}
itemData1 = playerItemData.GetItemDataOneLureInflation(_fishingEventData.RankTargetInflation, targetReward1.DropID);
reward1.SetData(itemData1);
itemData2 = playerItemData.GetItemDataOneLureInflation(_fishingEventData.RankTargetInflation, targetReward2.DropID);
reward2.SetData(itemData2);
var maxCollectingTarget = tables.TbRankTargets.GetOrDefault(TargetList[^1]);
targetReward3 = maxCollectingTarget;
itemData3 = playerItemData.GetItemDataOneLureInflation(_fishingEventData.RankTargetInflation, maxCollectingTarget.DropID);
reward.SetData(itemData3);
if (rankTarget.TaskID != TargetList[0])
{
reward1.SetReceived(true);
reward1.btn_click.enabled = false;
}
if (rankTarget.NextTarget <= 0)
{
reward2.SetReceived(true);
reward2.btn_click.enabled = false;
}
//设置tips
int targetCount = 0;
for (int i = 0; i < TargetList.Count; i++)
{
var targetReward = tables.TbRankTargets.GetOrDefault(TargetList[i]);
if (targetReward != null)
{
targetCount += targetReward.TokenRequiredB;
}
if (targetReward.TaskID == targetReward1.TaskID)
{
targetCount1 = targetCount;
}
if (targetReward.TaskID == targetReward2.TaskID)
{
targetCount2 = targetCount;
}
if (targetReward.TaskID == targetReward3.TaskID)
{
targetCount3 = targetCount;
}
}
reward1.id = 0;
reward2.id = 0;
reward.id = 0;
int allCount = _fishingEventData.GetAllRankTarget();
barItemTips[0].Init(itemData1, item.Icon, targetCount1, allCount);
barItemTips[1].Init(itemData2, item.Icon, targetCount2, allCount);
barItemTips[2].Init(itemData3, item.Icon, targetCount3, allCount);
}
void InitReward()
{
selfItem.gameObject.SetActive(false);
var rankTarget = _leadboardData.rankTarget;
if (rankTarget != null)
{
//SpecialShow = _leadboardData.lastEventRank.SpecialShow;
SetReward(rankTarget, _leadboardData.lastScore, _leadboardData.lastEventRank);
var userService = GContext.container.Resolve<IUserService>();
List<RankFormula> rankFormulas = _tables.TbRankFormula.DataList;
List<int> rewardList = new List<int>();
RewardData curEventRank = _leadboardData.eventRankReward;
for (int i = 0; i < rankFormulas.Count; i++)
{
if (rankFormulas[i].RankTier == curEventRank.rankLevel)
{
rewardList = rankFormulas[i].RewardList;
break;
}
}
int rewardCount = rewardList.Count;
curSelfRank = -1;
for (int i = 0; i < curEventRank.ranks.Length; i++)
{
EventLeadboardItemData leadboardItemData = new EventLeadboardItemData();
leadboardItemData.value = new ItemData
{
id = _leadboardData.lastEventRank.TokenID,
count = Mathf.FloorToInt(curEventRank.ranks[i].score),
};
leadboardItemData.playFabId = curEventRank.ranks[i].id;
leadboardItemData.isMe = curEventRank.ranks[i].isMe;
leadboardItemData.rank = curEventRank.ranks[i].rank;
if (rewardCount > i)
{
RankReward rankReward = _tables.TbRankReward.GetOrDefault(rewardList[i]);
if (rankReward != null)
{
leadboardItemData.itemDatas = GContext.container.Resolve<PlayerItemData>().GetItemDataByDropId/*LureInflation(_fishingEventData.RankTargetInflation,*/(rankReward.DropID);
}
}
if (curEventRank.ranks[i].isMe)
{
curSelfRank = i;
leadboardItemData.playFabId = userService.UserId;
leadboardItemData.value.count = _leadboardData.lastAllScore;
selfItem.data = leadboardItemData;
selfItem.OnInit();
text_continue.SetActive(leadboardItemData.rank <= SpecialShow);
p_text.SetActive(leadboardItemData.rank > SpecialShow);
}
datas.Add(leadboardItemData);
}
scrollRect.Init<EventLeadboardItem, EventLeadboardItemData>(itemHigh, item, null, datas);
SetSelfItem();
}
}
public void SetRankData()
{
if (isOpenRank)
{
if (GContext.container.Resolve<LeadboardData>().curEventRank == null)
{
return;
}
var userService = GContext.container.Resolve<IUserService>();
GetLeaderboardsResp curEventRank = GContext.container.Resolve<LeadboardData>().curEventRank;
List<RankFormula> rankFormulas = _tables.TbRankFormula.DataList;
List<int> rewardList = new List<int>();
for (int i = 0; i < rankFormulas.Count; i++)
{
if (rankFormulas[i].RankTier == curEventRank.rankLevel)
{
rewardList = rankFormulas[i].RewardList;
break;
}
}
int rewardCount = rewardList.Count;
curSelfRank = -1;
datas.Clear();
for (int i = 0; i < curEventRank.data.Length; i++)
{
EventLeadboardItemData leadboardItemData = new EventLeadboardItemData();
leadboardItemData.value = new ItemData
{
id = _fishingEventData.rankInit.TokenID,
count = Mathf.FloorToInt(curEventRank.data[i].score),
};
leadboardItemData.playFabId = curEventRank.data[i].id;
leadboardItemData.isMe = curEventRank.data[i].isMe;
leadboardItemData.rank = curEventRank.data[i].rank;
if (rewardCount > i)
{
RankReward rankReward = _tables.TbRankReward.GetOrDefault(rewardList[i]);
if (rankReward != null)
{
leadboardItemData.itemDatas = GContext.container.Resolve<PlayerItemData>().GetItemDataByDropId/*LureInflation(_fishingEventData.RankTargetInflation,*/(rankReward.DropID);
}
}
if (curEventRank.data[i].isMe)
{
curSelfRank = i;
leadboardItemData.playFabId = userService.UserId;
leadboardItemData.value.count = _fishingEventData.GetAllRankTarget();
selfItem.data = leadboardItemData;
selfItem.OnInit();
}
datas.Add(leadboardItemData);
}
if (datas.Count < 2)
{
ToastPanel.Show(LocalizationMgr.GetText("UI_ToastPanel_107"));
}
scrollRect.Init<EventLeadboardItem, EventLeadboardItemData>(itemHigh, item, null, datas);
SetSelfItem();
}
}
void SetSelfItem()
{
float selfPos = itemHigh * curSelfRank - scrollRect.viewport.rect.height + itemHigh;
selfItem.gameObject.SetActive(scrollRect.content.anchoredPosition.y < selfPos && curSelfRank >= 0);
if (curSelfRank >= 0)
{
scrollRect.onValueChanged.AddListener((Vector2 v2) =>
{
selfItem.gameObject.SetActive(scrollRect.content.anchoredPosition.y < selfPos);
});
}
}
void SetEndTime()
{
//显示倒计时
if (timer == null)
{
DateTime endTime = _fishingEventData.GetRankEndTime();
TimeSpan all = endTime - ZZTimeHelper.UtcNow().UtcNowOffset();
double seconds = all.TotalSeconds;
timer = this.AttachTimer((float)seconds,
() => { UIManager.Instance.DestroyUI(UITypes.EventRankPopupPanel); },
(elapsed) =>
{
TimeSpan now = endTime - ZZTimeHelper.UtcNow().UtcNowOffset();
text_time.text = ConvertTools.ConvertTime2(now.Days, now.Hours, now.Minutes, now.Seconds);
}, useRealTime: true);
}
}
private void OnDestroy()
{
disposables?.Dispose();
disposables = null;
isLoading = false;
}
}