Files
MinFt/Client/Assets/Scripts/UI/Setting/EventSignupPopupPanel_2.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

275 lines
8.8 KiB
C#

using asap.core;
using cfg;
using GameCore;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
using UniRx;
using game;
using System;
public class EventSignupPopupPanel_2 : BasePanel
{
List<SignupDayItem> signupDayItems = new List<SignupDayItem>();
Button btn_close;
Tables tables;
SigninData signupData;
[SerializeField] private Image[] bars;
[SerializeField] private RewardFlyBatchController rewardFlyController;
RectTransform icon_done;
GameObject effect_HomePanel;
GameObject clickMask;
Transform reward;
List<SignupRewardItem> rewardItems = new List<SignupRewardItem>();
List<int> drops = new List<int>();
List<MonthlySign> monthlySign;
GameObject rewardPanel;
Button reward_button;
int curIndex;
private void Awake()
{
tables = GContext.container.Resolve<Tables>();
monthlySign = tables.TbMonthlySign.DataList;
signupData = GContext.container.Resolve<SigninData>();
for (int i = 1; i < 8; i++)
{
signupDayItems.Add(transform.Find("root/day" + i).GetComponent<SignupDayItem>());
}
btn_close = transform.Find("btn_close").GetComponent<Button>();
icon_done = transform.Find("root/bg_bar/icon_done").GetComponent<RectTransform>();
effect_HomePanel = transform.Find("root/bg_bar/effect_HomePanel").gameObject;
reward = transform.Find("root/reward");
for (int i = 0; i < reward.childCount; i++)
{
rewardItems.Add(reward.GetChild(i).GetComponent<SignupRewardItem>());
}
rewardPanel = transform.Find("reward").gameObject;
reward_button = transform.Find("reward/btn_play/btn_green").GetComponent<Button>();
clickMask = transform.Find("clickMask").gameObject;
}
protected override void Start()
{
clickMask.SetActive(false);
oldPanelName = panelName;
base.Start();
btn_close.onClick.AddListener(OnClose);
reward_button.onClick.AddListener(OnClickReward);
int DropID;
for (int i = 0; i < signupDayItems.Count; i++)
{
DailySign dailySign = tables.TbDailySign.DataList[i];
DropID = dailySign.DropID;
signupDayItems[i].ShowData(i, DropID);
}
SetData();
GContext.OnEvent<OnSignEvent>().Subscribe(OnSignEvent).AddTo(disposables);
}
void SetData()
{
for (int i = 0; i < rewardItems.Count; i++)
{
rewardItems[i].gameObject.SetActive(false);
}
int count = monthlySign.Count;
for (int i = 0; i < count; i++)
{
int index = i;
drops.Add(monthlySign[i].DropID);
rewardItems[i].gameObject.SetActive(true);
rewardItems[i].SetData(() => OnClickReward(index, rewardItems[index].transform.position), monthlySign[i].SignDayAccount.ToString());
}
var (stage, percentage) = GetFillAmounts();
SetFillAmounts(stage, percentage);
RefreshPanel();
}
void RefreshPanel()
{
ShowRewardPanel();
(int stage, float percentage) = GetFillAmounts();
SetFillAmounts(stage, percentage);
int count = monthlySign.Count;
int id;
for (int i = 0; i < count; i++)
{
id = monthlySign[i].SignDayAccount;
rewardItems[i].SetReceived(signupData.monthlySignEvent.index >= id);
}
}
async void FlyReward(List<ItemData> itemDatas)
{
var rewardFlyRequest = new BatchedRewardFlyRequest
{
Icon = new BatchedRewardFlyRequestIcon { icon = icon_done.GetComponent<Image>().sprite },
StartPoint = new BatchedRewardFlyStartPoint(signupDayItems[signupData.dailySignEvent.index - 1].icon_done.transform.position),
EndPoint = new BatchedRewardFlyEndPoint(icon_done),
IsDestinationRewardStash = false,
AnimationParamIndex = 0
};
await rewardFlyController.OnRewardFlyRequestAsync(rewardFlyRequest);
(int stage, float percentage) = GetFillAmounts();
await Fill(stage, percentage, 0.5f);
int count = monthlySign.Count;
int id;
for (int i = 0; i < count; i++)
{
id = monthlySign[i].SignDayAccount;
rewardItems[i].SetReceived(signupData.monthlySignEvent.index >= id);
}
if (itemDatas != null && itemDatas.Count > 0)
{
GContext.Publish(new ShowData(itemDatas));
GContext.Publish(new ShowData());
}
CurRewardQCount curRewardQCount = new CurRewardQCount();
GContext.Publish(curRewardQCount);
if (FishingEventData.Condition_NoRechargeDay(15))
{
if (curRewardQCount.count <= 0)
{
OnClickAds();
}
else
{
GContext.OnEvent<RewardPanelClose>().First().Subscribe((e) =>
{
OnClickAds();
}).AddTo(disposables);
}
}
clickMask.SetActive(false);
}
AdvertPopupType curOpenAdType = AdvertPopupType.SignInAdvert;
IDisposable ads;
void OnClickAds()
{
Debug.Log("OnClickAds SignInAdvert");
//拉起广告
AdsDispose();
ads = GContext.OnEvent<AdsInterstitialResult>().Subscribe(SetResult);
GContext.container.Resolve<IAdsService>().ShowInterstitial(curOpenAdType);
}
void SetResult(AdsInterstitialResult adsResult)
{
AdsDispose();
if (adsResult.Type == curOpenAdType)
{
}
}
void AdsDispose()
{
ads?.Dispose();
ads = null;
}
async void OnSignEvent(OnSignEvent onSignEvent)
{
clickMask.SetActive(true);
ShowRewardPanel();
await Awaiters.Seconds(1.5f);
GContext.Publish(new ShowData());
CurRewardQCount curRewardQCount = new CurRewardQCount();
GContext.Publish(curRewardQCount);
if (curRewardQCount.count <= 0)
{
FlyReward(onSignEvent.itemDataList);
}
else
{
GContext.OnEvent<RewardPanelClose>().First().Subscribe((e) =>
{
FlyReward(onSignEvent.itemDataList);
}).AddTo(disposables);
}
}
void ShowRewardPanel()
{
var dailySignEvent = signupData.dailySignEvent;
bool isReward = dailySignEvent.lastID != ZZTimeHelper.UtcNow().UtcNowOffset().DayOfYear && dailySignEvent.index < 7;
rewardPanel.SetActive(isReward);
btn_close.gameObject.SetActive(!isReward);
}
void OnClickReward()
{
if (signupData.dailySignEvent.index < signupDayItems.Count)
{
signupDayItems[signupData.dailySignEvent.index].OnClaimBtnClick();
}
}
void OnClose()
{
UIManager.Instance.DestroyUI(gameObject.name);
}
void OnClickReward(int index, Vector3 pos)
{
item_sanddig_tips.Show(pos, drops[index], GContext.container.Resolve<PlayerData>().InflationRate);
}
private (int stage, float percentage) GetFillAmounts()
{
int stage = int.MaxValue;
float percentage = 1;
int doneCount = 0;
for (int i = 0; i < monthlySign.Count; i++)
{
if (monthlySign[i].SignDayAccount >= signupData.monthlySignEvent.index)
{
stage = i;
percentage = (float)(signupData.monthlySignEvent.index - doneCount) / (monthlySign[i].SignDayAccount - doneCount);
break;
}
else
{
doneCount = monthlySign[i].SignDayAccount;
}
}
return (stage, percentage);
}
private void SetFillAmounts(int stage, float percentage)
{
for (int i = 0; i < bars.Length; i++)
{
if (i < stage)
bars[i].fillAmount = 1;
else if (i == stage)
bars[i].fillAmount = percentage;
else
bars[i].fillAmount = 0;
}
}
private async System.Threading.Tasks.Task Fill(int stage, float percentage, float totalDuration)
{
foreach (var bar in bars)
bar.DOKill();
Dictionary<int, float> fillSchedule = new Dictionary<int, float>();
for (int i = 0; i < bars.Length; i++)
{
if (bars[i].fillAmount >= 1)
continue;
if (i < stage)
fillSchedule.Add(i, 1);
else if (i == stage)
fillSchedule.Add(i, percentage);
}
if (fillSchedule.Count == 0)
return;
var duration = totalDuration / fillSchedule.Count;
foreach (var kv in fillSchedule)
await bars[kv.Key].DOFillAmount(kv.Value, duration).AsyncWaitForCompletion();
}
}