浏览代码

添加英雄管理的类
完善升级升星的逻辑

lcn 4 月之前
父节点
当前提交
d24200450c

+ 1 - 1
Assets/Layer Lab/GUI Pro-SuperCasual/Scene/DemoScene_SuperCasual.unity

@@ -405235,7 +405235,7 @@ MonoBehaviour:
   m_BlockingObjects: 0
   m_BlockingMask:
     serializedVersion: 2
-    m_Bits: 55
+    m_Bits: 4294967295
 --- !u!114 &1738751082
 MonoBehaviour:
   m_ObjectHideFlags: 0

+ 7 - 0
Assets/Res/Config/HeroModelConfig.json

@@ -11,6 +11,7 @@
       "rarity": 3,
       "heroType": 1,
       "profession": 1,
+      "itemID": 1004,
       "hp": 1000,
       "def": 3,
       "crit": null,
@@ -37,6 +38,7 @@
       "rarity": 3,
       "heroType": 1,
       "profession": 2,
+      "itemID": 1005,
       "hp": 1000,
       "def": 2,
       "crit": null,
@@ -63,6 +65,7 @@
       "rarity": 3,
       "heroType": 1,
       "profession": 3,
+      "itemID": 1006,
       "hp": 1000,
       "def": 2,
       "crit": null,
@@ -89,6 +92,7 @@
       "rarity": 3,
       "heroType": 1,
       "profession": 4,
+      "itemID": 1007,
       "hp": 1000,
       "def": 2,
       "crit": null,
@@ -115,6 +119,7 @@
       "rarity": 1,
       "heroType": 2,
       "profession": 1,
+      "itemID": null,
       "hp": 100,
       "def": 5,
       "crit": null,
@@ -140,6 +145,7 @@
       "rarity": 1,
       "heroType": 3,
       "profession": 1,
+      "itemID": null,
       "hp": 300,
       "def": 6,
       "crit": null,
@@ -167,6 +173,7 @@
       "rarity": 1,
       "heroType": 4,
       "profession": 1,
+      "itemID": null,
       "hp": 1000,
       "def": 7,
       "crit": null,

+ 20 - 20
Assets/Res/Config/HeroPromoteConfig.json

@@ -4,8 +4,8 @@
       "ID": 1,
       "starGrade": 1,
       "star_Power": 100,
-      "heroCost1_type": 1,
-      "heroCost1_count": 1,
+      "costType": 1,
+      "costCount": 1,
       "itemCostCount": 0,
       "skillLv": [
         "1",
@@ -18,8 +18,8 @@
       "ID": 2,
       "starGrade": 2,
       "star_Power": 100,
-      "heroCost1_type": 1,
-      "heroCost1_count": 1,
+      "costType": 1,
+      "costCount": 1,
       "itemCostCount": 0,
       "skillLv": [
         "1",
@@ -32,8 +32,8 @@
       "ID": 3,
       "starGrade": 3,
       "star_Power": 110,
-      "heroCost1_type": 1,
-      "heroCost1_count": 1,
+      "costType": 1,
+      "costCount": 1,
       "itemCostCount": 0,
       "skillLv": [
         "1",
@@ -46,8 +46,8 @@
       "ID": 4,
       "starGrade": 4,
       "star_Power": 120,
-      "heroCost1_type": 1,
-      "heroCost1_count": 1,
+      "costType": 1,
+      "costCount": 1,
       "itemCostCount": 0,
       "skillLv": [
         "1",
@@ -60,8 +60,8 @@
       "ID": 5,
       "starGrade": 5,
       "star_Power": 130,
-      "heroCost1_type": 1,
-      "heroCost1_count": 1,
+      "costType": 1,
+      "costCount": 1,
       "itemCostCount": 0,
       "skillLv": [
         "1",
@@ -74,8 +74,8 @@
       "ID": 6,
       "starGrade": 6,
       "star_Power": 140,
-      "heroCost1_type": 1,
-      "heroCost1_count": 1,
+      "costType": 1,
+      "costCount": 1,
       "itemCostCount": 0,
       "skillLv": [
         "2",
@@ -88,8 +88,8 @@
       "ID": 7,
       "starGrade": 7,
       "star_Power": 150,
-      "heroCost1_type": 1,
-      "heroCost1_count": 2,
+      "costType": 1,
+      "costCount": 2,
       "itemCostCount": 0,
       "skillLv": [
         "2",
@@ -102,8 +102,8 @@
       "ID": 8,
       "starGrade": 8,
       "star_Power": 160,
-      "heroCost1_type": 1,
-      "heroCost1_count": 2,
+      "costType": 1,
+      "costCount": 2,
       "itemCostCount": 0,
       "skillLv": [
         "2",
@@ -116,8 +116,8 @@
       "ID": 9,
       "starGrade": 9,
       "star_Power": 170,
-      "heroCost1_type": 1,
-      "heroCost1_count": 3,
+      "costType": 1,
+      "costCount": 3,
       "itemCostCount": 0,
       "skillLv": [
         "2",
@@ -130,8 +130,8 @@
       "ID": 10,
       "starGrade": 10,
       "star_Power": 180,
-      "heroCost1_type": -1,
-      "heroCost1_count": -1,
+      "costType": -1,
+      "costCount": -1,
       "itemCostCount": 0,
       "skillLv": [
         "3",

+ 11 - 11
Assets/Res/Config/ItemConfig.json

@@ -5,7 +5,7 @@
       "itemName": 1001,
       "itemDesc": 10011,
       "icon": "icon_item_1001",
-      "bagTab": 1,
+      "itemTyp": 1,
       "quality": 3,
       "stack": 0,
       "isSell": false,
@@ -28,7 +28,7 @@
       "itemName": 1002,
       "itemDesc": 10021,
       "icon": "icon_item_1002",
-      "bagTab": 1,
+      "itemTyp": 1,
       "quality": 4,
       "stack": 0,
       "isSell": false,
@@ -51,7 +51,7 @@
       "itemName": 1003,
       "itemDesc": 10031,
       "icon": "",
-      "bagTab": 1,
+      "itemTyp": 1,
       "quality": 1,
       "stack": null,
       "isSell": false,
@@ -65,10 +65,10 @@
     },
     {
       "ID": 1004,
-      "itemName": 1004,
+      "itemName": 5,
       "itemDesc": 10041,
       "icon": "",
-      "bagTab": 2,
+      "itemTyp": 5,
       "quality": 8,
       "stack": null,
       "isSell": false,
@@ -82,10 +82,10 @@
     },
     {
       "ID": 1005,
-      "itemName": 1005,
+      "itemName": 6,
       "itemDesc": 10051,
       "icon": "",
-      "bagTab": 2,
+      "itemTyp": 5,
       "quality": 8,
       "stack": null,
       "isSell": false,
@@ -99,10 +99,10 @@
     },
     {
       "ID": 1006,
-      "itemName": 1006,
+      "itemName": 13,
       "itemDesc": 10061,
       "icon": "",
-      "bagTab": 2,
+      "itemTyp": 5,
       "quality": 8,
       "stack": null,
       "isSell": false,
@@ -116,10 +116,10 @@
     },
     {
       "ID": 1007,
-      "itemName": 1007,
+      "itemName": 16,
       "itemDesc": 10071,
       "icon": "",
-      "bagTab": 2,
+      "itemTyp": 5,
       "quality": 8,
       "stack": null,
       "isSell": false,

+ 2 - 2
Assets/Res/UI/HeroDetailPanel.prefab

@@ -4051,7 +4051,7 @@ RectTransform:
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
   m_AnchoredPosition: {x: -105.485, y: 0}
-  m_SizeDelta: {x: 40, y: 40}
+  m_SizeDelta: {x: 29, y: 38}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &6256683123100017151
 CanvasRenderer:
@@ -4111,7 +4111,7 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
-  _icon_name: icon_res_Gem
+  _icon_name: icon_res_upgrade_1
   isNotLoadDeftIcon: 0
   CurrSpriteAtlas: {fileID: 100100200, guid: 7b02f32fa59cd4e3085208946b112537, type: 3}
   packInfo:

文件差异内容过多而无法显示
+ 585 - 332
Assets/Scenes/UITest.scene


+ 4 - 0
Assets/Scripts/Core/Utility/GlobalParam.cs

@@ -5,5 +5,9 @@ namespace Core.Utility
         public static int Item_Coin_ID = 1001;
         public static int Item_Diamond_ID = 1002;
         public static int Item_HeroExp_ID = 1003;
+        /// <summary>
+        /// 英雄最大上阵数量
+        /// </summary>
+        public static int Max_Deploy_HERO = 4;
     }
 }

+ 6 - 0
Assets/Scripts/GameData/ExcelConfig/HeroModelConfig.cs

@@ -74,6 +74,12 @@ public int heroType;
 public int profession;
 
 
+		/// <summary>
+		///对应的itemID
+		/// </summary>
+public int itemID;
+
+
 		/// <summary>
 		///生命值
 		/// </summary>

+ 1 - 1
Assets/Scripts/GameData/ExcelConfig/HeroPowerUpConfig.cs

@@ -57,7 +57,7 @@ public float EXPFactor;
 
 
 		/// <summary>
-		///升级所需经验值 (0代表最大等级)
+		///升级所需经验值 (-1代表最大等级)
 		/// </summary>
 public int levelUpExp;
 

+ 4 - 4
Assets/Scripts/GameData/ExcelConfig/HeroPromoteConfig.cs

@@ -33,15 +33,15 @@ public int star_Power;
 
 
 		/// <summary>
-		///消耗英雄材料1类型 0任意 1同名
+		///消耗英雄类型 0任意 1同名
 		/// </summary>
-public int heroCost1_type;
+public int costType;
 
 
 		/// <summary>
-		///消耗英雄材料1数量
+		///消耗英雄数量
 		/// </summary>
-public int heroCost1_count;
+public int costCount;
 
 
 		/// <summary>

+ 2 - 2
Assets/Scripts/GameData/ExcelConfig/ItemConfig.cs

@@ -39,9 +39,9 @@ public string icon;
 
 
 		/// <summary>
-		///道具分类 1.货币 2.碎片 3.道具 4.装备
+		///道具分类 1.货币 2.碎片 3.道具 4.装备 5.英雄灵魂
 		/// </summary>
-public int bagTab;
+public int itemTyp;
 
 
 		/// <summary>

+ 1 - 1
Assets/Scripts/GameLogic/Combat/CombatTool/CombatHeroController.cs

@@ -64,7 +64,7 @@ namespace GameLogic.Combat.CombatTool
                 }
             }
 
-            CombatHeroInfo combatHeroInfo = PlayerManager.Instance.GetHeroInfo(id);
+            CombatHeroInfo combatHeroInfo = PlayerManager.Instance.heroController.GetHeroInfo(id);
             long addHp = combatHeroInfo.hp.Value - combatHeroEntity.MaxCombatHeroInfo.hp.Value;
             combatHeroEntity.MaxCombatHeroInfo.hp = combatHeroInfo.hp;
             combatHeroEntity.MaxCombatHeroInfo.defense = combatHeroInfo.defense;

+ 7 - 2
Assets/Scripts/GameLogic/Combat/CombatType/LevelBattleCombatType.cs

@@ -1,4 +1,5 @@
 using System.Collections.Generic;
+using System.Linq;
 using Common.Utility.CombatEvent;
 using Common.Utility.CombatTimer;
 using Excel2Json;
@@ -7,6 +8,7 @@ using Fort23.Mono;
 using Fort23.UTool;
 using GameLogic.Combat.CombatTool;
 using GameLogic.CombatScenesTool;
+using GameLogic.Hero;
 using UnityEngine;
 
 namespace GameLogic.Combat.CombatType
@@ -373,19 +375,22 @@ namespace GameLogic.Combat.CombatType
 
         private void InitPlayerHero(CTaskAwaitBuffer cTaskAwaitBuffer)
         {
-            for (int i = 0; i < PlayerManager.Instance.heroListInLead.Count; i++)
+            int i = 0;
+            foreach (KeyValuePair<int,HeroInfo> keyValuePair in PlayerManager.Instance.heroController.heroDicInLead)
             {
                 int index = i;
                 CombatHeroEntity heroEntity = new CombatHeroEntity();
                 heroEntity.IsEnemy = false;
                 heroEntity.number = i;
 
-                cTaskAwaitBuffer.AddTask(heroEntity.Init(new CombatAIBasic(), PlayerManager.Instance.heroListInLead[i],
+                cTaskAwaitBuffer.AddTask(heroEntity.Init(new CombatAIBasic(), keyValuePair.Value,
                     delegate(CombatHeroEntity entity)
                     {
                         combatController.CombatHeroController.AddHero(entity);
                         heroEntity.combatHeroGameObject.SetPosition(_combatScenesConfig.heroPoint[index].position);
                     }));
+
+                i++;
             }
         }
 

+ 146 - 0
Assets/Scripts/GameLogic/Hero/HeroController.cs

@@ -0,0 +1,146 @@
+using System.Collections.Generic;
+using Core.Utility;
+using Fort23.UTool;
+
+namespace GameLogic.Hero
+{
+    public class HeroController
+    {
+        /// <summary>
+        /// 所有英雄
+        /// </summary>
+        public Dictionary<int, HeroInfo> allHeroDic = new Dictionary<int, HeroInfo>();
+        
+
+        /// <summary>
+        /// 也可以叫主力(afk的共鸣英雄),替补英雄等级=主力英雄的最低等级(和afk一样的)
+        /// 主力英雄不一定等于上阵英雄,主力英雄只是决定了共鸣等级
+        /// </summary>
+        public Dictionary<int, HeroInfo> heroDicInLead = new Dictionary<int, HeroInfo>(4);
+
+        /// <summary>
+        /// 后备英雄(共享等级)
+        /// </summary>
+        public Dictionary<int, HeroInfo> heroDicInBack = new Dictionary<int, HeroInfo>();
+
+
+        public void InitHeroes()
+        {
+            for (int i = 0; i < AccountFileInfo.Instance.playerData.HeroListData.Count; i++)
+            {
+                AccountFileInfo.HeroData heroData = AccountFileInfo.Instance.playerData.HeroListData[i];
+                HeroInfo heroInfo = new HeroInfo();
+                heroInfo.InitHero(heroData);
+            
+                AddHero(heroInfo);
+            }
+        }
+        
+        /// <summary>
+        /// 获取英雄
+        /// </summary>
+        /// <param name="modelID">英雄ID modelID</param>
+        /// <returns></returns>
+        public CombatHeroInfo GetHeroInfo(int modelID)
+        {
+
+            if (allHeroDic.ContainsKey(modelID))
+            {
+                return allHeroDic[modelID];
+            }
+            
+            LogTool.Error("没有这个英雄" + modelID);
+            return null;
+        }
+        
+        
+        /// <summary>
+        /// 添加英雄
+        /// </summary>
+        /// <param name="heroInfo"></param>
+        public void AddHero(HeroInfo heroInfo)
+        {
+            if (heroInfo.isLead)
+            {
+                DeployHeroToLead(heroInfo);
+            }
+            else
+            {
+                DeployHeroToBack(heroInfo);
+            }
+        }
+
+        /// <summary>
+        /// 进入主力队伍
+        /// </summary>
+        /// <param name="heroInfo"></param>
+        public void DeployHeroToLead(HeroInfo heroInfo)
+        {
+            if (heroDicInLead.Count >= GlobalParam.Max_Deploy_HERO)
+            {
+                return;
+            }
+
+            if (heroDicInLead.ContainsKey(heroInfo.modelID))
+            {
+                LogTool.Error("heroDicInLead不应该出现相同的英雄ID=" + heroInfo.modelID);
+                return;
+            }
+            
+            heroDicInLead.Add(heroInfo.modelID, heroInfo);
+            heroInfo.isLead = true;
+            
+            allHeroDic.Add(heroInfo.modelID, heroInfo);
+        }
+
+        /// <summary>
+        /// 更换主力
+        /// </summary>
+        /// <param name="heroInfo"></param>
+        public void ChangeLeadHero(HeroInfo backHero, HeroInfo leadHero)
+        {
+            if (!heroDicInLead.ContainsKey(leadHero.modelID))
+            {
+                LogTool.Error("不是主力" + leadHero.modelID);
+                return;
+            }
+            
+            if (!heroDicInBack.ContainsKey(backHero.modelID))
+            {
+                LogTool.Error("不是替补" + backHero.modelID);
+                return;
+            }
+            
+            //从主力中移除,并加入后补
+            heroDicInLead.Remove(leadHero.modelID);
+            DeployHeroToBack(leadHero);
+
+            //从后补中移除,并加入主力
+            heroDicInBack.Remove(backHero.modelID);
+            DeployHeroToLead(backHero);
+            
+            
+        }
+        
+        /// <summary>
+        /// 进入后备队伍(英雄背包)
+        /// </summary>
+        /// <param name="heroInfo"></param>
+        public void DeployHeroToBack(HeroInfo heroInfo)
+        {
+            if (heroDicInBack.ContainsKey(heroInfo.modelID))
+            {
+                LogTool.Error("heroDicInBack不应该出现相同的英雄ID=" + heroInfo.modelID);
+                return;
+            }
+            
+            heroDicInBack.Add(heroInfo.modelID, heroInfo);
+            heroInfo.isLead = false;
+            
+            allHeroDic.Add(heroInfo.modelID, heroInfo);
+        }
+        
+        
+        
+    }
+}

+ 3 - 0
Assets/Scripts/GameLogic/Hero/HeroController.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 8ed6db366c224939aa0dd1114a884a84
+timeCreated: 1732852647

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

@@ -8,6 +8,11 @@ namespace GameLogic.Hero
        
         private string _iconZhiYe;
         
+        /// <summary>
+        /// 是否为主力英雄
+        /// </summary>
+        public bool isLead;
+
         public string iconZhiYe
         {
             get{
@@ -35,14 +40,12 @@ namespace GameLogic.Hero
 
       
 
-        /// <summary>
-        /// 是否为上阵英雄
-        /// </summary>
-        public bool isLead;
+
 
         public void InitHero(AccountFileInfo.HeroData heroData)
         {
             modelID = heroData.heroModelId;
+            isLead = heroData.isLead;
             SetDataConfig(heroData.heroModelId, 
                 heroData.heroPowerId, 
                 heroData.heroPromoteId);
@@ -78,7 +81,8 @@ namespace GameLogic.Hero
             {
                 heroModelId = modelConfig.ID,
                 heroPowerId = powerUpConfig.ID,
-                heroPromoteId = promoteConfig.ID
+                heroPromoteId = promoteConfig.ID,
+                isLead = isLead,
             };
             return heroData;
         }

+ 29 - 20
Assets/Scripts/GameLogic/Player/AccountFileInfo.cs

@@ -20,14 +20,14 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
         public List<ItemData> ItemListData = new List<ItemData>();
 
         /// <summary>
-        /// 主力英雄数据(主力等级(=afk2的共鸣等级))
+        /// 英雄数据
         /// </summary>
-        public List<HeroData> HeroListInLeadDatas = new List<HeroData>();
-        
-        /// <summary>
-        /// 后备英雄(共享等级)
-        /// </summary>
-        public List<HeroData> HeroListInBackDatas = new List<HeroData>();
+        public List<HeroData> HeroListData = new List<HeroData>();
+
+        // /// <summary>
+        // /// 后备英雄(共享等级)
+        // /// </summary>
+        // public List<HeroData> HeroListInBackDatas = new List<HeroData>();
     }
     
     public void LoadPlayerData()
@@ -65,21 +65,21 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
     public void SaveHeroData(HeroInfo heroInfo)
     {
         
-        var lastHeroData= playerData.HeroListInLeadDatas[lastHeroIdx];
+        var lastHeroData= playerData.HeroListData[lastHeroIdx];
         
         if (heroInfo.modelID == lastHeroData.heroModelId)
         {
-            playerData.HeroListInLeadDatas[lastHeroIdx] = heroInfo.ToHeroData();
+            playerData.HeroListData[lastHeroIdx] = heroInfo.ToHeroData();
             SavePlayerData();
             return;
         }
         
-        for (int i = 0; i < playerData.HeroListInLeadDatas.Count; i++)
+        for (int i = 0; i < playerData.HeroListData.Count; i++)
         {
-            HeroData heroData = playerData.HeroListInLeadDatas[i];
+            HeroData heroData = playerData.HeroListData[i];
             if (heroData.heroModelId == heroInfo.modelID)
             {
-                playerData.HeroListInLeadDatas[i] = heroInfo.ToHeroData();
+                playerData.HeroListData[i] = heroInfo.ToHeroData();
                 //存下来,用于快速查找
                 lastHeroIdx = i;
                 SavePlayerData();
@@ -170,32 +170,36 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
         {
             heroModelId = 105,
             heroPowerId = 1,
-            heroPromoteId = 3
+            heroPromoteId = 3,
+            isLead = true,
         };
         
         HeroData heroData2 = new HeroData
         {
             heroModelId = 107,
             heroPowerId = 1,
-            heroPromoteId = 3
+            heroPromoteId = 3,
+            isLead = true,
         };
         
         HeroData heroData3 = new HeroData
         {
             heroModelId = 116,
             heroPowerId = 1,
-            heroPromoteId = 3
+            heroPromoteId = 3,
+            isLead = true,
         };
         HeroData heroData4 = new HeroData
         {
             heroModelId = 113,
             heroPowerId = 1,
-            heroPromoteId = 3
+            heroPromoteId = 3,
+            isLead = true,
         };
-        playerData.HeroListInLeadDatas.Add(heroData1);
-        playerData.HeroListInLeadDatas.Add(heroData2);
-        playerData.HeroListInLeadDatas.Add(heroData3);
-        playerData.HeroListInLeadDatas.Add(heroData4);
+        playerData.HeroListData.Add(heroData1);
+        playerData.HeroListData.Add(heroData2);
+        playerData.HeroListData.Add(heroData3);
+        playerData.HeroListData.Add(heroData4);
         SavePlayerData();
     }
     
@@ -216,6 +220,11 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
         /// 星级
         /// </summary>
         public int heroPromoteId;
+
+        /// <summary>
+        /// 是否为主力
+        /// </summary>
+        public bool isLead;
     }
     
     [System.Serializable]

+ 68 - 78
Assets/Scripts/GameLogic/Player/PlayerManager.cs

@@ -9,11 +9,10 @@ using Utility;
 
 public class PlayerManager : Singleton<PlayerManager>
 {
-    public List<HeroInfo> heroList = new List<HeroInfo>();
     /// <summary>
-    /// 上阵的英雄,也可以叫主力,替补英雄等级=主力英雄的最低等级(和afk一样的)
+    /// 英雄管理
     /// </summary>
-    public List<HeroInfo> heroListInLead = new List<HeroInfo>();
+    public HeroController heroController = new HeroController();
 
     public GameConstantConfig gameConstantConfig;
 
@@ -36,89 +35,80 @@ public class PlayerManager : Singleton<PlayerManager>
     private void InitGameData()
     {
         InitBags();
-        InitHeroes();
+        heroController.InitHeroes();
+        // InitHeroes();
     }
 
     private void InitBags()
     {
         BagController.Instance.Init();
     }
+    
 
-    private void InitHeroes()
-    {
-        for (int i = 0; i < AccountFileInfo.Instance.playerData.HeroListInLeadDatas.Count; i++)
-        {
-            AccountFileInfo.HeroData heroData = AccountFileInfo.Instance.playerData.HeroListInLeadDatas[i];
-            HeroInfo heroInfo = new HeroInfo();
-            heroInfo.InitHero(heroData);
-            heroListInLead.Add(heroInfo);
-        }
-    }
-
-    public void InitTestHero()
-    {
-        heroListInLead.Clear();
-        // AccountFileInfo.Instance.LoadPlayerData();
-        
-        AccountFileInfo.HeroData heroData1 = new AccountFileInfo.HeroData
-        {
-            heroModelId = 105,
-            heroPowerId = 1,
-            heroPromoteId = 3
-        };
-        
-        AccountFileInfo.HeroData heroData2 = new AccountFileInfo.HeroData
-        {
-            heroModelId = 107,
-            heroPowerId = 1,
-            heroPromoteId = 3
-        };
-        
-        AccountFileInfo.HeroData heroData3 = new AccountFileInfo.HeroData
-        {
-            heroModelId = 116,
-            heroPowerId = 1,
-            heroPromoteId = 3
-        };
-        AccountFileInfo.HeroData heroData4 = new AccountFileInfo.HeroData
-        {
-            heroModelId = 113,
-            heroPowerId = 1,
-            heroPromoteId = 3
-        };
-        AccountFileInfo.Instance.playerData.HeroListInLeadDatas.Clear();
-        AccountFileInfo.Instance.playerData.HeroListInLeadDatas.Add(heroData1);
-        AccountFileInfo.Instance.playerData.HeroListInLeadDatas.Add(heroData2);
-        AccountFileInfo.Instance.playerData.HeroListInLeadDatas.Add(heroData3);
-        AccountFileInfo.Instance.playerData.HeroListInLeadDatas.Add(heroData4);
-        
-        for (int i = 0; i < AccountFileInfo.Instance.playerData.HeroListInLeadDatas.Count; i++)
-        {
-            AccountFileInfo.HeroData heroData = AccountFileInfo.Instance.playerData.HeroListInLeadDatas[i];
-            HeroInfo heroInfo = new HeroInfo();
-            heroInfo.InitHero(heroData);
-            heroListInLead.Add(heroInfo);
-        }
-    }
-
-    public CombatHeroInfo GetHeroInfo(int modelID)
-    {
-        if (lastHeroInfo != null && lastHeroInfo.modelID == modelID)
-        {
-            return lastHeroInfo;
-        }
-        
-        for (int i = 0; i < heroListInLead.Count; i++)
-        {
-            HeroInfo info = heroListInLead[i];
-            if (info.modelID == modelID)
-            {
-                return info;
-            }
-        }
+    // public void InitTestHero()
+    // {
+    //     heroListInLead.Clear();
+    //     // AccountFileInfo.Instance.LoadPlayerData();
+    //     
+    //     AccountFileInfo.HeroData heroData1 = new AccountFileInfo.HeroData
+    //     {
+    //         heroModelId = 105,
+    //         heroPowerId = 1,
+    //         heroPromoteId = 3
+    //     };
+    //     
+    //     AccountFileInfo.HeroData heroData2 = new AccountFileInfo.HeroData
+    //     {
+    //         heroModelId = 107,
+    //         heroPowerId = 1,
+    //         heroPromoteId = 3
+    //     };
+    //     
+    //     AccountFileInfo.HeroData heroData3 = new AccountFileInfo.HeroData
+    //     {
+    //         heroModelId = 116,
+    //         heroPowerId = 1,
+    //         heroPromoteId = 3
+    //     };
+    //     AccountFileInfo.HeroData heroData4 = new AccountFileInfo.HeroData
+    //     {
+    //         heroModelId = 113,
+    //         heroPowerId = 1,
+    //         heroPromoteId = 3
+    //     };
+    //     AccountFileInfo.Instance.playerData.HeroListData.Clear();
+    //     AccountFileInfo.Instance.playerData.HeroListData.Add(heroData1);
+    //     AccountFileInfo.Instance.playerData.HeroListData.Add(heroData2);
+    //     AccountFileInfo.Instance.playerData.HeroListData.Add(heroData3);
+    //     AccountFileInfo.Instance.playerData.HeroListData.Add(heroData4);
+    //     
+    //     for (int i = 0; i < AccountFileInfo.Instance.playerData.HeroListData.Count; i++)
+    //     {
+    //         AccountFileInfo.HeroData heroData = AccountFileInfo.Instance.playerData.HeroListData[i];
+    //         HeroInfo heroInfo = new HeroInfo();
+    //         heroInfo.InitHero(heroData);
+    //         heroListInLead.Add(heroInfo);
+    //     }
+    // }
 
-        return null;
-    }
+    // public CombatHeroInfo GetHeroInfo(int modelID)
+    // {
+    //     if (lastHeroInfo != null && lastHeroInfo.modelID == modelID)
+    //     {
+    //         return lastHeroInfo;
+    //     }
+    //     
+    //     for (int i = 0; i < heroListInLead.Count; i++)
+    //     {
+    //         HeroInfo info = heroListInLead[i];
+    //         if (info.modelID == modelID)
+    //         {
+    //             return info;
+    //         }
+    //     }
+    //
+    //     return null;
+    // }
 
 
     /// <summary>

+ 47 - 5
Assets/Scripts/GameUI/UI/Hero/HeroDetailPanel.cs

@@ -1,10 +1,12 @@
 using Common.Utility.CombatEvent;
 using Core.Language;
+using Core.Utility;
 using Excel2Json;
 using Fort23.Core;
 using Fort23.UTool;
 using GameLogic.Bag;
 using GameLogic.Hero;
+using UnityEngine;
 using UnityEngine.UI;
 using Utility;
 
@@ -42,12 +44,16 @@ namespace Fort23.Mono
                 return;
             }
             
+            // heroInfo.modelConfig.itemID
+
+            if (BagController.Instance.DeductItem(heroInfo.modelConfig.itemID, heroInfo.promoteConfig.costCount))
+            {
+                heroInfo.Promote();
+                UpdateAttributeUI();
+                HeroUITools.SetStarShow(stars, heroInfo.star.Value);
+                SendEvent(HeroUpType.Promote);
+            }
             
-            
-            heroInfo.Promote();
-            UpdateAttributeUI();
-            HeroUITools.SetStarShow(stars, heroInfo.star.Value);
-            SendEvent(HeroUpType.Promote);
         }
         
         private void OnClickUpgrade()
@@ -128,6 +134,42 @@ namespace Fort23.Mono
             txtSHANBI.text = heroInfo.shanbi.Value.ToStringEx();
             txtLv.text = heroInfo.level.Value.ToStringEx();
             txtExpGain.text = heroInfo.expGain.Value.ToStringEx();
+
+            string redColorStar = "";
+            string redColorEnd = "";
+            
+            long curExp = BagController.Instance.GetItemInfo(GlobalParam.Item_HeroExp_ID).count.Value;
+            long costExp = heroInfo.powerUpConfig.levelUpExp;
+            
+            if (costExp > curExp)
+            {
+                redColorStar = "<color=#FF4C4C>";
+                redColorEnd = "</color>";
+            }
+            else
+            {
+                redColorStar = "";
+                redColorEnd = "";
+            }
+
+            txtUpgrade.text = redColorStar + curExp + redColorEnd + "/" + costExp;
+            
+            
+            long curHeroCount = BagController.Instance.GetItemInfo(heroInfo.modelConfig.itemID).count.Value;
+            long costHeroCount = heroInfo.promoteConfig.costCount;
+            
+            if (costHeroCount > curHeroCount)
+            {
+                redColorStar = "<color=#FF4C4C>";
+                redColorEnd = "</color>";
+            }
+            else
+            {
+                redColorStar = "";
+                redColorEnd = "";
+            }
+            
+            txtPromote.text = redColorStar + curHeroCount + redColorEnd + "/" + costHeroCount;
         }
 
     }

+ 6 - 3
Assets/Scripts/GameUI/UI/MainUIPanel.cs

@@ -131,7 +131,7 @@ namespace Fort23.Mono
         private void OnHeroUpgrade(IEventData eventData)
         {
             HeroPowerUpEventData data = eventData as HeroPowerUpEventData;
-            HeroInfo heroInfo = (HeroInfo)PlayerManager.Instance.GetHeroInfo(data.heroModelID);
+            HeroInfo heroInfo = (HeroInfo)PlayerManager.Instance.heroController.GetHeroInfo(data.heroModelID);
 
             foreach (WidgetHero widgetHero in widgetHeroes)
             {
@@ -148,14 +148,17 @@ namespace Fort23.Mono
         private async void InitBattleHeroWidget()
         {
             widgetHeroes.Clear();
-            for (int i = 0; i < PlayerManager.Instance.heroListInLead.Count; i++)
+            // for (int i = 0; i < PlayerManager.Instance.heroListInLead.Count; i++)
+            int i = 0;
+            foreach (KeyValuePair<int,HeroInfo> keyValuePair in PlayerManager.Instance.heroController.heroDicInLead)
             {
                 RectTransform rectTransform = hero_battle[i] as RectTransform;
                 WidgetHero itemHero = await UIManager.Instance.CreateGComponent<WidgetHero>(null,
                     poolName: "WidgetHero", root: rectTransform);
-                itemHero.InitHero(PlayerManager.Instance.heroListInLead[i]);
+                itemHero.InitHero(keyValuePair.Value);
 
                 widgetHeroes.Add(itemHero);
+                i++;
             }
         }
 

二进制
Excel2Json/Excel/HeroModel.xlsx


二进制
Excel2Json/Excel/HeroPromote.xlsx


二进制
Excel2Json/Excel/Item.xlsx


部分文件因为文件数量过多而无法显示