Files
MinFt/Client/Assets/Scripts/UI/Home/HomeBubbleTask.cs
2026-04-27 12:07:32 +08:00

377 lines
12 KiB
C#

using asap.core;
using cfg;
using DG.Tweening;
using game;
using GameCore;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using UniRx;
using System;
public class HomeBubbleTask : MonoBehaviour
{
Button btn_bubble_task;
Image bg_bar;
Image bg_bar1;
Image bg_bar2;
[NonSerialized]
public Image bar;
Image bar1;
Image bar2;
RectTransform _rect;
RectTransform _rect1;
RectTransform _rect2;
GameObject info_1;
GameObject info_2;
RectTransform bar_rect;
RectTransform bar_rect_1;
RectTransform bar_rect_2;
RewardItemNew rewardItemBubble;
RewardItemNew rewardItem_1;
RewardItemNew rewardItem_2;
[NonSerialized]
public TMP_Text text_progress;
TMP_Text text_time;
private CollectingTargetReward collectingTarget;
FishingEventData _fishingEventData;
Tables _tables;
BubbleTaskInfo_2 bubbleTaskInfo;
Animation ani;
public float barTimer = 0.38f;
public float animationTimer = 0.667f;
public float changeDelayTimer = 0.616f;
float showTime = 0.16f; //显示时间
bool isInit = false;
private void Awake()
{
Init();
}
void Init()
{
if (isInit) return;
isInit = true;
showTime = animationTimer - changeDelayTimer;
bubbleTaskInfo = GetComponent<BubbleTaskInfo_2>();
_fishingEventData = GContext.container.Resolve<FishingEventData>();
_tables = GContext.container.Resolve<Tables>();
ani = GetComponent<Animation>();
btn_bubble_task = transform.GetComponent<Button>();
bubbleTaskInfo.enabled = false;
btn_bubble_task.enabled = false;
bg_bar = transform.Find("bg_bar").GetComponent<Image>();
bg_bar1 = transform.Find("info_1/bg_bar").GetComponent<Image>();
bg_bar2 = transform.Find("info_2/bg_bar").GetComponent<Image>();
bar = transform.Find("bg_bar/bar").GetComponent<Image>();
bar1 = transform.Find("info_1/bg_bar/bar").GetComponent<Image>();
bar2 = transform.Find("info_2/bg_bar/bar").GetComponent<Image>();
_rect = transform.Find("bg_bar/bar").GetComponent<RectTransform>();
bar_rect = transform.Find("bg_bar").GetComponent<RectTransform>();
info_1 = transform.Find("info_1").gameObject;
info_2 = transform.Find("info_2").gameObject;
_rect1 = transform.Find("info_1/bg_bar/bar").GetComponent<RectTransform>();
_rect2 = transform.Find("info_2/bg_bar/bar").GetComponent<RectTransform>();
bar_rect_1 = transform.Find("info_1/bg_bar").GetComponent<RectTransform>();
bar_rect_2 = transform.Find("info_2/bg_bar").GetComponent<RectTransform>();
rewardItemBubble = transform.Find("info_1/btn_reward").GetComponent<RewardItemNew>();
rewardItem_1 = transform.Find("info_2/btn_reward_1").GetComponent<RewardItemNew>();
rewardItem_2 = transform.Find("info_2/btn_reward_2").GetComponent<RewardItemNew>();
text_progress = transform.Find("bg_bar/text_progress").GetComponent<TMP_Text>();
text_time = transform.Find("text_time").GetComponent<TMP_Text>();
}
void Start()
{
btn_bubble_task.onClick.AddListener(OnClickTarget);
}
async void OnClickTarget()
{
var collectingTargetInit = _fishingEventData.collectingTargetInit;
if (collectingTargetInit != null)
{
//ExitAutoFishing();
//退出自动钓鱼
bool isCanEnter = _fishingEventData.collectingTargetResoure;
if (isCanEnter)
{
await UIManager.Instance.ShowUI(UITypes.FishingTargetPopupPanel);
}
}
}
public void SetCollectingTargetTime(string timeStr)
{
text_time.text = timeStr;
}
public void PlayEventTargetAdd(CollectingTargetReward collecting, int curCount, int endCount)
{
//Vector3 startPos = fishingData.image_extra_pos;
this.collectingTarget = collecting;
int curValue = curCount;
bar.DOFillAmount(endCount / (float)collectingTarget.TokenRequiredB, barTimer);
DOTween.To(() => curValue, x => curValue = x, endCount, barTimer).OnUpdate(() =>
{
text_progress.text = $"{curValue}/{collectingTarget.TokenRequiredB}";
}).OnComplete(() =>
{
//require.transform.localScale = Vector3.one;
if (_fishingEventData.preCollectingTarget != null)
{
TargetUp();
}
});
//进度条增加
}
void CollectingTargetNext()
{
collectingTarget = _fishingEventData.collectingTarget;
if (collectingTarget != null)
{
var collectingTargetInit = _fishingEventData.collectingTargetInit;
bubbleTaskInfo.SetInfo(collectingTargetInit);
if (_fishingEventData.preCollectingTarget != null)
{
return;
}
else
{
List<ItemData> itemData = GContext.container.Resolve<PlayerItemData>().GetItemDataByDropIdLureInflation(_fishingEventData.CollectingTargetInflation, collectingTarget.DropID);
if (itemData != null && itemData.Count > 0)
{
SetCollectingTargetRewardIcon(itemData);
}
int curCount = _fishingEventData.GetCurCollectingTarget();
if (curCount >= collectingTarget.TokenRequiredB)
{
curCount = collectingTarget.TokenRequiredB;
text_progress.text = LocalizationMgr.GetText("UI_EventRankPopupPanel_15");
}
else
{
text_progress.text = $"{curCount}/{collectingTarget.TokenRequiredB}";
}
bar.fillAmount = curCount / (float)collectingTarget.TokenRequiredB;
}
}
}
void TargetUp()
{
if (_fishingEventData.preCollectingTarget == null || _fishingEventData.preCollectingTarget.Count == 0)
{
collectingTarget = _fishingEventData.collectingTarget;
PlayUpEndAni();
}
else
{
collectingTarget = _fishingEventData.preCollectingTarget.Dequeue();
PlayUpAni();
}
}
void ChangeReward()
{
List<ItemData> itemData = GContext.container.Resolve<PlayerItemData>().GetItemDataByDropIdLureInflation(_fishingEventData.CollectingTargetInflation, collectingTarget.DropID);
if (itemData is { Count: > 0 })
{
//await Awaiters.Seconds(0.1f);
SetCollectingTargetRewardIcon(itemData);
}
}
async void PlayUpAni()
{
int endCount = collectingTarget.TokenRequiredB;
ani.Play("bubble_task");
await Awaiters.Seconds(changeDelayTimer);
ChangeReward();
bar.fillAmount = 0;
await Awaiters.Seconds(showTime);
if (this == null)
{
return;
}
bar.DOFillAmount(1, barTimer);
int curValue = 0;
DOTween.To(() => curValue, x => curValue = x, endCount, barTimer).OnUpdate(() =>
{
text_progress.text = $"{curValue}/{collectingTarget.TokenRequiredB}";
})
.OnComplete(() =>
{
TargetUp();
});
}
async void PlayUpEndAni()
{
int endCount = _fishingEventData.GetCurCollectingTarget();
ani.Play("bubble_task");
if (endCount >= collectingTarget.TokenRequiredB)
{
text_progress.text = LocalizationMgr.GetText("UI_EventRankPopupPanel_15");
}
else
{
await Awaiters.Seconds(changeDelayTimer);
ChangeReward();
bar.fillAmount = 0;
await Awaiters.Seconds(showTime);
if (this == null)
{
return;
}
bar.DOFillAmount(endCount / (float)collectingTarget.TokenRequiredB, barTimer);
int curValue = 0;
DOTween.To(() => curValue, x => curValue = x, endCount, barTimer).OnUpdate(() =>
{
text_progress.text = $"{curValue}/{collectingTarget.TokenRequiredB}";
});
}
GContext.Publish(new ShowData());
}
int showCount = 0;
public void SetCollectingTargetRewardIcon(List<ItemData> itemDatas)
{
if (itemDatas != null)
{
int count = itemDatas.Count;
if (showCount != count)
{
info_1.SetActive(count == 1);
info_2.SetActive(count != 1);
showCount = count;
if (count == 1)
{
bar_rect.sizeDelta = bar_rect_1.sizeDelta;
bg_bar.sprite = bg_bar1.sprite;
bar.sprite = bar1.sprite;
_rect.sizeDelta = _rect1.sizeDelta;
}
else
{
bar_rect.sizeDelta = bar_rect_2.sizeDelta;
bg_bar.sprite = bg_bar2.sprite;
bar.sprite = bar2.sprite;
_rect.sizeDelta = _rect2.sizeDelta;
}
}
if (count == 1)
{
rewardItemBubble.SetData(itemDatas[0], isCanClick: false);
}
else
{
rewardItem_1.SetData(itemDatas[0], isCanClick: false);
rewardItem_2.SetData(itemDatas[1], isCanClick: false);
}
}
}
Timer ctTimer;
void SetEndTime()
{
//显示倒计时
if (ctTimer == null || ctTimer.isDone)
{
DateTime endTime = _fishingEventData.GetCollectingTargetEndTime();
TimeSpan now = endTime - ZZTimeHelper.UtcNow().UtcNowOffset();
double seconds = now.TotalSeconds;
ctTimer = this.AttachTimer((float)seconds, RefreshMiddle,
(elapsed) =>
{
now = endTime - ZZTimeHelper.UtcNow().UtcNowOffset();
string text_time_text = ConvertTools.ConvertTime2(now.Days, now.Hours, now.Minutes, now.Seconds);
SetCollectingTargetTime(text_time_text);
}, useRealTime: true);
}
}
void RefreshMiddle()
{
ctTimer?.Cancel();
ctTimer = null;
gameObject.SetActive(false);
GContext.container.Resolve<FishingEventData>().GetEventAndInit(3, 2);
}
IDisposable loadResourceIdis;
string resourceKey;
public async void CheckResource()
{
Init();
gameObject.SetActive(true);
_fishingEventData = GContext.container.Resolve<FishingEventData>();
List<string> resourceName = new List<string> { _fishingEventData.collectingTargetInit.DownloadPkg, _fishingEventData.collectingTargetInit.BgTitle };
resourceKey = string.Join(",", resourceName);
bool isReady = await _fishingEventData.CheckResourceLoadQueue(resourceKey, resourceName);
if (!isReady)
{
DisposeEvent();
loadResourceIdis = GContext.OnEvent<LoadEventResourceEvent>().Where(_ => _.key == resourceKey).Subscribe(LoadEventResourceEvent);
//会闪一下吗?
}
else
{
LoadEventResource(true);
}
}
void LoadEventResourceEvent(LoadEventResourceEvent loadEvent)
{
Debug.Log($"LoadEventResourceEvent {loadEvent.key} {loadEvent.isSucceeded} ");
DisposeEvent();
LoadEventResource(loadEvent.isSucceeded);
}
void DisposeEvent()
{
loadResourceIdis?.Dispose();
loadResourceIdis = null;
}
void LoadEventResource(bool succeeded)
{
if (this == null)
{
return;
}
if (succeeded)
{
try
{
OnLoadEventResource();
}
catch (System.Exception e)
{
Debug.LogError($"Load Event Resource Exception! == {gameObject.name} \n {e}");
}
}
else
{
Debug.LogError($"Load Event Resource Failed! == {gameObject.name}");
}
}
protected void OnLoadEventResource()
{
_fishingEventData.collectingTargetResoure = true;
bubbleTaskInfo.enabled = true;
btn_bubble_task.enabled = true;
CollectingTargetNext();
SetEndTime();
ani.Play("bubble_task_show");
}
private void OnDestroy()
{
DisposeEvent();
}
}