Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ public SquadCompositionFilterPanel(ImageProvider imageProvider, LogFilters filte
var specializationFilterGroups = new[] {
filterSnapshot.HeartOfThornsSpecializationFilters,
filterSnapshot.PathOfFireSpecializationFilters,
filterSnapshot.EndOfDragonsSpecializationFilters
filterSnapshot.EndOfDragonsSpecializationFilters,
filterSnapshot.VisionsOfEternitySpecializationFilters
};
foreach (var specializationFilters in specializationFilterGroups)
{
Expand Down
9 changes: 9 additions & 0 deletions ArcdpsLogManager/GameData/GameNames.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,15 @@ public static string GetName(EliteSpecialization specialization)
EliteSpecialization.Virtuoso => "Virtuoso",
EliteSpecialization.Harbinger => "Harbinger",
EliteSpecialization.Vindicator => "Vindicator",
EliteSpecialization.Antiquary => "Antiquary",
EliteSpecialization.Amalgam => "Amalgam",
EliteSpecialization.Conduit => "Conduit",
EliteSpecialization.Luminary => "Luminary",
EliteSpecialization.Paragon => "Paragon",
EliteSpecialization.Evoker => "Evoker",
EliteSpecialization.Ritualist => "Ritualist",
EliteSpecialization.Troubadour => "Troubadour",
EliteSpecialization.Galeshot => "Galeshot",
_ => throw new ArgumentOutOfRangeException(nameof(specialization), specialization, null)
};
}
Expand Down
20 changes: 10 additions & 10 deletions ArcdpsLogManager/GameData/ProfessionData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@ namespace GW2Scratch.ArcdpsLogManager.GameData
{
public static class ProfessionData
{
public static IReadOnlyList<(Profession Profession, EliteSpecialization HoT, EliteSpecialization PoF, EliteSpecialization EoD)>
public static IReadOnlyList<(Profession Profession, EliteSpecialization HoT, EliteSpecialization PoF, EliteSpecialization EoD, EliteSpecialization VoE)>
Professions { get; } = new[]
{
(Profession.Warrior, EliteSpecialization.Berserker, EliteSpecialization.Spellbreaker, EliteSpecialization.Bladesworn),
(Profession.Guardian, EliteSpecialization.Dragonhunter, EliteSpecialization.Firebrand, EliteSpecialization.Willbender),
(Profession.Revenant, EliteSpecialization.Herald, EliteSpecialization.Renegade, EliteSpecialization.Vindicator),
(Profession.Ranger, EliteSpecialization.Druid, EliteSpecialization.Soulbeast, EliteSpecialization.Untamed),
(Profession.Thief, EliteSpecialization.Daredevil, EliteSpecialization.Deadeye, EliteSpecialization.Specter),
(Profession.Engineer, EliteSpecialization.Scrapper, EliteSpecialization.Holosmith, EliteSpecialization.Mechanist),
(Profession.Necromancer, EliteSpecialization.Reaper, EliteSpecialization.Scourge, EliteSpecialization.Harbinger),
(Profession.Elementalist, EliteSpecialization.Tempest, EliteSpecialization.Weaver, EliteSpecialization.Catalyst),
(Profession.Mesmer, EliteSpecialization.Chronomancer, EliteSpecialization.Mirage, EliteSpecialization.Virtuoso),
(Profession.Warrior, EliteSpecialization.Berserker, EliteSpecialization.Spellbreaker, EliteSpecialization.Bladesworn, EliteSpecialization.Paragon),
(Profession.Guardian, EliteSpecialization.Dragonhunter, EliteSpecialization.Firebrand, EliteSpecialization.Willbender, EliteSpecialization.Luminary),
(Profession.Revenant, EliteSpecialization.Herald, EliteSpecialization.Renegade, EliteSpecialization.Vindicator, EliteSpecialization.Conduit),
(Profession.Ranger, EliteSpecialization.Druid, EliteSpecialization.Soulbeast, EliteSpecialization.Untamed, EliteSpecialization.Galeshot),
(Profession.Thief, EliteSpecialization.Daredevil, EliteSpecialization.Deadeye, EliteSpecialization.Specter, EliteSpecialization.Antiquary),
(Profession.Engineer, EliteSpecialization.Scrapper, EliteSpecialization.Holosmith, EliteSpecialization.Mechanist, EliteSpecialization.Amalgam),
(Profession.Necromancer, EliteSpecialization.Reaper, EliteSpecialization.Scourge, EliteSpecialization.Harbinger, EliteSpecialization.Ritualist),
(Profession.Elementalist, EliteSpecialization.Tempest, EliteSpecialization.Weaver, EliteSpecialization.Catalyst, EliteSpecialization.Evoker),
(Profession.Mesmer, EliteSpecialization.Chronomancer, EliteSpecialization.Mirage, EliteSpecialization.Virtuoso, EliteSpecialization.Troubadour),
};
}
}
40 changes: 38 additions & 2 deletions ArcdpsLogManager/ImageProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,33 +24,51 @@ public class ImageProvider
private Lazy<Image> TinyIconUnknownProfession { get; } = new Lazy<Image>(Resources.GetTinyIconUnknown);

// SPECIALIZATIONS
// Warrior
private Lazy<Image> TinyIconBerserker { get; } = new Lazy<Image>(Resources.GetTinyIconBerserker);
private Lazy<Image> TinyIconSpellbreaker { get; } = new Lazy<Image>(Resources.GetTinyIconSpellbreaker);
private Lazy<Image> TinyIconBladesworn { get; } = new Lazy<Image>(Resources.GetTinyIconBladesworn);
private Lazy<Image> TinyIconParagon { get; } = new Lazy<Image>(Resources.GetTinyIconParagon);
// Guardian
private Lazy<Image> TinyIconDragonhunter { get; } = new Lazy<Image>(Resources.GetTinyIconDragonhunter);
private Lazy<Image> TinyIconWillbender { get; } = new Lazy<Image>(Resources.GetTinyIconWillbender);
private Lazy<Image> TinyIconFirebrand { get; } = new Lazy<Image>(Resources.GetTinyIconFirebrand);
private Lazy<Image> TinyIconLuminary { get; } = new Lazy<Image>(Resources.GetTinyIconLuminary);
// Revenant
private Lazy<Image> TinyIconHerald { get; } = new Lazy<Image>(Resources.GetTinyIconHerald);
private Lazy<Image> TinyIconRenegade { get; } = new Lazy<Image>(Resources.GetTinyIconRenegade);
private Lazy<Image> TinyIconVindicator { get; } = new Lazy<Image>(Resources.GetTinyIconVindicator);
private Lazy<Image> TinyIconConduit { get; } = new Lazy<Image>(Resources.GetTinyIconConduit);
// Ranger
private Lazy<Image> TinyIconDruid { get; } = new Lazy<Image>(Resources.GetTinyIconDruid);
private Lazy<Image> TinyIconSoulbeast { get; } = new Lazy<Image>(Resources.GetTinyIconSoulbeast);
private Lazy<Image> TinyIconUntamed { get; } = new Lazy<Image>(Resources.GetTinyIconUntamed);
private Lazy<Image> TinyIconGaleshot { get; } = new Lazy<Image>(Resources.GetTinyIconGaleshot);
// Thief
private Lazy<Image> TinyIconDaredevil { get; } = new Lazy<Image>(Resources.GetTinyIconDaredevil);
private Lazy<Image> TinyIconDeadeye { get; } = new Lazy<Image>(Resources.GetTinyIconDeadeye);
private Lazy<Image> TinyIconSpecter { get; } = new Lazy<Image>(Resources.GetTinyIconSpecter);
private Lazy<Image> TinyIconAntiquary { get; } = new Lazy<Image>(Resources.GetTinyIconAntiquary);
// Engineer
private Lazy<Image> TinyIconScrapper { get; } = new Lazy<Image>(Resources.GetTinyIconScrapper);
private Lazy<Image> TinyIconHolosmith { get; } = new Lazy<Image>(Resources.GetTinyIconHolosmith);
private Lazy<Image> TinyIconMechanist { get; } = new Lazy<Image>(Resources.GetTinyIconMechanist);
private Lazy<Image> TinyIconAmalgam { get; } = new Lazy<Image>(Resources.GetTinyIconAmalgam);
// Necromancer
private Lazy<Image> TinyIconReaper { get; } = new Lazy<Image>(Resources.GetTinyIconReaper);
private Lazy<Image> TinyIconScourge { get; } = new Lazy<Image>(Resources.GetTinyIconScourge);
private Lazy<Image> TinyIconHarbinger { get; } = new Lazy<Image>(Resources.GetTinyIconHarbinger);
private Lazy<Image> TinyIconRitualist { get; } = new Lazy<Image>(Resources.GetTinyIconRitualist);
// Elementalist
private Lazy<Image> TinyIconTempest { get; } = new Lazy<Image>(Resources.GetTinyIconTempest);
private Lazy<Image> TinyIconWeaver { get; } = new Lazy<Image>(Resources.GetTinyIconWeaver);
private Lazy<Image> TinyIconCatalyst { get; } = new Lazy<Image>(Resources.GetTinyIconCatalyst);
private Lazy<Image> TinyIconEvoker { get; } = new Lazy<Image>(Resources.GetTinyIconEvoker);
// Mesmer
private Lazy<Image> TinyIconChronomancer { get; } = new Lazy<Image>(Resources.GetTinyIconChronomancer);
private Lazy<Image> TinyIconMirage { get; } = new Lazy<Image>(Resources.GetTinyIconMirage);
private Lazy<Image> TinyIconVirtuoso { get; } = new Lazy<Image>(Resources.GetTinyIconVirtuoso);
private Lazy<Image> TinyIconTroubadour { get; } = new Lazy<Image>(Resources.GetTinyIconTroubadour);

// CATEGORIES
private Lazy<Image> TinyIconRaid { get; } = new Lazy<Image>(Resources.GetTinyIconRaid);
Expand Down Expand Up @@ -266,33 +284,51 @@ public Image GetTinyProfessionIcon(EliteSpecialization specialization)
{
return specialization switch
{
// Warrior
EliteSpecialization.Berserker => TinyIconBerserker.Value,
EliteSpecialization.Spellbreaker => TinyIconSpellbreaker.Value,
EliteSpecialization.Bladesworn => TinyIconBladesworn.Value,
EliteSpecialization.Paragon => TinyIconParagon.Value,
// Guardian
EliteSpecialization.Dragonhunter => TinyIconDragonhunter.Value,
EliteSpecialization.Firebrand => TinyIconFirebrand.Value,
EliteSpecialization.Willbender => TinyIconWillbender.Value,
EliteSpecialization.Luminary => TinyIconLuminary.Value,
// Revenant
EliteSpecialization.Herald => TinyIconHerald.Value,
EliteSpecialization.Renegade => TinyIconRenegade.Value,
EliteSpecialization.Vindicator => TinyIconVindicator.Value,
EliteSpecialization.Conduit => TinyIconConduit.Value,
// Ranger
EliteSpecialization.Druid => TinyIconDruid.Value,
EliteSpecialization.Soulbeast => TinyIconSoulbeast.Value,
EliteSpecialization.Untamed => TinyIconUntamed.Value,
EliteSpecialization.Galeshot => TinyIconGaleshot.Value,
// Thief
EliteSpecialization.Daredevil => TinyIconDaredevil.Value,
EliteSpecialization.Deadeye => TinyIconDeadeye.Value,
EliteSpecialization.Specter => TinyIconSpecter.Value,
EliteSpecialization.Antiquary => TinyIconAntiquary.Value,
// Engineer
EliteSpecialization.Scrapper => TinyIconScrapper.Value,
EliteSpecialization.Holosmith => TinyIconHolosmith.Value,
EliteSpecialization.Mechanist => TinyIconMechanist.Value,
EliteSpecialization.Amalgam => TinyIconAmalgam.Value,
// Necromancer
EliteSpecialization.Reaper => TinyIconReaper.Value,
EliteSpecialization.Scourge => TinyIconScourge.Value,
EliteSpecialization.Harbinger => TinyIconHarbinger.Value,
EliteSpecialization.Ritualist => TinyIconRitualist.Value,
// Elementalist
EliteSpecialization.Tempest => TinyIconTempest.Value,
EliteSpecialization.Weaver => TinyIconWeaver.Value,
EliteSpecialization.Catalyst => TinyIconCatalyst.Value,
EliteSpecialization.Evoker => TinyIconEvoker.Value,
// Mesmr
EliteSpecialization.Chronomancer => TinyIconChronomancer.Value,
EliteSpecialization.Mirage => TinyIconMirage.Value,
EliteSpecialization.Virtuoso => TinyIconVirtuoso.Value,
EliteSpecialization.Specter => TinyIconSpecter.Value,
EliteSpecialization.Catalyst => TinyIconCatalyst.Value,
EliteSpecialization.Troubadour => TinyIconTroubadour.Value,
_ => throw new ArgumentOutOfRangeException(nameof(specialization)),
};
}
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
31 changes: 25 additions & 6 deletions ArcdpsLogManager/Logs/Filters/CompositionFilters.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public class CompositionFilters : ILogFilter, INotifyPropertyChanged, IDefaultab
public IReadOnlyList<EliteSpecializationPlayerCountFilter> HeartOfThornsSpecializationFilters { get; }
public IReadOnlyList<EliteSpecializationPlayerCountFilter> PathOfFireSpecializationFilters { get; }
public IReadOnlyList<EliteSpecializationPlayerCountFilter> EndOfDragonsSpecializationFilters { get; }
public IReadOnlyList<EliteSpecializationPlayerCountFilter> VisionsOfEternitySpecializationFilters { get; }

public CompositionFilters() : this(
ProfessionData.Professions.Select(x => x.Profession)
Expand All @@ -23,6 +24,8 @@ public CompositionFilters() : this(
ProfessionData.Professions.Select(x => x.PoF)
.Select(specialization => new EliteSpecializationPlayerCountFilter(specialization)),
ProfessionData.Professions.Select(x => x.EoD)
.Select(specialization => new EliteSpecializationPlayerCountFilter(specialization)),
ProfessionData.Professions.Select(x => x.VoE)
.Select(specialization => new EliteSpecializationPlayerCountFilter(specialization))
)
{
Expand All @@ -31,13 +34,15 @@ public CompositionFilters() : this(
private CompositionFilters(IEnumerable<CoreProfessionPlayerCountFilter> coreFilters,
IEnumerable<EliteSpecializationPlayerCountFilter> hotFilters,
IEnumerable<EliteSpecializationPlayerCountFilter> pofFilters,
IEnumerable<EliteSpecializationPlayerCountFilter> eodFilters
IEnumerable<EliteSpecializationPlayerCountFilter> eodFilters,
IEnumerable<EliteSpecializationPlayerCountFilter> voeFilters
)
{
CoreProfessionFilters = coreFilters.ToList();
HeartOfThornsSpecializationFilters = hotFilters.ToList();
PathOfFireSpecializationFilters = pofFilters.ToList();
EndOfDragonsSpecializationFilters = eodFilters.ToList();
VisionsOfEternitySpecializationFilters = voeFilters.ToList();

foreach (var filter in CoreProfessionFilters)
{
Expand All @@ -58,14 +63,20 @@ IEnumerable<EliteSpecializationPlayerCountFilter> eodFilters
{
filter.PropertyChanged += (_, _) => OnPropertyChanged(nameof(EndOfDragonsSpecializationFilters));
}

foreach (var filter in VisionsOfEternitySpecializationFilters)
{
filter.PropertyChanged += (_, _) => OnPropertyChanged(nameof(VisionsOfEternitySpecializationFilters));
}
}

public bool FilterLog(LogData log)
{
return CoreProfessionFilters.All(filter => filter.FilterLog(log)) &&
HeartOfThornsSpecializationFilters.All(filter => filter.FilterLog(log)) &&
PathOfFireSpecializationFilters.All(filter => filter.FilterLog(log)) &&
EndOfDragonsSpecializationFilters.All(filter => filter.FilterLog(log));
HeartOfThornsSpecializationFilters.All(filter => filter.FilterLog(log)) &&
PathOfFireSpecializationFilters.All(filter => filter.FilterLog(log)) &&
EndOfDragonsSpecializationFilters.All(filter => filter.FilterLog(log)) &&
VisionsOfEternitySpecializationFilters.All(filter => filter.FilterLog(log));
}

public event PropertyChangedEventHandler PropertyChanged;
Expand All @@ -81,7 +92,8 @@ public CompositionFilters DeepClone()
CoreProfessionFilters.Select(x => x.DeepClone()),
HeartOfThornsSpecializationFilters.Select(x => x.DeepClone()),
PathOfFireSpecializationFilters.Select(x => x.DeepClone()),
EndOfDragonsSpecializationFilters.Select(x => x.DeepClone())
EndOfDragonsSpecializationFilters.Select(x => x.DeepClone()),
VisionsOfEternitySpecializationFilters.Select(x => x.DeepClone())
);
}

Expand All @@ -90,7 +102,8 @@ protected bool Equals(CompositionFilters other)
return CoreProfessionFilters.SequenceEqual(other.CoreProfessionFilters)
&& HeartOfThornsSpecializationFilters.SequenceEqual(other.HeartOfThornsSpecializationFilters)
&& PathOfFireSpecializationFilters.SequenceEqual(other.PathOfFireSpecializationFilters)
&& EndOfDragonsSpecializationFilters.SequenceEqual(other.EndOfDragonsSpecializationFilters);
&& EndOfDragonsSpecializationFilters.SequenceEqual(other.EndOfDragonsSpecializationFilters)
&& VisionsOfEternitySpecializationFilters.SequenceEqual(other.VisionsOfEternitySpecializationFilters);
}

public override bool Equals(object obj)
Expand Down Expand Up @@ -124,6 +137,11 @@ public override int GetHashCode()
code.Add(filter.GetHashCode());
}

foreach (var filter in VisionsOfEternitySpecializationFilters)
{
code.Add(filter.GetHashCode());
}

return code.ToHashCode();
}

Expand All @@ -137,6 +155,7 @@ public void ResetToDefault()
HeartOfThornsSpecializationFilters,
PathOfFireSpecializationFilters,
EndOfDragonsSpecializationFilters,
VisionsOfEternitySpecializationFilters,
};

foreach (var group in filterGroups)
Expand Down
18 changes: 18 additions & 0 deletions ArcdpsLogManager/Resources.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,33 +38,51 @@ public static Icon GetProgramIcon()
public static Image GetTinyIconMesmer() => GetImage("Tango.Mesmer_tango_icon_20px.png");

// SPECIALIZATIONS
// Warrior
public static Image GetTinyIconBerserker() => GetImage("Tango.Berserker_tango_icon_20px.png");
public static Image GetTinyIconSpellbreaker() => GetImage("Tango.Spellbreaker_tango_icon_20px.png");
public static Image GetTinyIconBladesworn() => GetImage("Tango.Bladesworn_tango_icon_20px.png");
public static Image GetTinyIconParagon() => GetImage("Tango.Paragon_tango_icon_20px.png");
// Guardian
public static Image GetTinyIconDragonhunter() => GetImage("Tango.Dragonhunter_tango_icon_20px.png");
public static Image GetTinyIconFirebrand() => GetImage("Tango.Firebrand_tango_icon_20px.png");
public static Image GetTinyIconWillbender() => GetImage("Tango.Willbender_tango_icon_20px.png");
public static Image GetTinyIconLuminary() => GetImage("Tango.Luminary_tango_icon_20px.png");
// Revenant
public static Image GetTinyIconHerald() => GetImage("Tango.Herald_tango_icon_20px.png");
public static Image GetTinyIconRenegade() => GetImage("Tango.Renegade_tango_icon_20px.png");
public static Image GetTinyIconVindicator() => GetImage("Tango.Vindicator_tango_icon_20px.png");
public static Image GetTinyIconConduit() => GetImage("Tango.Conduit_tango_icon_20px.png");
// Ranger
public static Image GetTinyIconDruid() => GetImage("Tango.Druid_tango_icon_20px.png");
public static Image GetTinyIconSoulbeast() => GetImage("Tango.Soulbeast_tango_icon_20px.png");
public static Image GetTinyIconUntamed() => GetImage("Tango.Untamed_tango_icon_20px.png");
public static Image GetTinyIconGaleshot() => GetImage("Tango.Galeshot_tango_icon_20px.png");
// Thief
public static Image GetTinyIconDaredevil() => GetImage("Tango.Daredevil_tango_icon_20px.png");
public static Image GetTinyIconDeadeye() => GetImage("Tango.Deadeye_tango_icon_20px.png");
public static Image GetTinyIconSpecter() => GetImage("Tango.Specter_tango_icon_20px.png");
public static Image GetTinyIconAntiquary() => GetImage("Tango.Antiquary_tango_icon_20px.png");
// Engineer
public static Image GetTinyIconScrapper() => GetImage("Tango.Scrapper_tango_icon_20px.png");
public static Image GetTinyIconHolosmith() => GetImage("Tango.Holosmith_tango_icon_20px.png");
public static Image GetTinyIconMechanist() => GetImage("Tango.Mechanist_tango_icon_20px.png");
public static Image GetTinyIconAmalgam() => GetImage("Tango.Amalgam_tango_icon_20px.png");
// Necromancer
public static Image GetTinyIconReaper() => GetImage("Tango.Reaper_tango_icon_20px.png");
public static Image GetTinyIconScourge() => GetImage("Tango.Scourge_tango_icon_20px.png");
public static Image GetTinyIconHarbinger() => GetImage("Tango.Harbinger_tango_icon_20px.png");
public static Image GetTinyIconRitualist() => GetImage("Tango.Ritualist_tango_icon_20px.png");
// Elementalist
public static Image GetTinyIconTempest() => GetImage("Tango.Tempest_tango_icon_20px.png");
public static Image GetTinyIconWeaver() => GetImage("Tango.Weaver_tango_icon_20px.png");
public static Image GetTinyIconCatalyst() => GetImage("Tango.Catalyst_tango_icon_20px.png");
public static Image GetTinyIconEvoker() => GetImage("Tango.Evoker_tango_icon_20px.png");
// Mesmer
public static Image GetTinyIconChronomancer() => GetImage("Tango.Chronomancer_tango_icon_20px.png");
public static Image GetTinyIconMirage() => GetImage("Tango.Mirage_tango_icon_20px.png");
public static Image GetTinyIconVirtuoso() => GetImage("Tango.Virtuoso_tango_icon_20px.png");
public static Image GetTinyIconTroubadour() => GetImage("Tango.Troubadour_tango_icon_20px.png");

// CATEGORIES
public static Image GetTinyIconRaid() => GetImage("ArenaNet.raid_icon_32px.png");
Expand Down
Loading
Loading