From 440e8a4e3febfc1d98f11da2fbd7eaf75c12e877 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 22 十月 2025 15:04:17 +0800
Subject: [PATCH] 125 战斗 细节调整

---
 Main/System/Hero/HeroManager.cs |  140 ++++++++++++++++++++++++++++++++--------------
 1 files changed, 96 insertions(+), 44 deletions(-)

diff --git a/Main/System/Hero/HeroManager.cs b/Main/System/Hero/HeroManager.cs
index d54640f..49ef7bd 100644
--- a/Main/System/Hero/HeroManager.cs
+++ b/Main/System/Hero/HeroManager.cs
@@ -1,81 +1,123 @@
 using System.Collections.Generic;
 using UnityEngine;
 using System;
+using System.Linq;
 
 public class HeroManager : GameSystemManager<HeroManager>
 {
+    //姝﹀皢鍜屽浘閴寸殑鍏崇郴
+    //鍚屼竴涓灏嗗浘閴达紝鍙兘鏈夊涓灏嗭紙鐗╁搧锛夋暟鎹紝鎴栬�呮病鏈夋灏嗭紝浣嗘槸鏈夊浘閴翠俊鎭�
+    //鍒濆鍒涘缓锛�0725锛夛紝鍚庣画璺熼殢鑳屽寘浜嬩欢澧炲姞鍒犻櫎  key = guid
     protected Dictionary<string, HeroInfo> heroInfoDict = new Dictionary<string, HeroInfo>();
 
-    public Action<HeroInfo> onNewHeroEvent;
-
     public Action<HeroInfo> onHeroChangeEvent;
+
+    public Action<int> onHeroDeleteEvent;
 
     public override void Init()
     {
         base.Init();
 
-        //  娉ㄥ唽涓�鐐逛簨浠�
-        PackManager.Instance.refrechPackEvent += refrechPackEvent;
+        PackManager.Instance.ChangeItemEvent += ChangeHero;
+        PackManager.Instance.DeleteItemEvent += DeleteHero;
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
     }
 
     public override void Release()
     {
         base.Release();
-        PackManager.Instance.refrechPackEvent -= refrechPackEvent;
+        PackManager.Instance.ChangeItemEvent -= ChangeHero;
+        PackManager.Instance.DeleteItemEvent -= DeleteHero;
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
     }
 
-    public override void RequestNessaryData()
+    void OnBeforePlayerDataInitialize()
     {
-        base.RequestNessaryData();
 
-        
+        heroInfoDict.Clear();
     }
 
-    public void refrechPackEvent(PackType packType)
+
+    // isCreate bool锛歵rue浠h〃鍒涘缓 false 鍒锋柊瑙﹀彂
+    void ChangeHero(PackType packType, string guid, bool isCreate)
     {
         if (packType == PackType.Hero)
         {
-            // bool change = false;
-            bool isNew = false;
-            //  濡傛灉鏈夊垎鎵规鍒濆鍖栧彲鑳借繕瑕侀夯鐑︿竴鐐�?鍏堢湅鐪�
-            bool isInit = heroInfoDict.Count >= 0;
-
-            SinglePack heroPack = PackManager.Instance.GetSinglePack(packType);
-
-            Dictionary<int, ItemModel> heroes = heroPack.GetAllItems();
-
-            foreach (ItemModel hero in heroes.Values)
+            HeroInfo heroInfo = null;
+            if (!heroInfoDict.TryGetValue(guid, out heroInfo))
             {
-                HeroInfo heroInfo = null;
-                if (!heroInfoDict.TryGetValue(hero.guid, out heroInfo))
-                {
-                    heroInfo = new HeroInfo(hero);
-                    heroInfoDict.Add(hero.guid, heroInfo);
-                    if (!isInit)
-                    {
-                        isNew = true;
-                        onNewHeroEvent?.Invoke(heroInfo);
-                    }
-                }
-                else
-                {
-                    heroInfo.UpdateHero(hero);
-                    //  涔熸湁鍙兘涓嶆槸change
-                    // change = true;
-                    // onHeroChangeEvent?.Invoke(heroInfo);
-                }
+                heroInfo = new HeroInfo(PackManager.Instance.GetItemByGuid(guid));
+                heroInfoDict.Add(guid, heroInfo);
+            }
+            else
+            {
+                heroInfo.UpdateHero(PackManager.Instance.GetItemByGuid(guid));
+            }
+
+            onHeroChangeEvent?.Invoke(heroInfo);
+        }
+    }
+
+    void DeleteHero(PackType packType, string guid, int itemID, int index, int clearType)
+    {
+        if (packType == PackType.Hero)
+        {
+            HeroInfo heroInfo = null;
+            heroInfoDict.TryGetValue(guid, out heroInfo);
+
+            heroInfoDict.Remove(guid);
+
+            onHeroDeleteEvent?.Invoke(itemID);
+        }
+    }
+
+    public HeroInfo GetHero(string guid)
+    {
+        if (!heroInfoDict.ContainsKey(guid))
+            return null;
+        return heroInfoDict[guid];
+    }
+
+    public List<HeroInfo> GetHeroList()
+    {
+        return heroInfoDict.Values.ToList();
+    }
+
+    public List<string> GetHeroGuidList(int job = 0, int country = 0)
+    {
+        if (job == 0 && country == 0)
+            return heroInfoDict.Keys.ToList();
+
+
+        List<string> retGuidList = new List<string>();
+        foreach (string guid in heroInfoDict.Keys)
+        {
+            HeroInfo heroInfo = heroInfoDict[guid];
+            //0浠h〃鍏ㄩ儴
+            if (job == 0 || country == 0)
+            {
+                if (job != 0 && job == heroInfo.heroConfig.Class)
+                    retGuidList.Add(guid);
+                if (country != 0 && country == heroInfo.heroConfig.Country)
+                    retGuidList.Add(guid);
+            }
+            else
+            {
+                if (job == heroInfo.heroConfig.Class && country == heroInfo.heroConfig.Country)
+                    retGuidList.Add(guid);
             }
         }
+        return retGuidList;
     }
 
     public List<HeroInfo> GetPowerfulHeroList()
     {
         List<HeroInfo> heroList = new List<HeroInfo>(heroInfoDict.Values);
 
-        heroList.Sort((a, b) => 
+        heroList.Sort((a, b) =>
         {
-            int power1 = a.CalculatePower();
-            int power2 = b.CalculatePower();
+            long power1 = a.CalculateFightPower(false);
+            long power2 = b.CalculateFightPower(false);
 
             if (power1 == power2)
             {
@@ -95,9 +137,19 @@
         return retList;
     }
 
-    // public override bool IsNessaryDataReady()
-    // {
-    //     return true;
-    // }
 
+    public int GetHeroCount()
+    {
+        return heroInfoDict.Count;
+    }
+
+    public bool HasHero(int heroID)
+    {
+        return PackManager.Instance.GetSinglePack(PackType.Hero).HasItem(heroID);
+    }
+
+    public int GetHeroCountByID(int heroID)
+    {
+        return (int)PackManager.Instance.GetSinglePack(PackType.Hero).GetCountById(heroID);
+    }
 }
\ No newline at end of file

--
Gitblit v1.8.0