/// #pkgName FGUI包名
/// #panelName UIPanel名字
/// #UIName = $"{#pkgName}{#panelName}" UIKey名字
/// 该脚本由模板创建
/// created by cb 2024
using FairyGUI;
using FL.Data;
using FL.Data.Items;
using System.Collections.Generic;
using XGame.Database;
using XGame.Framework.UI;
namespace FL.FGUI
{
///
/// UI逻辑处理类
///
///
public partial class PlayerMainPanelCtrl : UIController
{
private List _equipItemList;
private Dictionary _attributeDescMap;
protected override void OnEnable(object intent)
{
AddUIListenres();
AddEventListener();
Init();
ShowUI();
}
protected override void OnDisable()
{
RemoveUIListenres();
RemoveEventListener();
if (_equipItemList != null)
{
_equipItemList.Clear();
_equipItemList = null;
}
if (_attributeDescMap != null)
{
_attributeDescMap.Clear();
_attributeDescMap = null;
}
VM.PlayerSpine.url = string.Empty;
}
#region UI事件
private void AddUIListenres()
{
VM.AttrInfoBtn.onClick.Add(OnClickAttrInfoBtn);
VM.SkillBtn.onClick.Add(OnClickSkillBtn);
VM.ChangeBtn.onClick.Add(OnClickChangeBtn);
VM.MountBtn.onClick.Add(OnClickMountBtn);
VM.ArtifactBtn.onClick.Add(OnClickArtifactBtn);
VM.ContractBtn.onClick.Add(OnClickContractBtn);
VM.JewelryBtn.onClick.Add(OnClickJewelryBtn);
VM.NotOpenBtn1.onClick.Add(OnClickNotOpenBtn1);
VM.NotOpenBtn2.onClick.Add(OnClickNotOpenBtn2);
}
private void RemoveUIListenres()
{
VM.AttrInfoBtn.onClick.Remove(OnClickAttrInfoBtn);
VM.SkillBtn.onClick.Remove(OnClickSkillBtn);
VM.ChangeBtn.onClick.Remove(OnClickChangeBtn);
VM.MountBtn.onClick.Remove(OnClickMountBtn);
VM.ArtifactBtn.onClick.Remove(OnClickArtifactBtn);
VM.ContractBtn.onClick.Remove(OnClickContractBtn);
VM.JewelryBtn.onClick.Remove(OnClickJewelryBtn);
VM.NotOpenBtn1.onClick.Remove(OnClickNotOpenBtn1);
VM.NotOpenBtn2.onClick.Remove(OnClickNotOpenBtn2);
}
private void OnClickAttrInfoBtn(EventContext context)
{
Context.UI.OpenAsync(UIKeys.PlayerDetailsAttribute);
}
private void OnClickSkillBtn(EventContext context)
{
EventSingle.Instance.Notify(EventDefine.ShowTips, "显示技能详情界面");
}
private void OnClickChangeBtn(EventContext context)
{
EventSingle.Instance.Notify(EventDefine.ShowTips, "更换契约技能");
}
private void OnClickMountBtn(EventContext context)
{
EventSingle.Instance.Notify(EventDefine.ShowTips, "打开坐骑界面");
}
private void OnClickArtifactBtn(EventContext context)
{
EventSingle.Instance.Notify(EventDefine.ShowTips, "打开神器界面");
}
private void OnClickContractBtn(EventContext context)
{
EventSingle.Instance.Notify(EventDefine.ShowTips, "打开锲约界面");
}
private void OnClickJewelryBtn(EventContext context)
{
EventSingle.Instance.Notify(EventDefine.ShowTips, "打开饰品装扮界面");
}
private void OnClickNotOpenBtn1(EventContext context)
{
EventSingle.Instance.Notify(EventDefine.ShowTips, StringDefine.notOpen);
}
private void OnClickNotOpenBtn2(EventContext context)
{
EventSingle.Instance.Notify(EventDefine.ShowTips, StringDefine.notOpen);
}
#endregion
private void AddEventListener()
{
EventSingle.Instance.AddListener(EventDefine.OnChangeEquip, OnChangeEquip);
EventSingle.Instance.AddListener(EventDefine.AttributeChange, OnChangeAttribute); // 角色属性变化
EventSingle.Instance.AddListener(EventDefine.PlayerExpAdd, AddPlayerExp);
EventSingle.Instance.AddListener(EventDefine.RefreshWearEquipUI, RefreshWearEquipUI);
}
private void RemoveEventListener()
{
EventSingle.Instance.RemoveListener(EventDefine.OnChangeEquip, OnChangeEquip);
EventSingle.Instance.RemoveListener(EventDefine.AttributeChange, OnChangeAttribute); // 角色属性变化
EventSingle.Instance.RemoveListener(EventDefine.PlayerExpAdd, AddPlayerExp);
EventSingle.Instance.RemoveListener(EventDefine.RefreshWearEquipUI, RefreshWearEquipUI);
}
private void Init()
{
if (_equipItemList == null)
{
_equipItemList = new List()
{
VM.Weapon,VM.Helmet,VM.Clothes,VM.Hand,VM.Pants,VM.Boots
};
}
if (_attributeDescMap == null)
{
_attributeDescMap = new Dictionary()
{
{EAttributeType.Atk, GetAttributeDesc(EAttributeType.Atk)},
{EAttributeType.Hp, GetAttributeDesc(EAttributeType.Hp)},
{EAttributeType.Def, GetAttributeDesc(EAttributeType.Def)},
{ EAttributeType.AtkSpeed, GetAttributeDesc(EAttributeType.AtkSpeed)}
};
}
PlayerService.Instance.SendToEquipInto();
}
private void ShowUI()
{
ShowEquipUI();
ShowTitleIcon(PlayerData.Instance.Title);
ShowAttributeUI();
ShowContractSkills(201711);
LoadPlayerSpine("info_job_1001_1_SkeletonData");
}
///
/// 加载主角的spine
///
///
private void LoadPlayerSpine(string spineName)
{
VM.PlayerSpine.LoadSpine(spineName, "stand", true);
}
///
/// 角色称号
///
///
private void ShowTitleIcon(string title)
{
VM.TitleIcon.url = title;
}
///
/// 锲约的技能
///
///
private void ShowContractSkills(int skillId)
{
var skillInfo = SkillTableRepo.Get(skillId);
if (skillInfo == null) return;
VM.SkillNameLabl.text = skillInfo.Name;
VM.SkillDescLabl.text = skillInfo.Desc;
(VM.SkillBtn.GetChild("bg") as GLoader).url = AddressableDefine.ItemFrame((EQualityLevel)skillInfo.Quality);
VM.SkillBtn.icon = $"skillicon_{skillInfo.Icon}";
}
#region 装备UI
///
/// 显示装备UI
///
private void ShowEquipUI()
{
UiParam _uiParam = new UiParam();
_uiParam.bShowBtn = true;
_uiParam.bShowLevel = true;
int index = 1;
_equipItemList.ForEach((item) =>
{
EquipItem equipData = EquipData.Instance.GetWearEquipData((EEquipType)index);
if (equipData != null)
{
item.Ctrl.ShowUI(equipData, _uiParam);
}
index++;
});
}
///
/// 更换装备
///
///
///
private void OnChangeEquip(int eventId, object args)
{
if (args == null)
{
return;
}
var changeEquipPartList = args as List;
if (changeEquipPartList?.Count > 0)
{
foreach (var equipPart in changeEquipPartList)
{
CommonItemBaseView equipItem = _equipItemList[(int)equipPart - 1];
if (equipItem != null)
{
UiParam _uiParam = new UiParam();
_uiParam.bShowBtn = true;
_uiParam.bShowLevel = true;
equipItem.Ctrl.ShowUI(EquipData.Instance.GetWearEquipData(equipPart), _uiParam);
}
}
}
}
///
/// 刷新身上穿戴的装备信息
///
///
///
private void RefreshWearEquipUI(int eventId, object args)
{
XGame.Log.Info("刷新身上穿戴的装备信息");
ShowEquipUI();
}
#endregion
#region 角色属性信息
private void ShowAttributeUI()
{
VM.NameLabel.text = PlayerData.Instance.Name;
ShowPlayerLevel();
ShowExp(false);
ShowAtrributeVal(VM.AtkLabel, EAttributeType.Atk);
ShowAtrributeVal(VM.HpLabel, EAttributeType.Hp);
ShowAtrributeVal(VM.DefLabel, EAttributeType.Def);
ShowAtrributeVal(VM.AtkSpeedLabel, EAttributeType.AtkSpeed);
}
private void ShowPlayerLevel()
{
VM.LvLabl.text = $"LV.{PlayerData.Instance.Level}";
}
private void ShowExp(bool bShowAni = true)
{
var expInfo = LevelTableRepo.Get(PlayerData.Instance.Level + 1);
if (expInfo == null)
{
// 等级上限
expInfo = LevelTableRepo.Get(PlayerData.Instance.Level);
}
VM.ExpBar.max = expInfo.Exp;
if (bShowAni)
VM.ExpBar.TweenValue(PlayerData.Instance.Exp, 0.5f);
else
VM.ExpBar.value = PlayerData.Instance.Exp;
}
///
/// 角色经验值增加
///
///
///
private void AddPlayerExp(int eventId, object args)
{
ShowExp();
}
private string GetAttributeDesc(EAttributeType attrType)
{
var attrInfo = AttrDescTableRepo.Get((int)attrType);
return attrInfo?.ShowName ?? string.Empty;
}
///
/// 角色属性变化
///
///
///
private void OnChangeAttribute(int eventId, object args)
{
EAttributeType attrType = (EAttributeType)args;
if (attrType == EAttributeType.Atk)
{
ShowAtrributeVal(VM.AtkLabel, EAttributeType.Atk);
}
else if (attrType == EAttributeType.Hp)
{
ShowAtrributeVal(VM.HpLabel, EAttributeType.Hp);
}
else if (attrType == EAttributeType.Def)
{
ShowAtrributeVal(VM.DefLabel, EAttributeType.Def);
}
else if (attrType == EAttributeType.AtkSpeed)
{
ShowAtrributeVal(VM.AtkSpeedLabel, EAttributeType.AtkSpeed);
}
}
private void ShowAtrributeVal(GTextField attrLabel, EAttributeType attrType)
{
attrLabel.text = $"{_attributeDescMap[attrType]}:{PlayerData.Instance.Attr.GetValue(attrType)}";
}
#endregion
}
}