public void TryCreateCharacterAndGenerateJson()
        {
            string    characterName = characterNameField.text;
            Race      race          = raceDropdownController.SelectedOption;
            Class     class_        = classDropdownController.SelectedOption;
            Alignment alignment     = alignmentDropdownController.SelectedOption;

            int.TryParse(highestRollFromHitDiceText.text, out var highestRollFromHitDice);
            int.TryParse(charismaText.text, out var charisma);
            int.TryParse(constitutionText.text, out var constitution);
            int.TryParse(dexterityText.text, out var dexterity);
            int.TryParse(intelligenceText.text, out var intelligence);
            int.TryParse(strengthText.text, out var strength);
            int.TryParse(wisdomText.text, out var wisdom);

            // Check for any invalid data
            if (string.IsNullOrEmpty(characterName) || highestRollFromHitDice == 0 || charisma == 0 ||
                constitution == 0 || dexterity == 0 || intelligence == 0 || strength == 0 || wisdom == 0)
            {
                jsonOutputField.text = EvaluationErrorMessage;
                return;
            }

            // Continue if everything is ok
            var characterModel = new CharacterSheetModel(characterName, race, class_, alignment,
                                                         highestRollFromHitDice, charisma, constitution, dexterity, intelligence, strength, wisdom);

            jsonOutputField.text = characterModel.ToJson();
            GameManager.Instance.SaveCharacterSheetModel(characterModel);
        }
        /// <summary>
        /// Tries to load the character model from disk.
        /// </summary>
        /// <param name="characterModel">Contains the loaded model upon success.</param>
        /// <returns>Returns whether it successfully loaded the character</returns>
        private static bool TryLoadCharacterFromDisk(out CharacterSheetModel characterModel)
        {
            PersistenceModel gameData = PersistenceSystem.LoadGame();

            characterModel = gameData?.CharacterSheetModel;
            return(characterModel != null);
        }
        public void OnClassChanged(Class class_)
        {
            _dieType          = CharacterSheetModel.GetHitDieTypeByClass(class_);
            dieAvailable.text = _dieType.ToString();

            // Invalidate any previous rolls
            dieResult.text = InvalidDieResult;
        }
Esempio n. 4
0
        public void ToJson_ValidProperties_CorrectJson()
        {
            // Arrange
            var sut = new CharacterSheetModel("Kasper Dissing", Race.HalfElf, Class.Barbarian,
                                              Alignment.ChaoticEvil, 3, 0, 1, 2,
                                              3, 4, 5);
            const string expected = @"{
                            ""CharacterName"": ""Kasper Dissing"",
                            ""AbilityCharisma"": 2,
                            ""AbilityConstitution"": 3,
                            ""AbilityDexterity"": 4,
                            ""AbilityIntelligence"": 5,
                            ""AbilityStrength"": 6,
                            ""AbilityWisdom"": 7,
                            ""Race"": ""Half-Elf"",
                            ""Class"": ""Barbarian"",
                            ""Alignment"": ""Chaotic Evil"",
                            ""ArmorClass"": 12,
                            ""ExperiencePoints"": 0,
                            ""CurrentHitPoints"": 5,
                            ""MaxHitPoints"": 5,
                            ""WalkingSpeed"": 12,
                            ""RunningSpeed"": 25,
                            ""RunningHighJump"": 9,
                            ""StandingHighJump"": 4,
                            ""Items"": []
                            }";

            // Act
            var actual = sut.ToJson();

            // Assert

            // Remove whitespace
            var cleanedActual   = Regex.Replace(actual, @"\s+", "");
            var cleanedExpected = Regex.Replace(expected, @"\s+", "");

            Assert.That(cleanedActual, Is.EqualTo(cleanedExpected));
        }
 /// <summary>
 /// Sets the CharacterSheetModel property and tries to save the game to disc
 /// </summary>
 /// <param name="characterModel">The model to save</param>
 public void SaveCharacterSheetModel(CharacterSheetModel characterModel)
 {
     CharacterSheetModel = characterModel;
     //PersistenceSystem.SaveGame(new PersistenceModel(_characterSheetModel));
 }
        public CharacterSheetModel GenerateCharacterSheet(int characterID)
        {
            using (var ctx = new ApplicationDbContext())
            {
                var detail = ctx.Characters.Single(e => e.CharacterID == characterID);

                var items              = GetItemsByCharacterID(characterID);
                var weaponList         = new List <CharacterItemListItem>();
                var equippedWeaponList = new List <CharacterItemListItem>();
                var armorList          = new List <CharacterItemListItem>();
                var equippedArmorList  = new List <CharacterItemListItem>();
                var gearList           = new List <CharacterItemListItem>();

                var strMod = CalculateAbilityModifier(detail.CharacterStr);
                var dexMod = CalculateAbilityModifier(detail.CharacterDex);
                var conMod = CalculateAbilityModifier(detail.CharacterCon);
                var intMod = CalculateAbilityModifier(detail.CharacterInt);
                var wisMod = CalculateAbilityModifier(detail.CharacterWis);
                var chaMod = CalculateAbilityModifier(detail.CharacterCha);

                short characterSpeed = 40;

                foreach (var item in items)
                {
                    if (item.ItemType == ItemType.Weapon)
                    {
                        weaponList.Add(item);
                        if (item.IsEquipped)
                        {
                            equippedWeaponList.Add(item);
                        }
                    }
                    if (item.ItemType == ItemType.Armor || item.ItemType == ItemType.Shield)
                    {
                        armorList.Add(item);
                        if (item.IsEquipped)
                        {
                            equippedArmorList.Add(item);
                            if (item.ArmorType.Equals(ArmorType.Leather))
                            {
                                characterSpeed = 30;
                            }
                            if (item.ArmorType.Equals(ArmorType.Chain))
                            {
                                characterSpeed = 20;
                            }
                            if (item.ArmorType.Equals(ArmorType.Plate))
                            {
                                characterSpeed = 20;
                            }
                        }
                    }
                    if (item.ItemType == ItemType.Gear)
                    {
                        gearList.Add(item);
                    }
                }

                short characterAC = CalculateAC(equippedArmorList, dexMod);

                int attackBonus = Convert.ToInt32(detail.CharacterAttackBonus);

                foreach (var item in items)
                {
                    if (item.ItemType == ItemType.Weapon)
                    {
                        item.AttackBonus += attackBonus;

                        if (item.WeaponType == WeaponType.Melee)
                        {
                            item.AttackBonus += strMod;
                        }

                        if (item.WeaponType == WeaponType.Ranged)
                        {
                            item.AttackBonus += dexMod;
                            if (detail.CharacterRace == CharacterRace.Halfling)
                            {
                                item.AttackBonus += 1;
                            }
                        }
                    }
                }

                CharacterSheetModel characterSheet = new CharacterSheetModel()
                {
                    OwnerID              = detail.OwnerID,
                    CharacterID          = detail.CharacterID,
                    CharacterName        = detail.CharacterName,
                    CharacterStr         = detail.CharacterStr,
                    StrMod               = strMod,
                    CharacterDex         = detail.CharacterDex,
                    DexMod               = dexMod,
                    CharacterCon         = detail.CharacterCon,
                    ConMod               = conMod,
                    CharacterInt         = detail.CharacterInt,
                    IntMod               = intMod,
                    CharacterWis         = detail.CharacterWis,
                    WisMod               = wisMod,
                    CharacterCha         = detail.CharacterCha,
                    ChaMod               = chaMod,
                    CharacterRace        = detail.CharacterRace,
                    CharacterClass       = detail.CharacterClass,
                    CharacterAbilities   = detail.CharacterAbilities,
                    CharacterXP          = detail.CharacterXP,
                    CharacterLevel       = detail.CharacterLevel,
                    CharacterAC          = characterAC,
                    CharacterHP          = detail.CharacterHP,
                    CharacterAttackBonus = detail.CharacterAttackBonus,
                    CharacterSpeed       = characterSpeed,
                    CharacterNotes       = detail.CharacterNotes,
                    Items           = items,
                    Weapons         = weaponList,
                    EquippedWeapons = equippedWeaponList,
                    Armor           = armorList,
                    EquippedArmor   = equippedArmorList,
                    Gear            = gearList
                };

                return(characterSheet);
            }
        }
 private void Start()
 {
     // Arbitrarily chose Barbarian to be the default
     _dieType          = CharacterSheetModel.GetHitDieTypeByClass(Class.Barbarian);
     dieAvailable.text = _dieType.ToString();
 }