private VirtualHero BuildVirtualHero(int resId, HeroInfo info = null, VirtualHeroStatus status = VirtualHeroStatus.NOT_OWNED) { VirtualHero hero = new VirtualHero(); hero.ResId = resId; hero.Heroinfo = info; hero.Status = status; return(hero); }
/// <summary> /// 更新虚拟底座需要显示的已拥有、尚未拥有、死亡的非实体英雄列表 /// </summary> public void UpdateVirtualHero() { //实体模式下不需要更新 if (CoreEntry.toyMgr.GameMode == GameMode.TOY) { return; } //更新虚拟英雄VirtualHero //更新时机:添加新英雄\有虚拟英雄死亡\退出关卡 if (listVirtualHeroInfo == null) { return; } listVirtualHero.Clear(); List <VirtualHero> ownedHeroList = new List <VirtualHero>(); List <VirtualHero> notOwnedHeroList = new List <VirtualHero>(); List <VirtualHero> deadHeroList = new List <VirtualHero>(); VirtualHero currentHero = null; //区分还需购买哪些虚拟英雄 List <int> listResIds = GlobalFunctions.GetHeroResIds((sbyte)HERO_KIND_GROUP.HERO_KIND_ADVANCED); for (int i = 0; i < listResIds.Count; i++) { HeroInfo info = PlayerDataMgr.instance.GetHeroInfoByResId(listResIds[i]); if (info == null) { //尚未拥有该类型虚拟英雄 var data = BuildVirtualHero(listResIds[i], null, VirtualHeroStatus.NOT_OWNED); if (!notOwnedHeroList.Contains(data)) { notOwnedHeroList.Add(data); } } } //区分虚拟英雄是否死亡 foreach (HeroInfo hero in listVirtualHeroInfo) { //如果英雄数据是当前英雄数据,不加入list var currentCID = CoreEntry.portalMgr.GetCurrentHeroInstanceId(); bool isCurrentHero = PortalMgr.CompareCID(currentCID, hero.szCID); var heroData = PlayerDataMgr.instance.GetHeroDataByInstanceId(hero.szCID); if (heroData != null) { if (heroData.currentHp > 0) { var data = BuildVirtualHero(hero.nResID, hero, VirtualHeroStatus.OWNED); if (!isCurrentHero) { ownedHeroList.Add(data); } else { currentHero = data; } } else { var data = BuildVirtualHero(hero.nResID, hero, VirtualHeroStatus.DEAD); if (!isCurrentHero) { deadHeroList.Add(data); } else { currentHero = data; } } } } //listVirtualHeroInfo分为三部分 //1、已经拥有且未死亡的英雄 //2、尚未拥有的英雄 //3、已经拥有且死亡的英雄 //排序按照resId,相同resId按照英雄等级排序 if (currentHero != null) //理论上虚拟模式下当前底座CID不会为空,因此currentHero数据不会为空。不过为了未考虑到的异常,增加判空 { listVirtualHero.Add(currentHero); } listVirtualHero.AddRange(ownedHeroList); listVirtualHero.AddRange(notOwnedHeroList); listVirtualHero.AddRange(deadHeroList); }