public PlayerStatsControl(PlayerInfo playerInfo) { PlayerData = new PlayerData(playerInfo); DoubleBuffered = true; HighlightColor = Color.DodgerBlue; BackColor = Color.DimGray; ForeColor = Color.White; }
public SkillBreakdownViewModel(PlayerInfo playerInfo) { ComboBoxEntities = new ThreadSafeObservableCollection<ComboBoxEntity> { new ComboBoxEntity(SkillViewType.FlatView, "Flat View"), new ComboBoxEntity(SkillViewType.AggregatedSkillIdView, "Aggregate by Id"), new ComboBoxEntity(SkillViewType.AggregatedSkillNameView, "Aggregate by Name") }; //NOTE: These are duplicated in the xaml because of a wpf bug SortDescriptionMappings = new Dictionary<SkillViewType, IList<SortDescription>> { { SkillViewType.FlatView, new List<SortDescription> { new SortDescription(nameof(SkillResult.Time), ListSortDirection.Ascending) } }, { SkillViewType.AggregatedSkillIdView, new List<SortDescription> { new SortDescription(nameof(AggregatedSkillResult.Amount), ListSortDirection.Descending) } }, { SkillViewType.AggregatedSkillNameView, new List<SortDescription> { new SortDescription(nameof(AggregatedSkillResult.Amount), ListSortDirection.Descending) } } }; //set the intial view var initialView = SkillViewType.AggregatedSkillNameView; SortDescriptionSource = SortDescriptionMappings[initialView]; SelectedCollectionView = ComboBoxEntities.First(cbe => cbe.Key == initialView); PlayerInfo = playerInfo; SkillLog = PlayerInfo.SkillLog; //subscribe to future changes and invoke manually SkillLog.CollectionChanged += (sender, args) => { PopulateAggregatedSkillLogs(); CasualMessenger.Instance.Messenger.Send(new ScrollPlayerStatsMessage(), this); }; PopulateAggregatedSkillLogs(); }
public static PlaceHolder FromPlayerInfo(PlayerInfo playerInfo, FormatHelpers formatHelpers) { var placeHolders = new List<KeyValuePair<string, object>>(); placeHolders.Add(new KeyValuePair<string, object>("Name", playerInfo.Name)); placeHolders.Add(new KeyValuePair<string, object>("Class", playerInfo.Class)); placeHolders.Add(new KeyValuePair<string, object>("Crits", playerInfo.Dealt.Crits)); placeHolders.Add(new KeyValuePair<string, object>("Hits", playerInfo.Dealt.Hits)); placeHolders.Add(new KeyValuePair<string, object>("DamagePercent", formatHelpers.FormatPercent(playerInfo.DamageFraction) ?? "-")); placeHolders.Add(new KeyValuePair<string, object>("CritPercent", formatHelpers.FormatPercent((double)playerInfo.Dealt.Crits / playerInfo.Dealt.Hits) ?? "-")); placeHolders.Add(new KeyValuePair<string, object>("Damage", formatHelpers.FormatValue(playerInfo.Dealt.Damage))); placeHolders.Add(new KeyValuePair<string, object>("DamageReceived", formatHelpers.FormatValue(playerInfo.Received.Damage))); placeHolders.Add(new KeyValuePair<string, object>("DPS", formatHelpers.FormatValue(playerInfo.Dps))); return new PlaceHolder(placeHolders, formatHelpers.CultureInfo); }
public PlayerStatsFormatter(PlayerInfo playerInfo, FormatHelpers formatHelpers) { var placeHolders = new List<KeyValuePair<string, object>>(); placeHolders.Add(new KeyValuePair<string, object>("Name", playerInfo.Name)); placeHolders.Add(new KeyValuePair<string, object>("Class", playerInfo.Class)); placeHolders.Add(new KeyValuePair<string, object>("Crits", playerInfo.Dealt.Crits)); placeHolders.Add(new KeyValuePair<string, object>("Hits", playerInfo.Dealt.Hits)); placeHolders.Add(new KeyValuePair<string, object>("DamagePercent", formatHelpers.FormatPercent(playerInfo.DamageFraction) ?? "NaN")); placeHolders.Add(new KeyValuePair<string, object>("CritPercent", formatHelpers.FormatPercent((double)playerInfo.Dealt.Crits / playerInfo.Dealt.Hits) ?? "NaN")); placeHolders.Add(new KeyValuePair<string, object>("Damage", formatHelpers.FormatValue(playerInfo.Dealt.Damage))); placeHolders.Add(new KeyValuePair<string, object>("DamageReceived", formatHelpers.FormatValue(playerInfo.Received.Damage))); placeHolders.Add(new KeyValuePair<string, object>("DPS", $"{formatHelpers.FormatValue(playerInfo.Dps)}/s")); Placeholders = placeHolders.ToDictionary(x => x.Key, y => y.Value); FormatProvider = formatHelpers.CultureInfo; }
public PlayerData(PlayerInfo playerInfo) { PlayerInfo = playerInfo; }
private PlayerInfo GetOrCreate(Player player) { PlayerInfo playerStats = StatsByUser.FirstOrDefault(pi => pi.Player.Equals(player)); if (playerStats == null) { playerStats = new PlayerInfo(player, this); StatsByUser.Add(playerStats); } return playerStats; }
private PlayerInfo GetOrCreate(SkillResult skillResult) { var player = skillResult.SourcePlayer; PlayerInfo playerStats = StatsByUser.FirstOrDefault(pi => pi.Player.Equals(player)); if (playerStats == null && (IsFromHealer(skillResult) ||//either healer (!IsFromHealer(skillResult) && IsValidAttack(skillResult))))//or damage from non-healer { playerStats = new PlayerInfo(player, this); StatsByUser.Add(playerStats); } return playerStats; }
public SkillStats(PlayerInfo playerInfo) { _playerInfo = playerInfo; }