Let species prototypes define valid sexes (Sex Refactor) (#11520)

This commit is contained in:
Rane
2022-10-15 17:45:47 -04:00
committed by GitHub
parent 0e18ba567c
commit c70e423ff6
14 changed files with 161 additions and 97 deletions

View File

@@ -171,10 +171,15 @@ namespace Content.Shared.Preferences
var prototypeManager = IoCManager.Resolve<IPrototypeManager>();
var random = IoCManager.Resolve<IRobustRandom>();
var sex = random.Prob(0.5f) ? Sex.Male : Sex.Female;
var sex = Sex.Unsexed;
if (prototypeManager.TryIndex<SpeciesPrototype>(species, out var speciesPrototype))
{
sex = random.Pick(speciesPrototype.Sexes);
}
var gender = sex == Sex.Male ? Gender.Male : Gender.Female;
var name = sex.GetName(species, prototypeManager, random);
var name = GetName(species, gender);
var age = random.Next(MinimumAge, MaximumAge);
return new HumanoidCharacterProfile(name, "", species, age, sex, gender, HumanoidCharacterAppearance.Random(species, sex), ClothingPreference.Jumpsuit, BackpackPreference.Backpack,
@@ -351,13 +356,27 @@ namespace Content.Shared.Preferences
{
var age = Math.Clamp(Age, MinimumAge, MaximumAge);
var prototypeManager = IoCManager.Resolve<IPrototypeManager>();
prototypeManager.TryIndex<SpeciesPrototype>(Species, out var speciesPrototype);
var sex = Sex switch
{
Sex.Male => Sex.Male,
Sex.Female => Sex.Female,
Sex.Unsexed => Sex.Unsexed,
_ => Sex.Male // Invalid enum values.
};
// ensure the species can be that sex
if (speciesPrototype != null)
{
if (!speciesPrototype.Sexes.Contains(sex))
{
sex = speciesPrototype.Sexes[0];
}
}
var gender = Gender switch
{
Gender.Epicene => Gender.Epicene,
@@ -370,7 +389,7 @@ namespace Content.Shared.Preferences
string name;
if (string.IsNullOrEmpty(Name))
{
name = Sex.GetName(Species);
name = GetName(Species, gender);
}
else if (Name.Length > MaxNameLength)
{
@@ -399,7 +418,7 @@ namespace Content.Shared.Preferences
if (string.IsNullOrEmpty(name))
{
name = Sex.GetName(Species);
name = GetName(Species, gender);
}
string flavortext;
@@ -436,8 +455,6 @@ namespace Content.Shared.Preferences
_ => BackpackPreference.Backpack // Invalid enum values.
};
var prototypeManager = IoCManager.Resolve<IPrototypeManager>();
var priorities = new Dictionary<string, JobPriority>(JobPriorities
.Where(p => prototypeManager.HasIndex<JobPrototype>(p.Key) && p.Value switch
{
@@ -481,6 +498,14 @@ namespace Content.Shared.Preferences
_traitPreferences.AddRange(traits);
}
// sorry this is kind of weird and duplicated,
/// working inside these non entity systems is a bit wack
public static string GetName(string species, Gender gender)
{
var namingSystem = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<NamingSystem>();
return namingSystem.GetName(species, gender);
}
public override bool Equals(object? obj)
{
return obj is HumanoidCharacterProfile other && MemberwiseEquals(other);