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

242 lines
6.7 KiB
C#
Raw Normal View History

2024-10-11 16:04:28 +08:00
using Cysharp.Threading.Tasks;
2024-10-10 15:12:01 +08:00
using Gameplay;
using PhxhSDK;
using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using Button = UnityEngine.UI.Button;
using Image = UnityEngine.UI.Image;
public class UI_TeamMarkChooseController : UIWindow
{
//UI GameObj
///Auto Gen Start///
public Image Image_Bg;
public Button Button_Close;
public RecycleView ScrollView_TeamMark;
public Image Image_TeamMark;
public Image Image_Empty;
2024-10-18 12:51:38 +08:00
public Image Image_CurrentSelection;
public Image Image_SelectedSign;
public Image Image_Lock;
2024-10-10 15:12:01 +08:00
public Image Image_CurrTeamMark;
public Image Image_CurrEmpty;
public Button Button_Confirm;
public Button Button_CantConfirm;
public TMP_Text Text_TeamMarkName;
public TMP_Text Text_Description;
public TMP_Text Text_Nothing;
public TMP_Text Text_Title;
private RawImage GaussianBlurMask;
///Auto Gen End///
List<TeamMarkManager.TeamMark> teamMarks = new List<TeamMarkManager.TeamMark>();
2024-10-10 15:54:10 +08:00
private int curIndex;
private int chooseIndex;
2024-10-10 15:12:01 +08:00
Action<int> OnSuccessChosen;
class ChooseData
{
public int teamMarkID;
/// <summary>
2024-10-11 16:04:28 +08:00
/// 选中标记后的回调
2024-10-10 15:12:01 +08:00
/// </summary>
public Action<int> OnChooseMark;
public ChooseData(int teamMarkID, Action<int> OnChooseMark)
{
this.teamMarkID = teamMarkID;
this.OnChooseMark = OnChooseMark;
}
}
2024-10-10 16:34:02 +08:00
/// <summary>
2024-10-11 16:04:28 +08:00
/// 带回调的打开方法
2024-10-10 16:34:02 +08:00
/// </summary>
2024-10-11 16:04:28 +08:00
/// <param name="teamMarkID">原先选中的队标ID</param>
/// <param name="OnChooseMark">回调将传入选中队标ID作为参数,如: 510001</param>
2024-10-10 16:34:02 +08:00
/// <returns></returns>
2024-10-10 15:12:01 +08:00
public static async UniTask<UIWindow> Open(int teamMarkID, Action<int> OnChooseMark = null)
{
CommonUtils.CaptureScreenshot();
var data = new ChooseData(teamMarkID, OnChooseMark);
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UITeamMarkChoose, data);
}
// deal with input data
public override void PreLoad(object data = null)
{
var chooseData = data as ChooseData;
TeamMarkManager.Instance.SelectedMarkIndex = chooseData.teamMarkID;
2024-10-11 16:04:28 +08:00
DebugUtil.Log("选择的队标ID" + chooseData.teamMarkID);
2024-10-10 15:54:10 +08:00
teamMarks = TeamMarkManager.Instance.ShownList;
2024-10-11 16:04:28 +08:00
DebugUtil.Log("队标数目:" + teamMarks.Count);
OnSuccessChosen = chooseData.OnChooseMark;//回调
2024-10-10 15:54:10 +08:00
curIndex = 0;
for (int i = 0; i < teamMarks.Count; i++)
{
if (teamMarks[i].ID == chooseData.teamMarkID)
{
curIndex = i;
break;
}
}
chooseIndex = curIndex;
2024-10-10 16:02:33 +08:00
2024-10-11 16:04:28 +08:00
#region 预加载图标
2024-10-10 16:02:33 +08:00
foreach(var item in teamMarks)
{
var IconPath = item.iconKey;
AssetManager.Instance.PostPreload<Sprite>(IconPath).Forget();
}
#endregion
}
// Use this for initialization
public override void OnInit()
2024-10-10 15:12:01 +08:00
{
//bind UI GameObj
UI_TeamMarkChooseBinder.GetComponents(this);
GaussianBlurMask = GetComponent<RawImage>("GaussianBlurMask");
GaussianBlurMask.texture = CommonUtils.GetScreenTexture2D();
ScrollView_TeamMark = GetComponent<RecycleView>("Image_Bg/ScrollView_TeamMark");
BindButton(Button_Close, OnCloseClick);
2024-10-10 16:34:02 +08:00
BindButton(Button_Confirm, OnConfirmClick);
2024-10-10 15:12:01 +08:00
ScrollView_TeamMark.Init(_RefreshPoolItem);//SetItemCountFunc(() => list.Count);
ScrollView_TeamMark.ShowList(teamMarks.Count);//UpdateData();
2024-10-10 15:54:10 +08:00
RefreshIconInfo();
2024-10-10 15:12:01 +08:00
}
//invoke when open window
protected override void OnShowWindow(object data = null)
{
}
//invoke when reload window
protected override void OnReloadWindow(object data = null)
{
}
//invoke when close window
protected override void OnHideWindow()
{
}
public override UniTask<bool> OnBack(object data = null)
{
2024-10-10 16:47:55 +08:00
if (teamMarks[curIndex].ID != TeamMarkManager.Instance.SelectedMarkIndex)
{
OnSuccessChosen?.Invoke(teamMarks[curIndex].ID);
2024-10-11 16:04:28 +08:00
DebugUtil.Log("选择的队标ID" + teamMarks[curIndex].ID);
2024-10-10 16:47:55 +08:00
}
2024-10-10 15:12:01 +08:00
CloseWindow();
return base.OnBack(data);
}
//invoke when destroy
public override void OnRelease()
{
base.OnRelease();
2024-10-11 16:04:28 +08:00
#region 预加载释放
2024-10-10 16:02:33 +08:00
foreach (var item in teamMarks)
{
var IconPath = item.iconKey;
AssetManager.Instance.Unload(IconPath);
}
#endregion
}
2024-10-10 15:12:01 +08:00
2024-10-10 16:02:33 +08:00
#region scroll_view
private void _RefreshPoolItem(GameObject go, int index)
2024-10-10 15:12:01 +08:00
{
var iconData = teamMarks[index];
var TeamMarkIcon = CommonUtils.GetComponent<Image>(go, "Image_TeamMark");
2024-10-10 15:54:10 +08:00
var btn = CommonUtils.GetComponent<Button>(go, "Button_Choose");
2024-10-18 12:51:38 +08:00
var Image_Selected = CommonUtils.GetGameObject(go, "Image_SelectedSign");
2024-10-10 15:12:01 +08:00
var Image_Lock = CommonUtils.GetGameObject(go, "Image_Lock");
var IconPath = iconData.iconKey;
2024-10-10 16:02:33 +08:00
TeamMarkIcon.sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(IconPath);//await LoadAssetAsync<Sprite>(IconPath);
2024-10-10 15:12:01 +08:00
2024-10-10 15:54:10 +08:00
ClearBind(btn);
BindButton(btn, () =>
{
chooseIndex = index;
RefreshIconInfo();
2024-10-18 12:51:38 +08:00
ScrollView_TeamMark.ShowList(teamMarks.Count);
2024-10-10 15:54:10 +08:00
});
2024-10-18 12:51:38 +08:00
var Image_CurrSelect = CommonUtils.GetGameObject(go, "Image_CurrentSelection");
Image_CurrSelect.SetActive(index == chooseIndex);
2024-10-10 15:54:10 +08:00
Image_Lock.SetActive(index >= TeamMarkManager.Instance.UnlockMarksCnt);
if(index == curIndex)
{
Image_Selected.SetActive(true);
}
else
{
Image_Selected.SetActive(false);
}
}
2024-10-10 15:12:01 +08:00
#endregion
2024-10-10 15:54:10 +08:00
void RefreshIconInfo()
{
var iconName = teamMarks[chooseIndex].nameKey;
Text_TeamMarkName.text = CommonUtils.GetLocalizeText(iconName);
var description = teamMarks[chooseIndex].sourcePathKey;
Text_Description.text = CommonUtils.GetLocalizeText(description);
2024-10-10 16:02:33 +08:00
var IconPath = teamMarks[chooseIndex].iconKey;
Image_CurrTeamMark.sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(IconPath);//await LoadAssetAsync<Sprite>(IconPath);
if (chooseIndex >= TeamMarkManager.Instance.UnlockMarksCnt)//未解锁
2024-10-10 15:54:10 +08:00
{
Button_CantConfirm.gameObject.SetActive(true);
Text_Description.gameObject.SetActive(true);//显示获取途径
}
2024-10-10 15:54:10 +08:00
else
{
Button_CantConfirm.gameObject.SetActive(false);
Text_Description.gameObject.SetActive(false);//隐藏获取途径
}
if (curIndex == chooseIndex)
{
Button_CantConfirm.gameObject.SetActive(true);
}
2024-10-10 15:54:10 +08:00
}
2024-10-10 15:12:01 +08:00
#region button_click
protected override void OnCloseClick()
{
2024-10-10 16:47:55 +08:00
if (teamMarks[curIndex].ID != TeamMarkManager.Instance.SelectedMarkIndex)
{
OnSuccessChosen?.Invoke(teamMarks[curIndex].ID);
2024-10-11 16:04:28 +08:00
DebugUtil.Log("选择的队标ID" + teamMarks[curIndex].ID);
2024-10-10 16:47:55 +08:00
}
base.OnCloseClick();
2024-10-10 15:12:01 +08:00
CloseWindow();
}
2024-10-10 16:34:02 +08:00
private void OnConfirmClick()
{
curIndex = chooseIndex;
ScrollView_TeamMark.ShowList(teamMarks.Count);
RefreshIconInfo();
2024-10-10 16:34:02 +08:00
}
2024-10-10 15:12:01 +08:00
#endregion
}