private void InitializeHandValues() { flopHandValues = new ReactiveList <HandValueObject>(HandValuesHelper.GetHandValueObjects(NoteStageType.Flop)); SubscribeOnHandValuesChanges(flopHandValues, ReflectionHelper.GetPath <NotesViewModel>(x => x.SelectedNote.Settings.FlopHvSettings.SelectedHv)); flopFlushDrawHandValues = new ReactiveList <HandValueObject>(HandValuesHelper.GetFlushHandValueObjects(NoteStageType.Flop)); SubscribeOnHandValuesChanges(flopFlushDrawHandValues, ReflectionHelper.GetPath <NotesViewModel>(x => x.SelectedNote.Settings.FlopHvSettings.SelectedFlushDraws)); flopStraightDrawHandValues = new ReactiveList <HandValueObject>(HandValuesHelper.GetStraightHandValueObjects()); SubscribeOnHandValuesChanges(flopStraightDrawHandValues, ReflectionHelper.GetPath <NotesViewModel>(x => x.SelectedNote.Settings.FlopHvSettings.SelectedStraighDraws)); turnHandValues = new ReactiveList <HandValueObject>(HandValuesHelper.GetHandValueObjects(NoteStageType.Turn)); SubscribeOnHandValuesChanges(turnHandValues, ReflectionHelper.GetPath <NotesViewModel>(x => x.SelectedNote.Settings.TurnHvSettings.SelectedHv)); turnFlushDrawHandValues = new ReactiveList <HandValueObject>(HandValuesHelper.GetFlushHandValueObjects(NoteStageType.Turn)); SubscribeOnHandValuesChanges(turnFlushDrawHandValues, ReflectionHelper.GetPath <NotesViewModel>(x => x.SelectedNote.Settings.TurnHvSettings.SelectedFlushDraws)); turnStraightDrawHandValues = new ReactiveList <HandValueObject>(HandValuesHelper.GetStraightHandValueObjects()); SubscribeOnHandValuesChanges(turnStraightDrawHandValues, ReflectionHelper.GetPath <NotesViewModel>(x => x.SelectedNote.Settings.TurnHvSettings.SelectedStraighDraws)); riverHandValues = new ReactiveList <HandValueObject>(HandValuesHelper.GetHandValueObjects(NoteStageType.River)); SubscribeOnHandValuesChanges(riverHandValues, ReflectionHelper.GetPath <NotesViewModel>(x => x.SelectedNote.Settings.RiverHvSettings.SelectedHv)); }
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); }