619 lines
16 KiB
C#
619 lines
16 KiB
C#
using System;
|
|
using Framework;
|
|
using Gameplay;
|
|
using PhxhSDK;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class UIHeadItemNodeLogic : UINode
|
|
{
|
|
protected uint uid;
|
|
protected UIHeadInfo uiheadInfo;
|
|
|
|
public GameObject root;
|
|
public Image imgBg;
|
|
public Image imgTeamProBg;
|
|
public Image imgTeamProName;
|
|
public Image imgHead;
|
|
public Image imgPro;
|
|
public Image imgMorale;
|
|
public Image imgMoraleFill;
|
|
public Image imgStateInBattle;
|
|
public TMP_Text txtLevel;
|
|
public Image imgRarity;
|
|
public TMP_Text txtName;
|
|
public Image imgSelect;
|
|
public Button buttonHead;
|
|
public TMP_Text txtLeadership;
|
|
public UIButtonLongPress buttonLongPress;
|
|
|
|
public GameObject contentFight;
|
|
public GameObject GoPro;
|
|
public GameObject CostLeadershipGo;
|
|
|
|
public TMP_Text txtLevelForEditTeam;
|
|
public GameObject LevelGoForEditTeam;
|
|
|
|
public ButtonUpDrag buttonUpDrag;
|
|
|
|
protected GameObject _debugContent;
|
|
protected TMP_Text _debugRoleID;
|
|
|
|
private void Awake()
|
|
{
|
|
OnAwake();
|
|
EventManager.Instance.Register(EventManager.EventName.DebugHeadRoleID, _OnDebugRoleID);
|
|
}
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
EventManager.Instance.Unregister(EventManager.EventName.DebugHeadRoleID, _OnDebugRoleID);
|
|
base.OnRelease();
|
|
}
|
|
|
|
public override void OnAwake()
|
|
{
|
|
//base.OnAwake();
|
|
_GetComponents();
|
|
}
|
|
|
|
public override void OnStart()
|
|
{
|
|
base.OnStart();
|
|
_GetComponents();
|
|
}
|
|
|
|
public override void SetData(object data)
|
|
{
|
|
uiheadInfo = data as UIHeadInfo;
|
|
if (uiheadInfo == null)
|
|
{
|
|
DebugUtil.LogError($"{name} SetData data is null!!! ");
|
|
return;
|
|
}
|
|
uid = uiheadInfo.Uid;
|
|
}
|
|
|
|
private void _GetComponents()
|
|
{
|
|
root = gameObject;
|
|
var uiHeadNode = root.GetComponent<UIHeadItemNode>();
|
|
imgBg = _GetComponent<Image>("Content/ImageBg");
|
|
imgTeamProBg = _GetComponent<Image>("Content/ImageJob");
|
|
imgTeamProName = _GetComponent<Image>("Content/ImageJob/ImageName");
|
|
imgHead = _GetComponent<Image>("Content/ImageHead");
|
|
imgPro = _GetComponent<Image>("Content/ImageProfession/Image_Job");
|
|
imgMorale = _GetComponent<Image>("Content/FightContent/ImageMoraleStatusBar");
|
|
imgStateInBattle = _GetComponent<Image>("Content/FightContent/ImageState");
|
|
imgMoraleFill = _GetComponent<Image>("Content/FightContent/ImageMoraleStatusBar/ImageBattleMorale");
|
|
imgRarity = _GetComponent<Image>("Content/ImageRarity");
|
|
txtLevel = _GetComponent<TMP_Text>("Content/TextLevel");
|
|
txtName = _GetComponent<TMP_Text>("Content/TextName");
|
|
imgSelect = _GetComponent<Image>("Content/ImageSelected");
|
|
GoPro = _FindObj("Content/ImageProfession");
|
|
txtLeadership = _GetComponent<TMP_Text>("Content/Image_CostBg/Text_CommandCost");
|
|
if (uiHeadNode)
|
|
{
|
|
buttonHead = uiHeadNode.buttonHead;
|
|
}
|
|
|
|
if (!buttonHead)
|
|
{
|
|
buttonHead = _GetComponent<Button>("Content/ButtonHead");
|
|
}
|
|
|
|
CostLeadershipGo = _FindObj("Content/Image_CostBg");
|
|
contentFight = transform.Find("Content/FightContent")?.gameObject;
|
|
if (buttonHead)
|
|
{
|
|
buttonUpDrag = buttonHead.GetComponent<ButtonUpDrag>();
|
|
}
|
|
|
|
// For Team Edit
|
|
LevelGoForEditTeam = _FindObj("Content/Image_LevelBg");
|
|
txtLevelForEditTeam = _GetComponent<TMP_Text>("Content/Image_LevelBg/TextLevel");
|
|
|
|
//Debug
|
|
_debugContent = transform.Find("Debug")?.gameObject;
|
|
_debugRoleID = _GetComponent<TMP_Text>("Debug/RoleID");
|
|
}
|
|
|
|
public void GetComponents()
|
|
{
|
|
_GetComponents();
|
|
}
|
|
|
|
#region Refresh
|
|
|
|
public void Refresh(bool isAsync = true)
|
|
{
|
|
if (isAsync)
|
|
{
|
|
_RefreshAsync();
|
|
}
|
|
else
|
|
{
|
|
_Refresh();
|
|
}
|
|
|
|
_RefreshCostLeadership();
|
|
|
|
_RefreshCommon();
|
|
_BindClickCb();
|
|
|
|
_RefreshDebug();
|
|
}
|
|
|
|
private void _Refresh()
|
|
{
|
|
if (uiheadInfo.IsFight)
|
|
{
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
contentFight.SetActive(false);
|
|
}
|
|
|
|
_RefreshHead();
|
|
_RefreshProfession();
|
|
}
|
|
|
|
private async void _RefreshAsync()
|
|
{
|
|
if (uiheadInfo.IsFight)
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
if (!contentFight)
|
|
{
|
|
contentFight = transform.Find("Content/FightContent").gameObject;
|
|
}
|
|
contentFight.SetActive(false);
|
|
}
|
|
|
|
_RefreshHeadAsync();
|
|
_RefreshProfessionAsync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 异步方法
|
|
/// </summary>
|
|
private async void _RefreshHeadAsync()
|
|
{
|
|
if (!uiheadInfo.IsShowHead)
|
|
{
|
|
imgHead.gameObject.SetActive(false);
|
|
return;
|
|
}
|
|
imgHead.gameObject.SetActive(true);
|
|
|
|
if (!uiheadInfo.IsAutoSetHead) return;
|
|
if (!ValueValidator.IsIdValid(uid)) return;
|
|
var characterInfo = CharacterDataInfoManager.Instance.GetCharacterInfo(uid);
|
|
var spritePath = CommonUtils.GetCharacterPicPath((int)uid, CommonUtils.ECharacterPicPathType.HeadPic,
|
|
(int)characterInfo.SkinID, uiheadInfo.IsCommander);//CommonUtils.GetDefaultHeadPathByUid(uid);
|
|
var sprite = await LoadAssetAsync<Sprite>(spritePath);
|
|
if (sprite)
|
|
{
|
|
imgHead.sprite = sprite;
|
|
}
|
|
}
|
|
|
|
private async void _RefreshProfessionAsync()
|
|
{
|
|
if (uiheadInfo.IsShowPro)
|
|
{
|
|
GoPro.SetActive(true);
|
|
var job = CommonUtils.GetProfessionByUid(uid);
|
|
var jobData = TableManager.Instance.Tables.JobAttri.GetOrDefault((int)job);
|
|
var spritePath = jobData.IconPath;
|
|
var sprite = await LoadAssetAsync<Sprite>(spritePath);
|
|
if (sprite)
|
|
{
|
|
imgPro.sprite = sprite;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
GoPro.SetActive(false);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 同步方法
|
|
/// </summary>
|
|
private void _RefreshHead()
|
|
{
|
|
if (!uiheadInfo.IsShowHead)
|
|
{
|
|
imgHead.gameObject.SetActive(false);
|
|
return;
|
|
}
|
|
imgHead.gameObject.SetActive(true);
|
|
|
|
if (!uiheadInfo.IsAutoSetHead) return;
|
|
if (!ValueValidator.IsIdValid(uid)) return;
|
|
|
|
var config = CharacterDataInfoManager.Instance.GetCharacterInfo(uid);
|
|
var spritePath = CommonUtils.GetCharacterPicPath((int)uid, CommonUtils.ECharacterPicPathType.HeadPic, (int)config.SkinID);//CommonUtils.GetDefaultHeadPathByUid(uid);
|
|
var sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(spritePath);
|
|
if (sprite)
|
|
{
|
|
imgHead.sprite = sprite;
|
|
}
|
|
}
|
|
|
|
private void _RefreshCostLeadership()
|
|
{
|
|
if (uiheadInfo.IsShowLeadership)
|
|
{
|
|
CostLeadershipGo.SetActive(true);
|
|
var leadership = CharacterDataInfoManager.Instance.GetSpendLeadership(uid);
|
|
txtLeadership.text = leadership.ToString();
|
|
}
|
|
else
|
|
{
|
|
CostLeadershipGo.SetActive(false);
|
|
}
|
|
}
|
|
|
|
private void _RefreshProfession()
|
|
{
|
|
if (uiheadInfo.IsShowPro)
|
|
{
|
|
GoPro.gameObject.SetActive(true);
|
|
var job = CommonUtils.GetProfessionByUid(uid);
|
|
var jobData = TableManager.Instance.Tables.JobAttri.GetOrDefault((int)job);
|
|
var spritePath = jobData.IconPath;
|
|
var sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(spritePath);
|
|
if (sprite)
|
|
{
|
|
imgPro.sprite = sprite;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
GoPro.SetActive(false);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 共有的显示刷新逻辑
|
|
/// </summary>
|
|
private void _RefreshCommon()
|
|
{
|
|
_RefreshRarity();
|
|
_RefreshLevel();
|
|
_RefreshName();
|
|
_RefreshBg();
|
|
}
|
|
|
|
private void _RefreshBg()
|
|
{
|
|
imgBg.gameObject.SetActive(uiheadInfo.IsShowBg);
|
|
}
|
|
private void _RefreshRarity()
|
|
{
|
|
imgRarity.gameObject.SetActive(uiheadInfo.IsShowRarity);
|
|
}
|
|
|
|
private void _RefreshName()
|
|
{
|
|
if (!uiheadInfo.IsShowName)
|
|
{
|
|
txtName.gameObject.SetActive(false);
|
|
return;
|
|
}
|
|
|
|
txtName.gameObject.SetActive(true);
|
|
if (!ValueValidator.IsIdValid(uid)) return;
|
|
|
|
var data = TableManager.Instance.Tables.CharacterAttri.GetOrDefault((int)uid);
|
|
if (data != null)
|
|
{
|
|
txtName.text = CommonUtils.GetCharacterName(data.RoleID); //CommonUtils.GetLocalizeText(data.Name);
|
|
}
|
|
}
|
|
|
|
//绑定点击回调
|
|
private void _BindClickCb()
|
|
{
|
|
if (buttonLongPress != null && uiheadInfo.LongPress != null)
|
|
{
|
|
buttonLongPress.onLongPress = uiheadInfo.LongPress;
|
|
if (uiheadInfo.ClickCb is Action action)
|
|
{
|
|
buttonLongPress.onClick = action;
|
|
}
|
|
}
|
|
else if(uiheadInfo.ClickCb is Action action)
|
|
{
|
|
ClearBind(buttonHead);
|
|
BindButton(buttonHead, action);
|
|
|
|
}
|
|
}
|
|
|
|
private void _RefreshLevel()
|
|
{
|
|
if (!uiheadInfo.IsShowLevel && !uiheadInfo.IsShowNewLevel)
|
|
{
|
|
LevelGoForEditTeam.SetActive(false);
|
|
txtLevel.gameObject.SetActive(false);
|
|
return;
|
|
}
|
|
|
|
if (uiheadInfo.IsShowLevel && !uiheadInfo.IsShowNewLevel)
|
|
{
|
|
txtLevel.gameObject.SetActive(true);
|
|
LevelGoForEditTeam.gameObject.SetActive(false);
|
|
if (CharacterDataInfoManager.Instance.DataDic.TryGetValue(uid, out var charInfo))
|
|
{
|
|
txtLevel.text = "LV " + charInfo.Level;
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (uiheadInfo.IsShowLevel && uiheadInfo.IsShowNewLevel)
|
|
{
|
|
txtLevel.gameObject.SetActive(false);
|
|
LevelGoForEditTeam.gameObject.SetActive(true);
|
|
if (CharacterDataInfoManager.Instance.DataDic.TryGetValue(uid, out var charInfo))
|
|
{
|
|
txtLevelForEditTeam.text = charInfo.Level.ToString();
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
//设置点击回调的参数
|
|
public void SetClickCbParam<T>(T param)
|
|
{
|
|
if (uiheadInfo.ClickCb != null)
|
|
{
|
|
ClearBind(buttonHead);
|
|
var clickCb = uiheadInfo.ClickCb;
|
|
if (clickCb is Action<T> action)
|
|
{
|
|
BindButton(buttonHead, action, param);
|
|
}
|
|
}
|
|
}
|
|
|
|
//设置点击回调的参数
|
|
public void SetClickCbParam<T,TK>(T param1,TK param2)
|
|
{
|
|
if (uiheadInfo.ClickCb != null)
|
|
{
|
|
ClearBind(buttonHead);
|
|
var clickCb = uiheadInfo.ClickCb;
|
|
if (clickCb is Action<T,TK> action)
|
|
{
|
|
BindButton(buttonHead, action, param1, param2);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 提供手动设置头像接口
|
|
/// </summary>
|
|
/// <param name="isAsync"></param>
|
|
public void SetHeadImage(bool isAsync = true)
|
|
{
|
|
if (!uiheadInfo.IsShowHead)
|
|
{
|
|
imgHead.gameObject.SetActive(false);
|
|
return;
|
|
}
|
|
if (!ValueValidator.IsIdValid(uid)) return;
|
|
|
|
imgHead.gameObject.SetActive(true);
|
|
if (isAsync)
|
|
{
|
|
_RefreshHeadAsync();
|
|
return;
|
|
}
|
|
|
|
_RefreshHead();
|
|
}
|
|
|
|
public async void SetHeadImageAsync(string spritePath)
|
|
{
|
|
|
|
var sprite = await LoadAssetAsync<Sprite>(spritePath);
|
|
imgHead.sprite = sprite;
|
|
}
|
|
|
|
public void SetHeadImage(string spritePath)
|
|
{
|
|
var sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(spritePath);
|
|
imgHead.sprite = sprite;
|
|
}
|
|
|
|
public void SetActive(bool active = true)
|
|
{
|
|
root.SetActive(active);
|
|
}
|
|
|
|
//设置背景
|
|
public void SetBgImage(string spritePath, bool isAsync = true)
|
|
{
|
|
if (!uiheadInfo.IsShowBg)
|
|
{
|
|
imgBg.gameObject.SetActive(false);
|
|
return;
|
|
}
|
|
|
|
if(string.IsNullOrEmpty(spritePath))
|
|
return;
|
|
|
|
imgBg.gameObject.SetActive(true);
|
|
if (isAsync)
|
|
{
|
|
_SetBgImageAsync(spritePath);
|
|
return;
|
|
}
|
|
|
|
_SetBgImage(spritePath);
|
|
}
|
|
|
|
public void HideTeamProBg()
|
|
{
|
|
imgTeamProBg.gameObject.SetActive(false);
|
|
}
|
|
|
|
public void SetTeamBgImage(string spritePath, string proPath, bool isAsync = true)
|
|
{
|
|
|
|
if (string.IsNullOrEmpty(spritePath) || string.IsNullOrEmpty(proPath))
|
|
{
|
|
imgTeamProBg.gameObject.SetActive(false);
|
|
return;
|
|
}
|
|
|
|
imgTeamProBg.gameObject.SetActive(true);
|
|
if (isAsync)
|
|
{
|
|
_SetTeamBgImageAsync(spritePath, proPath);
|
|
return;
|
|
}
|
|
|
|
_SetTeamBgImage(spritePath, proPath);
|
|
}
|
|
|
|
private async void _SetBgImageAsync(string spritePath)
|
|
{
|
|
var sprite = await LoadAssetAsync<Sprite>(spritePath);
|
|
imgBg.sprite = sprite;
|
|
}
|
|
|
|
private void _SetBgImage(string spritePath)
|
|
{
|
|
var sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(spritePath);
|
|
imgBg.sprite = sprite;
|
|
}
|
|
|
|
private async void _SetTeamBgImageAsync(string spritePath, string proPath)
|
|
{
|
|
var sprite = await LoadAssetAsync<Sprite>(spritePath);
|
|
var proSprite = await LoadAssetAsync<Sprite>(proPath);
|
|
imgTeamProBg.sprite = sprite;
|
|
imgTeamProName.sprite = proSprite;
|
|
}
|
|
|
|
private void _SetTeamBgImage(string spritePath, string proPath)
|
|
{
|
|
var sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(spritePath);
|
|
var proSprite = AssetManager.Instance.GetPreLoadResult<Sprite>(proPath);
|
|
imgTeamProBg.sprite = sprite;
|
|
imgTeamProName.sprite = proSprite;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 刷新debug部分
|
|
/// </summary>
|
|
protected virtual void _RefreshDebug()
|
|
{
|
|
_debugRoleID.text = "ID:" + uid;
|
|
_debugContent.gameObject.SetActive(DisplayIDForCeHua.IsDisplayID);
|
|
}
|
|
#endregion
|
|
|
|
#region Events
|
|
|
|
protected virtual void _OnDebugRoleID()
|
|
{
|
|
_RefreshDebug();
|
|
}
|
|
|
|
#endregion
|
|
|
|
/***************** 外部拓展接口,可继承重写 ******************/
|
|
/// <summary>
|
|
/// 刷新整个Item
|
|
/// </summary>
|
|
/// <param name="id"></param> 角色uid
|
|
/// <param name="isOnfight"></param> 是否是上阵列表Item
|
|
public virtual void RefreshHeadItem(uint id, bool isOnfight = false)
|
|
{
|
|
|
|
}
|
|
|
|
//选中时上移
|
|
public virtual void RefreshSelect(bool isSelect = false)
|
|
{
|
|
|
|
}
|
|
|
|
public virtual void BindItemClick(Action action)
|
|
{
|
|
|
|
}
|
|
|
|
public virtual void BindItemClick<T>(Action<T> action, T param)
|
|
{
|
|
//action?.Invoke(param);
|
|
}
|
|
|
|
public virtual void BindItemClick<T, D>(Action<T, D> action, T param0, D param1)
|
|
{
|
|
//action?.Invoke(param);
|
|
}
|
|
|
|
public virtual void BindItemLongPress(Action action)
|
|
{
|
|
|
|
}
|
|
|
|
public virtual void BindItemLongPress<T>(Action<T> action, T param)
|
|
{
|
|
|
|
}
|
|
|
|
public virtual void BindItemPointerUp(Action action)
|
|
{
|
|
|
|
}
|
|
|
|
public virtual void BindItemUpDrag<T>(Action<T> action, T param)
|
|
{
|
|
|
|
}
|
|
|
|
public virtual void BindItemStartDrag<T>(Action<T> action, T param)
|
|
{
|
|
|
|
}
|
|
|
|
public virtual void BindItemEndDrag<T>(Action<T> action, T param)
|
|
{
|
|
|
|
}
|
|
|
|
public virtual void BindItemOnDrag<T>(Action<T> action, T param)
|
|
{
|
|
|
|
}
|
|
|
|
public virtual void RemoveAllClickListener(ButtonUpDrag button)
|
|
{
|
|
//button.RemoveAllListener();
|
|
button.RemoveAll();
|
|
}
|
|
|
|
public virtual void RemoveClickListener()
|
|
{
|
|
|
|
}
|
|
} |