public async Task <IActionResult> Create(BasicInfoViewModel viewModel) { if (ModelState.IsValid) { var user = await GetCurrentUserAsync(); var character = new Character { User = user, Name = viewModel.Name, Callsign = viewModel.Callsign, AgeYears = viewModel.AgeYears, Homeworld = viewModel.Homeworld, Rank = viewModel.Rank, Species = viewModel.Species == "Other" ? viewModel.CustomSpecies : viewModel.Species, Attribute = new Attribute { Intelligence = 1, Willpower = 1, Dexterity = 1, Charisma = 1, Wits = 1, Strength = 1, Stamina = 1 }, Skill = new Skill(), ForceSensitive = viewModel.ForceSensitive, }; if (viewModel.Species != "Other") { character.CharacterMerits = new List <CharacterMerit>(); character.CharacterMerits.Add(new CharacterMerit { MeritKey = MeritFactory.GetRacialMeritForSpecies(character.Species) }); var freeMerits = MeritFactory.GetFreeMeritsForSpecies(character.Species); foreach (var merit in freeMerits) { character.CharacterMerits.Add(new CharacterMerit { MeritKey = merit }); } } _repository.AddOrUpdateCharacter(character); return(RedirectToAction("Sheet", new { characterId = character.Id })); } return(View(viewModel)); }
public IActionResult MeritInfo(Guid characterId) { var character = _repository.GetCharacter(characterId); if (character == null) { return(NotFound()); } // deal with prereqs and free merits var viewModel = _viewModelFactory.CreateNew <MeritInfoViewModel>(MeritFactory.GetAllMeritInfo(character)); return(Ok(viewModel)); }
public MeritInfo(MeritKey key, string name, string effect, string description, int cost, Dictionary <string, Prerequisite> prerequisites, Character character, MeritCategory category, bool requiresParameter, bool isFree, string parameterName, string editorDisplayName) { Key = key; Name = name; Effect = effect; Description = description; Cost = cost; Category = category; RequiresParameter = requiresParameter; IsFree = isFree; // if this merit is free for a character ParameterName = parameterName; EditorDisplayName = editorDisplayName; CategoryName = MeritFactory.GetCategoryName(category); IsRacial = category == MeritCategory.Racial; Prerequisites = prerequisites .ToDictionary(d => d.Key, d => new PrerequisiteInfo(d.Value.Name, d.Value.Func, character)); }
public IEnumerable <string> Validate() { if (RemainingXp < 0) { yield return("Remaining XP less than zero."); } foreach (var merit in NonFreeMerits) { var prereqs = MeritFactory.GetPrerequisites(merit.MeritKey); foreach (var prereq in prereqs.Values) { if (!prereq.Func(new Character { Skill = _skill, Attribute = _attribute })) { yield return($"You do not meet the prerequisite {prereq.Name} for {MeritFactory.GetName(merit.MeritKey)}."); } } if (MeritFactory.RequiresParameter(merit.MeritKey) && string.IsNullOrEmpty(merit.Parameter)) { yield return($"{MeritFactory.GetName(merit.MeritKey)} requires additional data."); } } // multi-rank merits require the previous rank foreach (var meritPrereq in MeritFactory.RankedMeritPrerequisites) { if (!MultiRankMeritMeetsRankPrerequisite(meritPrereq.Key, meritPrereq.Value)) { yield return(RankPrerequisiteError(meritPrereq.Key, meritPrereq.Value)); } } }
public MeritEditorTableViewModel(MeritCategory category) { Category = category; Merits = MeritFactory.GetMeritsForCategory(category); Title = MeritFactory.GetCategoryName(category); switch (category) { case MeritCategory.Undefined: break; case MeritCategory.AnimalKen: { Kebab = "animal-ken"; break; } case MeritCategory.Athletics: { Kebab = "athletics"; break; } case MeritCategory.Brawling: { Kebab = "brawling"; break; } case MeritCategory.Firearms: { Kebab = "firearms"; break; } case MeritCategory.Interrogation: { Kebab = "interrogation"; break; } case MeritCategory.Intimidate: { Kebab = "intimidate"; break; } case MeritCategory.Larceny: { Kebab = "larceny"; break; } case MeritCategory.Mechanics: { Kebab = "mechanics"; break; } case MeritCategory.Medicine: { Kebab = "medicine"; break; } case MeritCategory.Mental: { Kebab = "mental"; break; } case MeritCategory.Ordnance: { Kebab = "ordnance"; break; } case MeritCategory.Persuasion: { Kebab = "persuasion"; break; } case MeritCategory.Piloting: { Kebab = "piloting"; break; } case MeritCategory.Physical: { Kebab = "physical"; break; } case MeritCategory.Slicing: { Kebab = "slicing"; break; } case MeritCategory.Social: { Kebab = "social"; break; } case MeritCategory.Stealth: { Kebab = "stealth"; break; } case MeritCategory.Survival: { Kebab = "survival"; break; } case MeritCategory.Weaponry: { Kebab = "weaponry"; break; } case MeritCategory.Item: { Kebab = "item"; break; } case MeritCategory.Racial: { Kebab = "racial"; break; } case MeritCategory.Force: { Kebab = "force"; break; } case MeritCategory.ForceLightsaber: { Kebab = "force-lightsaber"; break; } case MeritCategory.ForceLightsaberForm: { Kebab = "force-lightsaber-form"; break; } case MeritCategory.ForceOffence: { Kebab = "force-offence"; break; } case MeritCategory.ForceAwareness: { Kebab = "force-awareness"; break; } case MeritCategory.ForceEnhancement: { Kebab = "force-enhancement"; break; } } }
private string RankPrerequisiteError(MeritKey chosenMerit, MeritKey prerequisiteMerit) { return($"{MeritFactory.GetName(chosenMerit)} requires {MeritFactory.GetName(prerequisiteMerit)}."); }