예제 #1
0
        private static List <PlayerstatisticExtended> FilterByAllSelectedFilters(List <PlayerstatisticExtended> playerstatistics, ICollection <FilterObject> filters, ICollection <FilterObject> filtersComparison)
        {
            List <PlayerstatisticExtended> fileteredList = playerstatistics;

            if (filters.Count == 0 && filtersComparison.Count == 0)
            {
                return(fileteredList);
            }

            foreach (FilterObject filter in filters)
            {
                fileteredList = NoteManagerHelper.FilterByASelectedFilter(fileteredList, filter);
            }

            return(fileteredList);
        }
예제 #2
0
        private static List <PlayerstatisticExtended> FilterByHandValueConditions(List <PlayerstatisticExtended> playerStatistics, HandValueSettings settings, Street street)
        {
            if (settings == null || settings.AnyHv && settings.AnyFlushDraws && settings.AnyStraightDraws)
            {
                return(playerStatistics);
            }

            var filteredList = new List <PlayerstatisticExtended>();

            // check hand values
            if (!settings.AnyHv)
            {
                if (!handValuesCache.ContainsKey(street))
                {
                    lock (handValuesCache)
                    {
                        if (!handValuesCache.ContainsKey(street))
                        {
                            handValuesCache.Add(street, HandValuesHelper.GetHandValueObjects(street).Select(x => x.Value).ToList());
                        }
                    }
                }

                var restrictedHv = handValuesCache[street]
                                   .Except(settings.SelectedHv)
                                   .ToList();

                foreach (var handValue in settings.SelectedHv)
                {
                    var handValueEnum = (HandValueEnum)handValue;
                    filteredList.AddRange(NoteManagerHelper.HandValueFilterHelper(playerStatistics, handValueEnum, street));
                }

                filteredList = filteredList.Distinct().ToList();

                if (filteredList.Count > 0 && restrictedHv.Count > 0)
                {
                    foreach (var handValue in restrictedHv)
                    {
                        var handValueEnum  = (HandValueEnum)handValue;
                        var restrictedList = NoteManagerHelper.HandValueFilterHelper(filteredList, handValueEnum, street);

                        if (restrictedList.Count > 0)
                        {
                            filteredList = filteredList
                                           .Except(restrictedList)
                                           .ToList();

                            if (filteredList.Count == 0)
                            {
                                break;
                            }
                        }
                    }
                }
            }

            // do not check flush and straight draws for river
            if (street == Street.River)
            {
                return(filteredList.Distinct().ToList());
            }

            var extraFilters = new List <Func <List <PlayerstatisticExtended>, List <PlayerstatisticExtended> > >();

            // check flush draw hand values
            if (!settings.AnyFlushDraws && settings.SelectedFlushDraws.Count > 0)
            {
                foreach (var flushDrawHandValue in settings.SelectedFlushDraws)
                {
                    var handValueFlushDrawEnum = (HandValueFlushDrawEnum)flushDrawHandValue;

                    if (handValueFlushDrawEnum == HandValueFlushDrawEnum.NoFlushDraw)
                    {
                        extraFilters.Add(x => NoteManagerHelper.HandValueFilterFlushDrawHelper(x, handValueFlushDrawEnum, street));
                        continue;
                    }

                    filteredList.AddRange(NoteManagerHelper.HandValueFilterFlushDrawHelper(playerStatistics, handValueFlushDrawEnum, street));
                }
            }

            // check straight draw hand values
            if (!settings.AnyStraightDraws && settings.SelectedStraighDraws.Count > 0)
            {
                foreach (var straightDrawHandValue in settings.SelectedStraighDraws)
                {
                    var handValueStraightDrawEnum = (HandValueStraightDraw)straightDrawHandValue;

                    if (handValueStraightDrawEnum == HandValueStraightDraw.NoStraightDraw)
                    {
                        extraFilters.Add(x => NoteManagerHelper.HandValueFilterStraightDrawHelper(x, handValueStraightDrawEnum, street));
                        continue;
                    }

                    filteredList.AddRange(NoteManagerHelper.HandValueFilterStraightDrawHelper(playerStatistics, handValueStraightDrawEnum, street));
                }
            }

            var filteredResult = filteredList.Distinct().ToList();

            foreach (var extraFilter in extraFilters)
            {
                filteredResult = extraFilter(filteredResult);
            }

            return(filteredResult);
        }