/// <summary> /// Creates an instance of <see cref="AppliedConditionViewModel"/> /// </summary> public AppliedConditionViewModel(AppliedConditionModel appliedConditionModel) { _appliedConditionModel = appliedConditionModel; foreach (ConditionModel conditionModel in _compendium.Conditions) { _conditions.Add(new KeyValuePair <ConditionModel, string>(conditionModel, conditionModel.Name)); } if (_conditions.Any()) { if (appliedConditionModel.ConditionModel == null) { _selectedCondition = _conditions.First(); _appliedConditionModel.ConditionModel = _selectedCondition.Key; _appliedConditionModel.Name = _selectedCondition.Key.Name; } else { _selectedCondition = _conditions.FirstOrDefault(x => x.Key.Id == appliedConditionModel.ConditionModel.Id); } } _viewConditionCommand = new RelayCommand(obj => true, obj => ViewConditon()); _acceptCommand = new RelayCommand(obj => true, obj => OnAccept()); _rejectCommand = new RelayCommand(obj => true, obj => OnReject()); }
private void ShowAddConditionDialog() { AppliedConditionModel appliedConditionModel = _dialogService.ShowCreateAppliedConditionDialog("Add Condition", new AppliedConditionModel()); if (appliedConditionModel != null) { _conditions.Add(new AppliedConditionViewModel(appliedConditionModel)); _encounterCreatureModel.Conditions.Add(appliedConditionModel); _conditions = new ObservableCollection <AppliedConditionViewModel>(_conditions.OrderBy(x => x.Name)); OnPropertyChanged(nameof(Conditions)); } }
/// <summary> /// Shows create applied condition dialog /// </summary> public AppliedConditionModel ShowCreateAppliedConditionDialog(string title, AppliedConditionModel appliedConditionModel) { ModalDialog modalDialog = new ModalDialog(); if (_parentWindow != null) { modalDialog.Owner = _parentWindow; } AppliedConditionModel appliedConditionModelCopy = new AppliedConditionModel(appliedConditionModel); ApplyConditionView applyConditionView = new ApplyConditionView(new AppliedConditionViewModel(appliedConditionModelCopy)); modalDialog.WindowTitle = title; modalDialog.Body = applyConditionView; modalDialog.Confirmation = applyConditionView.ViewModel; bool?result = ShowDialog(modalDialog); return(result == true ? appliedConditionModelCopy : null); }
/// <inheritdoc /> public IEnumerable <EncounterModel> GetEncounters(byte[] encounterBytes, IEnumerable <CharacterModel> characters, IEnumerable <ConditionModel> conditions, IEnumerable <MonsterModel> monsters) { List <EncounterModel> encounters = new List <EncounterModel>(); using (MemoryStream memoryStream = new MemoryStream(encounterBytes)) { using (BinaryReader reader = new BinaryReader(memoryStream)) { int version = BitConverter.ToInt16(reader.ReadBytes(4), 0); if (version == _version) { int encounterCount = BitConverter.ToInt32(reader.ReadBytes(4), 0); for (int i = 0; i < encounterCount; ++i) { EncounterModel encounter = new EncounterModel(); encounter.Id = new Guid(reader.ReadBytes(16)); encounter.Name = ReadNextString(reader); encounter.Creatures = new List <EncounterCreatureModel>(); int creatureCount = BitConverter.ToInt32(reader.ReadBytes(4), 0); for (int j = 0; j < creatureCount; ++j) { bool isCharacter = BitConverter.ToBoolean(reader.ReadBytes(1), 0); EncounterCreatureModel encounterCreature = isCharacter ? new EncounterCharacterModel() : new EncounterMonsterModel() as EncounterCreatureModel; encounterCreature.ID = new Guid(reader.ReadBytes(16)); encounterCreature.Name = ReadNextString(reader); encounterCreature.CurrentHP = BitConverter.ToInt32(reader.ReadBytes(4), 0); encounterCreature.MaxHP = BitConverter.ToInt32(reader.ReadBytes(4), 0); encounterCreature.AC = BitConverter.ToInt32(reader.ReadBytes(4), 0); encounterCreature.SpellSaveDC = BitConverter.ToInt32(reader.ReadBytes(4), 0); encounterCreature.PassivePerception = BitConverter.ToInt32(reader.ReadBytes(4), 0); encounterCreature.InitiativeBonus = BitConverter.ToInt32(reader.ReadBytes(4), 0); bool initiativeSet = BitConverter.ToBoolean(reader.ReadBytes(1), 0); int? initiative = BitConverter.ToInt32(reader.ReadBytes(4), 0); encounterCreature.Initiative = initiativeSet ? initiative : null; encounterCreature.Selected = BitConverter.ToBoolean(reader.ReadBytes(1), 0); encounterCreature.Conditions = new List <AppliedConditionModel>(); int conditionCount = BitConverter.ToInt32(reader.ReadBytes(4), 0); for (int k = 0; k < conditionCount; ++k) { AppliedConditionModel appliedCondition = new AppliedConditionModel(); appliedCondition.ID = new Guid(reader.ReadBytes(16)); Guid conditionID = new Guid(reader.ReadBytes(16)); string conditionName = ReadNextString(reader); ConditionModel conditionModel = conditions.FirstOrDefault(x => x.Id == conditionID); if (conditionModel == null) { conditionModel = conditions.FirstOrDefault(x => x.Name.Equals(conditionName, StringComparison.CurrentCultureIgnoreCase)); } appliedCondition.ConditionModel = conditionModel; appliedCondition.Name = ReadNextString(reader); bool hasLevel = BitConverter.ToBoolean(reader.ReadBytes(1), 0); int? level = BitConverter.ToInt32(reader.ReadBytes(4), 0); appliedCondition.Level = hasLevel ? level : null; appliedCondition.Notes = ReadNextString(reader); encounterCreature.Conditions.Add(appliedCondition); } if (isCharacter) { Guid characterID = new Guid(reader.ReadBytes(16)); string characterName = ReadNextString(reader); CharacterModel character = characters.FirstOrDefault(x => x.Id == characterID); if (character == null) { character = characters.FirstOrDefault(x => x.Name.Equals(characterName, StringComparison.CurrentCultureIgnoreCase)); } ((EncounterCharacterModel)encounterCreature).CharacterModel = character; ((EncounterCharacterModel)encounterCreature).Level = BitConverter.ToInt32(reader.ReadBytes(4), 0); ((EncounterCharacterModel)encounterCreature).PassiveInvestigation = BitConverter.ToInt32(reader.ReadBytes(4), 0); } else { Guid monsterID = new Guid(reader.ReadBytes(16)); string monsterName = ReadNextString(reader); MonsterModel monster = monsters.FirstOrDefault(x => x.Id == monsterID); if (monster == null) { monster = monsters.FirstOrDefault(x => x.Name.Equals(monsterName, StringComparison.CurrentCultureIgnoreCase)); } ((EncounterMonsterModel)encounterCreature).MonsterModel = monster; ((EncounterMonsterModel)encounterCreature).Quantity = BitConverter.ToInt32(reader.ReadBytes(4), 0); ((EncounterMonsterModel)encounterCreature).AverageDamageTurn = BitConverter.ToInt32(reader.ReadBytes(4), 0); ((EncounterMonsterModel)encounterCreature).CR = ReadNextString(reader); ((EncounterMonsterModel)encounterCreature).DamageVulnerabilities = ReadNextString(reader); ((EncounterMonsterModel)encounterCreature).DamageResistances = ReadNextString(reader); ((EncounterMonsterModel)encounterCreature).DamageImmunities = ReadNextString(reader); ((EncounterMonsterModel)encounterCreature).ConditionImmunities = ReadNextString(reader); } encounter.Creatures.Add(encounterCreature); } encounter.Round = BitConverter.ToInt32(reader.ReadBytes(4), 0); encounter.EncounterChallenge = (EncounterChallenge)BitConverter.ToInt32(reader.ReadBytes(4), 0); encounter.TotalCharacterHP = BitConverter.ToInt32(reader.ReadBytes(4), 0); encounter.TotalMonsterHP = BitConverter.ToInt32(reader.ReadBytes(4), 0); encounter.TimeElapsed = BitConverter.ToInt32(reader.ReadBytes(4), 0); encounter.CurrentTurn = BitConverter.ToInt32(reader.ReadBytes(4), 0); encounter.EncounterState = (EncounterState)BitConverter.ToInt32(reader.ReadBytes(4), 0); encounter.Notes = ReadNextString(reader); encounters.Add(encounter); } } } } return(encounters); }