Add skin color gene handling to PawnAppearanceData and update skin tone description logic. Enhance AIImages.dll to support special skin tones based on gene definitions, improving character appearance representation.
All checks were successful
SonarQube Analysis / Build and analyze (push) Successful in 1m57s
All checks were successful
SonarQube Analysis / Build and analyze (push) Successful in 1m57s
This commit is contained in:
@@ -205,12 +205,77 @@ namespace AIImages.Services
|
||||
|
||||
private string GetSkinToneDescription(PawnAppearanceData data)
|
||||
{
|
||||
// Этот метод будет использоваться в контексте генерации промптов
|
||||
// где у нас есть только данные внешности, но не сам Pawn
|
||||
// Поэтому используем fallback к определению по цвету
|
||||
// Сначала проверяем специальные гены цвета кожи (зелёная, синяя и т.д.)
|
||||
if (data.SkinColorGeneDefNames != null && data.SkinColorGeneDefNames.Any())
|
||||
{
|
||||
// Ищем специальные гены (зелёная, синяя, красная и т.д.)
|
||||
foreach (var geneDefName in data.SkinColorGeneDefNames)
|
||||
{
|
||||
string specialSkinTone = GetSpecialGeneSkinTone(geneDefName);
|
||||
if (!string.IsNullOrEmpty(specialSkinTone))
|
||||
return specialSkinTone;
|
||||
}
|
||||
}
|
||||
|
||||
// Если нет специальных генов, используем вычисленный RimWorld цвет
|
||||
return ColorDescriptionService.GetSkinToneDescription(data.SkinColor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получает описание для специальных генов цвета кожи
|
||||
/// </summary>
|
||||
private string GetSpecialGeneSkinTone(string geneDefName)
|
||||
{
|
||||
switch (geneDefName)
|
||||
{
|
||||
case "Skin_InkBlack":
|
||||
return "ink black skin";
|
||||
case "Skin_SlateGray":
|
||||
return "slate gray skin";
|
||||
case "Skin_LightGray":
|
||||
return "light gray skin";
|
||||
case "Skin_SheerWhite":
|
||||
return "sheer white skin";
|
||||
case "Skin_Blue":
|
||||
return "blue skin";
|
||||
case "Skin_Purple":
|
||||
return "purple skin";
|
||||
case "Skin_PaleRed":
|
||||
return "pale red skin";
|
||||
case "Skin_DeepRed":
|
||||
return "deep red skin";
|
||||
case "Skin_PaleYellow":
|
||||
return "pale yellow skin";
|
||||
case "Skin_DeepYellow":
|
||||
return "deep yellow skin";
|
||||
case "Skin_Orange":
|
||||
return "orange skin";
|
||||
case "Skin_Green":
|
||||
return "green skin";
|
||||
default:
|
||||
// Пытаемся определить по названию
|
||||
if (geneDefName.Contains("Green") || geneDefName.Contains("зел"))
|
||||
return "green skin";
|
||||
if (geneDefName.Contains("Blue") || geneDefName.Contains("син"))
|
||||
return "blue skin";
|
||||
if (geneDefName.Contains("Red") || geneDefName.Contains("красн"))
|
||||
return "red skin";
|
||||
if (geneDefName.Contains("Yellow") || geneDefName.Contains("жёлт"))
|
||||
return "yellow skin";
|
||||
if (geneDefName.Contains("Purple") || geneDefName.Contains("фиолет"))
|
||||
return "purple skin";
|
||||
if (geneDefName.Contains("Orange") || geneDefName.Contains("оранж"))
|
||||
return "orange skin";
|
||||
if (geneDefName.Contains("Black") || geneDefName.Contains("чёрн"))
|
||||
return "black skin";
|
||||
if (geneDefName.Contains("White") || geneDefName.Contains("бел"))
|
||||
return "white skin";
|
||||
if (geneDefName.Contains("Gray") || geneDefName.Contains("Grey") || geneDefName.Contains("сер"))
|
||||
return "gray skin";
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private string GetHairDescription(PawnAppearanceData data)
|
||||
{
|
||||
if (string.IsNullOrEmpty(data.HairDefName))
|
||||
|
||||
Reference in New Issue
Block a user