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 void DuplicateAdditionalLayouts(TableType[] tableTypes, HudLayoutInfoV2 sourceLayout, IHudLayoutsService hudLayoutsService) { LogProvider.Log.Info($"Duplicate layout for the following types: {string.Join(", ", tableTypes.Select(x => x.Name))}"); foreach (var tableType in tableTypes) { if (!Enum.IsDefined(typeof(EnumTableType), (byte)tableType.MaxPlayers)) { continue; } var duplicateTableType = (EnumTableType)tableType.MaxPlayers; var sourceTableTypeText = CommonResourceManager.Instance.GetEnumResource(sourceLayout.TableType); var duplicateTableTypeText = CommonResourceManager.Instance.GetEnumResource(duplicateTableType); var duplicateLayoutName = $"{sourceLayout.Name.Replace(sourceTableTypeText, string.Empty)} {duplicateTableTypeText}"; var duplicatedLayout = hudLayoutsService.DuplicateLayout(duplicateTableType, duplicateLayoutName, sourceLayout); if (duplicatedLayout != null) { LogProvider.Log.Info($"Duplicated {sourceLayout.Name}, {sourceTableTypeText} to {duplicatedLayout.Name}, {duplicateTableTypeText}"); continue; } LogProvider.Log.Info($"Failed to duplicate {sourceLayout.Name}, {sourceTableTypeText} to {duplicateLayoutName}, {duplicateTableTypeText}"); } }
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); }
/// <summary> /// Saves layout v2 to the specified file /// </summary> /// <param name="layoutFile"></param> /// <param name="layoutInfo"></param> private void SaveLayoutInfo(string layoutFile, HudLayoutInfoV2 layoutInfo) { using (var fs = File.Open(layoutFile, FileMode.Create)) { var xmlSerializer = new XmlSerializer(typeof(HudLayoutInfoV2)); xmlSerializer.Serialize(fs, layoutInfo); } }
private void SaveLayout(HudLayoutInfoV2 layout) { var fileName = ($"DH: {CommonResourceManager.Instance.GetEnumResource(layout.TableType)}.xml").RemoveInvalidFileNameChars(); using (var fs = File.Open(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.Read)) { var xmlSerializer = new XmlSerializer(typeof(HudLayoutInfoV2)); xmlSerializer.Serialize(fs, layout); } }
public override void Configure(object viewModelInfo) { if (!(viewModelInfo is HudUploadToStoreViewModelInfo hudUploadToStoreViewModelInfo)) { throw new ArgumentException(nameof(viewModelInfo)); } hudLayout = hudUploadToStoreViewModelInfo.Layout; InitializeModelAsync(() => Model.Load()); }
protected override void InitializeCommands() { var canSubmit = Observable.CombineLatest( this.WhenAny(x => x.HasErrors, x => x.IsValidating, (x1, x2) => !HasErrors && !IsValidating), images.Changed.Select(x => true).Merge(images.ItemChanged.Select(x => true)).Select(x => images.All(p => !p.HasErrors && !p.IsValidating)), (x1, x2) => x1 && x2); SubmitCommand = ReactiveCommand.Create(() => Upload(), canSubmit); CancelCommand = ReactiveCommand.Create(() => OnClosed()); ResetCommand = ReactiveCommand.Create(() => Reset()); var canAddImage = images.Changed.Select(x => images.Count <= MaxImages).StartWith(true); AddImageCommand = ReactiveCommand.Create(() => AddImage(), canAddImage); var canRemoveImage = images.ItemChanged.Select(x => images.Any(p => p.IsSelected)).StartWith(false); RemoveImageCommand = ReactiveCommand.Create(() => RemoveImage(), canRemoveImage); BackCommand = ReactiveCommand.Create(() => { Message = string.Empty; IsRetryButtonVisible = false; IsSubmitButtonVisible = true; }); var canSelect = this.WhenAny(x => x.CurrentLayout, x => x.Value != null); SelectLayoutCommand = ReactiveCommand.Create(() => { hudLayout = CurrentLayout; IsSelectLayoutButtonVisible = false; IsSubmitButtonVisible = true; IsResetButtonVisible = true; SelectDefaultTableType(); Name = hudLayout.Name; ApplyRules(); this.RaisePropertyChanged(nameof(IsLayoutSelectionVisible)); this.RaisePropertyChanged(nameof(IsUploadFormVisible)); }, canSelect); }
private HudElementViewModel CreateHudElement(HudLayoutInfoV2 layout, EnumGameType enumGameType) { var hudElementCreator = new HudElementViewModelCreator(); var hudElementCreationInfo = new HudElementViewModelCreationInfo { GameType = enumGameType, HudLayoutInfo = layout, PokerSite = EnumPokerSites.Ignition, SeatNumber = 1 }; var hudElement = hudElementCreator.Create(hudElementCreationInfo); hudElement.PlayerName = "Player"; hudElement.PlayerId = 1; return(hudElement); }
protected override string InternalSave(HudLayoutInfoV2 hudLayoutInfo) { layouts.Add(hudLayoutInfo.Name, hudLayoutInfo); return(GetLayoutFileName(hudLayoutInfo.Name)); }
/// <summary> /// Creates <see cref="HudLayoutInfoV2"/> for tests, all tools must be included /// </summary> /// <returns><see cref="HudLayoutInfoV2"/></returns> private static HudLayoutInfoV2 CreateHudLayoutInfo() { var hudLayoutInfo = new HudLayoutInfoV2 { TableType = EnumTableType.HU, Name = "TestLayout", Filter = new HudLayoutFilter { DataFreshness = 30, TableTypes = new[] { (int)EnumTableType.HU, (int)EnumTableType.Six } }, TrackMeterPositions = new List <HudPositionsInfo> { new HudPositionsInfo { GameType = EnumGameType.MTTHoldem, PokerSite = EnumPokerSites.Bodog, HudPositions = new List <HudPositionInfo> { new HudPositionInfo { Position = new System.Windows.Point(1, 15) } } } } }; var plainBoxTool = new HudLayoutPlainBoxTool { Positions = new List <HudPositionsInfo> { new HudPositionsInfo { GameType = EnumGameType.CashHoldem, HudPositions = new List <HudPositionInfo> { new HudPositionInfo { Position = new System.Windows.Point(1, 1), Seat = 1, Width = 2 } }, PokerSite = EnumPokerSites.Bodog } }, Stats = new ReactiveList <StatInfo> { new StatInfo { Stat = Stat.VPIP } } }; var textboxTool = new HudLayoutTextBoxTool { Text = "Test" }; var fourStatBoxTool = new HudLayoutFourStatsBoxTool { Positions = new List <HudPositionsInfo> { new HudPositionsInfo { GameType = EnumGameType.CashHoldem, HudPositions = new List <HudPositionInfo> { new HudPositionInfo { Position = new System.Windows.Point(1, 1), Seat = 1, Width = 2 } }, PokerSite = EnumPokerSites.Bodog } }, Stats = new ReactiveList <StatInfo> { new StatInfo { Stat = Stat.VPIP } } }; var tiltMeterTool = new HudLayoutTiltMeterTool(); var playerIconTool = new HudLayoutPlayerIconTool(); var graphTool = new HudLayoutGraphTool(); var gaugeIndicatorTool = new HudLayoutGaugeIndicator(); var bumperStickers = new HudLayoutBumperStickersTool(); var heatMap = new HudLayoutHeatMapTool(); hudLayoutInfo.LayoutTools = new List <HudLayoutTool> { plainBoxTool, textboxTool, fourStatBoxTool, tiltMeterTool, playerIconTool, graphTool, gaugeIndicatorTool, bumperStickers, heatMap }; return(hudLayoutInfo); }
public void HudLayoutInfoV2CanBeSerializedDeserialized() { var hudLayoutExpected = CreateHudLayoutInfo(); string serialized = null; Assert.DoesNotThrow(() => { using (var sw = new StringWriter()) { var xmlSerializer = new XmlSerializer(typeof(HudLayoutInfoV2)); xmlSerializer.Serialize(sw, hudLayoutExpected); serialized = sw.ToString(); } }); Assert.IsNotNull(serialized); HudLayoutInfoV2 hudLayoutActual = null; Assert.DoesNotThrow(() => { using (var sr = new StringReader(serialized)) { var xmlSerializer = new XmlSerializer(typeof(HudLayoutInfoV2)); hudLayoutActual = xmlSerializer.Deserialize(sr) as HudLayoutInfoV2; } }); Assert.IsNotNull(hudLayoutActual); var actualTool = hudLayoutActual.LayoutTools.OfType <HudLayoutPlainBoxTool>().First(); var expectedTool = hudLayoutExpected.LayoutTools.OfType <HudLayoutPlainBoxTool>().First(); Assert.That(actualTool.Id, Is.EqualTo(expectedTool.Id)); var actualPositionInfo = actualTool.Positions.FirstOrDefault(); var expectedPositionInfo = expectedTool.Positions.FirstOrDefault(); Assert.IsNotNull(actualPositionInfo); Assert.IsNotNull(expectedPositionInfo); Assert.IsNotNull(actualPositionInfo.HudPositions); Assert.IsNotNull(expectedPositionInfo.HudPositions); Assert.That(actualPositionInfo.GameType, Is.EqualTo(expectedPositionInfo.GameType)); var actualPosition = actualPositionInfo.HudPositions.FirstOrDefault(); var expectedPosition = expectedPositionInfo.HudPositions.FirstOrDefault(); Assert.That(actualPosition.Position, Is.EqualTo(actualPosition.Position)); Assert.That(actualPosition.Width, Is.EqualTo(actualPosition.Width)); Assert.That(actualPosition.Seat, Is.EqualTo(actualPosition.Seat)); Assert.That(actualPosition.Height, Is.EqualTo(actualPosition.Height)); Assert.That(hudLayoutActual.Filter, Is.EqualTo(hudLayoutExpected.Filter)); Assert.That(hudLayoutActual.TrackMeterPositions.Count, Is.EqualTo(hudLayoutExpected.TrackMeterPositions.Count)); for (var i = 0; i < hudLayoutActual.TrackMeterPositions.Count; i++) { var actualTrackMeter = hudLayoutActual.TrackMeterPositions[i]; var expectedTrackMeter = hudLayoutExpected.TrackMeterPositions[i]; Assert.That(actualTrackMeter.GameType, Is.EqualTo(expectedTrackMeter.GameType)); Assert.That(actualTrackMeter.PokerSite, Is.EqualTo(expectedTrackMeter.PokerSite)); Assert.That(actualTrackMeter.HudPositions.Count, Is.EqualTo(expectedTrackMeter.HudPositions.Count)); } }
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 void LoadHUD(HudDragCanvas dgCanvas, ReplayerViewModel viewModel, HudLayoutInfoV2 activeLayout) { var seats = (int)CurrentCapacity; var hudPanelService = ServiceLocator.Current.GetInstance <IHudPanelService>(ReplayerPokerSite.ToString()); var nonToolLayoutStats = activeLayout .HudPlayerTypes .SelectMany(x => x.Stats) .Select(x => x.Stat) .Concat(activeLayout .HudBumperStickerTypes .SelectMany(x => x.Stats) .Select(x => x.Stat)) .Concat(new[] { Stat.TotalHands }) .Distinct() .ToArray(); var hudElements = new List <HudElementViewModel>(); var hudElementCreator = ServiceLocator.Current.GetInstance <IHudElementViewModelCreator>(); var hudElementCreationInfo = new HudElementViewModelCreationInfo { GameType = EnumGameType.CashHoldem, HudLayoutInfo = activeLayout, PokerSite = ReplayerPokerSite }; for (var i = 0; i < seats; i++) { var replayerPlayer = viewModel.PlayersCollection[i]; hudElementCreationInfo.SeatNumber = i + 1; if ((int)activeLayout.TableType < hudElementCreationInfo.SeatNumber) { continue; } var hudElement = hudElementCreator.Create(hudElementCreationInfo); if (string.IsNullOrEmpty(replayerPlayer.Name)) { if (hudElement != null) { EmptySeats.Add(hudElement); } continue; } var player = dataService.GetPlayer(replayerPlayer.Name, viewModel.CurrentHand.PokersiteId); if (player == null) { if (hudElement != null) { EmptySeats.Add(hudElement); } continue; } if (hudElement == null || !playerIndicators.TryGetValue(replayerPlayer.Name, out HudIndicators playerData)) { continue; } hudElement.PlayerId = player.PlayerId; hudElement.PlayerName = replayerPlayer.Name; hudElement.TotalHands = playerData.TotalHands; var playerNotes = dataService.GetPlayerNotes(player.PlayerId); hudElement.NoteToolTip = NoteBuilder.BuildNote(playerNotes); hudElement.IsXRayNoteVisible = playerNotes.Any(x => x.IsAutoNote); var graphTools = hudElement.Tools.OfType <HudGraphViewModel>().ToArray(); foreach (var graphTool in graphTools) { graphTool.StatSessionCollection = new ReactiveList <decimal>(); } var heatMapTools = hudElement.Tools.OfType <HudHeatMapViewModel>() .Concat(hudElement.Tools.OfType <HudGaugeIndicatorViewModel>() .SelectMany(x => x.GroupedStats) .SelectMany(x => x.Stats) .Where(x => x.HeatMapViewModel != null) .Select(x => x.HeatMapViewModel)) .ToArray(); heatMapTools.ForEach(x => { var heatMapKey = playerData.HeatMaps.Keys .ToArray() .FirstOrDefault(p => p.Stat == x.BaseStat.Stat); if (heatMapKey != null) { x.HeatMap = playerData.HeatMaps[heatMapKey]; } }); var gaugeIndicatorTools = hudElement.Tools.OfType <HudGaugeIndicatorViewModel>().ToArray(); hudElement.SessionMoneyWonCollection = new ObservableCollection <decimal>(); var activeLayoutHudStats = hudElement.ToolsStatInfoCollection .Concat(heatMapTools.Select(x => x.BaseStat)) .Concat(gaugeIndicatorTools.Select(x => x.BaseStat)) .ToList(); var extraStats = (from nonToolLayoutStat in nonToolLayoutStats join activateLayoutHudStat in activeLayoutHudStats on nonToolLayoutStat equals activateLayoutHudStat.Stat into grouped from extraStat in grouped.DefaultIfEmpty() where extraStat == null select new StatInfo { Stat = nonToolLayoutStat }).ToArray(); activeLayoutHudStats.AddRange(extraStats); StatsProvider.UpdateStats(activeLayoutHudStats); foreach (var statInfo in activeLayoutHudStats) { var propertyName = StatsProvider.GetStatProperyName(statInfo.Stat); if (!string.IsNullOrEmpty(propertyName)) { if (playerData.TotalHands < statInfo.MinSample) { statInfo.IsNotVisible = true; } statInfo.AssignStatInfoValues(playerData, propertyName); } else if (!(statInfo is StatInfoBreak) && statInfo.Stat != Stat.PlayerInfoIcon) { continue; } } hudElement.StatInfoCollection = activeLayoutHudStats; var isNoteIconSet = false; foreach (var toolViewModel in hudElement.Tools.Where(x => x is IHudNonPopupToolViewModel).ToArray()) { if (!isNoteIconSet && toolViewModel is HudPlainStatBoxViewModel && !(toolViewModel is HudFourStatsBoxViewModel)) { (toolViewModel as HudPlainStatBoxViewModel).IsNoteIconEnabled = true; isNoteIconSet = true; } var panel = hudPanelService.Create(toolViewModel); if (panel != null) { dgCanvas.Children.Add(panel); Canvas.SetLeft(panel, toolViewModel.Position.X); Canvas.SetTop(panel, toolViewModel.Position.Y); } } hudElements.Add(hudElement); } hudLayoutsService.SetPlayerTypeIcon(hudElements, activeLayout); }