备份CatanBuilding瘦身独立工程

This commit is contained in:
JSD\13999
2026-05-26 16:15:54 +08:00
commit 2d0e6a61b7
12001 changed files with 2431925 additions and 0 deletions

View File

@@ -0,0 +1,265 @@
using System.Linq;
using asap.core;
using UnityEngine;
using UnityEngine.UI;
using game;
using UniRx;
using TMPro;
using GameCore;
using System.Collections.Generic;
using System.Threading.Tasks;
using System;
using Game;
public class EventGatherCorePanel : MonoBehaviour
{
[SerializeField] private Button btnClose, btnInfo, btnTicket;
[SerializeField] private EventGatherCoreTriggerView[] triggers;
[SerializeField] private EventGatherCoreRewardView[] rewards;
[SerializeField] private EventGatherCoreTaskView task;
[SerializeField] private TMP_Text textTicketCount;
[SerializeField] private EventGatherCoreTriggerItemFly fly;
[SerializeField] private BingoTimer timer;
[SerializeField] private GameObject clickMask;
[SerializeField] private DeferredRewardStashButton rewardStashButton;
[SerializeField] private GameObject fxStageShift;
[SerializeField] private float triggerItemShakeDuration, triggerItemKickDuration, triggerItemFlyDuration, triggerItemHitDuration, fingerTipDelay = 3f;
[SerializeField] private EventGatherCoreFingerTipCtrl _fingerTipCtrl;
private IEventAggregator _eventAggregator;
private readonly string SfxHit = "audio_ui_gathercorefootball_reward_hit";
private void Start()
{
GContext.container.Resolve<GuideDataCenter>().InspectTriggerGuide("EventGatherCoreFootballPanel");
}
public void Init(IEventAggregator eventAggregator)
{
var data = GContext.container.Resolve<EventGatherCoreData>();
btnClose.onClick.AddListener(OnClickClose);
btnInfo.onClick.AddListener(OnClickInfo);
btnTicket.onClick.AddListener(OnClickPack);
_eventAggregator = eventAggregator;
InitPanel();
_eventAggregator.GetEvent<EventGatherCoreTriggerTaken>().Subscribe(OnTrigger).AddTo(this);
_eventAggregator.GetEvent<EventGatherCoreRewardPopupPanelClose>().Subscribe(OnRewardPopupPanelClose).AddTo(this);
GContext.OnEvent<ResAddEvent>().Subscribe(OnTicketUpdata).AddTo(this);
GContext.OnEvent<EventTicketUpdate>().Subscribe(_ => UpdateTicketCount()).AddTo(this);
var chainPackData = data.ToChainPackData();
RedPointManager.Instance.SetRedPointState(chainPackData.RedPointKey, chainPackData.DoNeedPackRedPoint);
_fingerTipCtrl.Init(fingerTipDelay, _eventAggregator);
_eventAggregator.GetEvent<EventCatherCoreFingerTipShow>().Subscribe(e => _fingerTipCtrl.Show(GetRandomActiveTriggerView())).AddTo(this);
}
private void OnClickClose()
{
GContext.Publish(new UnloadActToNextAct());
}
private void InitPanel()
{
var data = GContext.container.Resolve<EventGatherCoreData>();
var stageData = data.StageData;
if (stageData.IsStageCleared(EventGatherCoreAct.Ctx))
data.MoveToNextStage();
for (int i = 0; i < triggers.Length; i++)
triggers[i].Init(i, stageData.IsTriggerUsed(i), fly.showDuration, _eventAggregator);
var rewardDic = EventGatherCoreAct.Ctx.GetRewardViewInfo(stageData.StageId);
for (int i = 0; i < rewards.Length; i++)
{
var rewardDisplayInfo = new EventGatherCoreRewardInfo();
if (rewardDic.Keys.Contains(i))
rewardDisplayInfo.ItemData = EventGatherCoreAct.Ctx.GetReward(rewardDic[i].RewardId, out rewardDisplayInfo.IsSpecial);
else
rewardDisplayInfo.ItemData = null;
rewardDisplayInfo.Idx = rewardDic[i].RewardIndex;
rewardDisplayInfo.IsClaimed = stageData.IsRewardClaimed(rewardDic[i].RewardIndex);
rewards[i].Init(rewardDisplayInfo, fly, SfxHit);
}
task.Init(stageData.CoreItemReceivedCount,
EventGatherCoreAct.Ctx.GetCoreItemCollectionReward(stageData.StageId));
UpdateTicketCount();
var timerData = data.ToTimerContext(OnClickClose);
timer.Init(timerData);
fxStageShift.SetActive(false);
}
private async void OnTrigger(EventGatherCoreTriggerTaken e)
{
if (!e.Succeeded)
{
OnClickPack();
return;
}
BlockInput();
UpdateTicketCount();
var data = GContext.container.Resolve<EventGatherCoreData>();
var stageData = data.StageData;
var ctx = EventGatherCoreAct.Ctx;
var rewardView = rewards.FirstOrDefault(x => x.RewardIndex == e.RewardIdx);
var reward = ctx.GetReward(e.RewardId, out _);
await rewardView.OnTriggerAsync(e.Position, triggerItemShakeDuration, triggerItemKickDuration, triggerItemFlyDuration, triggerItemHitDuration);
if (ctx.IsCoreItem(e.RewardId))
{
_fingerTipCtrl.HardReset();
await task.OnTriggerAsync(reward.id, rewardView.RewardIcon.rect.width, rewardView.RewardIcon.position);
if (!stageData.IsStageCleared(EventGatherCoreAct.Ctx))
{
UnblockInput();
return;
}
EventGatherCoreSystem.GrantTaskReward(
EventGatherCoreAct.Ctx.GetCoreItemCollectionRewardDropId(data.StageData.StageId),
stageData.GetRemainingRewardIds());
var tcs = new TaskCompletionSource<bool>();
var panel = (await UIManager.Instance.ShowUINotLoading(UITypes.EventGatherCoreRewardPopupPanel)).GetComponent<EventGatherCoreRewardPopupPanel>();
panel.Init(ctx.GetCoreItemCollectionReward(stageData.StageId), _eventAggregator, tcs);
await tcs.Task;
await CollectRemainingRewards();
data.MoveToNextStage();
if (data.StageData.StageId == ctx.GetStageId(0))
OnClickClose();
else
RefreshPanel();
_fingerTipCtrl.HardReset();
}
else
{
GContext.Publish(new EventRewardFlyStashRequest(reward, rewardView.RewardIcon, true, rewardView.Text));
}
UnblockInput();
}
private async void RefreshPanel()
{
var data = GContext.container.Resolve<EventGatherCoreData>();
var stageData = data.StageData;
UpdateTicketCount();
var transitionPanel = await UIManager.Instance.ShowUI(UITypes.CloudTransitionPanel);
await Task.Delay(TimeSpan.FromSeconds(0.8f));
transitionPanel.GetComponent<CloudTransitionPanel>().EndTransition(new EndTransition());
fxStageShift.SetActive(false);
fxStageShift.SetActive(true);
for (int i = 0; i < triggers.Length; i++)
triggers[i].Set(stageData.IsTriggerUsed(i));
var rewardDic = EventGatherCoreAct.Ctx.GetRewardViewInfo(stageData.StageId);
for (int i = 0; i < rewards.Length; i++)
{
var rewardDisplayInfo = new EventGatherCoreRewardInfo();
if (rewardDic.Keys.Contains(i))
rewardDisplayInfo.ItemData = EventGatherCoreAct.Ctx.GetReward(rewardDic[i].RewardId, out rewardDisplayInfo.IsSpecial);
else
rewardDisplayInfo.ItemData = null;
rewardDisplayInfo.Idx = rewardDic[i].RewardIndex;
rewardDisplayInfo.IsClaimed = stageData.IsRewardClaimed(i);
rewards[i].Set(rewardDisplayInfo);
}
task.RefreshView(EventGatherCoreAct.Ctx.GetCoreItemCollectionReward(stageData.StageId));
}
private void UpdateTicketCount()
{
var n = GContext.container.Resolve<EventGatherCoreData>().TicketCount;
textTicketCount.text = n.ToString();
textTicketCount.color = n > 0 ? Color.white : Color.red;
}
private async void OnClickInfo()
{
try
{
await UIManager.Instance.ShowUINotLoading(UITypes.EventGatherCoreInfoPanel);
}
catch (Exception e)
{
Debug.Log($"[EventGatherCore]{e.Message}\n{e.StackTrace}");
}
}
private async Task CollectRemainingRewards()
{
try
{
var tasks = new List<Task>();
var stageId = GContext.container.Resolve<EventGatherCoreData>().StageData.StageId;
var targetViewList = new List<EventGatherCoreRewardView>();
GContext.Publish(new EventUISound(SfxHit));
foreach (var rewardView in rewards.Where(x => !x.IsClaimed))
{
rewardView.SetReceived();
targetViewList.Add(rewardView);
}
if (targetViewList.Count <= 0)
return;
await Task.Delay(TimeSpan.FromSeconds(triggerItemHitDuration));
foreach (var rewardView in targetViewList)
{
var item = EventGatherCoreAct.Ctx.GetRewardByIndex(rewardView.RewardIndex, stageId);
tasks.Add(rewardStashButton.OnRewardFlyRequestAsync(
new EventRewardFlyStashRequest(item, rewardView.RewardIcon)));
}
await Task.WhenAll(tasks);
}
catch (Exception e)
{
Debug.Log($"[EventGatherCore]{e.Message}\n{e.StackTrace}");
}
}
private async void OnClickPack()
{
var chainData = GContext.container.Resolve<EventGatherCoreData>().ToChainPackData();
if (chainData.IsChainPackDepleted)
{
var normalPanel = (await UIManager.Instance.ShowUINotLoading(UITypes.EventGatherCoreNormalPackPanel))
.GetComponent<GeneralEventNormalPackPanel>();
normalPanel.Init(EventGatherCoreAct.Ctx.GetNormalPackInfo());
}
else
{
var chainPanel = (await UIManager.Instance.ShowUINotLoading(UITypes.EventGatherCoreChainPackPanel))
.GetComponent<ChainPackPanel>();
chainPanel.Init(chainData);
}
}
private void OnTicketUpdata(ResAddEvent e)
{
if (e.id != EventGatherCoreAct.Ctx.GetTicketItemId())
return;
UpdateTicketCount();
}
public /* async */ void BlockInput()
{
try
{
clickMask.SetActive(true);
// Debug.Log($"[EventGatherCore] Block.");
// await Task.Delay(TimeSpan.FromSeconds(15f));
// UnblockInput();
}
catch (Exception e)
{
Debug.Log($"[EventGatherCore] Block error.");
Debug.LogError(e);
}
}
public void UnblockInput()
{
clickMask.SetActive(false);
// Debug.Log($"[EventGatherCore] Unblock.");
}
public void OnRewardPopupPanelClose(EventGatherCoreRewardPopupPanelClose e)
{
// RefreshPanel();
}
public EventGatherCoreTriggerView GetRandomActiveTriggerView()
{
var activeList = triggers.Where(x => x.gameObject.activeSelf).ToList();
return activeList.Count > 0 ? activeList[UnityEngine.Random.Range(0, activeList.Count)] : null;
}
}