NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/UI_LevelSelectController.cs

705 lines
24 KiB
C#
Raw Normal View History

2024-01-09 14:00:53 +08:00
using System.Collections.Generic;
2023-10-26 20:20:11 +08:00
using System.Threading;
using cfg.LevelCfg;
using Cysharp.Threading.Tasks;
2023-10-30 18:33:18 +08:00
using Framework;
using Gameplay;
2023-10-26 20:20:11 +08:00
using Gameplay.Level;
2024-01-03 17:25:13 +08:00
using Gameplay.SubSystems;
2023-10-26 20:20:11 +08:00
using PhxhSDK;
2023-10-24 14:58:21 +08:00
using TMPro;
using UnityEngine;
2024-01-03 17:25:13 +08:00
using UnityEngine.SceneManagement;
2023-10-26 20:20:11 +08:00
using UnityEngine.Serialization;
using Utils;
2023-10-24 14:58:21 +08:00
using Button = UnityEngine.UI.Button;
2024-01-03 17:25:13 +08:00
using Constants = PhxhSDK.Constants;
2023-10-24 14:58:21 +08:00
using Image = UnityEngine.UI.Image;
public class UI_LevelSelectController : UIWindow
{
2023-10-26 20:20:11 +08:00
//UI GameObj
///Auto Gen Start///
2024-01-18 16:02:45 +08:00
public Button Button_Back;
public TMP_Text Text_Back;
public Button Button_Home;
public Button Button_MainLevel;
public Image Image_MainlevelLogo;
2024-01-09 14:00:53 +08:00
public Button Button_DungeonlEVEL;
2024-01-18 16:02:45 +08:00
public Image Image_TextBG;
public TMP_Text Text_MainLevel;
public TMP_Text Text_Campaignnode;
public Image Image_BlackBar;
public TMP_Text Text_MainLevelProcess;
public TMP_Text Text_MainLevelNum;
public TMP_Text Text_MainLevelName;
public Image Image_Seperate;
public Image Image_LastRect;
public TMP_Text Text_LastLevel;
public TMP_Text Text_LastLevelNum;
public TMP_Text Text_LastLevelName;
public Button Button_BranchLevel;
public Image Image_ChapterBG;
public TMP_Text Text_Title;
public Image Image_FractionlLogo;
public Image Image_LevelBG;
public TMP_Text Text_ChapterName;
public TMP_Text Text_ChapterNum;
public Image Image_ProcessBG;
public Image Image_ProcessBar;
public Image Image_Reward01;
public Image Image_Reward02;
public Image Image_Reward03;
public Button Button_GetAll;
[FormerlySerializedAs("Text_StartNum")] public TMP_Text Text_StarNum;
public Image Image_Start;
public Image Image_ModeBG;
public Image Image_SelectBG;
public Button Button_Plot;
public TMP_Text Text_Read;
public Image Image_Pot;
public Button Button_Easy;
public TMP_Text Text_Simple;
public Button Button_Hard;
public TMP_Text Text_Hard;
public Image Image_pot;
public TMP_Text Text_Mode;
2023-10-26 20:20:11 +08:00
///Auto Gen End///
private enum PageType
{
Mode = 1,
2024-01-05 19:35:51 +08:00
Chapter = 2,
2023-10-26 20:20:11 +08:00
Level = 3,
}
2024-01-09 16:54:21 +08:00
private Animation _animation;
2023-10-26 20:20:11 +08:00
private PageType _currPage = PageType.Mode;
2024-01-05 19:15:21 +08:00
private LevelChapterType _currChapterType;
private ChapterInfo _currChapterInfo;
private LevelGroupInfo _currEasyLevelGroupInfo;
private LevelGroupInfo _currHardLevelGroupInfo;
private LevelGroupInfo _currPlotLevelGroupInfo;
private LevelGroupInfo _currLevelGroupInfo;
2023-10-26 20:20:11 +08:00
private LevelInfo _currSelectLevelInfo;
2024-01-05 19:35:51 +08:00
private List<ChapterInfo> _showChapterInfoList = new();
2023-10-26 20:20:11 +08:00
private List<LevelInfo> _showLevelInfoList = new();
private RectTransform UI_ModeChoose;
private RectTransform UI_LevelGroupChoose;
private RectTransform UI_LevelChoose;
private RectTransform _modeParent;
private PhxhScrollView _levelGroupScrollView;
private PhxhScrollView _levelScrollView;
2023-10-26 20:20:11 +08:00
private RectTransform _starRewardsParent;
2024-01-05 19:35:51 +08:00
private RedPointUIController _easyLevelGroupRedPointUI;
private RedPointUIController _hardLevelGroupRedPointUI;
private RedPointUIController _plotLevelGroupRedPointUI;
2023-10-26 20:20:11 +08:00
private const string STAR_REWARD_PREFAB_PATH = "Assets/Art/UI/Prefab/LevelSelect/Button_StarReward.prefab";
private List<GameObject> _starRewardPool = new();
private List<GameObject> _showStarReward = new();
private float _totalMoveTime = 1f;
2023-10-27 12:07:33 +08:00
private CancellationTokenSource _cts;
2023-10-26 20:20:11 +08:00
public override void OnAwake()
{
//bind UI GameObj
UI_LevelSelectBinder.GetComponents(this);
BindProperty();
BindEvent();
RegisterSignal();
}
private void BindProperty()
{
UI_ModeChoose = transform.Find("UI_ModeChoose") as RectTransform;
UI_LevelGroupChoose = transform.Find("UI_LevelGroupChoose") as RectTransform;
UI_LevelChoose = transform.Find("UI_LevelChoose") as RectTransform;
_modeParent = UI_ModeChoose.Find("Scroll View/Viewport/Content") as RectTransform;
_levelGroupScrollView = UI_LevelGroupChoose.Find("Image_ChapterBG/Scroll View")
.GetComponent<PhxhScrollView>();
_levelScrollView = UI_LevelChoose.Find("Image_LevelBG/Scroll View").GetComponent<PhxhScrollView>();
2024-01-18 16:02:45 +08:00
_starRewardsParent = Image_ProcessBar.transform as RectTransform;
2023-10-26 20:20:11 +08:00
_levelGroupScrollView.SetUpdateFunc(OnRenderLevelGroup);
_levelGroupScrollView.SetItemCountFunc(GetLevelGroupCount);
2024-01-04 13:51:08 +08:00
//_levelGroupScrollView.SetButton(SetOnLevelGroupClick);
2023-10-26 20:20:11 +08:00
_levelScrollView.SetUpdateFunc(OnRenderLevelInfo);
_levelScrollView.SetItemCountFunc(GetLevelCount);
2024-01-04 13:51:08 +08:00
//_levelScrollView.SetButton(SetOnLevelClick);
2024-01-05 19:35:51 +08:00
_easyLevelGroupRedPointUI = Button_Easy.transform.Find("UI_RedPoint").GetComponent<RedPointUIController>();
_hardLevelGroupRedPointUI = Button_Hard.transform.Find("UI_RedPoint").GetComponent<RedPointUIController>();
_plotLevelGroupRedPointUI = Button_Plot.transform.Find("UI_RedPoint").GetComponent<RedPointUIController>();
2024-01-09 16:54:21 +08:00
_animation = GetComponent<Animation>();
2023-10-26 20:20:11 +08:00
}
private void BindEvent()
{
2024-01-09 14:00:53 +08:00
BindButton(Button_Back, OnClickBack);
BindButton(Button_Home, OnClickHome);
BindButton(Button_Easy, OnClickEasy);
BindButton(Button_Hard, OnClickHard);
BindButton(Button_Plot, OnClickPlot);
2023-10-26 20:20:11 +08:00
var modeButtonCount = _modeParent.childCount;
for (int i = 0; i < modeButtonCount; i++)
{
var modeButton = _modeParent.GetChild(i).GetComponent<Button>();
modeButton.onClick.RemoveAllListeners();
var index = i;
modeButton.onClick.AddListener(() =>
{
2024-01-05 19:15:21 +08:00
var levelChapterType = (LevelChapterType)index;
EnterSelectLevelGroup(levelChapterType);
2023-10-26 20:20:11 +08:00
});
}
}
private void RegisterSignal()
{
2023-11-03 12:39:51 +08:00
EventManager.Instance.Register(EventManager.EventName.ChapterInfoChange, Refresh);
EventManager.Instance.Register(EventManager.EventName.LevelUnlock, Refresh);
EventManager.Instance.Register(EventManager.EventName.LevelInfoChanged, Refresh);
2023-10-26 20:20:11 +08:00
}
private void UnRegisterSignal()
{
2023-11-03 12:39:51 +08:00
EventManager.Instance.Unregister(EventManager.EventName.ChapterInfoChange, Refresh);
EventManager.Instance.Unregister(EventManager.EventName.LevelUnlock, Refresh);
EventManager.Instance.Unregister(EventManager.EventName.LevelInfoChanged, Refresh);
2023-10-26 20:20:11 +08:00
}
private void Refresh()
{
RefreshPage();
switch (_currPage)
{
case PageType.Mode:
RefreshMode();
break;
2024-01-05 19:35:51 +08:00
case PageType.Chapter:
RefreshChapter();
2023-10-26 20:20:11 +08:00
break;
case PageType.Level:
RefreshLevel();
break;
}
}
//将当前UI看成是三个页面选模式选关卡组选关
private void RefreshPage()
{
UI_ModeChoose.gameObject.SetActive(_currPage == PageType.Mode);
2024-01-05 19:35:51 +08:00
UI_LevelGroupChoose.gameObject.SetActive(_currPage == PageType.Chapter);
2023-10-26 20:20:11 +08:00
UI_LevelChoose.gameObject.SetActive(_currPage == PageType.Level);
}
private void RefreshMode()
{
}
2024-01-05 19:35:51 +08:00
private void RefreshChapter()
2023-10-26 20:20:11 +08:00
{
2024-01-05 19:35:51 +08:00
RefreshChapterToShow();
2023-10-26 20:20:11 +08:00
_levelGroupScrollView.UpdateData(true);
}
2024-01-05 19:35:51 +08:00
private void RefreshChapterToShow()
2023-10-26 20:20:11 +08:00
{
2024-01-05 19:35:51 +08:00
_showChapterInfoList.Clear();
var allChapter = LevelManager.Instance.GetAllChapterInfo();
foreach (var chapterInfo in allChapter)
2023-10-26 20:20:11 +08:00
{
2024-01-18 16:02:45 +08:00
if (chapterInfo.ChapterType == _currChapterType && !chapterInfo.IsLock)
2023-10-26 20:20:11 +08:00
{
2024-01-05 19:35:51 +08:00
_showChapterInfoList.Add(chapterInfo);
2023-10-26 20:20:11 +08:00
}
}
2024-01-05 20:03:45 +08:00
_showChapterInfoList.Sort((a, b) => { return a.ID.CompareTo(b.ID); });
2023-10-26 20:20:11 +08:00
}
private void RefreshLevel()
{
RefreshLevelToShow();
_levelScrollView.UpdateData(true);
}
private void RefreshLevelToShow()
{
_showLevelInfoList.Clear();
2024-01-05 19:15:21 +08:00
foreach (LevelInfo levelInfo in _currLevelGroupInfo)
2023-10-26 20:20:11 +08:00
{
2023-11-01 13:33:20 +08:00
if (!levelInfo.IsLock)
2023-10-26 20:20:11 +08:00
_showLevelInfoList.Add(levelInfo);
}
2024-01-05 20:03:45 +08:00
_showLevelInfoList.Sort((a, b) => a.ID.CompareTo(b.ID));
2023-10-26 20:20:11 +08:00
}
2024-01-05 19:15:21 +08:00
private void EnterSelectLevelGroup(LevelChapterType type)
2023-10-26 20:20:11 +08:00
{
2024-01-05 19:15:21 +08:00
_currChapterType = type;
2024-01-05 19:35:51 +08:00
_currPage = PageType.Chapter;
2023-10-26 20:20:11 +08:00
Refresh();
}
private void ExitSelectLevelGroup()
{
_currPage = PageType.Mode;
Refresh();
}
2024-01-05 19:15:21 +08:00
private void EnterSelectLevel(ChapterInfo chapterInfo)
2023-10-26 20:20:11 +08:00
{
2024-01-05 19:15:21 +08:00
_currChapterInfo = chapterInfo;
2023-10-26 20:20:11 +08:00
_currPage = PageType.Level;
2024-01-18 16:02:45 +08:00
//RefreshPage();
2024-01-08 19:52:51 +08:00
var defaultLevelGroup = InitChapter();
if (defaultLevelGroup != null)
ChangeLevelGroup(defaultLevelGroup);
2024-01-18 16:02:45 +08:00
Refresh();
2023-10-26 20:20:11 +08:00
}
private void ExitSelectLevel()
{
2024-01-05 19:15:21 +08:00
_currChapterInfo = null;
_currEasyLevelGroupInfo = null;
_currHardLevelGroupInfo = null;
_currPlotLevelGroupInfo = null;
_currLevelGroupInfo = null;
2023-10-26 20:20:11 +08:00
_currSelectLevelInfo = null;
2024-01-05 19:35:51 +08:00
_currPage = PageType.Chapter;
2023-10-26 20:20:11 +08:00
Refresh();
}
2024-01-05 19:15:21 +08:00
private LevelGroupInfo InitChapter()
2023-10-26 20:20:11 +08:00
{
2024-01-05 19:35:51 +08:00
_currEasyLevelGroupInfo = _currChapterInfo.EasyLevelGroup;
_currHardLevelGroupInfo = _currChapterInfo.HardLevelGroup;
_currPlotLevelGroupInfo = _currChapterInfo.PlotLevelGroup;
2023-10-26 20:20:11 +08:00
2024-01-05 19:15:21 +08:00
Button_Easy.interactable = IsChapterValid(_currEasyLevelGroupInfo);
Button_Hard.interactable = IsChapterValid(_currHardLevelGroupInfo);
Button_Plot.interactable = IsChapterValid(_currPlotLevelGroupInfo);
2023-10-26 20:20:11 +08:00
2024-01-05 19:35:51 +08:00
_easyLevelGroupRedPointUI.ResetToDefault();
_hardLevelGroupRedPointUI.ResetToDefault();
_plotLevelGroupRedPointUI.ResetToDefault();
2024-01-05 19:15:21 +08:00
if (_currEasyLevelGroupInfo != null)
2024-01-05 19:35:51 +08:00
_easyLevelGroupRedPointUI.NodeID = _currEasyLevelGroupInfo.RedPointNode.ID;
2024-01-05 19:15:21 +08:00
if (_currHardLevelGroupInfo != null)
2024-01-05 19:35:51 +08:00
_hardLevelGroupRedPointUI.NodeID = _currHardLevelGroupInfo.RedPointNode.ID;
2024-01-05 19:15:21 +08:00
if (_currPlotLevelGroupInfo != null)
2024-01-05 19:35:51 +08:00
_plotLevelGroupRedPointUI.NodeID = _currPlotLevelGroupInfo.RedPointNode.ID;
2023-10-26 20:20:11 +08:00
var result =
2024-01-05 19:15:21 +08:00
IsChapterValid(_currEasyLevelGroupInfo) ? _currEasyLevelGroupInfo :
IsChapterValid(_currHardLevelGroupInfo) ? _currHardLevelGroupInfo : _currPlotLevelGroupInfo;
2023-10-26 20:20:11 +08:00
return result;
}
2024-01-05 19:15:21 +08:00
private bool IsChapterValid(LevelGroupInfo chapter)
2023-10-26 20:20:11 +08:00
{
return chapter != null && !chapter.IsLock;
}
2024-01-08 19:52:51 +08:00
private async void ChangeLevelGroup(LevelGroupInfo currLevelGroupInfo)
2023-10-26 20:20:11 +08:00
{
2024-01-09 16:54:21 +08:00
var oldLevelGroupInfo = _currLevelGroupInfo;
2024-01-05 19:15:21 +08:00
if (_currLevelGroupInfo == currLevelGroupInfo)
2023-10-26 20:20:11 +08:00
return;
2024-01-05 19:15:21 +08:00
_currLevelGroupInfo = currLevelGroupInfo;
2024-01-18 16:02:45 +08:00
// Image_Plot.gameObject.SetActive(currLevelGroupInfo == _currPlotLevelGroupInfo);
// Image_Easy.gameObject.SetActive(currLevelGroupInfo == _currEasyLevelGroupInfo);
// Image_Hard.gameObject.SetActive(currLevelGroupInfo == _currHardLevelGroupInfo);
2023-10-26 20:20:11 +08:00
ReturnAllStarReward();
2024-01-09 14:00:53 +08:00
if (currLevelGroupInfo.LevelType != LevelType.Plot &&
(currLevelGroupInfo.StarList == null || currLevelGroupInfo.StarList.Length == 0))
2024-01-08 19:39:41 +08:00
{
DebugUtil.LogError($"levelGroup的星级奖励列表未配置!levelGroup ID:{currLevelGroupInfo.ID}");
return;
}
2024-01-09 14:00:53 +08:00
2024-01-09 16:54:21 +08:00
//播放切换levelGroup动画
if (oldLevelGroupInfo != null)
{
if (oldLevelGroupInfo.LevelType == LevelType.Plot && currLevelGroupInfo.LevelType != LevelType.Plot)
{
_animation.Play("LS_MoveOut");
}
if (oldLevelGroupInfo.LevelType != LevelType.Plot && currLevelGroupInfo.LevelType == LevelType.Plot)
{
_animation.Play("LS_MoveIn");
}
}
2024-01-09 14:00:53 +08:00
if (currLevelGroupInfo.LevelType == LevelType.Plot)
2023-10-26 20:20:11 +08:00
{
2024-01-09 16:54:21 +08:00
//Image_ProcessBG.gameObject.SetActive(false);
2024-01-09 14:00:53 +08:00
}
else
{
Image_ProcessBG.gameObject.SetActive(true);
int maxTarget = currLevelGroupInfo.StarList[^1];
var progressLength = _starRewardsParent.rect.width;
var currStarCount = currLevelGroupInfo.StarCount;
var currRewardIndexMax = currLevelGroupInfo.OwnRewardMaxIndex;
for (int i = 0; i < currLevelGroupInfo.StarList.Length; i++)
2023-10-27 18:23:18 +08:00
{
2024-01-09 14:00:53 +08:00
var target = currLevelGroupInfo.StarList[i];
var starReward = await GetAStarReward();
var button = starReward.GetComponent<Button>();
button.onClick.RemoveAllListeners();
var index = i + 1;
if (_currLevelGroupInfo.CanGetReward(index))
{
button.enabled = true;
button.onClick.AddListener(() => { OnClickStarReward(index); });
}
else
button.enabled = false;
_showStarReward.Add(starReward);
var targetText = starReward.transform.Find("target_green").GetComponent<TMP_Text>();
var targetWhiteText = starReward.transform.Find("target_white").GetComponent<TMP_Text>();
targetText.text = target.ToString();
targetWhiteText.text = target.ToString();
var x = ((float)target / maxTarget) * progressLength;
var rectTrans = starReward.transform as RectTransform;
rectTrans.anchoredPosition = new Vector2(x, rectTrans.anchoredPosition.y);
SetStarRewardEnable(starReward, false);
2023-10-27 18:23:18 +08:00
}
2024-01-09 14:00:53 +08:00
var ratio = (float)currStarCount / maxTarget;
Text_StarNum.text = currStarCount.ToString();
_cts?.Cancel();
_cts?.Dispose();
_cts = new CancellationTokenSource();
PlayProgressAnimation(ratio, progressLength, _cts.Token);
2023-10-26 20:20:11 +08:00
}
2023-10-30 18:33:18 +08:00
2023-10-26 20:20:11 +08:00
Refresh();
}
private void SetStarRewardEnable(GameObject starReward, bool isEnable)
{
var starRewardGreen = starReward.transform.Find("starReward_green").gameObject;
var starReward_white = starReward.transform.Find("starReward_white").gameObject;
var star_green = starReward.transform.Find("star_green").gameObject;
var star_white = starReward.transform.Find("star_white").gameObject;
var target_green = starReward.transform.Find("target_green").gameObject;
var target_white = starReward.transform.Find("target_white").gameObject;
starRewardGreen.SetActive(isEnable);
starReward_white.SetActive(!isEnable);
star_green.SetActive(isEnable);
star_white.SetActive(!isEnable);
target_green.SetActive(isEnable);
target_white.SetActive(!isEnable);
}
private async void PlayProgressAnimation(float ratio, float progressLength, CancellationToken token)
{
Image_ProcessBar.rectTransform.anchoredPosition =
new Vector2(0, Image_ProcessBar.rectTransform.anchoredPosition.y);
2023-10-26 20:20:11 +08:00
var currMoveTime = 0f;
var rewardTList = new List<float>();
2024-01-05 19:15:21 +08:00
var maxStarCount = _currLevelGroupInfo.StarList[^1];
foreach (var starCount in _currLevelGroupInfo.StarList)
2023-10-26 20:20:11 +08:00
{
var t = (float)starCount / maxStarCount;
rewardTList.Add(t);
}
var currStarIndex = 0;
while (currMoveTime < ratio * _totalMoveTime)
{
currMoveTime += Time.deltaTime;
var t = currMoveTime / _totalMoveTime;
var x = Mathf.Min(progressLength * ratio, progressLength * t);
Image_ProcessBar.rectTransform.anchoredPosition =
new Vector2(x, Image_ProcessBar.rectTransform.anchoredPosition.y);
if (t >= rewardTList[0])
{
rewardTList.RemoveAt(0);
SetStarRewardEnable(_showStarReward[currStarIndex], true);
currStarIndex++;
}
var isCanceled = await UniTask.DelayFrame(1, PlayerLoopTiming.Update, token).SuppressCancellationThrow();
if (isCanceled)
return;
}
}
private async UniTask<GameObject> GetAStarReward()
{
GameObject result = null;
if (_starRewardPool.Count > 0)
{
result = _starRewardPool[^1];
_starRewardPool.RemoveAt(_starRewardPool.Count - 1);
}
else
{
var prefab = await AssetManager.Instance.LoadAssetAsync<GameObject>(STAR_REWARD_PREFAB_PATH);
if (prefab == null)
{
return null;
}
GameObject go = Instantiate(prefab, _starRewardsParent.transform);
result = go;
}
result.SetActive(true);
return result;
}
private void ReturnAllStarReward()
{
foreach (var go in _showStarReward)
{
go.SetActive(false);
_starRewardPool.Add(go);
}
_showStarReward.Clear();
}
private void ShowLevelDetail()
{
if (_currSelectLevelInfo == null)
return;
2023-11-22 15:05:43 +08:00
if (_currSelectLevelInfo.IsStory)
LevelManager.Instance.TryEnterLevel(_currSelectLevelInfo.ID);
else
UIManager.Instance.OpenWindow(UINameConst.UI_BeforeFight, _currSelectLevelInfo.ID);
2023-10-27 16:47:42 +08:00
//LevelManager.Instance.TryEnterLevel(_currSelectLevelInfo.ID, CloseSelf);
2023-10-26 20:20:11 +08:00
}
private int GetLevelGroupCount()
{
2024-01-05 19:35:51 +08:00
return _showChapterInfoList.Count;
2023-10-26 20:20:11 +08:00
}
private void OnRenderLevelGroup(int index, RectTransform item)
{
2024-01-05 19:35:51 +08:00
if (index >= _showChapterInfoList.Count || index < 0)
2023-10-26 20:20:11 +08:00
{
DebugUtil.LogError($"index out of range,index:{index}");
return;
}
2024-01-05 19:35:51 +08:00
var levelGroupInfo = _showChapterInfoList[index];
2023-10-26 20:20:11 +08:00
var Text_ChapterNum = item.Find("Text_ChapterNum").GetComponent<TMP_Text>();
var Text_ChapterName = item.Find("Text_ChapterName").GetComponent<TMP_Text>();
var Image_ProcessBarEasy = item.Find("UI_Easy/Image_ProcessBarEasy").GetComponent<Image>();
var Text_EasyStarNow = item.Find("UI_Easy/Text_EasyStarNow").GetComponent<TMP_Text>();
var Text_EasyStarMax = item.Find("UI_Easy/Text_EasyStarMax").GetComponent<TMP_Text>();
var Image_ProcessBarHard = item.Find("UI_Hard/Image_ProcessBarHard").GetComponent<Image>();
var Text_HardStarNow = item.Find("UI_Hard/Text_HardStarNow").GetComponent<TMP_Text>();
var Text_HardStarMax = item.Find("UI_Hard/Text_HardStarMax").GetComponent<TMP_Text>();
2024-01-09 14:00:53 +08:00
Text_ChapterNum.text = string.Format("{0:D2}", index + 1);
2023-10-26 20:20:11 +08:00
Text_ChapterName.text = levelGroupInfo.Name;
2024-01-05 19:35:51 +08:00
var starCountEasy = levelGroupInfo.EasyLevelGroup?.StarCount ?? 0;
var starMaxEasy = levelGroupInfo.EasyLevelGroup?.StarMax ?? 0;
2023-10-26 20:20:11 +08:00
Image_ProcessBarEasy.fillAmount = (float)starCountEasy / starMaxEasy;
Text_EasyStarNow.text = starCountEasy.ToString();
Text_EasyStarMax.text = starMaxEasy.ToString();
2024-01-05 19:35:51 +08:00
var starCountHard = levelGroupInfo.HardLevelGroup?.StarCount ?? 0;
var starMaxHard = levelGroupInfo.HardLevelGroup?.StarMax ?? 0;
2023-10-26 20:20:11 +08:00
Image_ProcessBarHard.fillAmount = (float)starCountHard / starMaxHard;
Text_HardStarNow.text = starCountHard.ToString();
Text_HardStarMax.text = starMaxHard.ToString();
var UI_RedPoint = item.Find("UI_RedPoint").GetComponent<RedPointUIController>();
if (UI_RedPoint != null)
{
UI_RedPoint.NodeID = levelGroupInfo.RedPointNode.ID;
}
2023-10-26 20:20:11 +08:00
2024-01-04 13:51:08 +08:00
var btn = item.GetComponent<Button>();
btn.onClick.RemoveAllListeners();
btn.onClick.AddListener(() =>
2023-10-26 20:20:11 +08:00
{
2024-01-04 13:51:08 +08:00
EnterSelectLevel(levelGroupInfo);
2023-10-26 20:20:11 +08:00
});
2024-01-04 13:51:08 +08:00
//BindButton(item.gameObject,)
}
// private void SetOnLevelGroupClick(GameObject obj)
// {
// BindButton(obj, () =>
// {
// var index = CommonUtils.GetTransformIndex(obj.transform);
// if (index >= _showLevelGroupInfoList.Count || index < 0)
// {
// DebugUtil.LogError($"index out of range,index:{index}");
// return;
// }
//
// var selectedLevelGroup = _showLevelGroupInfoList[index];
// EnterSelectLevel(selectedLevelGroup);
// Refresh();
// });
// }
2023-10-26 20:20:11 +08:00
private int GetLevelCount()
{
return _showLevelInfoList.Count;
}
private async void OnRenderLevelInfo(int index, RectTransform item)
{
if (index < 0 || index >= _showLevelInfoList.Count)
{
DebugUtil.LogError("index out of range,index:{0}", index);
return;
}
var levelInfo = _showLevelInfoList[index];
var Text_LevelNum = item.Find("Text_LevelNum").GetComponent<TMP_Text>();
var Text_LevelName = item.Find("Text_LevelName").GetComponent<TMP_Text>();
2024-01-18 16:02:45 +08:00
var Image_Star01 = item.Find("Target/Text_01/Image_Yellow").gameObject;
var Image_Star02 = item.Find("Target/Text_02/Image_Yellow").gameObject;
var Image_Star03 = item.Find("Target/Text_03/Image_Yellow").gameObject;
var Image_environment = item.Find("MapDetail/Image_environment").GetComponent<Image>();
var Image_weather = item.Find("MapDetail/Image_weather").GetComponent<Image>();
var Image_daynight = item.Find("MapDetail/Image_DayOrNight").GetComponent<Image>();
Text_LevelNum.text = $"{_currChapterInfo.SortIndex + 1:D2}-{levelInfo.SortIndex + 1:D2}";
2023-10-26 20:20:11 +08:00
Text_LevelName.text = levelInfo.Name;
var starCount = levelInfo.StarCount;
Image_Star01.SetActive(starCount >= 1);
Image_Star02.SetActive(starCount >= 2);
Image_Star03.SetActive(starCount >= 3);
Image_environment.sprite = await CommonUtils.GetEnvironmentIcon(levelInfo.EnvironmentType);
Image_weather.sprite = await CommonUtils.GetWeatherIcon(levelInfo.WeatherType);
Image_daynight.sprite = await CommonUtils.GetDayNightIcon(levelInfo.DayNightType);
var UI_RedPoint = item.Find("UI_RedPoint").GetComponent<RedPointUIController>();
if (UI_RedPoint != null)
UI_RedPoint.NodeID = levelInfo.RedPointNode.ID;
2023-10-26 20:20:11 +08:00
2024-01-04 13:51:08 +08:00
var btn = item.GetComponent<Button>();
btn.onClick.RemoveAllListeners();
btn.onClick.AddListener(() =>
2023-10-26 20:20:11 +08:00
{
2024-01-04 13:51:08 +08:00
_currSelectLevelInfo = levelInfo;
ShowLevelDetail();
2023-10-26 20:20:11 +08:00
});
}
2024-01-04 13:51:08 +08:00
// private void SetOnLevelClick(GameObject go)
// {
// BindButton(go, () =>
// {
// var index = CommonUtils.GetTransformIndex(go.transform);
// if (index >= _showLevelInfoList.Count || index < 0)
// {
// DebugUtil.LogError("index out of range!,{0}", index);
// }
//
// var levelInfo = _showLevelInfoList[index];
// if (levelInfo != null)
// {
// _currSelectLevelInfo = levelInfo;
// ShowLevelDetail();
// }
// });
// }
2023-10-26 20:20:11 +08:00
#region Event
private void OnClickBack()
{
2023-10-27 12:07:33 +08:00
switch (_currPage)
2023-10-26 20:20:11 +08:00
{
2023-10-27 12:07:33 +08:00
case PageType.Mode:
CloseWindow();
2023-10-27 12:07:33 +08:00
break;
2024-01-05 19:35:51 +08:00
case PageType.Chapter:
2023-10-27 12:07:33 +08:00
ExitSelectLevelGroup();
break;
case PageType.Level:
ExitSelectLevel();
break;
2023-10-26 20:20:11 +08:00
}
}
private void OnClickHome()
2024-01-03 17:25:13 +08:00
{
2023-11-24 19:23:15 +08:00
CloseWindow(UIWindowCloseType.HideAndDestroy);
//UIManager.Instance.CloseAllNormalExcept(UINameConst.UI_MainPanel);
2023-10-26 20:20:11 +08:00
}
private void OnClickEasy()
{
2024-01-05 19:15:21 +08:00
if (_currEasyLevelGroupInfo != null)
2024-01-08 19:52:51 +08:00
ChangeLevelGroup(_currEasyLevelGroupInfo);
2023-10-26 20:20:11 +08:00
}
private void OnClickHard()
{
2024-01-05 19:15:21 +08:00
if (_currHardLevelGroupInfo != null)
2024-01-08 19:52:51 +08:00
ChangeLevelGroup(_currHardLevelGroupInfo);
2023-10-26 20:20:11 +08:00
}
private void OnClickPlot()
{
2024-01-05 19:15:21 +08:00
if (_currPlotLevelGroupInfo != null)
2024-01-08 19:52:51 +08:00
ChangeLevelGroup(_currPlotLevelGroupInfo);
2023-10-26 20:20:11 +08:00
}
2023-10-27 18:23:18 +08:00
private void OnClickStarReward(int index)
{
2024-01-05 19:15:21 +08:00
LevelManager.Instance.GetStarReward(_currLevelGroupInfo.ID, index);
2023-10-30 18:33:18 +08:00
}
2023-10-26 20:20:11 +08:00
#endregion Event
#region override method
protected override void OnOpenWindow()
{
Refresh();
}
//invoke when open window
protected override void OnOpenWindow(object data = null)
{
Refresh();
}
//invoke when reload window
protected override void OnReloadWindow(object data = null)
{
Refresh();
}
//invoke when close window
2023-11-21 13:31:06 +08:00
protected override void OnCloseWindow()
2023-10-26 20:20:11 +08:00
{
CommonUtils.CloseUIWithScene(WindowName);
2023-10-26 20:20:11 +08:00
UnRegisterSignal();
_currPage = PageType.Mode;
2023-10-27 12:36:01 +08:00
_cts?.Cancel();
_cts?.Dispose();
2023-10-26 20:20:11 +08:00
}
#endregion
2024-01-18 16:02:45 +08:00
}