382 lines
13 KiB
C#
382 lines
13 KiB
C#
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>");
|
||
}
|
||
}
|