瀏覽代碼

装备开发.

liao 4 月之前
父節點
當前提交
9a0123fd8c

+ 6 - 0
Assets/Scripts/GameLogic/Combat/CombatTool/CombatHeroController.cs

@@ -43,6 +43,12 @@ namespace GameLogic.Combat.CombatTool
         private void HeroPowerUp(IEventData eventData)
         {
             HeroPowerUpEventData heroPowerUpEventData = eventData as HeroPowerUpEventData;
+
+            if (heroPowerUpEventData.upType == HeroUpType.BasicEquip)
+            {
+                return;
+            }
+            
             int id = heroPowerUpEventData.heroModelID;
             CombatHeroEntity combatHeroEntity = null;
             for (int i = 0; i < myHero.Count; i++)

+ 6 - 0
Assets/Scripts/GameLogic/Combat/Hero/CombatHeroInfo.cs

@@ -158,6 +158,12 @@ public class CombatHeroInfo
             shanbi = (EncryptionInt)(modelConfig.shanbi * powerUpConfig.SHANBIFactor * factor);
             expGain = (EncryptionLong)(modelConfig.expGain * powerUpConfig.EXPFactor * factor);
             defK = powerUpConfig.defK;
+
+            //职业装备提供的属性
+            hp += PlayerManager.Instance.eqController.zyEqAddAttributeDic[modelConfig.profession].hp;
+            defense += PlayerManager.Instance.eqController.zyEqAddAttributeDic[modelConfig.profession].def;
+            attack += PlayerManager.Instance.eqController.zyEqAddAttributeDic[modelConfig.profession].atk;
+
         }
 
 

+ 80 - 8
Assets/Scripts/GameLogic/Equipment/EquipmentController.cs

@@ -9,8 +9,28 @@ using UnityEngine;
 
 namespace GameLogic.Equipment
 {
-    
-    // public struct 
+
+    public class EqAddAttribute
+    {
+        public long atk;
+        public long def;
+        public long hp;
+
+        // public void AddAtk(long atk)
+        // {
+        //     this.atk += atk;
+        // }
+        //
+        // public void AddDef(long def)
+        // {
+        //     this.def += def;
+        // }
+        //
+        // public void AddHp(long hp)
+        // {
+        //     this.hp += hp;
+        // }
+    } 
     
     public class EquipmentController
     {
@@ -24,7 +44,21 @@ namespace GameLogic.Equipment
         /// </summary>
         public Dictionary<int, List<ItemInfo>> equipZyEqDic = new Dictionary<int, List<ItemInfo>>();
         
+        /// <summary>
+        /// 职业装备提供的属性
+        /// </summary>
+        public Dictionary<int, EqAddAttribute> zyEqAddAttributeDic = new Dictionary<int, EqAddAttribute>();
+        
         // private long curGUID;
+
+
+        public EquipmentController()
+        {
+            zyEqAddAttributeDic.Add(1, new EqAddAttribute());
+            zyEqAddAttributeDic.Add(2, new EqAddAttribute());
+            zyEqAddAttributeDic.Add(3, new EqAddAttribute());
+            zyEqAddAttributeDic.Add(4, new EqAddAttribute());
+        }
         
 
         public void Init(ItemInfo itemInfo)
@@ -33,11 +67,26 @@ namespace GameLogic.Equipment
             if (itemInfo.eqInfo != null && itemInfo.eqInfo.isEquip)
             {
                 // equipZyEqDic.Add(itemInfo.eqInfo.basicEquipConfig.profession,);
-                AddToCurEquip(itemInfo);
+                AddToCurEquip(itemInfo, true);
             }
+
             // curGUID = AccountFileInfo.Instance.playerData.eqGUID;
         }
 
+        private void CalZyEqAddAttribute()
+        {
+            foreach (KeyValuePair<int,List<ItemInfo>> keyValuePair in equipZyEqDic)
+            {
+                int zy = keyValuePair.Key;
+                foreach (ItemInfo eqItem in keyValuePair.Value)
+                {
+                    zyEqAddAttributeDic[zy].atk += eqItem.eqInfo.Attack;
+                    zyEqAddAttributeDic[zy].def += eqItem.eqInfo.Defense;
+                    zyEqAddAttributeDic[zy].hp += eqItem.eqInfo.Hp;
+                }
+            }
+        }
+
         /// <summary>
         /// 生成装备的GUID
         /// </summary>
@@ -89,9 +138,11 @@ namespace GameLogic.Equipment
 
         /// <summary>
         /// 一键穿职业装备
+        /// 把对应职业,对应部位的,最好的装备找出来
         /// </summary>
         /// <param name="zy"></param>
-        public void EquipZyEqs(int zy)
+        /// <returns>true = 有装备变动 </returns>
+        public bool EquipZyEqs(int zy)
         {
             if (zyEqDic.TryGetValue(zy, out var bwDic))
             {
@@ -118,7 +169,7 @@ namespace GameLogic.Equipment
 
                     if (bestBwEq != null)
                     {
-                        AddToCurEquip(bestBwEq);
+                        return AddToCurEquip(bestBwEq);
                         // bestBwEq.eqInfo.isEquip = true;
                         // if (equipZyEqDic.TryGetValue(zy, out var eqList))
                         // {
@@ -158,9 +209,10 @@ namespace GameLogic.Equipment
                         // }
                         
                     }
-                        
                 }
             }
+            
+            return false;
         }
 
 
@@ -168,13 +220,16 @@ namespace GameLogic.Equipment
         /// 把装备加到:当前已经穿的装备列表中管理
         /// </summary>
         /// <param name="eqItem"></param>
-        public void AddToCurEquip(ItemInfo eqItem)
+        public bool AddToCurEquip(ItemInfo eqItem, bool isInit = false)
         {
             int zy = eqItem.eqInfo.basicEquipConfig.profession;
+
+            // bool changed = true;
+            bool isAdd = true;
             
             if (equipZyEqDic.TryGetValue(zy, out var eqList))
             {
-                bool isAdd = true;
+               
                 // 从后往前遍历,这样删除元素不会影响索引
                 for (int i = eqList.Count - 1; i >= 0; i--)
                 {
@@ -190,6 +245,11 @@ namespace GameLogic.Equipment
                         {
                             itemInfo.eqInfo.isEquip = false;
                             eqList.RemoveAt(i);
+                            if (!isInit)
+                            {
+                                AccountFileInfo.Instance.SaveItemData(itemInfo);
+                            }
+                                
                         }
                                     
                         break;
@@ -200,6 +260,10 @@ namespace GameLogic.Equipment
                 {
                     eqList.Add(eqItem);    
                     eqItem.eqInfo.isEquip = true;
+                    if (!isInit)
+                    {
+                        AccountFileInfo.Instance.SaveItemData(eqItem);
+                    }
                 }
             }
             else
@@ -210,6 +274,14 @@ namespace GameLogic.Equipment
                 eqList.Add(eqItem);
                 equipZyEqDic.Add(zy, eqList);
             }
+
+            //有装备变更时,计算一下装备提供的属性
+            if (isAdd)
+            {
+                CalZyEqAddAttribute();
+            }
+
+            return isAdd;
         }
         
         public void AddEquipment(ItemInfo eqItemInfo)

+ 27 - 9
Assets/Scripts/GameLogic/Hero/HeroInfo.cs

@@ -1,5 +1,7 @@
 using System.Collections.Generic;
+using Common.Utility.CombatEvent;
 using Excel2Json;
+using Fort23.Core;
 using Fort23.UTool;
 
 namespace GameLogic.Hero
@@ -44,18 +46,34 @@ namespace GameLogic.Hero
                 return _iconZhiYe;
             }
         }
-        
+
+        public HeroInfo()
+        {
+            EventManager.Instance.AddEventListener(CustomEventType.HeroPowerUp, OnHeroPowerUp);
+        }
+
+        private void OnHeroPowerUp(IEventData e)
+        {
+            HeroPowerUpEventData data = new HeroPowerUpEventData();
+            if (data.upType == HeroUpType.BasicEquip)
+            {
+                CalAttribute();
+            }
+        }
+
         public void InitHero(AccountFileInfo.HeroData heroData)
         {
-            modelID = heroData.heroModelId;
+            // modelID = heroData.heroModelId;
             isLead = heroData.isLead;
-            SetDataConfig(heroData.heroModelId, 
-                heroData.heroPowerId, 
-                heroData.heroPromoteId);
-            CalFactor();
-            CalAttribute();
-            SkillData = new SkillData(this);
-            SkillData.InitSkills();
+            InitHero(heroData.heroModelId, heroData.heroPowerId, heroData.heroPromoteId);
+            
+            // SetDataConfig(heroData.heroModelId, 
+            //     heroData.heroPowerId, 
+            //     heroData.heroPromoteId);
+            // CalFactor();
+            // CalAttribute();
+            // SkillData = new SkillData(this);
+            // SkillData.InitSkills();
         }
 
         public void InitHero(int modelID, int powerID, int promoteID)

+ 5 - 0
Assets/Scripts/GameLogic/Player/AccountFileInfo.cs

@@ -152,6 +152,11 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
         SavePlayerData();
     }
 
+    public void SaveEqData()
+    {
+        
+    }
+
     public void SaveEqGUID()
     {
         SavePlayerData();

+ 7 - 37
Assets/Scripts/GameUI/UI/Hero/HeroDetailPanel.cs

@@ -52,8 +52,6 @@ namespace Fort23.Mono
 
         private async void OnClickPromote()
         {
-            Graphic textMeshProUGUI;
-            
             if (PlayerManager.Instance.gameConstantConfig.maxStar <= heroInfo.star.Value)
             {
                 LogTool.Log("已到达最高星级:" + PlayerManager.Instance.gameConstantConfig.maxStar);
@@ -62,18 +60,13 @@ namespace Fort23.Mono
 
             if (isOpenPre)
             {
-                //if (BagController.Instance.DeductItem(heroInfo.modelConfig.itemID, heroInfo.promoteConfig.costCount))
-                {
-                    heroInfo.Promote();
-                    PlayerManager.Instance.SaveHeroData(heroInfo);
-                    UpdateAttributeUI();
-                    HeroUITools.SetStarShow(stars, heroInfo.star.Value);
-                    // LayoutRebuilder.ForceRebuildLayoutImmediate(StarsLayout.GetComponent<RectTransform>());
-                    // SendEvent(HeroUpType.Promote);
-                    PlayerManager.Instance.heroController.SendEvent(HeroUpType.Promote, heroInfo, HeroUpResultType.Success);
-                    // FlyOutEft(upPre.Stars2);
-                    ExitPowerUpPre(curPreTyp, upPre.Stars2);
-                }
+                heroInfo.Promote();
+                PlayerManager.Instance.SaveHeroData(heroInfo);
+                UpdateAttributeUI();
+                HeroUITools.SetStarShow(stars, heroInfo.star.Value);
+                PlayerManager.Instance.heroController.SendEvent(HeroUpType.Promote, heroInfo, HeroUpResultType.Success);
+                ExitPowerUpPre(curPreTyp, upPre.Stars2);
+                
             }
             else
             {
@@ -265,29 +258,6 @@ namespace Fort23.Mono
             
             objHeroPowerUpPre.SetActive(false);
         }
-
-        /// <summary>
-        /// 发送英雄提升的事件
-        /// </summary>
-        /// <param name="upType">提升类型:升级、升星等.</param>
-        private void SendEvent(HeroUpType upType)
-        {
-            HeroPowerUpEventData data = new HeroPowerUpEventData();
-            data.heroModelID = heroInfo.modelID;
-            data.upType = upType;
-            
-            PlayerManager.Instance.lastHeroInfo = heroInfo;
-            EventManager.Instance.Dispatch(CustomEventType.HeroPowerUp, data);
-            if (upType == HeroUpType.Level)
-            {
-                EventManager.Instance.Dispatch(CustomEventType.HeroLvUp, data);
-            }
-            else if (upType == HeroUpType.Promote)
-            {
-                EventManager.Instance.Dispatch(CustomEventType.HeroPromote, data);
-            }
-            
-        }
         
         private void OnClickClose()
         {

+ 19 - 0
Assets/Scripts/GameUI/UI/Hero/ProfessionEquipmentPanel.cs

@@ -69,6 +69,25 @@ namespace Fort23.Mono
             HeroUITools.UpdateZyEqIcon(3, msEqs);
             HeroUITools.UpdateZyEqIcon(4, yxEqs);
         }
+
+        public void UpdateZyEqs(int zy)
+        {
+            switch (zy)
+            {
+                case 1:
+                    HeroUITools.UpdateZyEqIcon(1, zsEqs);
+                    break;
+                case 2:
+                    HeroUITools.UpdateZyEqIcon(2, fsEqs);
+                    break;
+                case 3:
+                    HeroUITools.UpdateZyEqIcon(3, msEqs);
+                    break;
+                case 4:
+                    HeroUITools.UpdateZyEqIcon(4, yxEqs);
+                    break;
+            }
+        }
         
     }
 }

+ 19 - 3
Assets/Scripts/GameUI/UI/Hero/SpecificProfessionEquipmentPanel.cs

@@ -1,4 +1,6 @@
 using System.Collections.Generic;
+using Common.Utility.CombatEvent;
+using Fort23.Core;
 using Fort23.UTool;
 using GameLogic.Bag;
 using UnityEngine;
@@ -23,20 +25,34 @@ namespace Fort23.Mono
             btnOnce.onClick.AddListener(OnclickOnce);
         }
 
+        private bool isClickOnce = false;
+        
         private void OnclickOnce()
         {
-            PlayerManager.Instance.eqController.EquipZyEqs(curZy);
-            HeroUITools.UpdateZyEqIcon(curZy, eqs);
+            isClickOnce = PlayerManager.Instance.eqController.EquipZyEqs(curZy);
+            HeroUITools.UpdateZyEqIcon(curZy, eqs, 30);
         }
 
-        private void OnclickClose()
+        private async void OnclickClose()
         {
             UIManager.Instance.HideUIUIPanel(this);
+            if (isClickOnce)
+            {
+                ProfessionEquipmentPanel professionEquipmentPanel = await UIManager.Instance.LoadAndOpenPanel<ProfessionEquipmentPanel>(null);
+                professionEquipmentPanel.UpdateZyEqs(curZy);
+                
+                HeroPowerUpEventData data = new HeroPowerUpEventData();
+
+                data.upType = HeroUpType.BasicEquip;
+                
+                EventManager.Instance.Dispatch(CustomEventType.HeroPowerUp, data);
+            }
         }
 
         public void InitPanel(int zy)
         {
             // SetEqs(zy);
+            isClickOnce = false;
             curZy = zy;
             HeroUITools.UpdateZyEqIcon(zy, eqs, 30);
         }

+ 6 - 0
Assets/Scripts/GameUI/UI/Hero/WidgetHero.cs

@@ -43,6 +43,12 @@ namespace Fort23.Mono
         private void OnHeroPowerUp(IEventData eventData)
         {
             HeroPowerUpEventData data = eventData as HeroPowerUpEventData;
+
+            if (data.upType == HeroUpType.BasicEquip)
+            {
+                return;
+            }
+            
             HeroInfo heroInfo = (HeroInfo)PlayerManager.Instance.heroController.GetHeroInfo(data.heroModelID);
             
             if (this.heroInfo.modelID == heroInfo.modelID)