コード例 #1
0
        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);
            }
コード例 #3
0
        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);
            }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        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);
        }