Files
ft/Client/Assets/Scripts/GampPlay/ChallengeMatch/Road/ChallengeMatchSceneRoadUI.cs
2026-06-29 21:18:33 +08:00

318 lines
11 KiB
C#

//- 挑战赛-公路- UI
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using asap.core;
using game;
using TMPro;
using UniRx;
using UnityEngine;
namespace GampPlay.ChallengeMatch.Road
{
public class ChallengeMatchSceneRoadUI : MonoBehaviour
{
private Transform icon_reward;
private Transform text_title;
private Transform _textNumCash;
private EventChallengeLevelTips _levelTipController;
private FishingChallengeManager _fishingChallengeManager;
public GameObject[] tipPlaceHolder;
//- 启动的点
public ChallengeMatchSceneUIRegion[] uiRegion;
// private EventChallengeHead _myHead;
// private int _residualHeadCount;
private CompositeDisposable _disposables = new();
private void Awake()
{
_fishingChallengeManager = GContext.container.Resolve<FishingChallengeManager>();
GetComponent<Canvas>().worldCamera = Camera.main;
_levelTipController = transform.Find("EventChallengeLevelTips").GetComponent<EventChallengeLevelTips>();
GContext.OnEvent<ChallengeLevelTipsEvent>().Subscribe(OnShowLevelTips).AddTo(_disposables);
_levelTipController.gameObject.SetActive(false);
icon_reward = transform.Find("taizi_reward/icon_reward/icon_reward");
text_title = transform.Find("taizi_reward/total_reward/text_title");
_textNumCash = transform.Find("taizi_reward/total_reward/text_num_cash");
}
private void Start()
{
var listItemData = _fishingChallengeManager.GetFinalReward();
var totalCount = listItemData.Sum(itemData => itemData.count);
_textNumCash.GetComponent<TMP_Text>().text = "x" + ConvertTools.GetNumberString(totalCount);
InitLevelTip(_fishingChallengeManager.fishingChallengeData.ProcessedScore);
}
#if UNITY_EDITOR
bool isShow;
string oldStepStr, newStepStr;
private string _scoreStr; // 添加到渔获的价值
private int _level;
string oldScoreStr, newScoreStr;
private void Update()
{
if (Input.GetKeyDown(KeyCode.K))
{
isShow = !isShow;
}
}
private async void OnGUI()
{
GUI.color = Color.magenta;
GUILayout.Label($"当前段位: {_fishingChallengeManager?.eventChallengeMain?.ID}");
if (!isShow)
{
return;
}
// Set the button width and height
float buttonWidth = 300; // Replace with your desired width
float buttonHeight = 70; // Replace with your desired height
int fontSize = 40; // Replace with your desired font size
// Set the font size for text fields, buttons, and labels
GUI.skin.textField.fontSize = fontSize;
GUI.skin.button.fontSize = fontSize;
GUI.skin.label.fontSize = fontSize;
// // 触发ChallengeShowPlayAniEvent 事件并能输入oldStep和newStep
GUILayout.Label("oldStep:");
oldStepStr = GUILayout.TextField(oldStepStr, GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight));
int.TryParse(oldStepStr, out int oldStep);
if (GUILayout.Button("ShowPlayerEvent", GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight)))
{
GContext.Publish(new ChallengeShowPlayerEvent { oldStep = oldStep });
// await Awaiters.Seconds(0.5f);
// var challengePlayAniEvent = new ChallengePlayAniEvent();
// challengePlayAniEvent.oldStep = oldStep;
// challengePlayAniEvent.newStep = newStep;
// GContext.Publish(challengePlayAniEvent);
}
if (GUILayout.Button("Fail",GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight)))
{
// GContext.Publish(new ChallengeMatchPlayGMEvent() { step = oldStep });
OnGMFail(oldStep);
// ChallengeFailEvent challengeFailEvent = new ChallengeFailEvent();
// challengeFailEvent.oldStep = oldStep;
// OnFail(challengeFailEvent);
}
if (GUILayout.Button("测试放弃用户", GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight)))
{
GContext.Publish(new ChallengeMoveToNextStageEvent
{
newStep = oldStep + 1,
residual = 10,
});
}
// GUILayout.Label("newStep:");
// newStepStr = GUILayout.TextField(newStepStr, GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight));
// int.TryParse(newStepStr, out var newStep);
GUILayout.Label("QualityScore:");
_scoreStr = GUILayout.TextField(_scoreStr, GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight));
int.TryParse(_scoreStr, out var score);
_fishingChallengeManager.SetQualityScore(score);
GUILayout.Label("oldScore:");
oldScoreStr = GUILayout.TextField(oldScoreStr, GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight));
int.TryParse(oldScoreStr, out var oldScore);
//
GUILayout.Label("newScore:");
newScoreStr = GUILayout.TextField(newScoreStr, GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight));
int.TryParse(newScoreStr, out var newScore);
//
if (GUILayout.Button("RunNewPlay", GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight)))
{
var nStep = _fishingChallengeManager.GetStepByScore(oldScore, true);
var evt = new ChallengeInitStepEvent()
{
step = nStep
};
GContext.Publish(evt);
await Awaiters.Seconds(0.5f);
// 全部重置
var tipsEvent = new ChallengeLevelTipsEvent()
{
IsGm = true,
oldScore = oldScore,
newScore = newScore,
};
GContext.Publish(tipsEvent);
}
}
private async void OnGMFail (int oldStep)
{
ELog("OnGMFail");
GContext.Publish(new ChallengeShowPlayerEvent { oldStep = oldStep });
await Awaiters.Seconds(0.5f);
var challengeFailEvent = new ChallengeFailEvent
{
oldStep = oldStep
};
GContext.Publish(challengeFailEvent);
}
#endif
private void OnDestroy()
{
_disposables?.Dispose();
_disposables = null;
}
#region Game Logic
//- 阶段的启动,
private async void OnShowLevelTips(ChallengeLevelTipsEvent tipsEvent)
{
var oldScore = tipsEvent.oldScore;
var newScore = tipsEvent.newScore;
var isGm = tipsEvent.IsGm;
Log($"Start: OnShowLevelTips -> {oldScore}=> {newScore} isGm: {isGm}");
if (oldScore == newScore)
{
InitLevelTip(oldScore);
tipsEvent.tcs.SetResult(true);
return;
}
var step = _fishingChallengeManager.GetStepByScore(oldScore, true);
var maxScore = _fishingChallengeManager.GetMaxScoreByStep(step);
if (_levelTipController && step >= 0 && step < tipPlaceHolder.Length)
{
LocationLevelTips(step);
var curScore = await _levelTipController.ShowTips(oldScore, newScore);
// 播放显示动画
if (maxScore == curScore)
{
await _levelTipController.PlayInVisibleAni();
ReceiveStageReward(step);
await JumpStage(step, curScore, newScore, isGm);
}
}
tipsEvent.tcs.SetResult(true);
}
private async void ReceiveStageReward(int step)
{
ELog($"ReceiveStageReward {step}");
_fishingChallengeManager.AddStageReward(step);
}
private static async Task JumpStage(int step, int curScore, int newScore, bool isGm)
{
ELog($"JumpStage-> {step} {curScore} {newScore} {isGm}");
// 清理下一个台子
await CleanNextStage(step);
// 播放动画
await RunPlayerAni(step);
//- 进入下一阶段
await RunNextStageEvent(curScore, newScore, isGm);
}
private static async Task RunNextStageEvent(int curScore, int newScore, bool isGm)
{
var nextStageEvent = new ChallengeLevelTipsEvent
{
oldScore = curScore,
newScore = newScore,
IsGm = isGm,
};
GContext.Publish(nextStageEvent);
await nextStageEvent.tcs.Task;
}
private static async Task CleanNextStage(int step)
{
ELog($"CleanNextStage -> {step}");
var cleanEvent = new ChallengeCleanStageEvent
{
stage = step + 1,
};
GContext.Publish(cleanEvent);
await cleanEvent.Tcs.Task;
ELog($"CleanNextStage -> {step} Finished");
}
private static async Task RunPlayerAni(int step)
{
ELog($"RunPlayerAni -> {step}");
// 播放动画
var challengePlayAniEvent = new ChallengePlayAniEvent
{
oldStep = step,
newStep = step + 1
};
GContext.Publish(challengePlayAniEvent);
await challengePlayAniEvent.tcs.Task;
ELog($"RunPlayerAni -> {step} Finished");
}
private void LocationLevelTips(int step)
{
ELog($"LocationLevelTips -> {step}");
_levelTipController.transform.localPosition = tipPlaceHolder[step].transform.localPosition;
_levelTipController.SetCurStep(step);
_levelTipController.gameObject.SetActive(true);
}
//
public void InitLevelTip(int score)
{
var step = _fishingChallengeManager.GetStepByScore(score, true);
if (step > tipPlaceHolder.Length - 1)
{
return;
}
_levelTipController.transform.localPosition = tipPlaceHolder[step].transform.localPosition;
_levelTipController.gameObject.SetActive(true);
_levelTipController.Init(score);
}
#endregion
#region Log
private static void Log(string message)
{
Debug.Log($"<color=orange>ChallengeMatchSceneRoadUI => {message} </color>");
}
private static void ELog(string message)
{
#if UNITY_EDITOR
Debug.Log($"<color=orange> {nameof(ChallengeMatchSceneRoadUI)} => {message} </color>");
#endif
}
#endregion
}
}