private int CompareMemberList(UTileViewItemHero A, UTileViewItemHero B) { int nActorLevel = EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_LEVEL); int nIsWeekFreeA = A.bWeekFree ? 1 : 0; int nIsWeekFreeB = B.bWeekFree ? 1 : 0; int nIsHaveHeroA = A.bHaveHero ? 1 : 0; int nIsHaveHeroB = B.bHaveHero ? 1 : 0; int nUnlockLevelA = (A.nUnlockLevel <= 0 || (nActorLevel >= A.nUnlockLevel && !A.bHaveHero)) ? Int32.MaxValue : A.nUnlockLevel; int nUnlockLevelB = (B.nUnlockLevel <= 0 || (nActorLevel >= B.nUnlockLevel && !B.bHaveHero)) ? Int32.MaxValue : B.nUnlockLevel; if (nIsHaveHeroA != nIsHaveHeroB) { return((nIsHaveHeroA > nIsHaveHeroB) ? -1 : 1); } else if (nUnlockLevelA != nUnlockLevelB) { return((nUnlockLevelA < nUnlockLevelB) ? -1 : 1); } else if (A.nStarLv != B.nStarLv) { return((A.nStarLv > B.nStarLv) ? -1 : 1); } else if (nIsWeekFreeA != nIsWeekFreeB) { return((nIsWeekFreeA > nIsWeekFreeB) ? -1 : 1); } else { return((A.nHeroID < B.nHeroID) ? -1 : 1); } }
// 显示英雄头像星级及卡牌数量 public void ShowHeroHead(Dictionary <int, cmd_entity_hero_info> dicEntityHeroInfo, Dictionary <int, cmd_entity_nohanve_hero> dicEntityNoHaveHeroInfo, int nCurrentGold = 0) { HeroList.DataSource.Clear(); UIWidgets.ObservableList <UTileViewItemHero> dataSource = new UIWidgets.ObservableList <UTileViewItemHero>(); // 遍历已拥有的英雄加到表中 foreach (KeyValuePair <int, cmd_entity_hero_info> kvp in dicEntityHeroInfo) { cmd_entity_hero_info cmdInfo = kvp.Value; int nHeroID = cmdInfo.nHeroID; SHeroStarSchemeInfo pStarScheme = new SHeroStarSchemeInfo(); if (!GameLogicAPI.getHeroStarConfig(nHeroID, cmdInfo.byStarLv, ref pStarScheme)) { continue; } bool bIsLifeHero = LogicDataCenter.lifeHeroDataManager.AllLifeHero.ContainsKey(nHeroID); int nNeedCard = bIsLifeHero && pStarScheme.nCardDiscount > 0 ? pStarScheme.nCardDiscount : pStarScheme.nNeedCount; int nNeedGold = bIsLifeHero && pStarScheme.nGoldDiscount > 0 ? pStarScheme.nGoldDiscount : pStarScheme.nExpendGold; if (nNeedCard <= 0 || nNeedGold <= 0) { continue; } PersonSkinModelItem modelData = new PersonSkinModelItem(); if (!GameLogicAPI.GetPersonModel((UInt16)nHeroID, ref modelData)) { continue; } UTileViewItemHero item = new UTileViewItemHero(); item.nHeroID = nHeroID; item.headIcon = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_HeadPortrait, WndID.WND_ID_PLAYERFRAME, 1, 9, nHeroID); if (item.headIcon == null) { item.headIcon = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_HeadPortrait, WndID.WND_ID_PLAYERFRAME, 1, 9, 10); } item.stName = cmdInfo.chHeroName; item.stTitle = modelData.szHeroTitle; item.nStarLv = cmdInfo.byStarLv; item.bHaveHero = (cmdInfo.bIsBuy > 0); item.bWeekFree = (cmdInfo.bIsWeekFree > 0); item.nStarLvLimit = pStarScheme.nLimitLV; item.fExpValue = (float)cmdInfo.nCardCount / nNeedCard; item.stStarExp = cmdInfo.nCardCount.ToString() + (cmdInfo.byStarLv >= pStarScheme.nLimitLV ? "" : "/" + nNeedCard.ToString()); int nGold = nCurrentGold == 0 ? EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_GOLD) : nCurrentGold; // 已购买、未满级、卡够、钱够 item.bUpGrade = (cmdInfo.bIsBuy > 0 && cmdInfo.byStarLv < pStarScheme.nLimitLV && item.fExpValue >= 1 && nGold >= nNeedGold); item.nUnlockLevel = modelData.nUnlockLevel; item.bFpsHero = modelData.nPlayMode > 0; dataSource.Add(item); } // 遍历未拥有的英雄遍历到表中 foreach (KeyValuePair <int, cmd_entity_nohanve_hero> kvp in dicEntityNoHaveHeroInfo) { cmd_entity_nohanve_hero cmdInfo = kvp.Value; int nHeroID = cmdInfo.nHeroID; PersonSkinModelItem modelData = new PersonSkinModelItem(); if (!GameLogicAPI.GetPersonModel((UInt16)nHeroID, ref modelData)) { continue; } SHeroStarSchemeInfo pStarScheme = new SHeroStarSchemeInfo(); if (!GameLogicAPI.getHeroStarConfig(nHeroID, 1, ref pStarScheme)) { continue; } bool bIsLifeHero = LogicDataCenter.lifeHeroDataManager.AllLifeHero.ContainsKey(nHeroID); int nNeedCard = bIsLifeHero && pStarScheme.nCardDiscount > 0 ? pStarScheme.nCardDiscount : pStarScheme.nNeedCount; int nNeedGold = bIsLifeHero && pStarScheme.nGoldDiscount > 0 ? pStarScheme.nGoldDiscount : pStarScheme.nExpendGold; if (nNeedCard <= 0 || nNeedGold <= 0) { continue; } UTileViewItemHero item = new UTileViewItemHero(); item.nHeroID = nHeroID; item.headIcon = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_HeadPortrait, WndID.WND_ID_PLAYERFRAME, 1, 9, nHeroID); if (item.headIcon == null) { item.headIcon = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_HeadPortrait, WndID.WND_ID_PLAYERFRAME, 1, 9, 10); } item.stName = cmdInfo.chHeroName; item.stTitle = modelData.szHeroTitle; item.nStarLv = 1; item.bHaveHero = false; item.bWeekFree = false; item.nStarLvLimit = pStarScheme.nLimitLV; item.fExpValue = (float)cmdInfo.nHaveCardCount / nNeedCard; item.stStarExp = cmdInfo.nHaveCardCount.ToString() + "/" + nNeedCard.ToString(); item.bUpGrade = false; item.nUnlockLevel = modelData.nUnlockLevel; item.bFpsHero = modelData.nPlayMode > 0; dataSource.Add(item); } dataSource.Sort(CompareMemberList); HeroList.DataSource = dataSource; //增加监听点击头像的事件 HeroList.OnSelect.RemoveAllListeners(); HeroList.OnSelect.AddListener(ItemSelected); }