/// #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 } }