diff --git a/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterEditorViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterEditorViewModel.cs index 6405a321..c9f546ad 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterEditorViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterEditorViewModel.cs @@ -24,6 +24,7 @@ namespace AideDeJeu.ViewModels PersonalityIdeals = new NotifyTaskCompletion>(null); PersonalityLinks = new NotifyTaskCompletion>(null); PersonalityDefects = new NotifyTaskCompletion>(null); + BackgroundSpecialties = new NotifyTaskCompletion>(null); } #region Selected PC @@ -42,32 +43,6 @@ namespace AideDeJeu.ViewModels #endregion Selected PC #region Alignment - /*private List _AllAllignments = new List() - { - "Loyal Bon (LB)", - "Neutre Bon (NB)", - "Chaotique Bon (CB)", - "Loyal Neutre (LN)", - "Neutre (N)", - "Chaotique Neutre (CN)", - "Loyal Mauvais (LM)", - "Neutre Mauvais (NM)", - "Chaotique Mauvais (CM)" - }; - - private List _Alignments = null; - public List Alignments - { - get - { - return _Alignments; - } - set - { - SetProperty(ref _Alignments, value); - } - }*/ - private NotifyTaskCompletion> _Alignments = null; public NotifyTaskCompletion> Alignments { @@ -206,20 +181,28 @@ namespace AideDeJeu.ViewModels { SetProperty(ref _BackgroundSelectedIndex, value); SelectedPlayerCharacter.Background = Backgrounds.Result[_BackgroundSelectedIndex]; - SubBackgrounds = new NotifyTaskCompletion>(Task.Run(() => LoadSubBackgroundsAsync(SelectedPlayerCharacter.Background))); - PersonalityTraits = new NotifyTaskCompletion>(Task.Run(() => LoadPersonalityTraitsAsync(SelectedPlayerCharacter.Background))); - PersonalityIdeals = new NotifyTaskCompletion>(Task.Run(() => LoadPersonalityIdealsAsync(SelectedPlayerCharacter.Background))); - PersonalityLinks = new NotifyTaskCompletion>(Task.Run(() => LoadPersonalityLinksAsync(SelectedPlayerCharacter.Background))); - PersonalityDefects = new NotifyTaskCompletion>(Task.Run(() => LoadPersonalityDefectsAsync(SelectedPlayerCharacter.Background))); - SelectedPlayerCharacter.SubBackground = null; - SelectedPlayerCharacter.PersonalityTrait = null; - SelectedPlayerCharacter.PersonalityIdeal = null; - SelectedPlayerCharacter.PersonalityLink = null; - SelectedPlayerCharacter.PersonalityDefect = null; - ResetAlignments(); + SelectedBackgroundChanged(); } } + private void SelectedBackgroundChanged() + { + SubBackgrounds = new NotifyTaskCompletion>(Task.Run(() => LoadSubBackgroundsAsync(SelectedPlayerCharacter.Background))); + PersonalityTraits = new NotifyTaskCompletion>(Task.Run(() => LoadPersonalityTraitsAsync(SelectedPlayerCharacter.Background))); + PersonalityIdeals = new NotifyTaskCompletion>(Task.Run(() => LoadPersonalityIdealsAsync(SelectedPlayerCharacter.Background))); + PersonalityLinks = new NotifyTaskCompletion>(Task.Run(() => LoadPersonalityLinksAsync(SelectedPlayerCharacter.Background))); + PersonalityDefects = new NotifyTaskCompletion>(Task.Run(() => LoadPersonalityDefectsAsync(SelectedPlayerCharacter.Background))); + BackgroundSpecialties = new NotifyTaskCompletion>(Task.Run(() => LoadBackgroundsSpecialtiesAsync(SelectedPlayerCharacter.Background))); + Task.Run(async () => SelectedPlayerCharacter.BackgroundSkill = await LoadSkillAsync(SelectedPlayerCharacter.Background)); + SelectedPlayerCharacter.SubBackground = null; + SelectedPlayerCharacter.PersonalityTrait = null; + SelectedPlayerCharacter.PersonalityIdeal = null; + SelectedPlayerCharacter.PersonalityLink = null; + SelectedPlayerCharacter.PersonalityDefect = null; + SelectedPlayerCharacter.BackgroundSpecialty = null; + ResetAlignments(); + } + private NotifyTaskCompletion> _SubBackgrounds = null; public NotifyTaskCompletion> SubBackgrounds { @@ -252,9 +235,16 @@ namespace AideDeJeu.ViewModels { SelectedPlayerCharacter.SubBackground = SubBackgrounds.Result[_SubBackgroundSelectedIndex]; } + SelectedSubBackgroundChanged(); } } + private void SelectedSubBackgroundChanged() + { + SubBackgroundSpecialties = new NotifyTaskCompletion>(Task.Run(() => LoadBackgroundsSpecialtiesAsync(SelectedPlayerCharacter.SubBackground))); + Task.Run(async () => SelectedPlayerCharacter.SubBackgroundSkill = await LoadSkillAsync(SelectedPlayerCharacter.SubBackground)); + } + private NotifyTaskCompletion> _PersonalityTraits = null; public NotifyTaskCompletion> PersonalityTraits { @@ -303,6 +293,30 @@ namespace AideDeJeu.ViewModels SetProperty(ref _PersonalityDefects, value); } } + private NotifyTaskCompletion> _BackgroundSpecialties = null; + public NotifyTaskCompletion> BackgroundSpecialties + { + get + { + return _BackgroundSpecialties; + } + private set + { + SetProperty(ref _BackgroundSpecialties, value); + } + } + private NotifyTaskCompletion> _SubBackgroundSpecialties = null; + public NotifyTaskCompletion> SubBackgroundSpecialties + { + get + { + return _SubBackgroundSpecialties; + } + private set + { + SetProperty(ref _SubBackgroundSpecialties, value); + } + } public async Task> LoadBackgroundsAsync() { @@ -393,6 +407,40 @@ namespace AideDeJeu.ViewModels } } + public async Task> LoadBackgroundsSpecialtiesAsync(BackgroundItem background) + { + if (background != null) + { + using (var context = await StoreViewModel.GetLibraryContextAsync()) + { + var list = await context.BackgroundSpecialties.Where(it => it.ParentLink == background.Id).ToListAsync().ConfigureAwait(false); + var item = list.FirstOrDefault(); + return item == null ? null : ExtractSimpleTable(item.Table); + } + } + else + { + return null; + } + } + + public async Task LoadSkillAsync(BackgroundItem background) + { + if (background != null) + { + using (var context = await StoreViewModel.GetLibraryContextAsync()) + { + var list = await context.Skills.Where(it => it.ParentLink == background.Id).ToListAsync().ConfigureAwait(false); + var item = list.FirstOrDefault(); + return item; + } + } + else + { + return null; + } + } + public async Task> LoadSubBackgroundsAsync(BackgroundItem background) { if (background != null) @@ -410,6 +458,20 @@ namespace AideDeJeu.ViewModels } } + public ICommand BackgroundSpecialtyPickerCommand + { + get + { + return new Command>(async (strings) => SelectedPlayerCharacter.BackgroundSpecialty = await ExecuteStringPickerCommandAsync(strings)); + } + } + public ICommand SubBackgroundSpecialtyPickerCommand + { + get + { + return new Command>(async (strings) => SelectedPlayerCharacter.SubBackgroundSpecialty = await ExecuteStringPickerCommandAsync(strings)); + } + } public ICommand PersonalityTraitPickerCommand { get diff --git a/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterViewModel.cs index 189b03ec..3e4f423f 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterViewModel.cs @@ -115,5 +115,53 @@ namespace AideDeJeu.ViewModels SetProperty(ref _PersonalityDefect, value); } } + private string _BackgroundSpecialty = null; + public string BackgroundSpecialty + { + get + { + return _BackgroundSpecialty; + } + set + { + SetProperty(ref _BackgroundSpecialty, value); + } + } + private string _SubBackgroundSpecialty = null; + public string SubBackgroundSpecialty + { + get + { + return _SubBackgroundSpecialty; + } + set + { + SetProperty(ref _SubBackgroundSpecialty, value); + } + } + private SkillItem _BackgroundSkill = null; + public SkillItem BackgroundSkill + { + get + { + return _BackgroundSkill; + } + set + { + SetProperty(ref _BackgroundSkill, value); + } + } + private SkillItem _SubBackgroundSkill = null; + public SkillItem SubBackgroundSkill + { + get + { + return _SubBackgroundSkill; + } + set + { + SetProperty(ref _SubBackgroundSkill, value); + } + } } } diff --git a/AideDeJeu/AideDeJeu/ViewModels/StoreViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/StoreViewModel.cs index f7805ae0..bc9e19ab 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/StoreViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/StoreViewModel.cs @@ -564,6 +564,8 @@ namespace AideDeJeu.ViewModels public DbSet PersonalityIdeals { get; set; } public DbSet PersonalityLinks { get; set; } public DbSet PersonalityDefects { get; set; } + public DbSet Skills { get; set; } + public DbSet BackgroundSpecialties { get; set; } public DbSet Alignments { get; set; } public AideDeJeuContext(string dbPath) diff --git a/AideDeJeu/AideDeJeu/Views/PlayerCharacterEditorPage.xaml b/AideDeJeu/AideDeJeu/Views/PlayerCharacterEditorPage.xaml index 70fa7684..69e37710 100644 --- a/AideDeJeu/AideDeJeu/Views/PlayerCharacterEditorPage.xaml +++ b/AideDeJeu/AideDeJeu/Views/PlayerCharacterEditorPage.xaml @@ -48,11 +48,31 @@ - + + + + +