备份CatanBuilding瘦身独立工程
This commit is contained in:
381
Assets/Scripts/UI/Challenge/EventChallengePanel.cs
Normal file
381
Assets/Scripts/UI/Challenge/EventChallengePanel.cs
Normal 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>");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user