Enhance hair color handling in AIImages by adding support for hair color genes in PawnAppearanceData. Update ColorDescriptionService to prioritize gene-based hair color descriptions, improving character appearance representation. Refactor related services to utilize new hair color logic.
All checks were successful
SonarQube Analysis / Build and analyze (push) Successful in 1m40s

This commit is contained in:
Leonid Pershin
2025-11-01 09:15:29 +03:00
parent 60dcb279ae
commit 30010078b4
5 changed files with 431 additions and 34 deletions

View File

@@ -253,24 +253,24 @@ namespace AIImages.Services
case "Skin_Green":
return "green skin";
default:
// Пытаемся определить по названию
if (geneDefName.Contains("Green") || geneDefName.Contains("зел"))
// Пытаемся определить по названию (defName всегда на английском)
if (geneDefName.Contains("Green"))
return "green skin";
if (geneDefName.Contains("Blue") || geneDefName.Contains("син"))
if (geneDefName.Contains("Blue"))
return "blue skin";
if (geneDefName.Contains("Red") || geneDefName.Contains("красн"))
if (geneDefName.Contains("Red"))
return "red skin";
if (geneDefName.Contains("Yellow") || geneDefName.Contains("жёлт"))
if (geneDefName.Contains("Yellow"))
return "yellow skin";
if (geneDefName.Contains("Purple") || geneDefName.Contains("фиолет"))
if (geneDefName.Contains("Purple"))
return "purple skin";
if (geneDefName.Contains("Orange") || geneDefName.Contains("оранж"))
if (geneDefName.Contains("Orange"))
return "orange skin";
if (geneDefName.Contains("Black") || geneDefName.Contains("чёрн"))
if (geneDefName.Contains("Black"))
return "black skin";
if (geneDefName.Contains("White") || geneDefName.Contains("бел"))
if (geneDefName.Contains("White"))
return "white skin";
if (geneDefName.Contains("Gray") || geneDefName.Contains("Grey") || geneDefName.Contains("сер"))
if (geneDefName.Contains("Gray") || geneDefName.Contains("Grey"))
return "gray skin";
return null;
}
@@ -283,8 +283,13 @@ namespace AIImages.Services
StringBuilder hair = new StringBuilder();
// Цвет волос
string hairColor = ColorDescriptionService.GetHairColorDescription(data.HairColor);
// Цвет волос - сначала проверяем гены
string hairColor = GetHairColorFromData(data);
if (string.IsNullOrEmpty(hairColor))
{
// Если нет генов, используем цвет из RGB
hairColor = ColorDescriptionService.GetHairColorDescription(data.HairColor);
}
hair.Append(hairColor);
hair.Append(" hair, ");
@@ -299,6 +304,94 @@ namespace AIImages.Services
return hair.ToString();
}
/// <summary>
/// Получает описание цвета волос из генов в данных персонажа
/// </summary>
private string GetHairColorFromData(PawnAppearanceData data)
{
if (data?.HairColorGeneDefNames == null || !data.HairColorGeneDefNames.Any())
return null;
// Берем первый ген (они уже отсортированы по приоритету)
string geneDefName = data.HairColorGeneDefNames.FirstOrDefault();
if (string.IsNullOrEmpty(geneDefName))
return null;
// Определяем цвет волос по названию гена
return GetHairColorFromGeneDefName(geneDefName);
}
/// <summary>
/// Получает описание цвета волос из названия гена
/// </summary>
private string GetHairColorFromGeneDefName(string geneDefName)
{
if (string.IsNullOrEmpty(geneDefName))
return null;
// Специфичные описания для известных генов цвета волос
switch (geneDefName)
{
case "Hair_Blond":
case "Hair_Blonde":
return "blond";
case "Hair_Brown":
return "brown";
case "Hair_Black":
return "black";
case "Hair_White":
return "white";
case "Hair_Red":
return "red";
case "Hair_Ginger":
return "ginger";
case "Hair_Auburn":
return "auburn";
case "Hair_Copper":
case "Hair_CopperBrown":
return "copper-brown";
case "Hair_Light":
return "light";
case "Hair_Dark":
return "dark";
default:
// Пытаемся определить по названию (defName всегда на английском)
if (geneDefName.Contains("Blond"))
return "blond";
if (geneDefName.Contains("Brown"))
return "brown";
if (geneDefName.Contains("Black"))
return "black";
if (geneDefName.Contains("White"))
return "white";
if (geneDefName.Contains("Red"))
return "red";
if (geneDefName.Contains("Ginger"))
return "ginger";
if (geneDefName.Contains("Auburn"))
return "auburn";
if (geneDefName.Contains("Copper"))
return "copper-brown";
if (geneDefName.Contains("Orange"))
return "orange-red";
if (geneDefName.Contains("Light"))
return "light";
if (geneDefName.Contains("Dark"))
return "dark";
if (geneDefName.Contains("Blue"))
return "blue";
if (geneDefName.Contains("Green"))
return "green";
if (geneDefName.Contains("Purple"))
return "purple";
if (geneDefName.Contains("Pink"))
return "pink";
if (geneDefName.Contains("Gray") || geneDefName.Contains("Grey"))
return "gray";
return null;
}
}
private string GetMoodFromTraits(List<Trait> traits)
{
if (traits == null || !traits.Any())