diff --git a/ArcdpsLogManager/ImageProvider.cs b/ArcdpsLogManager/ImageProvider.cs index bba661eb..c92f8631 100644 --- a/ArcdpsLogManager/ImageProvider.cs +++ b/ArcdpsLogManager/ImageProvider.cs @@ -24,33 +24,51 @@ public class ImageProvider private Lazy TinyIconUnknownProfession { get; } = new Lazy(Resources.GetTinyIconUnknown); // SPECIALIZATIONS + // Warrior private Lazy TinyIconBerserker { get; } = new Lazy(Resources.GetTinyIconBerserker); private Lazy TinyIconSpellbreaker { get; } = new Lazy(Resources.GetTinyIconSpellbreaker); private Lazy TinyIconBladesworn { get; } = new Lazy(Resources.GetTinyIconBladesworn); + private Lazy TinyIconParagon { get; } = new Lazy(Resources.GetTinyIconParagon); + // Guardian private Lazy TinyIconDragonhunter { get; } = new Lazy(Resources.GetTinyIconDragonhunter); private Lazy TinyIconWillbender { get; } = new Lazy(Resources.GetTinyIconWillbender); private Lazy TinyIconFirebrand { get; } = new Lazy(Resources.GetTinyIconFirebrand); + private Lazy TinyIconLuminary { get; } = new Lazy(Resources.GetTinyIconLuminary); + // Revenant private Lazy TinyIconHerald { get; } = new Lazy(Resources.GetTinyIconHerald); private Lazy TinyIconRenegade { get; } = new Lazy(Resources.GetTinyIconRenegade); private Lazy TinyIconVindicator { get; } = new Lazy(Resources.GetTinyIconVindicator); + private Lazy TinyIconConduit { get; } = new Lazy(Resources.GetTinyIconConduit); + // Ranger private Lazy TinyIconDruid { get; } = new Lazy(Resources.GetTinyIconDruid); private Lazy TinyIconSoulbeast { get; } = new Lazy(Resources.GetTinyIconSoulbeast); private Lazy TinyIconUntamed { get; } = new Lazy(Resources.GetTinyIconUntamed); + private Lazy TinyIconGaleshot { get; } = new Lazy(Resources.GetTinyIconGaleshot); + // Thief private Lazy TinyIconDaredevil { get; } = new Lazy(Resources.GetTinyIconDaredevil); private Lazy TinyIconDeadeye { get; } = new Lazy(Resources.GetTinyIconDeadeye); private Lazy TinyIconSpecter { get; } = new Lazy(Resources.GetTinyIconSpecter); + private Lazy TinyIconAntiquary { get; } = new Lazy(Resources.GetTinyIconAntiquary); + // Engineer private Lazy TinyIconScrapper { get; } = new Lazy(Resources.GetTinyIconScrapper); private Lazy TinyIconHolosmith { get; } = new Lazy(Resources.GetTinyIconHolosmith); private Lazy TinyIconMechanist { get; } = new Lazy(Resources.GetTinyIconMechanist); + private Lazy TinyIconAmalgam { get; } = new Lazy(Resources.GetTinyIconAmalgam); + // Necromancer private Lazy TinyIconReaper { get; } = new Lazy(Resources.GetTinyIconReaper); private Lazy TinyIconScourge { get; } = new Lazy(Resources.GetTinyIconScourge); private Lazy TinyIconHarbinger { get; } = new Lazy(Resources.GetTinyIconHarbinger); + private Lazy TinyIconRitualist { get; } = new Lazy(Resources.GetTinyIconRitualist); + // Elementalist private Lazy TinyIconTempest { get; } = new Lazy(Resources.GetTinyIconTempest); private Lazy TinyIconWeaver { get; } = new Lazy(Resources.GetTinyIconWeaver); private Lazy TinyIconCatalyst { get; } = new Lazy(Resources.GetTinyIconCatalyst); + private Lazy TinyIconEvoker { get; } = new Lazy(Resources.GetTinyIconEvoker); + // Mesmer private Lazy TinyIconChronomancer { get; } = new Lazy(Resources.GetTinyIconChronomancer); private Lazy TinyIconMirage { get; } = new Lazy(Resources.GetTinyIconMirage); private Lazy TinyIconVirtuoso { get; } = new Lazy(Resources.GetTinyIconVirtuoso); + private Lazy TinyIconTroubadour { get; } = new Lazy(Resources.GetTinyIconTroubadour); // CATEGORIES private Lazy TinyIconRaid { get; } = new Lazy(Resources.GetTinyIconRaid); @@ -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)), }; } diff --git a/ArcdpsLogManager/Images/Tango/Amalgam_tango_icon_20px.png b/ArcdpsLogManager/Images/Tango/Amalgam_tango_icon_20px.png new file mode 100644 index 00000000..5e624368 Binary files /dev/null and b/ArcdpsLogManager/Images/Tango/Amalgam_tango_icon_20px.png differ diff --git a/ArcdpsLogManager/Images/Tango/Antiquary_tango_icon_20px.png b/ArcdpsLogManager/Images/Tango/Antiquary_tango_icon_20px.png new file mode 100644 index 00000000..5b165919 Binary files /dev/null and b/ArcdpsLogManager/Images/Tango/Antiquary_tango_icon_20px.png differ diff --git a/ArcdpsLogManager/Images/Tango/Conduit_tango_icon_20px.png b/ArcdpsLogManager/Images/Tango/Conduit_tango_icon_20px.png new file mode 100644 index 00000000..03810f13 Binary files /dev/null and b/ArcdpsLogManager/Images/Tango/Conduit_tango_icon_20px.png differ diff --git a/ArcdpsLogManager/Images/Tango/Evoker_tango_icon_20px.png b/ArcdpsLogManager/Images/Tango/Evoker_tango_icon_20px.png new file mode 100644 index 00000000..ba91d621 Binary files /dev/null and b/ArcdpsLogManager/Images/Tango/Evoker_tango_icon_20px.png differ diff --git a/ArcdpsLogManager/Images/Tango/Galeshot_tango_icon_20px.png b/ArcdpsLogManager/Images/Tango/Galeshot_tango_icon_20px.png new file mode 100644 index 00000000..4ac7a2ad Binary files /dev/null and b/ArcdpsLogManager/Images/Tango/Galeshot_tango_icon_20px.png differ diff --git a/ArcdpsLogManager/Images/Tango/Luminary_tango_icon_20px.png b/ArcdpsLogManager/Images/Tango/Luminary_tango_icon_20px.png new file mode 100644 index 00000000..c959c095 Binary files /dev/null and b/ArcdpsLogManager/Images/Tango/Luminary_tango_icon_20px.png differ diff --git a/ArcdpsLogManager/Images/Tango/Paragon_tango_icon_20px.png b/ArcdpsLogManager/Images/Tango/Paragon_tango_icon_20px.png new file mode 100644 index 00000000..1749d318 Binary files /dev/null and b/ArcdpsLogManager/Images/Tango/Paragon_tango_icon_20px.png differ diff --git a/ArcdpsLogManager/Images/Tango/Ritualist_tango_icon_20px.png b/ArcdpsLogManager/Images/Tango/Ritualist_tango_icon_20px.png new file mode 100644 index 00000000..9b6183f5 Binary files /dev/null and b/ArcdpsLogManager/Images/Tango/Ritualist_tango_icon_20px.png differ diff --git a/ArcdpsLogManager/Images/Tango/Troubadour_tango_icon_20px.png b/ArcdpsLogManager/Images/Tango/Troubadour_tango_icon_20px.png new file mode 100644 index 00000000..f2fdfbba Binary files /dev/null and b/ArcdpsLogManager/Images/Tango/Troubadour_tango_icon_20px.png differ diff --git a/ArcdpsLogManager/Resources.cs b/ArcdpsLogManager/Resources.cs index a356dfb6..192bf18b 100644 --- a/ArcdpsLogManager/Resources.cs +++ b/ArcdpsLogManager/Resources.cs @@ -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"); diff --git a/EVTCAnalytics/GameData/Characters.cs b/EVTCAnalytics/GameData/Characters.cs index 38d8e047..eb81b94e 100644 --- a/EVTCAnalytics/GameData/Characters.cs +++ b/EVTCAnalytics/GameData/Characters.cs @@ -64,6 +64,20 @@ public static class Characters {Profession.Revenant, EliteSpecialization.Vindicator} }; + private static readonly IReadOnlyDictionary VisionsOfEternitySpecializationsByProfession = + new Dictionary + { + {Profession.Guardian, EliteSpecialization.Luminary}, + {Profession.Warrior, EliteSpecialization.Paragon}, + {Profession.Engineer, EliteSpecialization.Amalgam}, + {Profession.Ranger, EliteSpecialization.Galeshot}, + {Profession.Thief, EliteSpecialization.Antiquary}, + {Profession.Elementalist, EliteSpecialization.Evoker}, + {Profession.Mesmer, EliteSpecialization.Troubadour}, + {Profession.Necromancer, EliteSpecialization.Ritualist}, + {Profession.Revenant, EliteSpecialization.Conduit} + }; + /// /// Ids of elite specializations as used internally in-game and publicly in the official API. /// @@ -97,6 +111,15 @@ public static class Characters {70, EliteSpecialization.Mechanist}, {71, EliteSpecialization.Specter}, {72, EliteSpecialization.Untamed}, + {73, EliteSpecialization.Troubadour}, + {74, EliteSpecialization.Paragon}, + {75, EliteSpecialization.Amalgam}, + {76, EliteSpecialization.Ritualist}, + {77, EliteSpecialization.Antiquary}, + {78, EliteSpecialization.Galeshot}, + {79, EliteSpecialization.Conduit}, + {80, EliteSpecialization.Evoker}, + {81, EliteSpecialization.Luminary}, }; /// @@ -133,6 +156,11 @@ public static EliteSpecialization GetEndOfDragonsEliteSpecialization(Profession return EndOfDragonsSpecializationsByProfession[profession]; } + public static EliteSpecialization GetVisionsOfEternityEliteSpecialization(Profession profession) + { + return VisionsOfEternitySpecializationsByProfession[profession]; + } + /// /// Provides the base profession for an elite specialization. /// @@ -170,6 +198,14 @@ public static Profession GetProfession(EliteSpecialization specialization) } } + foreach (var (profession, spec) in VisionsOfEternitySpecializationsByProfession) + { + if (specialization == spec) + { + return profession; + } + } + throw new NotSupportedException("Profession of elite specialization not found"); } } diff --git a/EVTCAnalytics/Model/Agents/EliteSpecialization.cs b/EVTCAnalytics/Model/Agents/EliteSpecialization.cs index 3f63bbda..5e351027 100644 --- a/EVTCAnalytics/Model/Agents/EliteSpecialization.cs +++ b/EVTCAnalytics/Model/Agents/EliteSpecialization.cs @@ -35,5 +35,14 @@ public enum EliteSpecialization Virtuoso, Harbinger, Vindicator, + Antiquary, + Amalgam, + Conduit, + Luminary, + Paragon, + Evoker, + Ritualist, + Troubadour, + Galeshot, } } \ No newline at end of file