private void RemoveSpell(SpellbookEntryViewModel spellbookEntryViewModel) { bool?result = _dialogService.ShowConfirmationDialog("Remove Spell", "Are you sure you want to remove " + spellbookEntryViewModel.SpellName + "?", "Yes", "No", null); if (result == true) { int level = Math.Max(spellbookEntryViewModel.Spell.Level, 0); SpellsByLevelViewModel spellsByLevelViewModel = _spellsByLevel.FirstOrDefault(x => x.Level == level); if (spellsByLevelViewModel != null) { spellsByLevelViewModel.RemoveSpell(spellbookEntryViewModel.SpellbookEntryModel); if (!spellsByLevelViewModel.Spells.Any() && _spellSlots[level] == 0) { _spellsByLevel.Remove(spellsByLevelViewModel); } } SpellbookEntryViewModel spell = _spells.FirstOrDefault(x => x.Spell.Id == spellbookEntryViewModel.Spell.Id); if (spell != null) { _spells.Remove(spell); _spellbookModel.Spells.Remove(spell.SpellbookEntryModel); } } }
/// <summary> /// Initializes spells by level /// </summary> public void InitializeSpellsByLevel() { if (_spellSlots.Count > 0 && _spellSlots.Sum() > 0) { int maxLevel = 0; for (int i = _spellSlots.Count - 1; i > -1; --i) { if (_spellSlots[i] > 0) { maxLevel = i; break; } } for (int i = 0; i <= maxLevel; ++i) { if (_spellSlots.Count > i) { _spellsByLevel.Add(new SpellsByLevelViewModel(i, _spellSlots[i], _spellbookModel.BasedOnClass, _spellbookModel.BasedOnRace)); } else { _spellsByLevel.Add(new SpellsByLevelViewModel(i, 0, _spellbookModel.BasedOnClass, _spellbookModel.BasedOnRace)); } } } foreach (SpellbookEntryModel spellbookEntryModel in _spellbookModel.Spells.OrderBy(x => x.Spell.Level)) { int level = Math.Max(spellbookEntryModel.Spell.Level, 0); SpellsByLevelViewModel spellsByLevelViewModel = _spellsByLevel.FirstOrDefault(x => x.Level == level); if (spellsByLevelViewModel != null) { spellsByLevelViewModel.AddSpell(spellbookEntryModel); } else { if (_spellSlots.Count > level) { spellsByLevelViewModel = new SpellsByLevelViewModel(level, _spellSlots[level], _spellbookModel.BasedOnClass, _spellbookModel.BasedOnRace); spellsByLevelViewModel.AddSpell(spellbookEntryModel); _spellsByLevel.Add(spellsByLevelViewModel); } else { spellsByLevelViewModel = new SpellsByLevelViewModel(level, 0, _spellbookModel.BasedOnClass, _spellbookModel.BasedOnRace); spellsByLevelViewModel.AddSpell(spellbookEntryModel); _spellsByLevel.Add(spellsByLevelViewModel); } } } }
private void AddSpell(SpellModel spellModel) { if (!_spells.Any(x => x.Spell.Id == spellModel.Id)) { SpellbookEntryModel spellbookEntryModel = new SpellbookEntryModel(); spellbookEntryModel.Spell = spellModel; int level = Math.Max(spellModel.Level, 0); SpellsByLevelViewModel spellsByLevelViewModel = _spellsByLevel.FirstOrDefault(x => x.Level == level); if (spellsByLevelViewModel != null) { spellsByLevelViewModel.AddSpell(spellbookEntryModel); } else { spellsByLevelViewModel = new SpellsByLevelViewModel(level, _spellSlots.Count > level ? _spellSlots[level] : 0, _spellbookModel.BasedOnClass, _spellbookModel.BasedOnRace); spellsByLevelViewModel.AddSpell(spellbookEntryModel); bool added = false; if (_spellsByLevel.Count > 0) { for (int i = 0; i < _spellsByLevel.Count; ++i) { if (_spellsByLevel[i].Level > level) { _spellsByLevel.Insert(i, spellsByLevelViewModel); added = true; break; } } } if (!added) { _spellsByLevel.Add(spellsByLevelViewModel); } } _spells.Add(new SpellbookEntryViewModel(spellbookEntryModel)); _spellbookModel.Spells.Add(spellbookEntryModel); } }