Choose an archetype with fallback to random
This commit is contained in:
parent
5e37b43fc9
commit
1c7e301fd8
5 changed files with 82 additions and 11 deletions
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<Version>0.3.101</Version>
|
<Version>0.4.101</Version>
|
||||||
<TargetFramework>net9.0</TargetFramework>
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
namespace PersonaForge;
|
namespace PersonaForge;
|
||||||
|
|
||||||
public class PersonalityArchetype
|
public class Archetypes
|
||||||
{
|
{
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public Dictionary<string, double> TraitBiases { get; set; } = new();
|
public Dictionary<string, double> TraitBiases { get; set; } = new();
|
||||||
|
|
||||||
// TODO: Load default archetypes from a file or database
|
// TODO: Load default archetypes from a file or database
|
||||||
public static List<PersonalityArchetype> DefaultArchetypes() => new()
|
public static List<Archetypes> DefaultArchetypes() => new()
|
||||||
{
|
{
|
||||||
new PersonalityArchetype
|
new Archetypes
|
||||||
{
|
{
|
||||||
Name = "Grumpy",
|
Name = "Grumpy",
|
||||||
TraitBiases = new Dictionary<string, double>
|
TraitBiases = new Dictionary<string, double>
|
||||||
|
@ -20,7 +20,7 @@ public class PersonalityArchetype
|
||||||
{ "Active", 0.5 }
|
{ "Active", 0.5 }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
new PersonalityArchetype
|
new Archetypes
|
||||||
{
|
{
|
||||||
Name = "Party Animal",
|
Name = "Party Animal",
|
||||||
TraitBiases = new Dictionary<string, double>
|
TraitBiases = new Dictionary<string, double>
|
||||||
|
@ -31,6 +31,47 @@ public class PersonalityArchetype
|
||||||
{ "Nice", 0.5 },
|
{ "Nice", 0.5 },
|
||||||
{ "Neat", 0.3 }
|
{ "Neat", 0.3 }
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
new Archetypes
|
||||||
|
{
|
||||||
|
Name = "Lazy",
|
||||||
|
TraitBiases = new Dictionary<string, double>
|
||||||
|
{
|
||||||
|
{ "Nice", 0.8 },
|
||||||
|
{ "Playful", 0.6 },
|
||||||
|
{ "Outgoing", 0.4 },
|
||||||
|
{ "Neat", 0.2 },
|
||||||
|
{ "Active", 0.1 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new Archetypes
|
||||||
|
{
|
||||||
|
Name = "Shy",
|
||||||
|
TraitBiases = new Dictionary<string, double>
|
||||||
|
{
|
||||||
|
{ "Nice", 0.9 },
|
||||||
|
{ "Playful", 0.7 },
|
||||||
|
{ "Outgoing", 0.3 },
|
||||||
|
{ "Neat", 0.5 },
|
||||||
|
{ "Active", 0.2 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new Archetypes
|
||||||
|
{
|
||||||
|
Name = "Energetic",
|
||||||
|
TraitBiases = new Dictionary<string, double>
|
||||||
|
{
|
||||||
|
{ "Nice", 0.7 },
|
||||||
|
{ "Playful", 0.6 },
|
||||||
|
{ "Outgoing", 0.5 },
|
||||||
|
{ "Neat", 0.4 },
|
||||||
|
{ "Active", 0.3 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new Archetypes
|
||||||
|
{
|
||||||
|
Name = "Random",
|
||||||
|
TraitBiases = new()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,12 +6,24 @@ public static class PersonalityGen
|
||||||
const int TotalBudget = 25;
|
const int TotalBudget = 25;
|
||||||
static readonly Random rng = new();
|
static readonly Random rng = new();
|
||||||
|
|
||||||
public static PersonalityTraits GenerateRandom()
|
public static PersonalityTraits GenerateRandom(Dictionary<string, double>? bias = null)
|
||||||
{
|
{
|
||||||
var profile = PersonalityTraits.Create();
|
var profile = PersonalityTraits.Create();
|
||||||
var traits = new List<string> { "Outgoing", "Nice", "Playful", "Neat", "Active" };
|
var traits = new List<string> { "Outgoing", "Nice", "Playful", "Neat", "Active" };
|
||||||
var remaining = TotalBudget;
|
var remaining = TotalBudget;
|
||||||
|
|
||||||
|
if (bias != null)
|
||||||
|
{
|
||||||
|
foreach (var kvp in bias)
|
||||||
|
{
|
||||||
|
var trait = kvp.Key;
|
||||||
|
var points = Convert.ToInt32(kvp.Value);
|
||||||
|
var safePoints = Math.Min(points, MaxPoints);
|
||||||
|
SetTraitPoints(profile, trait, safePoints);
|
||||||
|
remaining -= points;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while (remaining > 0)
|
while (remaining > 0)
|
||||||
{
|
{
|
||||||
var trait = traits[rng.Next(traits.Count)];
|
var trait = traits[rng.Next(traits.Count)];
|
||||||
|
|
22
Program.cs
22
Program.cs
|
@ -8,12 +8,30 @@ Console.WriteLine("=== Welcome to The Sims 2 Personality Generator ===");
|
||||||
Console.Write("Enter Sim's name: ");
|
Console.Write("Enter Sim's name: ");
|
||||||
string name = Console.ReadLine() ?? "Unndanmed Sim";
|
string name = Console.ReadLine() ?? "Unndanmed Sim";
|
||||||
|
|
||||||
var qualities = PersonalityGen.GenerateRandom();
|
// Move the conversion logic to a separate method
|
||||||
|
Console.WriteLine("\nAvailable Archetypes:");
|
||||||
|
var archetypeList = Archetypes.DefaultArchetypes();
|
||||||
|
var archetypeDict = new Dictionary<string, Dictionary<string, double>>();
|
||||||
|
foreach (var archetype in archetypeList)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"- {archetype.Name}");
|
||||||
|
archetypeDict.Add(archetype.Name, archetype.TraitBiases);
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.Write("Enter archetype: ");
|
||||||
|
string archetypeInput = Console.ReadLine() ?? "Random";
|
||||||
|
if (!archetypeDict.ContainsKey(archetypeInput))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Invalid archetype. Using Random.");
|
||||||
|
archetypeInput = "Random";
|
||||||
|
}
|
||||||
|
|
||||||
|
var qualities = PersonalityGen.GenerateRandom(archetypeDict[archetypeInput]);
|
||||||
var profile = new PersonaProfile
|
var profile = new PersonaProfile
|
||||||
{
|
{
|
||||||
Name = name,
|
Name = name,
|
||||||
Qualities = qualities,
|
Qualities = qualities,
|
||||||
Archetype = "Random"
|
Archetype = archetypeInput
|
||||||
};
|
};
|
||||||
|
|
||||||
Console.WriteLine($"{name}'s Profile{Environment.NewLine}{PersonaProfile.ToJson(profile)}");
|
Console.WriteLine($"{name}'s Profile{Environment.NewLine}{PersonaProfile.ToJson(profile)}");
|
||||||
|
|
|
@ -18,8 +18,8 @@ With Sims 3 and later, creating personalities is as simple as selecting a trait.
|
||||||
| ----- | ------------------------------------------- | ------ |
|
| ----- | ------------------------------------------- | ------ |
|
||||||
| v0.1 | Core random point generator (working) | ✅ |
|
| v0.1 | Core random point generator (working) | ✅ |
|
||||||
| v0.2 | PersonalityProfile class | ✅ |
|
| v0.2 | PersonalityProfile class | ✅ |
|
||||||
| v0.3 | Interactive JSON export | ✅ |
|
| v0.3 | Interactive JSON export | ✅ |
|
||||||
| v0.4 | Archetypes with weighted biases | 🔜 |
|
| v0.4 | Archetypes with weighted biases | ✅ |
|
||||||
| v0.5 | Profile import/load from JSON | 🔜 |
|
| v0.5 | Profile import/load from JSON | 🔜 |
|
||||||
| v1.0 | Stable "Release" version with documentation | 🔜 |
|
| v1.0 | Stable "Release" version with documentation | 🔜 |
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue