Swapped old code (was an AI-generated template, anyway) for the new PersonalityGen-based one.
62 lines
1.7 KiB
C#
62 lines
1.7 KiB
C#
namespace PersonaForge;
|
|
|
|
public static class PersonalityGen
|
|
{
|
|
const int MaxPoints = 10;
|
|
const int TotalBudget = 25;
|
|
static readonly Random rng = new();
|
|
|
|
public static PersonalityProfile GenerateRandom()
|
|
{
|
|
var profile = PersonalityProfile.Create();
|
|
var traits = new List<string> { "Outgoing", "Nice", "Playful", "Neat", "Active" };
|
|
var remaining = TotalBudget;
|
|
|
|
while (remaining > 0)
|
|
{
|
|
var trait = traits[rng.Next(traits.Count)];
|
|
var current = GetCurrentTraitPoints(profile, trait);
|
|
if (current < MaxPoints)
|
|
{
|
|
var add = (rng.NextDouble() < 0.1) ? Math.Min(2, MaxPoints - current) : 1;
|
|
add = Math.Min(add, remaining);
|
|
SetTraitPoints(profile, trait, current + add);
|
|
remaining -= add;
|
|
}
|
|
}
|
|
|
|
return profile;
|
|
}
|
|
|
|
static int GetCurrentTraitPoints(PersonalityProfile p, string trait) => trait switch
|
|
{
|
|
"Outgoing" => p.Outgoing,
|
|
"Nice" => p.Nice,
|
|
"Playful" => p.Playful,
|
|
"Neat" => p.Neat,
|
|
"Active" => p.Active,
|
|
_ => 0
|
|
};
|
|
|
|
static void SetTraitPoints(PersonalityProfile p, string trait, int points)
|
|
{
|
|
switch (trait)
|
|
{
|
|
case "Outgoing":
|
|
p.Outgoing = points;
|
|
break;
|
|
case "Nice":
|
|
p.Nice = points;
|
|
break;
|
|
case "Playful":
|
|
p.Playful = points;
|
|
break;
|
|
case "Neat":
|
|
p.Neat = points;
|
|
break;
|
|
case "Active":
|
|
p.Active = points;
|
|
break;
|
|
}
|
|
}
|
|
}
|