public IActionResult SpecificGeneration(string selectedrace, string selectedclass, string selectedlevel) { AutoDelete(); int? SessionId = HttpContext.Session.GetInt32("UserId"); User SessionUser = _context.Users.FirstOrDefault(u => u.UserId == SessionId); if (SessionUser == null) { return(View("UserLogin")); } int Level = Int32.Parse(selectedlevel); if (Level == 0) //Assign the base choice value as == 0 { Level = rand.Next(1, 21); } //creating input for creation and modification of base in other functions PlayerStat playerStat = new PlayerStat(Level); // Run player stat through background PlayerBG playerBG = new PlayerBG(); // Returns player Stat VVV playerBG.BGSelector(playerStat, playerBG); // Determines player Race and then run stats PlayerRace playerRace = new PlayerRace(); // Returns player Stat VVV // Determine Player Class and run playerStat if (selectedrace != "Random") { playerRace.SpecificRaceSelector(Level, playerStat, playerRace, selectedrace); } else { playerRace.RaceSelector(Level, playerStat, playerRace); } PlayerClass playerClass = new PlayerClass(Level, playerStat); // Returns player Stat VVV if (selectedclass != "Random") { playerClass.SpecClassSelector(Level, playerStat, playerClass, selectedclass); } else { playerClass.ClassSelector(Level, playerStat, playerClass); } // reruns numbers based on updated proficiencies and skill increases playerStat.UpdatePro(playerStat); // create connection to all character objects within the character NewCharacter newPlayer = new NewCharacter(Level, playerStat, playerRace, playerClass, playerBG, SessionUser); _context.PlayerStats.Add(playerStat); _context.PlayerBGs.Add(playerBG); _context.PlayerClasses.Add(playerClass); _context.PlayerRaces.Add(playerRace); _context.NewCharacter.Add(newPlayer); // Feat Generation List <Feature> charFeatures = _context.Features.Where(f => ((f.FeatSource == playerClass.ClassName) && (f.FeatLevel <= Level)) || ((f.FeatSource == playerClass.SubClassName) && (f.FeatLevel <= Level))).ToList(); foreach (Feature feat in charFeatures) { var Fassoc = new FeatureAssoc(newPlayer, feat); _context.Feature_Associations.Add(Fassoc); _context.SaveChanges(); } List <Feature> Feats = _context.NewCharacter.Include(c => c.FeaturesList) .ThenInclude(fa => fa.FeatureA) .FirstOrDefault(c => c.CharacterId == newPlayer.CharacterId) .FeaturesList.Select(f => f.FeatureA) .OrderBy(f => f.FeatLevel) .ToList(); List <Spell> ClassAvailbleSpells = _context.Spells.Where(s => s.Source1 == newPlayer.playerClass.ClassName || s.Source2 == newPlayer.playerClass.ClassName || s.Source3 == newPlayer.playerClass.ClassName || s.Source4 == newPlayer.playerClass.ClassName || s.Source5 == newPlayer.playerClass.ClassName || s.Source6 == newPlayer.playerClass.ClassName || s.Source7 == newPlayer.playerClass.ClassName ).ToList(); List <Spell> NonClassSpells = _context.Spells.Where(s => s.Source1 != newPlayer.playerClass.ClassName || s.Source2 != newPlayer.playerClass.ClassName || s.Source3 != newPlayer.playerClass.ClassName || s.Source4 != newPlayer.playerClass.ClassName || s.Source5 != newPlayer.playerClass.ClassName || s.Source6 != newPlayer.playerClass.ClassName || s.Source7 != newPlayer.playerClass.ClassName ).ToList(); Spell FetchSpell = new Spell(); List <Spell> availableSpells = FetchSpell.GetPossibleSpells(newPlayer, ClassAvailbleSpells, NonClassSpells); SpellAssoc AlwaysPreppedChecker = new SpellAssoc(); foreach (Spell s in availableSpells) { SpellAssoc a = new SpellAssoc(newPlayer, s);//always true AlwaysPreppedChecker.AlwaysPreppedChecker(newPlayer, s, a); _context.Spell_Associations.Add(a); _context.SaveChanges(); } List <Spell> Spells = _context.NewCharacter .Include(c => c.SpellList) .ThenInclude(sa => sa.SpellA) .FirstOrDefault(c => c.CharacterId == newPlayer.CharacterId) .SpellList.Select(s => s.SpellA) .OrderBy(f => f.SpellLevel) .ThenBy(f => f.SpellName) .ToList(); _context.SaveChanges(); int passiveperception = 10 + newPlayer.playerStat.Perception; //Dynamic model with USer, Login, Character dynamic MyModel = new ExpandoObject(); MyModel.User = SessionUser; MyModel.Login = new Login(); MyModel.Character = newPlayer; MyModel.Features = Feats; MyModel.Spells = Spells; MyModel.PassivePerception = passiveperception; return(View("Index", MyModel)); }
public IActionResult Index() { // Check for features, if null populate DB Feature featTest = _context.Features.FirstOrDefault(f => f.FeatureId == 1); if (featTest == null) { Feature feats = new Feature(); List <Feature> FeatureList = feats.GenerateFeatureList(); foreach (Feature f in FeatureList) { _context.Features.Add(f); _context.SaveChanges(); } } // Check for spells, if null populate DB Spell spellTest = _context.Spells.FirstOrDefault(s => s.SpellId == 1); if (spellTest == null) { Spell spell = new Spell(); List <Spell> SpellList = spell.GenerateSpellList(); foreach (Spell s in SpellList) { _context.Spells.Add(s); _context.SaveChanges(); } } // Check for base user, if null Populate DB User userCheck = _context.Users.FirstOrDefault(u => u.UserId == 1); if (userCheck == null) { string email = "*****@*****.**"; string uName = "UnameTest"; string PW = "vu942kjdaiduq934i3o4odsud9qw324"; User testUser = new User(email, uName, PW); _context.Users.Add(testUser); _context.SaveChanges(); userCheck = testUser; } // Create a function to generate 1 character for display if none in dB NewCharacter characterCheck = _context.NewCharacter.FirstOrDefault(c => c.CharacterId == 1); if (characterCheck == null) { NewCharacter test = new NewCharacter(1, userCheck); test.isSaved = true; test.playerName = "First Character Generated"; _context.PlayerStats.Add(test.playerStat); _context.PlayerBGs.Add(test.playerBG); _context.PlayerClasses.Add(test.playerClass); _context.PlayerRaces.Add(test.playerRace); _context.NewCharacter.Add(test); _context.SaveChanges(); List <Feature> charFeatures = _context.Features.Where(f => ((f.FeatSource == test.playerClass.ClassName) && (f.FeatLevel <= test.Level)) || ((f.FeatSource == test.playerClass.SubClassName) && (f.FeatLevel <= test.Level))).ToList(); foreach (Feature feat in charFeatures) { var Fassoc = new FeatureAssoc(test, feat); //id 1- 42 _context.Feature_Associations.Add(Fassoc); _context.SaveChanges(); } // Get all associated features with characterID List <Feature> Feats = _context.NewCharacter .Include(c => c.FeaturesList) .ThenInclude(fa => fa.FeatureA) .FirstOrDefault(c => c.CharacterId == test.CharacterId) .FeaturesList.Select(f => f.FeatureA) .OrderBy(f => f.FeatLevel) .ToList(); List <Spell> ClassAvailbleSpells = _context.Spells.Where(s => s.Source1 == test.playerClass.ClassName || s.Source2 == test.playerClass.ClassName || s.Source3 == test.playerClass.ClassName || s.Source4 == test.playerClass.ClassName || s.Source5 == test.playerClass.ClassName || s.Source6 == test.playerClass.ClassName || s.Source7 == test.playerClass.ClassName ).ToList(); List <Spell> NonClassSpells = _context.Spells.Where(s => s.Source1 != test.playerClass.ClassName || s.Source2 != test.playerClass.ClassName || s.Source3 != test.playerClass.ClassName || s.Source4 != test.playerClass.ClassName || s.Source5 != test.playerClass.ClassName || s.Source6 != test.playerClass.ClassName || s.Source7 != test.playerClass.ClassName ).ToList(); Spell FetchSpell = new Spell(); List <Spell> Spells = FetchSpell.GetPossibleSpells(test, ClassAvailbleSpells, NonClassSpells); SpellAssoc AlwaysPreppedChecker = new SpellAssoc(); foreach (Spell s in Spells) { SpellAssoc a = new SpellAssoc(test, s); //insert alwayspreppedfunction here AlwaysPreppedChecker.AlwaysPreppedChecker(test, s, a); _context.Spell_Associations.Add(a); _context.SaveChanges(); } int passiveperception = 10 + test.playerStat.Perception; // Dynamic model to provide all available objects and data dynamic MyModel = new ExpandoObject(); MyModel.User = userCheck; MyModel.Login = new Login(); MyModel.Character = test; MyModel.Features = Feats; MyModel.Spells = Spells; MyModel.PassivePerception = passiveperception; return(View("index", MyModel)); } // if DB is populated with spells, feats, 1 character and 1 user are already present else { // Home screen selects and shows previously generated characters. IF players would like to generate new characters or save them, they must login int? SessionId = HttpContext.Session.GetInt32("UserId"); User SessionUser = _context.Users.FirstOrDefault(u => u.UserId == SessionId); // Get list of all Currently generated characters List <NewCharacter> CharacterList = _context.NewCharacter.ToList(); // select random character and gather all stats, BG, Race and class // random selection might need tweaking int characterNum = 1; NewCharacter character = _context.NewCharacter.Include(c => c.playerRace).Include(c => c.playerClass).Include(c => c.playerStat).Include(c => c.playerBG).FirstOrDefault(c => c.CharacterId == characterNum); // LINQ query all Feature Associations List <Feature> Feats = _context.NewCharacter .Include(c => c.FeaturesList) .ThenInclude(fa => fa.FeatureA) .FirstOrDefault(c => c.CharacterId == character.CharacterId) .FeaturesList.Select(f => f.FeatureA) .OrderBy(f => f.FeatLevel) .ToList(); List <Spell> Spells = _context.NewCharacter .Include(c => c.SpellList) .ThenInclude(sa => sa.SpellA) .FirstOrDefault(c => c.CharacterId == character.CharacterId) .SpellList.Select(s => s.SpellA) .OrderBy(f => f.SpellLevel) .ThenBy(f => f.SpellName) .ToList(); // Pass Model User, Character, Feats //passiveperception, because it hates trying to do it on the front end int passiveperception = 10 + character.playerStat.Perception; dynamic MyModel = new ExpandoObject(); MyModel.User = SessionUser; MyModel.Login = new Login(); MyModel.Character = character; MyModel.Features = Feats; MyModel.Spells = Spells; MyModel.PassivePerception = passiveperception; return(View("index", MyModel)); } }