diff --git a/Assemblies/AIImages.dll b/Assemblies/AIImages.dll
index 6c02d36..c014e8e 100644
Binary files a/Assemblies/AIImages.dll and b/Assemblies/AIImages.dll differ
diff --git a/Languages/English/Keyed/AIImages.xml b/Languages/English/Keyed/AIImages.xml
index 3c26cac..e3211d3 100644
--- a/Languages/English/Keyed/AIImages.xml
+++ b/Languages/English/Keyed/AIImages.xml
@@ -80,4 +80,7 @@
Show technical information
Save generation history
Save Path
+ Clear All Generated Images
+ Are you sure you want to delete all generated portrait images? This action cannot be undone.
+ Successfully deleted {0} portrait image(s)
diff --git a/Languages/Russian/Keyed/AIImages.xml b/Languages/Russian/Keyed/AIImages.xml
index 41333ff..f2f2d64 100644
--- a/Languages/Russian/Keyed/AIImages.xml
+++ b/Languages/Russian/Keyed/AIImages.xml
@@ -80,4 +80,7 @@
Показывать техническую информацию
Сохранять историю генераций
Путь для сохранения
+ Очистить все сгенерированные изображения
+ Вы уверены, что хотите удалить все сгенерированные портреты? Это действие нельзя отменить.
+ Успешно удалено {0} изображений портретов
diff --git a/Source/AIImages/Helpers/PawnPortraitHelper.cs b/Source/AIImages/Helpers/PawnPortraitHelper.cs
index 39b3240..426738f 100644
--- a/Source/AIImages/Helpers/PawnPortraitHelper.cs
+++ b/Source/AIImages/Helpers/PawnPortraitHelper.cs
@@ -86,5 +86,59 @@ namespace AIImages.Helpers
comp.PortraitPath = null;
}
}
+
+ ///
+ /// Очистить все сгенерированные портреты
+ ///
+ public static int ClearAllPortraits(string savePath)
+ {
+ int deletedCount = 0;
+
+ // Очищаем компоненты всех пешек
+ if (Current.Game != null && Current.Game.Maps != null)
+ {
+ foreach (var map in Current.Game.Maps)
+ {
+ foreach (var pawn in map.mapPawns.AllPawns)
+ {
+ var comp = GetPortraitComp(pawn);
+ if (comp != null && comp.HasPortrait)
+ {
+ comp.PortraitPath = null;
+ }
+ }
+ }
+ }
+
+ // Удаляем файлы из директории
+ string fullPath = Path.Combine(GenFilePaths.SaveDataFolderPath, savePath);
+
+ if (Directory.Exists(fullPath))
+ {
+ try
+ {
+ var files = Directory.GetFiles(fullPath, "*.png");
+ foreach (var file in files)
+ {
+ try
+ {
+ File.Delete(file);
+ deletedCount++;
+ }
+ catch (System.Exception ex)
+ {
+ Log.Warning($"[AI Images] Failed to delete file {file}: {ex.Message}");
+ }
+ }
+ Log.Message($"[AI Images] Deleted {deletedCount} portrait files");
+ }
+ catch (System.Exception ex)
+ {
+ Log.Error($"[AI Images] Error cleaning portraits directory: {ex.Message}");
+ }
+ }
+
+ return deletedCount;
+ }
}
}
diff --git a/Source/AIImages/UI/AIImagesSettingsUI.cs b/Source/AIImages/UI/AIImagesSettingsUI.cs
index 2d10b37..8db4884 100644
--- a/Source/AIImages/UI/AIImagesSettingsUI.cs
+++ b/Source/AIImages/UI/AIImagesSettingsUI.cs
@@ -366,6 +366,14 @@ namespace AIImages
listingStandard.Label("AIImages.Settings.SavePath".Translate() + ":");
settings.savePath = listingStandard.TextEntry(settings.savePath);
+
+ listingStandard.Gap(12f);
+
+ // Кнопка очистки всех изображений
+ if (listingStandard.ButtonText("AIImages.Settings.ClearAllImages".Translate()))
+ {
+ ClearAllGeneratedImages(settings);
+ }
}
private static void TestApiConnection(
@@ -476,5 +484,23 @@ namespace AIImages
selectedValue = availableValues[0];
}
}
+
+ private static void ClearAllGeneratedImages(AIImagesModSettings settings)
+ {
+ Find.WindowStack.Add(
+ Dialog_MessageBox.CreateConfirmation(
+ "AIImages.Settings.ClearAllImagesConfirm".Translate(),
+ delegate
+ {
+ int deletedCount = PawnPortraitHelper.ClearAllPortraits(settings.savePath);
+ Messages.Message(
+ "AIImages.Settings.ClearAllImagesSuccess".Translate(deletedCount),
+ MessageTypeDefOf.PositiveEvent
+ );
+ },
+ destructive: true
+ )
+ );
+ }
}
}