Пример #1
0
		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;
		}
Пример #2
0
		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;
		}
Пример #3
0
		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;
		}
Пример #4
0
		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;
		}
Пример #5
0
		public SkillMap GetProfessionValue(SearchableAsset keyValue)
		{

			//check the dictionary against values and return the match
			return Pool[keyValue.Profession];
		}
Пример #6
0
		public void SetNewTarget(int numberOfCultists, SearchableAsset[] sacrificeTargets)
		{
			currentTarget = new YearTarget()
			{
				NumberOfCultists = numberOfCultists,
				SacrificeTargets = sacrificeTargets
			};
		}