public HudLayoutInfoV2 Migrate(HudLayoutInfo layout) { Check.Require(layout != null, "Layout must be not null"); var hudLayoutInfoV2 = new HudLayoutInfoV2 { Name = layout.Name, IsDefault = layout.IsDefault, TableType = layout.TableType, Opacity = (double)layout.HudOpacity / 100, HudPlayerTypes = layout.HudPlayerTypes.Select(x => x.Clone()).ToList(), HudBumperStickerTypes = layout.HudBumperStickerTypes.Select(x => x.Clone()).ToList() }; if (layout.HudViewType == HudViewType.Plain) { MigratePlainLayout(layout, hudLayoutInfoV2); } else { MigrateRichLayout(layout, hudLayoutInfoV2); } return(hudLayoutInfoV2); }
public static bool AreEqualsExceptPositions(HudLayoutInfo newLayout, HudLayoutInfo defaultLayout) { if (newLayout == null && defaultLayout == null) { return(true); } if (newLayout == null || defaultLayout == null) { return(false); } if (!AreEquals(newLayout.HudBumperStickerTypes, defaultLayout.HudBumperStickerTypes)) { return(false); } if (!AreEquals(newLayout.HudPlayerTypes, defaultLayout.HudPlayerTypes)) { return(false); } if (!AreEquals(newLayout.HudStats, defaultLayout.HudStats)) { return(false); } return(true); }
private HudLayoutInfoV2 ConvertLayout(HudLayoutInfo layout) { var result = new HudLayoutInfoV2 { Name = layout.Name, IsDefault = layout.IsDefault, Opacity = layout.HudOpacity, TableType = layout.TableType, HudBumperStickerTypes = layout.HudBumperStickerTypes, HudPlayerTypes = layout.HudPlayerTypes, LayoutTools = new List <HudLayoutTool> { new HudLayoutPlainBoxTool { Stats = new ReactiveList <StatInfo>(layout.HudStats), Positions = layout.HudPositionsInfo, UIPositions = layout.UiPositionsInfo.Select(x => new HudPositionInfo { Position = x.Position, Seat = x.Seat }).ToList() } } }; return(result); }
private string Save(HudLayoutInfo newLayout) { var layoutsFile = Path.Combine(StringFormatter.GetAppDataFolderPath(), "Layouts", GetLayoutFileName(newLayout.Name)); using (var fs = File.Open(layoutsFile, FileMode.Create)) { var xmlSerializer = new XmlSerializer(typeof(HudLayoutInfo)); xmlSerializer.Serialize(fs, newLayout); } return(layoutsFile); }
public static bool AreEquals(HudLayoutInfo newLayout, HudLayoutInfo defaultLayout) { if (newLayout == null && defaultLayout == null) { return(true); } if (newLayout == null || defaultLayout == null) { return(false); } if (!AreEquals(newLayout.HudBumperStickerTypes, defaultLayout.HudBumperStickerTypes)) { return(false); } if (!AreEquals(newLayout.HudPlayerTypes, defaultLayout.HudPlayerTypes)) { return(false); } if (!AreEquals(newLayout.HudStats, defaultLayout.HudStats)) { return(false); } foreach (var hudPositionsInfo in newLayout.HudPositionsInfo) { var existiongPos = defaultLayout.HudPositionsInfo.FirstOrDefault( p => p.GameType == hudPositionsInfo.GameType && p.PokerSite == hudPositionsInfo.PokerSite); if (existiongPos == null) { return(false); } if (!AreEquals(existiongPos.HudPositions, hudPositionsInfo.HudPositions)) { return(false); } } return(true); }
private void MigratePlainLayout(HudLayoutInfo layout, HudLayoutInfoV2 layoutInfoV2) { var hudLayoutPlainBoxTool = new HudLayoutPlainBoxTool(); hudLayoutPlainBoxTool.UIPositions = (from seat in Enumerable.Range(1, (int)layout.TableType) let uiPosition = layout.UiPositionsInfo.FirstOrDefault(x => x.Seat == seat) let x = uiPosition != null ? uiPosition.Position.X + uiPositionShiftX : 0 let y = uiPosition != null ? uiPosition.Position.Y : 0 select new HudPositionInfo { Seat = seat, Position = new Point(x, y), Width = uiPosition != null ? uiPosition.Width : HudDefaultSettings.PlainStatBoxWidth, Height = HudDefaultSettings.PlainStatBoxHeight, }).ToList(); var clonedStats = layout.HudStats.Select(x => x.Clone()).ToList(); // insert line breaks if (clonedStats.Count > 4 && clonedStats.All(x => !(x is StatInfoBreak))) { var clonedStatsWithBreaks = new List <StatInfo>(); for (var i = 0; i < clonedStats.Count; i++) { if (i > 0 && i % 4 == 0) { clonedStatsWithBreaks.Add(new StatInfoBreak()); } clonedStatsWithBreaks.Add(clonedStats[i]); } clonedStats = clonedStatsWithBreaks; } hudLayoutPlainBoxTool.Stats = new ReactiveList <StatInfo>(clonedStats); hudLayoutPlainBoxTool.Positions = (from hudPositionsInfo in layout.HudPositionsInfo select new HudPositionsInfo { GameType = hudPositionsInfo.GameType, PokerSite = hudPositionsInfo.PokerSite, HudPositions = (from hudPosition in hudPositionsInfo.HudPositions let offset = GetOffset(hudPositionsInfo.PokerSite, hudPositionsInfo.GameType, layout.TableType, hudPosition.Seat) select new HudPositionInfo { Seat = hudPosition.Seat, Position = new Point(hudPosition.Position.X + offset.X, hudPosition.Position.Y + offset.Y) }).ToList() }).ToList(); var hudLayoutBumperStickersTool = new HudLayoutBumperStickersTool { UIPositions = (from position in hudLayoutPlainBoxTool.UIPositions select new HudPositionInfo { Seat = position.Seat, Position = new Point(position.Position.X, position.Position.Y - HudDefaultSettings.BumperStickersHeight), Width = HudDefaultSettings.BumperStickersWidth, Height = HudDefaultSettings.BumperStickersHeight }).ToList(), Positions = (from positionsInfo in hudLayoutPlainBoxTool.Positions select new HudPositionsInfo { PokerSite = positionsInfo.PokerSite, GameType = positionsInfo.GameType, HudPositions = (from position in positionsInfo.HudPositions select new HudPositionInfo { Seat = position.Seat, Position = new Point(position.Position.X, position.Position.Y - HudDefaultSettings.BumperStickersHeight) }).ToList() }).ToList() }; layoutInfoV2.LayoutTools = new List <HudLayoutTool> { hudLayoutPlainBoxTool, hudLayoutBumperStickersTool }; MigratePopups(layout, layoutInfoV2); }
private void MigratePopups(HudLayoutInfo layout, HudLayoutInfoV2 layoutInfoV2) { if (layout.HudStats.Any(x => x.Stat == Stat.VPIP)) { var hudLayoutVPIPGaugeIndicatorTool = new HudLayoutGaugeIndicator { BaseStat = CreateStatInfo(Stat.VPIP), Text = "TOTAL", HeaderText = "VPIP", Stats = new ReactiveList <StatInfo> { CreateStatInfo(Stat.VPIP_EP), CreateStatInfo(Stat.VPIP_MP), CreateStatInfo(Stat.VPIP_CO), CreateStatInfo(Stat.VPIP_BN), CreateStatInfo(Stat.VPIP_SB), CreateStatInfo(Stat.VPIP_BB), } }; var hudLayoutColdCallGaugeIndicatorTool = new HudLayoutGaugeIndicator { BaseStat = CreateStatInfo(Stat.VPIP), Text = "COLD CALL", HeaderText = "Cold Call", Stats = new ReactiveList <StatInfo> { CreateStatInfo(Stat.ColdCall_EP), CreateStatInfo(Stat.ColdCall_MP), CreateStatInfo(Stat.ColdCall_CO), CreateStatInfo(Stat.ColdCall_BN), CreateStatInfo(Stat.ColdCall_SB), CreateStatInfo(Stat.ColdCall_BB), } }; layoutInfoV2.LayoutTools.Add(hudLayoutVPIPGaugeIndicatorTool); layoutInfoV2.LayoutTools.Add(hudLayoutColdCallGaugeIndicatorTool); } if (layout.HudStats.Any(x => x.Stat == Stat.PFR)) { var hudLayoutPFRGaugeIndicatorTool = new HudLayoutGaugeIndicator { BaseStat = CreateStatInfo(Stat.PFR), Text = "UNOPENED", HeaderText = "PFR", Stats = new ReactiveList <StatInfo> { CreateStatInfo(Stat.UO_PFR_EP), CreateStatInfo(Stat.UO_PFR_MP), CreateStatInfo(Stat.UO_PFR_CO), CreateStatInfo(Stat.UO_PFR_BN), CreateStatInfo(Stat.UO_PFR_SB) } }; layoutInfoV2.LayoutTools.Add(hudLayoutPFRGaugeIndicatorTool); } if (layout.HudStats.Any(x => x.Stat == Stat.S3Bet)) { var hudLayout3BetGaugeIndicatorTool = new HudLayoutGaugeIndicator { BaseStat = CreateStatInfo(Stat.S3Bet), Text = "TOTAL", HeaderText = "3-bet%", Stats = new ReactiveList <StatInfo> { CreateStatInfo(Stat.ThreeBet_EP), CreateStatInfo(Stat.ThreeBet_MP), CreateStatInfo(Stat.ThreeBet_CO), CreateStatInfo(Stat.ThreeBet_BN), CreateStatInfo(Stat.ThreeBet_SB), CreateStatInfo(Stat.ThreeBet_BB), } }; layoutInfoV2.LayoutTools.Add(hudLayout3BetGaugeIndicatorTool); } if (layout.HudStats.Any(x => x.Stat == Stat.AGG)) { var hudLayoutAggGaugeIndicatorTool = new HudLayoutGaugeIndicator { BaseStat = CreateStatInfo(Stat.AGG), Text = "TOTAL", HeaderText = "AGG%", Stats = new ReactiveList <StatInfo> { CreateStatInfo(Stat.FlopAGG), CreateStatInfo(Stat.TurnAGG), CreateStatInfo(Stat.RiverAGG), CreateStatInfo(Stat.RecentAgg) } }; layoutInfoV2.LayoutTools.Add(hudLayoutAggGaugeIndicatorTool); } if (layout.HudStats.Any(x => x.Stat == Stat.PlayerInfoIcon)) { var hudLayoutGraphTool = new HudLayoutGraphTool { BaseStat = CreateStatInfo(Stat.PlayerInfoIcon), Stats = new ReactiveList <StatInfo> { CreateStatInfo(Stat.NetWon) } }; layoutInfoV2.LayoutTools.Add(hudLayoutGraphTool); } }
private void MigrateRichLayout(HudLayoutInfo layout, HudLayoutInfoV2 layoutInfoV2) { // 4-stat box var hudLayout4StatBoxTool = new HudLayoutFourStatsBoxTool { IsVertical = layout.HudViewType != HudViewType.Horizontal, UIPositions = (from seat in Enumerable.Range(1, (int)layout.TableType) let uiPosition = layout.UiPositionsInfo.FirstOrDefault(x => x.Seat == seat) let shiftX = layout.HudViewType != HudViewType.Horizontal && IsRightOriented((int)layout.TableType, seat) ? ui4StatBoxVerticalShiftX : 0 let shiftY = layout.HudViewType == HudViewType.Horizontal ? ui4StatBoxHorizontalShiftY : 0 let x = uiPosition != null ? uiPosition.Position.X + shiftX : 0 let y = uiPosition != null ? uiPosition.Position.Y + shiftY : 0 let width = layout.HudViewType != HudViewType.Horizontal ? HudDefaultSettings.FourStatVerticalBoxWidth : HudDefaultSettings.FourStatBoxWidth let height = layout.HudViewType != HudViewType.Horizontal ? HudDefaultSettings.FourStatVerticalBoxHeight : HudDefaultSettings.FourStatBoxHeight select new HudPositionInfo { Seat = seat, Position = new Point(x, y + uiExtraShiftY), Width = width, Height = height, }).ToList(), Stats = new ReactiveList <StatInfo>(layout.HudStats .Where(x => x.Stat != Stat.PlayerInfoIcon && x.Stat != Stat.LineBreak) .Take(4) .Select(x => x.Clone())), Positions = (from hudPositionsInfo in layout.HudPositionsInfo select new HudPositionsInfo { GameType = hudPositionsInfo.GameType, PokerSite = hudPositionsInfo.PokerSite, HudPositions = (from hudPosition in hudPositionsInfo.HudPositions let shiftX = layout.HudViewType != HudViewType.Horizontal && IsRightOriented((int)layout.TableType, hudPosition.Seat) ? ui4StatBoxVerticalShiftX : 0 let shiftY = layout.HudViewType == HudViewType.Horizontal ? ui4StatBoxHorizontalShiftY : 0 let offset = GetOffset(hudPositionsInfo.PokerSite, hudPositionsInfo.GameType, layout.TableType, hudPosition.Seat) select new HudPositionInfo { Seat = hudPosition.Seat, Position = new Point(hudPosition.Position.X + offset.X + shiftX, hudPosition.Position.Y + offset.Y + shiftY) }).ToList() }).ToList() }; // add line breaks to vertical component var plainBoxStats = layout.HudStats .Where(x => !hudLayout4StatBoxTool.Stats.Any(p => p.Stat == x.Stat)) .Select(x => x.Clone()).ToList(); if (layout.HudViewType == HudViewType.Vertical_1) { var plainBoxStatsTemp = plainBoxStats.Where(x => x.Stat != Stat.LineBreak).ToList(); plainBoxStats = new List <StatInfo>(); for (var i = 0; i < plainBoxStatsTemp.Count; i++) { plainBoxStats.Add(plainBoxStatsTemp[i]); if (i != plainBoxStatsTemp.Count - 1) { plainBoxStats.Add(new StatInfoBreak()); } } } // plain box var hudLayoutPlainBoxTool = new HudLayoutPlainBoxTool { UIPositions = (from seat in Enumerable.Range(1, (int)layout.TableType) let uiPosition = layout.UiPositionsInfo.FirstOrDefault(x => x.Seat == seat) let shiftX = layout.HudViewType == HudViewType.Vertical_1 ? (IsRightOriented((int)layout.TableType, seat) ? uiPlainBoxVertical1RightOrientedShiftX : uiPlainBoxVertical1ShiftX) : 0 let shiftY = layout.HudViewType == HudViewType.Vertical_1 ? uiPlainBoxVerticalShiftY : uiPlainBoxShiftY + ui4StatBoxHorizontalShiftY let x = uiPosition != null ? uiPosition.Position.X + shiftX : 0 let y = uiPosition != null ? uiPosition.Position.Y + shiftY : 0 let width = layout.HudViewType == HudViewType.Vertical_1 ? uiPlainBoxVerticalWidth : HudDefaultSettings.FourStatBoxWidth let height = HudDefaultSettings.PlainStatBoxHeight select new HudPositionInfo { Seat = seat, Position = new Point(x, y + uiExtraShiftY), Width = width, Height = height }).ToList(), Stats = new ReactiveList <StatInfo>(plainBoxStats), Positions = (from hudPositionsInfo in layout.HudPositionsInfo select new HudPositionsInfo { GameType = hudPositionsInfo.GameType, PokerSite = hudPositionsInfo.PokerSite, HudPositions = (from hudPosition in hudPositionsInfo.HudPositions let shiftX = layout.HudViewType == HudViewType.Vertical_1 ? (IsRightOriented((int)layout.TableType, hudPosition.Seat) ? uiPlainBoxVertical1RightOrientedShiftX : uiPlainBoxVertical1ShiftX) : 0 let shiftY = layout.HudViewType == HudViewType.Vertical_1 ? uiPlainBoxVerticalShiftY : uiPlainBoxShiftY + ui4StatBoxHorizontalShiftY let offset = GetOffset(hudPositionsInfo.PokerSite, hudPositionsInfo.GameType, layout.TableType, hudPosition.Seat) select new HudPositionInfo { Seat = hudPosition.Seat, Position = new Point(hudPosition.Position.X + offset.X + shiftX, hudPosition.Position.Y + offset.Y + shiftY) }).ToList() }).ToList() }; // tilt meter var hudLayoutTiltMeterTool = new HudLayoutTiltMeterTool { UIPositions = (from seat in Enumerable.Range(1, (int)layout.TableType) let uiPosition = layout.UiPositionsInfo.FirstOrDefault(x => x.Seat == seat) let shiftX = IsRightOriented((int)layout.TableType, seat) ? uiTiltMeterRightOrientedShiftX : 0 let shiftY = uiTiltMeterShiftY let x = uiPosition != null ? uiPosition.Position.X + shiftX : 0 let y = uiPosition != null ? uiPosition.Position.Y + shiftY : 0 let width = HudDefaultSettings.TiltMeterWidth let height = HudDefaultSettings.TiltMeterHeight select new HudPositionInfo { Seat = seat, Position = new Point(x, y + uiExtraShiftY), Width = width, Height = height }).ToList(), Positions = (from hudPositionsInfo in layout.HudPositionsInfo select new HudPositionsInfo { GameType = hudPositionsInfo.GameType, PokerSite = hudPositionsInfo.PokerSite, HudPositions = (from hudPosition in hudPositionsInfo.HudPositions let shiftX = IsRightOriented((int)layout.TableType, hudPosition.Seat) ? uiTiltMeterRightOrientedShiftX : 0 let shiftY = uiTiltMeterShiftY let offset = GetOffset(hudPositionsInfo.PokerSite, hudPositionsInfo.GameType, layout.TableType, hudPosition.Seat) select new HudPositionInfo { Seat = hudPosition.Seat, Position = new Point(hudPosition.Position.X + offset.X + shiftX, hudPosition.Position.Y + offset.Y + shiftY) }).ToList() }).ToList() }; // player icon var hudLayoutPlayerIconTool = new HudLayoutPlayerIconTool { UIPositions = (from seat in Enumerable.Range(1, (int)layout.TableType) let uiPosition = layout.UiPositionsInfo.FirstOrDefault(x => x.Seat == seat) let shiftX = IsRightOriented((int)layout.TableType, seat) ? uiPlayerIconRightOrientedShiftX : uiPlayerIconShiftX let shiftY = uiPlayerIconShiftY let x = uiPosition != null ? uiPosition.Position.X + shiftX : 0 let y = uiPosition != null ? uiPosition.Position.Y + shiftY : 0 let width = HudDefaultSettings.PlayerIconWidth let height = HudDefaultSettings.PlayerIconHeight select new HudPositionInfo { Seat = seat, Position = new Point(x, y + uiExtraShiftY), Width = width, Height = height }).ToList(), Positions = (from hudPositionsInfo in layout.HudPositionsInfo select new HudPositionsInfo { GameType = hudPositionsInfo.GameType, PokerSite = hudPositionsInfo.PokerSite, HudPositions = (from hudPosition in hudPositionsInfo.HudPositions let shiftX = IsRightOriented((int)layout.TableType, hudPosition.Seat) ? uiPlayerIconRightOrientedShiftX : uiPlayerIconShiftX let shiftY = uiPlayerIconShiftY let offset = GetOffset(hudPositionsInfo.PokerSite, hudPositionsInfo.GameType, layout.TableType, hudPosition.Seat) select new HudPositionInfo { Seat = hudPosition.Seat, Position = new Point(hudPosition.Position.X + offset.X + shiftX, hudPosition.Position.Y + offset.Y + shiftY) }).ToList() }).ToList() }; var hudLayoutGraphTool = new HudLayoutGraphTool { ParentId = hudLayoutPlayerIconTool.Id, Stats = new ReactiveList <StatInfo> { CreateStatInfo(Stat.NetWon) } }; // bumper stickers var hudLayoutBumperStickersTool = new HudLayoutBumperStickersTool { UIPositions = (from seat in Enumerable.Range(1, (int)layout.TableType) let uiPosition = layout.UiPositionsInfo.FirstOrDefault(x => x.Seat == seat) let shiftX = layout.HudViewType == HudViewType.Vertical_1 ? (IsRightOriented((int)layout.TableType, seat) ? uiPlainBoxVertical1RightOrientedShiftX : uiPlainBoxVertical1ShiftX) : 0 let shiftY = layout.HudViewType == HudViewType.Vertical_1 ? uiPlainBoxVerticalShiftY : uiPlainBoxShiftY + ui4StatBoxHorizontalShiftY let x = uiPosition != null ? uiPosition.Position.X + shiftX : 0 let y = (uiPosition != null ? uiPosition.Position.Y + shiftY : 0) + uiBumperStickerShiftY let width = HudDefaultSettings.BumperStickersWidth let height = HudDefaultSettings.BumperStickersHeight select new HudPositionInfo { Seat = seat, Position = new Point(x, y + uiExtraShiftY), Width = width, Height = height }).ToList(), Positions = (from hudPositionsInfo in layout.HudPositionsInfo select new HudPositionsInfo { GameType = hudPositionsInfo.GameType, PokerSite = hudPositionsInfo.PokerSite, HudPositions = (from hudPosition in hudPositionsInfo.HudPositions let shiftX = layout.HudViewType == HudViewType.Vertical_1 ? (IsRightOriented((int)layout.TableType, hudPosition.Seat) ? uiPlainBoxVertical1RightOrientedShiftX : uiPlainBoxVertical1ShiftX) : 0 let shiftY = layout.HudViewType == HudViewType.Vertical_1 ? uiPlainBoxVerticalShiftY : uiPlainBoxShiftY + ui4StatBoxHorizontalShiftY let offset = GetOffset(hudPositionsInfo.PokerSite, hudPositionsInfo.GameType, layout.TableType, hudPosition.Seat) select new HudPositionInfo { Seat = hudPosition.Seat, Position = new Point(hudPosition.Position.X + offset.X + shiftX, hudPosition.Position.Y + offset.Y + shiftY + uiBumperStickerShiftY) }).ToList() }).ToList() }; layoutInfoV2.LayoutTools = new List <HudLayoutTool> { hudLayout4StatBoxTool, hudLayoutPlainBoxTool, hudLayoutTiltMeterTool, hudLayoutPlayerIconTool, hudLayoutGraphTool, hudLayoutBumperStickersTool }; MigratePopups(layout, layoutInfoV2); }
private HudLayoutInfo GetHudLayoutInfo(List <HudSavedLayout> layouts, HudViewType hudViewType) { var masterLayout = layouts.FirstOrDefault(); if (masterLayout == null) { return(null); } var tableDescription = GetTableDescription(masterLayout.LayoutId); var sameDefault = defaultLayouts.FirstOrDefault( l => l.TableType == tableDescription.TableType && l.HudViewType == hudViewType); if (settingsService.GetSettings().GeneralSettings.HudViewMode != (int)hudViewType && hudViewType != HudViewType.Plain) { return(null); } var filteredLayouts = hudViewType == HudViewType.Plain ? layouts.Where( l => GetTableDescription(l.LayoutId).PokerSite != EnumPokerSites.Ignition && GetTableDescription(l.LayoutId).PokerSite != EnumPokerSites.Bodog) .ToList() : layouts.Where( l => GetTableDescription(l.LayoutId).PokerSite == EnumPokerSites.Ignition || GetTableDescription(l.LayoutId).PokerSite == EnumPokerSites.Bodog) .ToList(); if (filteredLayouts.Count == 0) { return(null); } var newLayout = new HudLayoutInfo(); newLayout.TableType = tableDescription.TableType; newLayout.HudBumperStickerTypes = masterLayout.HudBumperStickerTypes.Select(s => s.Clone()).ToList(); newLayout.HudPlayerTypes = masterLayout.HudPlayerTypes.Select(p => p.Clone()).ToList(); newLayout.HudStats = masterLayout.HudStats.Select(s => { var statInfoBreak = s as StatInfoBreak; if (statInfoBreak != null) { return(statInfoBreak.Clone()); } return(s.Clone()); }).ToList(); newLayout.IsDefault = false; newLayout.HudViewType = hudViewType; newLayout.UiPositionsInfo = sameDefault?.UiPositionsInfo.Select(p => p.Clone()).ToList(); newLayout.Name = masterLayout.Name; foreach (var hudSavedLayout in filteredLayouts) { var newPositionInfo = new HudPositionsInfo(); newPositionInfo.GameType = GetTableDescription(hudSavedLayout.LayoutId).GameType; newPositionInfo.PokerSite = GetTableDescription(hudSavedLayout.LayoutId).PokerSite; newPositionInfo.HudPositions = hudSavedLayout.HudPositions.Where( p => p.HudType == (hudViewType == HudViewType.Plain ? HudType.Plain : HudType.Default)) .Select( p => new HudPositionInfo { Position = new Point(p.Position.X, p.Position.Y), Seat = p.Seat }) .ToList(); if (newPositionInfo.HudPositions.Any()) { newLayout.HudPositionsInfo.Add(newPositionInfo); } } if (sameDefault != null) { foreach (var defaultPosInfo in sameDefault.HudPositionsInfo) { if ( newLayout.HudPositionsInfo.Any( p => p.GameType == defaultPosInfo.GameType && p.PokerSite == defaultPosInfo.PokerSite)) { continue; } newLayout.HudPositionsInfo.Add(defaultPosInfo.Clone()); } } if (HudObjectsComparer.AreEquals(newLayout, sameDefault)) { return(null); } if (HudObjectsComparer.AreEqualsExceptPositions(newLayout, sameDefault)) { sameDefault.HudPositionsInfo = newLayout.HudPositionsInfo.Select(p => p.Clone()).ToList(); return(sameDefault); } return(newLayout.HudPositionsInfo.Any() ? newLayout : null); }