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

473 lines
15 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.UIElements;
using Button = UnityEngine.UI.Button;
using Image = UnityEngine.UI.Image;
using Toggle = UnityEngine.UI.Toggle;
using ScrollView = PhxhSDK.PhxhScrollView;
using Constants = Framework.Constants;
using Framework;
using PhxhSDK;
using Gameplay;
using System;
using Gameplay.Net;
using cfg.ActorCfg;
using cfg.SkillCfg;
using cfg.PlayerSkillCfg;
using Cysharp.Threading.Tasks;
public class SelectSkillPanelController : UIWindow
{
//UI GameObj
///Auto Gen Start///
public Image Image_Cover;
public Image Image_BG;
public Image Image_LeftBG;
public Image Image_RightBG;
public TMP_Text Text_SkillTitle;
public TMP_Text Text_SkillCollingTime;
public TMP_Text Text_Describe;
public Button Button_Close;
public TMP_Text Text_CMDSkill;
public Button Button_ConductTitle;
public Button Button_AttackTitle;
public Button Button_SupportTitle;
public Button Button_Cancel;
public TMP_Text Text_Cancel;
public Button Button_Confirm;
public TMP_Text Text_Confirm;
///Auto Gen End///
/// <summary>
/// <20><>̬<EFBFBD>б<EFBFBD>
/// </summary>
private RecycleView recycleView;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
/// </summary>
private ScrollRect scrollRect;
/// <summary>
/// <20><>˹ģ<CBB9><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private RawImage rawImageGaussianBlurMask;
private Team CurTeam;
private int CurIndex;
// deal with input data
public override void PreLoad(object data = null)
{
var initData = data as InitData;
selectSkillAction = initData.SelectSkill;
CurTeam = initData.Team;
CurIndex = initData.Index;
}
class InitData
{
public Team Team;
public int Index;
public Action<int, int> SelectSkill;
public InitData(Team team, int index, Action<int, int> selectSkill)
{
Team = team;
Index = index;
SelectSkill = selectSkill;
}
}
public static async UniTask<UIWindow> Open(Team team, int index, Action<int, int> selectSkill = null)
{
CommonUtils.CaptureScreenshot();
var initData = new InitData(team, index, selectSkill);
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_SelectSkillPanel, initData);
}
// Use this for initialization
public override void OnInit()
{
//bind UI GameObj
SelectSkillPanelBinder.GetComponents(this);
recycleView = GetComponent<RecycleView>("Image_BG/ScrollView");
scrollRect = recycleView.transform.GetComponent<ScrollRect>();
rawImageGaussianBlurMask = GetComponent<RawImage>("GaussianBlurMask");
rawImageGaussianBlurMask.texture = CommonUtils.GetScreenTexture2D();
BindButton(Button_Cancel, OnClose);
BindButton(Button_Confirm, OnConfirm);
BindButton(Button_Close, OnClose);
listTab.Add(new TabItem(FindObj("Image_BG/Button_ConductTitle"), PlayerSkillType.Conduct, OnSelectTab));
listTab.Add(new TabItem(FindObj("Image_BG/Button_AttackTitle"), PlayerSkillType.Attack, OnSelectTab));
listTab.Add(new TabItem(FindObj("Image_BG/Button_SupportTitle"), PlayerSkillType.Support, OnSelectTab));
#region <20><>ȡ<EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>ӹټ<D3B9><D9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
foreach (int skillId in Actor.Instance.PlayerSkill.GetSkillIds())
{
int skillLevel = Actor.Instance.PlayerSkill.GetLevel(skillId);
DataPlayerSkillUpgrade skillUpgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(skillId, skillLevel);
if (null == skillUpgradeData)
continue;
if (dicSkillUpgradeData.TryGetValue(skillUpgradeData.SkillType, out List<DataPlayerSkillUpgrade> listSkillData))
listSkillData.Add(skillUpgradeData);
else
dicSkillUpgradeData[skillUpgradeData.SkillType] = new List<DataPlayerSkillUpgrade>() { skillUpgradeData };
}
#endregion
recycleView.Init(RefreshItem);
SetInfo(CurTeam, CurIndex);
}
//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()
{
}
//invoke when destroy
public override void OnRelease()
{
base.OnRelease();
}
/// <summary>
/// ҳǩ
/// </summary>
private class TabItem : UIGameObjectWrapper
{
#region UI
/// <summary>
/// ѡ<><D1A1>״̬
/// </summary>
private GameObject goSelect;
/// <summary>
/// ҳǩ<D2B3>ı<EFBFBD>
/// </summary>
private TMP_Text text;
/// <summary>
/// ҳǩ<D2B3><C7A9>ť
/// </summary>
private Button buttonSelect;
#endregion
/// <summary>
/// ѡ<>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
/// </summary>
private readonly Color SELECT_FONT_COLOR = Color.black;
/// <summary>
/// δѡ<CEB4>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
/// </summary>
private readonly Color NORMAL_FONT_COLOR = Color.white;
/// <summary>
/// <20><>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private readonly PlayerSkillType playerSkillType;
/// <summary>
/// ѡ<>лص<D0BB>
/// </summary>
private readonly Action<PlayerSkillType> selectAction;
/// <summary>
/// <20>Ƿ<EFBFBD>ѡ<EFBFBD><D1A1>
/// </summary>
public bool IsSelect
{
set
{
goSelect.IsScaleShow(value);
if (value)
text.color = SELECT_FONT_COLOR;
else
text.color = NORMAL_FONT_COLOR;
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public PlayerSkillType SkillType
{
get { return playerSkillType; }
}
public TabItem(GameObject root, PlayerSkillType playerSkillType, Action<PlayerSkillType> selectAction) : base(root, true)
{
this.playerSkillType = playerSkillType;
this.selectAction = selectAction;
goSelect = FindObj("ImageSelect");
text = GetComponent<TMP_Text>("Text");
buttonSelect = GoRoot.GetComponent<Button>();
CommonUtils.BindButton(buttonSelect, OnClick);
}
/// <summary>
/// ѡ<><D1A1>ҳǩ
/// </summary>
private void OnClick()
{
selectAction?.Invoke(playerSkillType);
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>
/// </summary>
private class SkillItem : UIGameObjectWrapper
{
/// <summary>
/// ѡ<><D1A1>״̬
/// </summary>
private GameObject goSelect;
private Button buttonSkill;
private DataPlayerSkill skillData;
private DataPlayerSkillUpgrade playerSkillData;
/// <summary>
/// <20><><EFBFBD><EFBFBD>ص<EFBFBD>
/// </summary>
private readonly Action<int> clickAction;
/// <summary>
/// <20>Ƿ<EFBFBD>ѡ<EFBFBD><D1A1>
/// </summary>
public bool IsSelect
{
set { goSelect.IsScaleShow(value); }
}
public DataPlayerSkill SkillData
{
get { return skillData; }
}
public DataPlayerSkillUpgrade PlayerSkillData
{
get { return playerSkillData; }
}
public SkillItem(GameObject root, Action<int> clickAction) : base(root)
{
this.clickAction = clickAction;
goSelect = FindObj("ImageChooseRect");
buttonSkill = GetComponent<Button>("ButtonSkillLogoS");
CommonUtils.BindButton(buttonSkill, OnClick);
}
public void SetInfo(DataPlayerSkillUpgrade skillUpgradeData)
{
playerSkillData = skillUpgradeData;
skillData = TableManager.Instance.Tables.PlayerSkillConfig.Get(playerSkillData.SkillID);
IsScaleShow = true;
}
private void OnClick()
{
clickAction?.Invoke(playerSkillData.ID);
}
}
/// <summary>
/// ҳǩ<D2B3>б<EFBFBD>
/// </summary>
private readonly List<TabItem> listTab = new(4);
/// <summary>
/// ʵ<><CAB5>id<69><64>Ӧ<EFBFBD><D3A6>Ҽ<EFBFBD><D2BC><EFBFBD>UI<55>б<EFBFBD><D0B1>ֵ<EFBFBD>
/// </summary>
private readonly Dictionary<int, SkillItem> dicSkillItem = new();
/// <summary>
/// <20><>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD>Ӧ<EFBFBD><D3A6>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD>б<EFBFBD><D0B1>ֵ<EFBFBD>
/// </summary>
private readonly Dictionary<PlayerSkillType, List<DataPlayerSkillUpgrade>> dicSkillUpgradeData = new();
/// <summary>
/// <20><>ǰѡ<C7B0><D1A1>ҳǩ<D2B3><C7A9><EFBFBD><EFBFBD>
/// </summary>
private PlayerSkillType curSelectTab;
/// <summary>
/// <20><>ǰѡ<C7B0>м<EFBFBD><D0BC><EFBFBD>id
/// </summary>
private int curSelectSkillID;
/// <summary>
/// ѡ<><D1A1><EFBFBD>ܻص<DCBB>
/// </summary>
private Action<int, int> selectSkillAction;
/// <summary>
/// <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><E9BCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private int curIndex;
public void SetInfo(Team team, int skillIndex)
{
curIndex = skillIndex;
uint[] skillIds = team.GetPlayerSkillIDs();
curSelectSkillID = (int)skillIds[skillIndex];
if (CommandSkillManager.IsIdValid(curSelectSkillID))
{
DataPlayerSkillUpgrade skillUpgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(curSelectSkillID, 0);
if (skillUpgradeData == null)
{
DebugUtil.LogError($"<22><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>id:{curSelectSkillID}");
curSelectSkillID = 0;
}
else
OnSelectTab(skillUpgradeData.SkillType);
}
else
{
List<DataPlayerSkillUpgrade> listCurSkillData = GetSkillDatasByTab(PlayerSkillType.Conduct);
if (listCurSkillData == null || listCurSkillData.Count < 1)
{
DebugUtil.LogError(<>ӹټ<D3B9><D9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>");
return;
}
curSelectSkillID = listCurSkillData[0].ID;
OnSelectTab(PlayerSkillType.Conduct); // Ĭ<><C4AC>ѡ<EFBFBD><D1A1>ָ<EFBFBD><D6B8>ϵ
}
//IsScaleShow = true;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>ˢ<EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="index"></param>
/// <param name="itemTransform"></param>
private void RefreshItem(GameObject cell, int index)
{
if (!dicSkillItem.TryGetValue(cell.GetInstanceID(), out SkillItem skillItem))
{
skillItem = new SkillItem(cell, OnSelectSkill);
dicSkillItem[cell.GetInstanceID()] = skillItem;
}
List<DataPlayerSkillUpgrade> listPlayerSkillData = GetSkillDatasByTab(curSelectTab);
if (listPlayerSkillData == null)
return;
if (listPlayerSkillData.Count < 0 || index >= listPlayerSkillData.Count)
{
DebugUtil.LogWarning("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return;
}
skillItem.SetInfo(listPlayerSkillData[index]);
if (skillItem.PlayerSkillData.ID == curSelectSkillID)
OnSelectSkill(curSelectSkillID);
else
skillItem.IsSelect = false;
}
/// <summary>
/// <20><>ȡҳǩ<D2B3><C7A9>Ӧ<EFBFBD><D3A6><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
private List<DataPlayerSkillUpgrade> GetSkillDatasByTab(PlayerSkillType playerSkillType)
{
dicSkillUpgradeData.TryGetValue(playerSkillType, out List<DataPlayerSkillUpgrade> listData);
return listData;
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1>̬<EFBFBD>б<EFBFBD><D0B1><EFBFBD>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
private int GetRecycleListShowCount()
{
List<DataPlayerSkillUpgrade> listSkillData = GetSkillDatasByTab(curSelectTab);
if (listSkillData == null)
return 0;
else
return listSkillData.Count;
}
#region <20><>ť<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// ѡ<><D1A1>ҳǩ
/// </summary>
private void OnSelectTab(PlayerSkillType playerSkillType)
{
curSelectTab = playerSkillType;
foreach (TabItem tabItem in listTab)
{
tabItem.IsSelect = tabItem.SkillType == curSelectTab;
}
recycleView.ShowList(GetRecycleListShowCount());
}
/// <summary>
/// ѡ<>м<EFBFBD><D0BC><EFBFBD>
/// </summary>
private void OnSelectSkill(int skillId)
{
foreach (SkillItem skillItem in dicSkillItem.Values)
{
if (skillItem.PlayerSkillData.ID == skillId)
{
skillItem.IsSelect = true;
Text_SkillTitle.text = CommonUtils.GetLocalizeText(CommonUtils.GetLocalizeText(E_LocalizePrefix.PlayerSkill, skillItem.SkillData.ID));
Text_Describe.text = CommonUtils.GetLocalizeText(CommonUtils.GetLocalizeText(E_LocalizePrefix.PlayerSkillDesc, skillItem.SkillData.ID));
Text_SkillCollingTime.text = string.Format(CommonUtils.GetLocalizeText("TeamAndSkill_SkillCD"),
null == skillItem.SkillData ? 0f : skillItem.SkillData.CDTime); // <20><>ȴʱ<C8B4>䣺{0}s
}
else
skillItem.IsSelect = false;
}
AudioManager.Instance.PlayAudio(Framework.Constants.Sound.COMMON_CLICK);
}
/// <summary>
/// <20>ر<EFBFBD>
/// </summary>
private void OnClose()
{
AudioManager.Instance.PlayAudio(Constants.Sound.COMMON_BACK);
//IsScaleShow = false;
CloseWindow();
}
/// <summary>
/// ȷ<><C8B7>
/// </summary>
private void OnConfirm()
{
AudioManager.Instance.PlayAudio(Constants.Sound.COMMON_CLAIM);
selectSkillAction?.Invoke(curIndex, curSelectSkillID);
CloseWindow();
}
#endregion
}