/// <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());
        }
Ejemplo n.º 2
0
        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));
            }
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        /// <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);
        }