Skip to content

Commit

Permalink
Build template metadata with support for hero positions. Closes #906 (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexMacocian committed Dec 10, 2024
1 parent 7eb0b7c commit aabc98e
Show file tree
Hide file tree
Showing 56 changed files with 678 additions and 837 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -107,29 +107,12 @@ private void EditBuild_MouseLeftButtonDown(object _, System.Windows.Input.MouseB
private async void EditTeamBuild_MouseLeftButtonDown(object _, System.Windows.Input.MouseButtonEventArgs e)
{
var teamBuildData = await this.guildwarsMemoryCache.ReadTeamBuildData(CancellationToken.None);
var teamBuild = this.buildTemplateManager.CreateTeamBuild();
teamBuild.Builds.Clear();
var mainPlayerBuild = this.buildTemplateManager.CreateSingleBuild();
mainPlayerBuild.Primary = teamBuildData?.PlayerBuild?.Primary!;
mainPlayerBuild.Secondary = teamBuildData?.PlayerBuild?.Secondary!;
mainPlayerBuild.Attributes = teamBuildData?.PlayerBuild?.Attributes!;
mainPlayerBuild.Skills = teamBuildData?.PlayerBuild?.Skills!;
teamBuild.Builds.Add(mainPlayerBuild);
foreach (var build in teamBuildData?.TeamMemberBuilds!)
if (teamBuildData is null)
{
if (build is null)
{
continue;
}

var singleBuildEntry = this.buildTemplateManager.CreateSingleBuild();
singleBuildEntry.Primary = build.Primary;
singleBuildEntry.Secondary = build.Secondary;
singleBuildEntry.Attributes = build.Attributes;
singleBuildEntry.Skills = build.Skills;
teamBuild.Builds.Add(singleBuildEntry);
return;
}

var teamBuild = this.buildTemplateManager.CreateTeamBuild(teamBuildData);
this.viewManager.ShowView<TeamBuildTemplateView>(teamBuild);
}
}
52 changes: 16 additions & 36 deletions Daybreak/Controls/Templates/BuildTemplate.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,14 @@ public partial class BuildTemplate : UserControl
private SingleBuildEntry buildEntry;
[GenerateDependencyProperty]
private int attributePoints;

[GenerateDependencyProperty]
private List<Profession> primaryProfessions = [];
[GenerateDependencyProperty]
private List<Profession> secondaryProfessions = [];
[GenerateDependencyProperty]
private List<Skill> availableSkills = [];

public event EventHandler? BuildChanged;
public ObservableCollection<Profession> PrimaryProfessions { get; } = [];
public ObservableCollection<Profession> SecondaryProfessions { get; } = [];

public BuildTemplate()
: this(Launcher.Instance.ApplicationServiceProvider.GetRequiredService<IBuildTemplateManager>(),
Expand Down Expand Up @@ -102,10 +103,10 @@ private void BuildTemplate_DataContextChanged(object sender, DependencyPropertyC
if(e.NewValue is SingleBuildEntry buildEntry)
{
this.BuildEntry = buildEntry;
this.BuildEntry.PropertyChanged += this.BuildEntry_Changed;
this.AttributePoints = this.attributePointCalculator!.GetRemainingFreePoints(this.BuildEntry);
this.SetupProfessions();
this.LoadSkills();
this.AttributePoints = this.attributePointCalculator!.GetRemainingFreePoints(this.BuildEntry);
this.BuildEntry.PropertyChanged += this.BuildEntry_Changed;
}
}

Expand All @@ -126,41 +127,20 @@ buildEntry.Primary is null ||
return;
}

var primaryProfessionsToAdd = Profession.Professions.Except(this.PrimaryProfessions).Where(p => p == Profession.None || p != buildEntry.Secondary).ToList();
var primaryProfessionsToRemove = this.PrimaryProfessions.Where(p => p != Profession.None && p == buildEntry.Secondary).ToList();
var secondaryProfessionsToAdd = Profession.Professions.Except(this.SecondaryProfessions).Where(p => p == Profession.None || p != buildEntry.Primary).ToList();
var secondaryProfessionsToRemove = this.SecondaryProfessions.Where(p => p != Profession.None && p == buildEntry.Primary).ToList();

if (primaryProfessionsToRemove.Count > 0)
{
foreach(var profession in primaryProfessionsToRemove)
{
this.PrimaryProfessions.Remove(profession);
}
}

if (primaryProfessionsToAdd.Count > 0)
var newPrimaryProfessions = Profession.Professions.Where(p => p == Profession.None || p != buildEntry.Secondary).ToList();
var newSecondaryProfessions = Profession.Professions.Where(p => p == Profession.None || p != buildEntry.Primary).ToList();
if (this.PrimaryProfessions is null ||
this.PrimaryProfessions.Any(p => !newPrimaryProfessions.Contains(p)) ||
newPrimaryProfessions.Any(p => !this.PrimaryProfessions.Contains(p)))
{
foreach (var profession in primaryProfessionsToAdd)
{
this.PrimaryProfessions.Add(profession);
}
this.PrimaryProfessions = newPrimaryProfessions;
}

if (secondaryProfessionsToRemove.Count > 0)
if (this.SecondaryProfessions is null ||
this.SecondaryProfessions.Any(p => !newSecondaryProfessions.Contains(p)) ||
newSecondaryProfessions.Any(p => !this.SecondaryProfessions.Contains(p)))
{
foreach (var profession in secondaryProfessionsToRemove)
{
this.SecondaryProfessions.Remove(profession);
}
}

if (secondaryProfessionsToAdd.Count > 0)
{
foreach (var profession in secondaryProfessionsToAdd)
{
this.SecondaryProfessions.Add(profession);
}
this.SecondaryProfessions = newSecondaryProfessions;
}
}

Expand Down
52 changes: 0 additions & 52 deletions Daybreak/Converters/GuildwarsIconJsonConverter.cs

This file was deleted.

7 changes: 6 additions & 1 deletion Daybreak/Models/Builds/IBuildEntry.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
namespace Daybreak.Models.Builds;
using System;
using System.Collections.Generic;

namespace Daybreak.Models.Builds;
public interface IBuildEntry
{
public DateTimeOffset CreationTime { get; set; }
public Dictionary<string, string>? Metadata { get; set; }
public string? SourceUrl { get; set; }
public string? PreviousName { get; set; }
public string? Name { get; set; }
Expand Down
Loading

0 comments on commit aabc98e

Please sign in to comment.