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);
|
|
|
|
|
|
|
2024-10-12 19:30:11 +08:00
|
|
|
|
if (chooseIndex >= TeamMarkManager.Instance.UnlockMarksCnt)//未解锁
|
2024-10-10 15:54:10 +08:00
|
|
|
|
{
|
|
|
|
|
|
Button_CantConfirm.gameObject.SetActive(true);
|
2024-10-12 19:30:11 +08:00
|
|
|
|
Text_Description.gameObject.SetActive(true);//显示获取途径
|
|
|
|
|
|
}
|
2024-10-10 15:54:10 +08:00
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Button_CantConfirm.gameObject.SetActive(false);
|
2024-10-12 19:30:11 +08:00
|
|
|
|
Text_Description.gameObject.SetActive(false);//隐藏获取途径
|
2024-10-14 13:57:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
if (curIndex == chooseIndex)
|
|
|
|
|
|
{
|
|
|
|
|
|
Button_CantConfirm.gameObject.SetActive(true);
|
2024-10-12 19:30:11 +08:00
|
|
|
|
}
|
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);
|
2024-10-14 13:57:27 +08:00
|
|
|
|
RefreshIconInfo();
|
2024-10-10 16:34:02 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-10-10 15:12:01 +08:00
|
|
|
|
#endregion
|
|
|
|
|
|
}
|