Beispiel #1
0
    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);
    }
Beispiel #2
0
    /// <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);
    }