Skip to content

Commit

Permalink
Added taken damage meter fragment
Browse files Browse the repository at this point in the history
  • Loading branch information
Triky313 committed Jul 25, 2024
1 parent 9dde2e1 commit 1a50fad
Show file tree
Hide file tree
Showing 6 changed files with 91 additions and 15 deletions.
26 changes: 19 additions & 7 deletions src/StatisticsAnalysisTool/DamageMeter/DamageMeterBindings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,19 @@ public DamageMeterBindings()
Name = TranslationSortByHps,
DamageMeterSortType = DamageMeterSortType.Hps
};
var takenDamageStruct = new DamageMeterSortStruct
{
Name = TranslationTakenDamage,
DamageMeterSortType = DamageMeterSortType.TakenDamage
};

DamageMeterSort.Clear();
DamageMeterSort.Add(sortByDamageStruct);
DamageMeterSort.Add(sortByDpsStruct);
DamageMeterSort.Add(sortByNameStruct);
DamageMeterSort.Add(sortByHealStruct);
DamageMeterSort.Add(sortByHpsStruct);
DamageMeterSort.Add(takenDamageStruct);
DamageMeterSortSelection = sortByDamageStruct;

DamageMeterSnapshotSort.Clear();
Expand All @@ -76,6 +82,7 @@ public DamageMeterBindings()
DamageMeterSnapshotSort.Add(sortByNameStruct);
DamageMeterSnapshotSort.Add(sortByHealStruct);
DamageMeterSnapshotSort.Add(sortByHpsStruct);
DamageMeterSnapshotSort.Add(takenDamageStruct);
DamageMeterSnapshotSortSelection = sortByDamageStruct;

IsSnapshotAfterMapChangeActive = SettingsController.CurrentSettings.IsSnapshotAfterMapChangeActive;
Expand Down Expand Up @@ -159,33 +166,37 @@ public void SetDamageMeterSort()
switch (DamageMeterSortSelection.DamageMeterSortType)
{
case DamageMeterSortType.Damage:
SetIsDamageMeterShowing(DamageMeter, true);
SetIsDamageMeterShowing(DamageMeter, DamageMeterStyleFragmentType.Damage);
DamageMeter.OrderByReference(DamageMeter.OrderByDescending(x => x.DamageInPercent).ToList());
return;
case DamageMeterSortType.Dps:
SetIsDamageMeterShowing(DamageMeter, true);
SetIsDamageMeterShowing(DamageMeter, DamageMeterStyleFragmentType.Damage);
DamageMeter.OrderByReference(DamageMeter.OrderByDescending(x => x.Dps).ToList());
return;
case DamageMeterSortType.Name:
SetIsDamageMeterShowing(DamageMeter, true);
SetIsDamageMeterShowing(DamageMeter, DamageMeterStyleFragmentType.Damage);
DamageMeter.OrderByReference(DamageMeter.OrderBy(x => x.Name).ToList());
return;
case DamageMeterSortType.Heal:
SetIsDamageMeterShowing(DamageMeter, false);
SetIsDamageMeterShowing(DamageMeter, DamageMeterStyleFragmentType.Heal);
DamageMeter.OrderByReference(DamageMeter.OrderByDescending(x => x.HealInPercent).ToList());
return;
case DamageMeterSortType.Hps:
SetIsDamageMeterShowing(DamageMeter, false);
SetIsDamageMeterShowing(DamageMeter, DamageMeterStyleFragmentType.Heal);
DamageMeter.OrderByReference(DamageMeter.OrderByDescending(x => x.Hps).ToList());
break;
case DamageMeterSortType.TakenDamage:
SetIsDamageMeterShowing(DamageMeter, DamageMeterStyleFragmentType.TakenDamage);
DamageMeter.OrderByReference(DamageMeter.OrderByDescending(x => x.TakenDamage).ToList());
return;
}
}

private static void SetIsDamageMeterShowing(IEnumerable<DamageMeterFragment> damageMeter, bool isDamageMeterShowing)
private static void SetIsDamageMeterShowing(IEnumerable<DamageMeterFragment> damageMeter, DamageMeterStyleFragmentType damageMeterStyleFragmentType)
{
foreach (var fragment in damageMeter)
{
fragment.IsDamageMeterShowing = isDamageMeterShowing;
fragment.DamageMeterStyleFragmentType = damageMeterStyleFragmentType;
}
}

Expand Down Expand Up @@ -394,6 +405,7 @@ private static void SetIsDamageMeterSnapshotShowing(IEnumerable<DamageMeterSnaps
public static string TranslationSortByName => LocalizationController.Translation("SORT_BY_NAME");
public static string TranslationSortByHeal => LocalizationController.Translation("SORT_BY_HEAL");
public static string TranslationSortByHps => LocalizationController.Translation("SORT_BY_HPS");
public static string TranslationTakenDamage => LocalizationController.Translation("TAKEN_DAMAGE");
public static string TranslationSnapshots => LocalizationController.Translation("SNAPSHOTS");
public static string TranslationDeleteSelectedSnapshot => LocalizationController.Translation("DELETE_SELECTED_SNAPSHOT");
public static string TranslationDeleteAllSnapshots => LocalizationController.Translation("DELETE_ALL_SNAPSHOTS");
Expand Down
14 changes: 14 additions & 0 deletions src/StatisticsAnalysisTool/DamageMeter/DamageMeterFragment.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public class DamageMeterFragment : BaseViewModel
private string _takenDamageShortString;
private double _takenDamageInPercent;
private double _takenDamagePercentage;
private DamageMeterStyleFragmentType _damageMeterStyleFragmentType;
private Visibility _spellsContainerVisibility = Visibility.Collapsed;
private ObservableCollection<UsedSpellFragment> _spells = new();

Expand All @@ -52,6 +53,9 @@ public DamageMeterFragment(DamageMeterFragment damageMeterFragment)
Name = damageMeterFragment.Name;
CauserMainHand = damageMeterFragment.CauserMainHand;
Spells = damageMeterFragment.Spells;
TakenDamage = damageMeterFragment.TakenDamage;
TakenDamageInPercent = damageMeterFragment.TakenDamageInPercent;
TakenDamagePercentage = damageMeterFragment.TakenDamagePercentage;
}

public DamageMeterFragment()
Expand Down Expand Up @@ -88,6 +92,16 @@ public bool IsDamageMeterShowing
}
}

public DamageMeterStyleFragmentType DamageMeterStyleFragmentType
{
get => _damageMeterStyleFragmentType;
set
{
_damageMeterStyleFragmentType = value;
OnPropertyChanged();
}
}

public TimeSpan CombatTime
{
get => _combatTime;
Expand Down
3 changes: 2 additions & 1 deletion src/StatisticsAnalysisTool/DamageMeter/DamageMeterSort.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ public enum DamageMeterSortType
Dps,
Name,
Heal,
Hps
Hps,
TakenDamage
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace StatisticsAnalysisTool.DamageMeter;

public enum DamageMeterStyleFragmentType
{
Damage,
Heal,
TakenDamage
}
52 changes: 45 additions & 7 deletions src/StatisticsAnalysisTool/Styles/DamageMeterStyles.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -122,13 +122,11 @@
<Grid MinHeight="42" Height="auto">
<Grid.Style>
<Style TargetType="{x:Type Grid}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsDamageMeterShowing}" Value="True">
<DataTrigger Binding="{Binding DamageMeterStyleFragmentType}" Value="{x:Static damageMeter:DamageMeterStyleFragmentType.Damage}">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsDamageMeterShowing}" Value="False">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
Expand Down Expand Up @@ -174,11 +172,51 @@
<Grid MinHeight="42" Height="auto">
<Grid.Style>
<Style TargetType="{x:Type Grid}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsDamageMeterShowing}" Value="True">
<Setter Property="Visibility" Value="Collapsed"/>
<DataTrigger Binding="{Binding DamageMeterStyleFragmentType}" Value="{x:Static damageMeter:DamageMeterStyleFragmentType.TakenDamage}">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsDamageMeterShowing}" Value="False">
</Style.Triggers>
</Style>
</Grid.Style>
<Grid.InputBindings>
<MouseBinding MouseAction="LeftClick" Command="{Binding ShowSpells}" />
</Grid.InputBindings>
<ProgressBar common:ProgressBarSmoother.SmoothValue="{Binding TakenDamageInPercent}" Minimum="0" Maximum="100"
MinHeight="40" Height="auto" Margin="3,0,2,1" VerticalAlignment="Top" Background="#00FFFFFF" BorderThickness="0"
Style="{StaticResource DamageMeter.ProgressBar.Colors}" />
<StackPanel Orientation="Horizontal">
<Grid Margin="10,0, 0, 0" HorizontalAlignment="Center" VerticalAlignment="Top">
<Image Source="{Binding CauserMainHand.Icon}" Style="{StaticResource DamageMeter.Icon}" />
</Grid>
<Label Foreground="{StaticResource SolidColorBrush.Weapon.Text}" Content="{Binding TakenDamagePercentage}"
ContentStringFormat="{}{0:N2}%" MinWidth="55" Margin="10,5" HorizontalContentAlignment="Right" VerticalAlignment="Top" />
<Label Content="{Binding Name}" MinWidth="125" MaxWidth="125" Margin="10,5, 0, 0" VerticalAlignment="Top" />
<Label Foreground="{StaticResource SolidColorBrush.Weapon.Text}" Content="{Binding TakenDamageShortString}"
MinWidth="100" MaxWidth="100" FontWeight="Bold" Margin="10,5, 5, 0" VerticalAlignment="Top" />
<Label Foreground="{StaticResource SolidColorBrush.Weapon.Text}" Content="" MinWidth="75" MaxWidth="75"
FontWeight="Bold" Margin="10,5, 50, 0" VerticalAlignment="Top" />
<Grid Width="16" Height="16" Margin="0,10" VerticalAlignment="Top" ToolTip="{Binding TranslationCombatTime, FallbackValue='COMBAT_TIME'}">
<fa5:ImageAwesome Icon="Regular_Clock" Foreground="{StaticResource SolidColorBrush.Text.1}" />
</Grid>
<TextBlock Foreground="{StaticResource SolidColorBrush.Weapon.Text}" VerticalAlignment="Top" MinWidth="75" MaxWidth="100" FontWeight="Bold" Margin="10,10,50,0">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0:00}:{1:00}:{2:00}">
<Binding Path="CombatTime.Hours" />
<Binding Path="CombatTime.Minutes" />
<Binding Path="CombatTime.Seconds" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</Grid>
<Grid MinHeight="42" Height="auto">
<Grid.Style>
<Style TargetType="{x:Type Grid}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding DamageMeterStyleFragmentType}" Value="{x:Static damageMeter:DamageMeterStyleFragmentType.Heal}">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,9 @@ public void CopyDamageMeterToClipboard(bool isSnapshot = false)
case DamageMeterSortType.Hps:
Clipboard.SetDataObject(vm.DamageMeterBindings?.DamageMeter?.Aggregate(output, (current, entity) => current + $"{counter++}. {entity.Name}: {entity.Hps:N2} HPS\n") ?? string.Empty);
break;
case DamageMeterSortType.TakenDamage:
Clipboard.SetDataObject(vm.DamageMeterBindings?.DamageMeter?.Aggregate(output, (current, entity) => current + $"{counter++}. {entity.Name}: {entity.TakenDamage}({entity.TakenDamagePercentage:N2}%)\n") ?? string.Empty);
break;
case null:
break;
}
Expand Down

0 comments on commit 1a50fad

Please sign in to comment.