public int GetTraitValue(SearchableAsset keyValues, SearchableAsset matchValues) { int fullValue = 0; int temp = 0; //loop through every trait against every other trait and return a full sum fullValue += GetTraitValue(keyValues.Sin, matchValues.Sin); temp = GetTraitValue(keyValues.Sin, matchValues.Sin); fullValue += GetTraitValue(keyValues.Sin, matchValues.Virtue); temp = GetTraitValue(keyValues.Sin, matchValues.Virtue); fullValue += GetTraitValue(keyValues.Virtue, matchValues.Sin); temp = GetTraitValue(keyValues.Virtue, matchValues.Sin); fullValue += GetTraitValue(keyValues.Virtue, matchValues.Virtue); temp = GetTraitValue(keyValues.Virtue, matchValues.Virtue); return fullValue; }
public Person GeneratePerson(int id, SearchableAsset? requiredAsset, Random randomNumber, bool buildAnimals) { //arrays to generate random values var sins = Enum.GetValues(typeof(Sin)).Cast<Sin>().ToArray(); var virtues = Enum.GetValues(typeof(Virtue)).Cast<Virtue>().ToArray(); var professions = Enum.GetValues(typeof(Profession)).Cast<Profession>().Where(s => s.GetAttributes<ProfessionDescriptionAttribute>().Any(a => a.IsAnimal == buildAnimals)).ToArray(); Person freshPerson = new Person(); freshPerson.PersonID = id; freshPerson.Active = true; freshPerson.assets = new SearchableAsset(); if (requiredAsset.HasValue) { freshPerson.assets.Sin = (requiredAsset.Value.Sin == Sin.None ? (Sin)sins.GetValue(randomNumber.Next(1, sins.Length)) : requiredAsset.Value.Sin); freshPerson.assets.Virtue = (requiredAsset.Value.Virtue == Virtue.None ? (Virtue)virtues.GetValue(randomNumber.Next(1, virtues.Length)) : requiredAsset.Value.Virtue); freshPerson.assets.Profession = (requiredAsset.Value.Profession == Profession.None ? (Profession)professions.GetValue(randomNumber.Next(1, professions.Length)) : requiredAsset.Value.Profession); } else { freshPerson.assets.Sin = (Sin)sins.GetValue(randomNumber.Next(1, sins.Length)); freshPerson.assets.Virtue = (Virtue)virtues.GetValue(randomNumber.Next(1, virtues.Length)); freshPerson.assets.Profession = (Profession)professions.GetValue(randomNumber.Next(1, professions.Length)); } freshPerson.Gender = randomNumber.Next(0, 2) == 0 ? Gender.Male : Gender.Female; SkillMap professionSkills = professionPool.GetProfessionValue(freshPerson.assets); freshPerson.Abduction = randomNumber.Next(0, 100) + professionSkills.Abduction; freshPerson.AbductionDefense = randomNumber.Next(0, 100) + professionSkills.AbductionDefense; freshPerson.Investigation = randomNumber.Next(0, 100) + professionSkills.Investigation; freshPerson.InvestigationDefense = randomNumber.Next(0, 100) + professionSkills.InvestigationDefense; freshPerson.Recruitment = randomNumber.Next(0, 100) + professionSkills.Recruitment; freshPerson.RecruitmentDefense = randomNumber.Next(0, 100) + professionSkills.RecruitmentDefense; var descriptions = freshPerson.assets.Profession.GetAttributes<ProfessionDescriptionAttribute>().Where(d => d.Gender == null || d.Gender == freshPerson.Gender).ToArray(); freshPerson.ProfessionDescription = descriptions[randomNumber.Next(0, descriptions.Length)].Description; return freshPerson; }
public static SearchableAsset GenerateRandomAsset(bool profession, bool sin, bool virtue, bool animal, Random randomNumber) { //arrays to generate random values Array sins = Enum.GetValues(typeof(Sin)); Array virtues = Enum.GetValues(typeof(Virtue)); Array professions = Enum.GetValues(typeof(Profession)); SearchableAsset simple = new SearchableAsset(); if (sin) simple.Sin = (Sin)sins.GetValue(randomNumber.Next(1, sins.Length)); else simple.Sin = Sin.None; if (virtue) simple.Virtue = (Virtue)virtues.GetValue(randomNumber.Next(1, virtues.Length)); else simple.Virtue = Virtue.None; if (profession) simple.Profession = (Profession)professions.GetValue(randomNumber.Next(1, professions.Length)); else simple.Profession = Profession.None; return simple; }
public Dictionary<int, Person> SearchPeople(SearchableAsset assets, int positives, int negatives, Random randomNumber) { var searchSuccess = activePool.Values.Where(s => s.Active == true); var searchFail = activePool.Values.Where(s => s.Active == true); Dictionary<int, Person> returnVal = new Dictionary<int, Person>(); if (assets.Sin != Sin.None) { searchSuccess.Where(s => s.assets.Sin == assets.Sin); searchFail.Where(s => s.assets.Sin != assets.Sin); } if (assets.Virtue != Virtue.None) { searchSuccess.Where(s => s.assets.Virtue == assets.Virtue); searchFail.Where(s => s.assets.Virtue != assets.Virtue); } if (assets.Profession != Profession.None) { searchSuccess.Where(s => s.assets.Profession == assets.Profession); searchFail.Where(s => s.assets.Profession != assets.Profession); } //shuffle the results searchSuccess.OrderBy(a => Guid.NewGuid()); searchFail.OrderBy(a => Guid.NewGuid()); searchSuccess.Take(positives); searchFail.Take(negatives); foreach (Person person in searchSuccess) returnVal.Add(person.PersonID, person); foreach (Person person in searchFail) returnVal.Add(person.PersonID, person); return returnVal; }
public SkillMap GetProfessionValue(SearchableAsset keyValue) { //check the dictionary against values and return the match return Pool[keyValue.Profession]; }
public void SetNewTarget(int numberOfCultists, SearchableAsset[] sacrificeTargets) { currentTarget = new YearTarget() { NumberOfCultists = numberOfCultists, SacrificeTargets = sacrificeTargets }; }