| using System.Collections.Generic; | 
| using System.Linq; | 
| using UnityEngine; | 
| using System; | 
|   | 
|   | 
| public class TeamManager : GameSystemManager<TeamManager> | 
| { | 
|     protected Dictionary<TeamType, TeamBase> teamDict = new Dictionary<TeamType, TeamBase>(); | 
|   | 
|     public Action<TeamType> OnTeamChange = null; | 
|   | 
|     public override void Init() | 
|     { | 
|         base.Init(); | 
|          | 
|         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize; | 
|     } | 
|   | 
|     public override void Release() | 
|     { | 
|         base.Release(); | 
|         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize; | 
|     } | 
|   | 
|     protected void OnBeforePlayerDataInitialize() | 
|     { | 
|         teamDict.Clear(); | 
|     } | 
|   | 
|     public void OnHeroChangeEvent(HB124_tagSCLineupInfo vNetData) | 
|     { | 
|         var heroPack = PackManager.Instance.GetSinglePack(PackType.Hero); | 
|         HashSet<TeamType> teamTypeSet = new HashSet<TeamType>(); | 
|         for (int i = 0; i < vNetData.LineupCnt; i++) | 
|         { | 
|             TeamType teamType = (TeamType)vNetData.LineupList[i].LineupID; | 
|             teamTypeSet.Add(teamType); | 
|             var team = GetTeam(teamType); | 
|             for (int j = 0; j < vNetData.LineupList[i].HeroCnt; j++) | 
|             { | 
|                 int index = vNetData.LineupList[i].HeroItemIndexList[j]; | 
|                 HeroInfo hero; | 
|                 if (index == 0) | 
|                 { | 
|                     hero = null; | 
|                 } | 
|                 else | 
|                 { | 
|                     var item = heroPack.GetItemByIndex(vNetData.LineupList[i].HeroItemIndexList[j] - 1); | 
|                     if (item == null) | 
|                     { | 
|                         hero = null; | 
|                         Debug.LogError("没有对应的武将数据!"); | 
|                     } | 
|                     hero = HeroManager.Instance.GetHero(item.guid); | 
|   | 
|                 } | 
|                 team.RefreshServerData(vNetData.LineupList[i].ShapeType, j, hero); | 
|             } | 
|         } | 
|   | 
|         foreach (var tt in teamTypeSet) | 
|         { | 
|             OnTeamChange?.Invoke(tt); | 
|         } | 
|     } | 
|   | 
|   | 
|     public bool HasTeam(TeamType teamType) | 
|     { | 
|         return teamDict.ContainsKey(teamType); | 
|     } | 
|   | 
|     public TeamBase GetTeam(TeamType teamType) | 
|     { | 
|         TeamBase team = null; | 
|   | 
|         if (!teamDict.TryGetValue(teamType, out team)) | 
|         { | 
|             team = new TeamBase(teamType); | 
|             // team.CreateDefault(HeroManager.Instance.GetPowerfulHeroList()); | 
|             teamDict.Add(teamType, team); | 
|         } | 
|   | 
|         return team; | 
|     } | 
| } |