예제 #1
0
        public void Initialize(TalentTier tier)
        {
            Tier = tier;
            Tier.Locked += OnTierLocked;
            Tier.Unlocked += OnTierUnlocked;

            this.label.text = StringUtils.ToRomanNumeral(tier.Index);
            this.talentViews = new List<TalentView>();

            foreach (var talent in tier.Talents)
            {
                var talentView = Instantiate(this.talentPrefab, this.talentContainer);
                talentView.Initialize(talent);
                talentView.Clicked += OnTalentViewClicked;
                this.talentViews.Add(talentView);
            }

            if (tier.IsUnlocked)
            {
                Unlock();
            }
            else
            {
                Lock();
            }
        }
예제 #2
0
 /// <summary>
 /// Returns a list of all the talents of a hero given a talent tier
 /// </summary>
 /// <param name="realHeroName">real hero name</param>
 /// <param name="talentTier">talent tier</param>
 /// <returns></returns>
 public List <string> GetTierTalentsForHero(string realHeroName, TalentTier talentTier)
 {
     if (HeroTalentsListByRealName.TryGetValue(realHeroName, out Dictionary <TalentTier, List <string> > talents))
     {
         return(talents[talentTier]);
     }
     else
     {
         LogReferenceNameNotFound($"No hero real name found [{nameof(GetAllTalentsForHero)}]: {realHeroName}");
         return(null);
     }
 }
예제 #3
0
 private void OnTierUnlocked(TalentTier tier)
 {
     Unlock();
 }
예제 #4
0
 private void OnTierLocked(TalentTier tier)
 {
     Lock();
 }
예제 #5
0
        /// <summary>
        /// Gets the win or loss count of the talent for a given hero
        /// </summary>
        /// <param name="character">Hero name</param>
        /// <param name="season">Selected season</param>
        /// <param name="gameMode">Selected GameMode</param>
        /// <param name="mapName">Selected map</param>
        /// <param name="talentReferenceName">Selected talent reference name</param>
        /// <param name="tier">The tier that the talent is on</param>
        /// <param name="isWinner">Get wins if true otherwise losses</param>
        /// <returns></returns>
        public int ReadTalentsCountForHero(string character, Season season, GameMode gameMode, List <string> maps, string talentReferenceName, TalentTier tier, bool isWinner)
        {
            var replayBuild = HeroesHelpers.Builds.GetReplayBuildsFromSeason(season);

            using (var db = new ReplaysContext())
            {
                db.Configuration.AutoDetectChangesEnabled = false;

                var gameModeFilter = PredicateBuilder.New <ReplayMatch>();
                foreach (Enum value in Enum.GetValues(gameMode.GetType()))
                {
                    if ((GameMode)value != GameMode.Unknown && gameMode.HasFlag(value))
                    {
                        Enum temp = value;
                        gameModeFilter = gameModeFilter.Or(x => x.GameMode == (GameMode)temp);
                    }
                }

                var mapFilter = PredicateBuilder.New <ReplayMatch>();
                foreach (var map in maps)
                {
                    string temp = map;
                    mapFilter = mapFilter.Or(x => x.MapName == temp);
                }

                IQueryable <ReplayMatch> query = null;

                switch (tier)
                {
                case TalentTier.Level1:
                    query = from mpt in db.ReplayMatchPlayerTalents.AsNoTracking()
                            join r in db.Replays.AsNoTracking() on mpt.ReplayId equals r.ReplayId
                            join mp in db.ReplayMatchPlayers.AsNoTracking() on new { mpt.ReplayId, mpt.PlayerId } equals new { mp.ReplayId, mp.PlayerId }
                    where mpt.PlayerId == UserSettings.UserPlayerId &&
                    mp.IsWinner == isWinner &&
                    mpt.Character == character &&
                    mpt.TalentName1 == talentReferenceName &&
                    r.ReplayBuild >= replayBuild.Item1 && r.ReplayBuild < replayBuild.Item2
                    select r;
                    break;

                case TalentTier.Level4:
                    query = from mpt in db.ReplayMatchPlayerTalents.AsNoTracking()
                            join r in db.Replays.AsNoTracking() on mpt.ReplayId equals r.ReplayId
                            join mp in db.ReplayMatchPlayers.AsNoTracking() on new { mpt.ReplayId, mpt.PlayerId } equals new { mp.ReplayId, mp.PlayerId }
                    where mpt.PlayerId == UserSettings.UserPlayerId &&
                    mp.IsWinner == isWinner &&
                    mpt.Character == character &&
                    mpt.TalentName4 == talentReferenceName &&
                    r.ReplayBuild >= replayBuild.Item1 && r.ReplayBuild < replayBuild.Item2
                    select r;
                    break;

                case TalentTier.Level7:
                    query = from mpt in db.ReplayMatchPlayerTalents.AsNoTracking()
                            join r in db.Replays.AsNoTracking() on mpt.ReplayId equals r.ReplayId
                            join mp in db.ReplayMatchPlayers.AsNoTracking() on new { mpt.ReplayId, mpt.PlayerId } equals new { mp.ReplayId, mp.PlayerId }
                    where mpt.PlayerId == UserSettings.UserPlayerId &&
                    mp.IsWinner == isWinner &&
                    mpt.Character == character &&
                    mpt.TalentName7 == talentReferenceName &&
                    r.ReplayBuild >= replayBuild.Item1 && r.ReplayBuild < replayBuild.Item2
                    select r;
                    break;

                case TalentTier.Level10:
                    query = from mpt in db.ReplayMatchPlayerTalents.AsNoTracking()
                            join r in db.Replays.AsNoTracking() on mpt.ReplayId equals r.ReplayId
                            join mp in db.ReplayMatchPlayers.AsNoTracking() on new { mpt.ReplayId, mpt.PlayerId } equals new { mp.ReplayId, mp.PlayerId }
                    where mpt.PlayerId == UserSettings.UserPlayerId &&
                    mp.IsWinner == isWinner &&
                    mpt.Character == character &&
                    mpt.TalentName10 == talentReferenceName &&
                    r.ReplayBuild >= replayBuild.Item1 && r.ReplayBuild < replayBuild.Item2
                    select r;
                    break;

                case TalentTier.Level13:
                    query = from mpt in db.ReplayMatchPlayerTalents.AsNoTracking()
                            join r in db.Replays.AsNoTracking() on mpt.ReplayId equals r.ReplayId
                            join mp in db.ReplayMatchPlayers.AsNoTracking() on new { mpt.ReplayId, mpt.PlayerId } equals new { mp.ReplayId, mp.PlayerId }
                    where mpt.PlayerId == UserSettings.UserPlayerId &&
                    mp.IsWinner == isWinner &&
                    mpt.Character == character &&
                    mpt.TalentName13 == talentReferenceName &&
                    r.ReplayBuild >= replayBuild.Item1 && r.ReplayBuild < replayBuild.Item2
                    select r;
                    break;

                case TalentTier.Level16:
                    query = from mpt in db.ReplayMatchPlayerTalents.AsNoTracking()
                            join r in db.Replays.AsNoTracking() on mpt.ReplayId equals r.ReplayId
                            join mp in db.ReplayMatchPlayers.AsNoTracking() on new { mpt.ReplayId, mpt.PlayerId } equals new { mp.ReplayId, mp.PlayerId }
                    where mpt.PlayerId == UserSettings.UserPlayerId &&
                    mp.IsWinner == isWinner &&
                    mpt.Character == character &&
                    mpt.TalentName16 == talentReferenceName &&
                    r.ReplayBuild >= replayBuild.Item1 && r.ReplayBuild < replayBuild.Item2
                    select r;
                    break;

                case TalentTier.Level20:
                    query = from mpt in db.ReplayMatchPlayerTalents.AsNoTracking()
                            join r in db.Replays.AsNoTracking() on mpt.ReplayId equals r.ReplayId
                            join mp in db.ReplayMatchPlayers.AsNoTracking() on new { mpt.ReplayId, mpt.PlayerId } equals new { mp.ReplayId, mp.PlayerId }
                    where mpt.PlayerId == UserSettings.UserPlayerId &&
                    mp.IsWinner == isWinner &&
                    mpt.Character == character &&
                    mpt.TalentName20 == talentReferenceName &&
                    r.ReplayBuild >= replayBuild.Item1 && r.ReplayBuild < replayBuild.Item2
                    select r;
                    break;

                default:
                    break;
                }

                query = query.AsExpandable()
                        .Where(gameModeFilter)
                        .Where(mapFilter);

                return(query.Count());
            }
        }
예제 #6
0
 /// <summary>
 /// Returns a collection of all the talents in the selected tier
 /// </summary>
 /// <param name="tier">The talent tier</param>
 /// <returns></returns>
 public ICollection <Talent> GetTierTalents(TalentTier tier)
 {
     return(Talents.Values.Where(x => x.Tier == tier).ToArray());
 }