备份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,381 @@
using asap.core;
using DG.Tweening;
using game;
using GameCore;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using UniRx;
// 继续
public class FishingChallengeContinueEvent
{
}
// 结算界面
// 显示前往钓鱼按钮的UI
public class EventChallengePanel : MonoBehaviour
{
//
private Button btn_questionmark;
private TMP_Text text_title;
private CanvasGroup canvasGroup;
private TMP_Text text_people;
private TMP_Text text_time;
private Button btn_enter;
private Button btn_close;
// private RewardItemNew reward;
// 数据
private Timer timer;
private int curNum;
private int _challengeState;
private int oldStep;
private int newStep;
private List<ItemData> itemDataList;
private List<EventChallengeHead> success_head_list = new();
// private IDisposable _disposable;
private CompositeDisposable _disposable = new();
private FishingChallengeManager _fishingChallengeManager;
// 处理单元奖励中
private bool _isStageRewardLogic = false;
private void Awake()
{
_fishingChallengeManager = GContext.container.Resolve<FishingChallengeManager>();
// 先全部屏蔽按钮
canvasGroup = transform.Find("root").GetComponent<CanvasGroup>();
canvasGroup.blocksRaycasts = false;
//
btn_questionmark = transform.Find("root/title/btn_questionmark").GetComponent<Button>();
text_title = transform.Find("root/title/text_title").GetComponent<TMP_Text>();
text_people = transform.Find("root/title/info/people/text_people").GetComponent<TMP_Text>();
text_time = transform.Find("root/title/info/time/text_time").GetComponent<TMP_Text>();
btn_enter = transform.Find("root/btn_enter/btn_green").GetComponent<Button>();
btn_close = transform.Find("root/btn_close").GetComponent<Button>();
// reward = transform.Find("root/reward").GetComponent<RewardItemNew>();
_disposable = new CompositeDisposable();
GContext.OnEvent<ShowResidueNumEvent>().Subscribe(ShowResidueNumEvent).AddTo(_disposable);
GContext.OnEvent<FishingChallengeContinueEvent>().Subscribe(OnStageLogicContinue).AddTo(_disposable);
GContext.OnEvent<ChallengeLevelTipsEvent>().Subscribe(OnShowLevelTips).AddTo(_disposable);
_challengeState = _fishingChallengeManager.ChallengeState();
}
private void Start()
{
_fishingChallengeManager.IsFirstOpen = false;
OnAddEvents();
SetTitle();
SetEliminateNumber();
GContext.container.Resolve<GuideDataCenter>().InspectTriggerGuide("EventChallengePanel");
_ = ShowNewGuide(0.5f);
}
public async Task ShowNewGuide(float delaySeconds)
{
await Awaiters.Seconds(delaySeconds);
var openKey = _fishingChallengeManager.GetOpenEventKey();
if (!string.IsNullOrEmpty(openKey))
{
var isOpen = PlayerPrefs.GetInt(openKey,0);
if (isOpen == 0)
{
isOpen = 1;
PlayerPrefs.SetInt(_fishingChallengeManager.GetOpenEventKey(), isOpen);
var uiName = _fishingChallengeManager.eventChallengeConfig.InfoPanel;
var uiType = new UIType(uiName,5);
_ = UIManager.Instance.ShowUI(uiType);
}
}
}
private void OnAddEvents()
{
btn_enter.onClick.AddListener(Enter);
btn_close.onClick.AddListener(OnClose);
btn_questionmark.onClick.AddListener(() =>
{
var uiName = _fishingChallengeManager.eventChallengeConfig.InfoPanel;
var uiType = new UIType(uiName);
_ = UIManager.Instance.ShowUI(uiType);
});
}
private void SetTitle()
{
if (_challengeState != 2)
{
var timeSpan = _fishingChallengeManager.GetTimeSpan();
var seconds = timeSpan.TotalSeconds;
timer = this.AttachTimer((float)seconds, null,
async (elapsed) =>
{
// var now = endTime - ZZTimeHelper.UtcNow().UtcNowOffset();
var now = _fishingChallengeManager.GetTimeSpan();
text_time.text = ConvertTools.ConvertTime2(now.Days, now.Hours, now.Minutes, now.Seconds);
if (now.TotalMilliseconds < 0)
{
if (canvasGroup.blocksRaycasts)
{
canvasGroup.blocksRaycasts = false;
Settle(); // 活动结束了
// await OnFail();
// await OnSettleFinished(false);
canvasGroup.blocksRaycasts = true;
}
}
}, useRealTime: true);
}
}
private void SetEliminateNumber()
{
// 进入当前界面的时候更新UI
oldStep = _fishingChallengeManager.fishingChallengeData.step;
newStep = _fishingChallengeManager.GetNewStep();
Log($"SetEliminateNumber {oldStep},{newStep}");
var isSuccess = _fishingChallengeManager.IsStepFinished(newStep);
//显示关卡
SetEliminateNumber(isSuccess);
}
private void ShowResidueNumEvent(ShowResidueNumEvent showResidueNumEvent)
{
DOTween.To(() => curNum, x => curNum = x, showResidueNumEvent.num, 0.5f).OnUpdate(() =>
{
text_people.text = $"{curNum}/{_fishingChallengeManager.PlayerFullNumber}";
});
}
private async Task OnFail()
{
// //失败自己跳水动画
var challengeFailEvent = new ChallengeFailEvent() { oldStep = oldStep };
GContext.Publish(challengeFailEvent);
await challengeFailEvent.tcs.Task;
var view = await UIManager.Instance.ShowUI(UITypes.EventChallengeRewardPopupPanel);
if (view)
{
view.GetComponent<EventChallengeRewardPopupPanel>().OnFailed();
}
}
private async Task OnSuccess()
{
Log("OnSuccess");
var view = await UIManager.Instance.ShowUI(UITypes.EventChallengeRewardPopupPanel);
view.GetComponent<EventChallengeRewardPopupPanel>().OnSuccess();
}
private async void SetEliminateNumber(bool isSuccess)
{
Log($"SetEliminateNumber => {isSuccess}");
//剩余人数
curNum = _fishingChallengeManager.GetCurResidualNumber();
text_people.text = $"{curNum}/{_fishingChallengeManager.PlayerFullNumber}";
//显示人物头像
var challengeShowPlayerEvent = new ChallengeShowPlayerEvent { oldStep = oldStep };
GContext.Publish(challengeShowPlayerEvent);
await Awaiters.Seconds(1.0f);
//TODO:LF 未结算,要一直往后走
// var maxScore = _fishingChallengeManager.GetMaxScoreByStep(oldStep);
var oldScore = _fishingChallengeManager.fishingChallengeData.ProcessedScore;
var newScore = _fishingChallengeManager.fishingChallengeData.Score;
// if (oldScore == newScore && newScore = )
// {
// Log("Score Not Change");
// return;
// }
_fishingChallengeManager.OnChallengeSceneEnter();
var levelTipsEvent = new ChallengeLevelTipsEvent
{
oldScore = oldScore,
newScore = newScore,
};
GContext.Publish(levelTipsEvent);
await levelTipsEvent.tcs.Task;
Log($"BeforeSetProcessedScore {oldStep} {newStep}");
//
_fishingChallengeManager.SetProcessedScore(newScore);
_fishingChallengeManager.SetStep(newStep);
if (oldStep != newStep)
{
_fishingChallengeManager.EventTracking();
}
_isStageRewardLogic = _fishingChallengeManager.PlayGetStageReward();
await CheckStageRewardFinished();
// 如果step 没变,不需要 走下面逻辑
// if (newStep == oldStep && newStep != _fishingChallengeManager.GetFullStep())
// {
// return;
// }
//不能点击
// 更新数据
await Awaiters.Seconds(0.5f);
Log($"_challengeState: {_challengeState} isSuccess: {isSuccess}");
//
// 如果需要结算
// 处理奖品逻辑
// 状态有变化了,
// if (_challengeState == 2 || isSuccess)
// {
// Settle();
// }
if (_fishingChallengeManager.IsSettleState())
{
Settle();
}
// 播放动画逻辑
// await OnProcessAni();
await OnSettleFinished(isSuccess);
canvasGroup.blocksRaycasts = true;
}
// 屏蔽按钮
// 递归的层数比较浅,注意深了可能会爆栈
private async void OnShowLevelTips(ChallengeLevelTipsEvent tipsEvent)
{
canvasGroup.blocksRaycasts = false;
await tipsEvent.tcs.Task;
canvasGroup.blocksRaycasts = true;
}
private void OnStageLogicContinue(FishingChallengeContinueEvent evt)
{
Log("OnStageLogicContinue-> ");
_isStageRewardLogic = false;
}
// private int _waitCounts = 5;
private async Task CheckStageRewardFinished()
{
if (!_isStageRewardLogic) return;
while (true) // while true 很恐怖,看看延时几秒关掉可不可以呢
{
if (!_isStageRewardLogic)
return;
await Awaiters.Seconds(1f);
// _waitCounts--;
}
// UIManager.Instance.DestroyUI(UITypes.RewardPopupPanel);
// GContext.Publish(new RewardPanelClose());
// await Awaiters.NextFrame;
}
private async Task OnSettleFinished(bool isSuccess)
{
if (isSuccess)
{
Log($"OnSettleFinished -> true");
await OnSuccess();
_fishingChallengeManager.OnSettleFinished(true);
}
else if (_challengeState == 1 && !_fishingChallengeManager.IsTimeAllow())
{
Log($"OnSettleFinished -> Fail");
await OnFail();
_fishingChallengeManager.OnSettleFinished(false);
}
else
{
Log($"OnSettleFinished Error ---- {_challengeState} {false}");
}
// _fishingChallengeManager.EventTracking();
}
// private async Task OnProcessAni()
// {
// if (oldStep != newStep)
// {
// //跳水动画
// //await PlayAni();
// var cspe = new ChallengePlayAniEvent() { oldStep = oldStep, newStep = newStep };
// GContext.Publish(cspe);
// await cspe.tcs.Task;
// oldStep = newStep;
// }
// }
private void Settle()
{
timer?.Cancel();
timer = null;
text_time.text = LocalizationMgr.GetText("UI_EventRankPopupPanel_13");
//结算
_fishingChallengeManager.OnSettle();
}
private async void Enter()
{
// canvasGroup.blocksRaycasts = false;
// cfg.Tables tables = GContext.container.Resolve<cfg.Tables>();
// var mapData = tables.TbMapData.DataMap[_fishingChallengeManager.challengeMapData.ID];
// ILoadResourceService loadResourceService = GContext.container.Resolve<ILoadResourceService>();
// bool isCanEnter = await loadResourceService.Load(mapData.EnvName);
// if (isCanEnter)
{
EnterMap();
}
// else
// {
// var panel = await UIManager.Instance.ShowUI(UITypes.CloudTransitionPanel);
// panel.GetComponent<CloudTransitionPanel>().SetBtn(true, EnterMap);
// //var panel = await UIManager.Instance.ShowUI(UITypes.FishingDownLoadPopupPanel);
// //panel.GetComponent<FishingDownLoadPopupPanel>().SetBtn(null, EnterMap);
// canvasGroup.blocksRaycasts = true;
// }
}
private void EnterMap()
{
// GContext.container.Resolve<PlayerData>().currentMapId = _fishingChallengeManager.challengeMapData.ID;
OnClose();
}
private void OnClose()
{
//if (itemDataList != null)
//{
// GContext.Publish(new ShowData(itemDataList));
//}
GContext.Publish(new UnloadActToNextAct(transitionPanel: new UIType(_fishingChallengeManager.eventChallengeConfig.MatchPanel)));
btn_enter.onClick.RemoveAllListeners();
btn_close.onClick.RemoveAllListeners();
}
private void OnDestroy()
{
_disposable?.Dispose();
_disposable = null;
timer?.Cancel();
timer = null;
}
private static void Log(object t)
{
Debug.Log($"<color=blue>EventChallengePanel -> {t} </color>");
}
}