using System.Collections.Generic; using System.Reflection; using AIImages.Components; using AIImages.Helpers; using HarmonyLib; using Verse; namespace AIImages.Patches { /// /// Патч для добавления PawnPortraitComp ко всем пешкам /// [HarmonyPatch(typeof(ThingWithComps), nameof(ThingWithComps.InitializeComps))] public static class PawnPortraitCompPatch { private static FieldInfo allCompsField = AccessTools.Field(typeof(ThingWithComps), "comps"); [HarmonyPostfix] public static void AddPortraitComp(ThingWithComps __instance) { // Проверяем, является ли объект пешкой-гуманоидом и нет ли уже компонента if ( __instance is Pawn pawn && pawn.RaceProps?.Humanlike == true && pawn.GetComp() == null ) { DebugLogger.Log($"[AI Images] Adding portrait component to {pawn.Name}"); // Создаем компонент var comp = new PawnPortraitComp { parent = pawn }; // Инициализируем компонент comp.Initialize(null); // Получаем список компонентов через рефлексию и добавляем наш var compsList = allCompsField.GetValue(pawn) as List; if (compsList != null) { compsList.Add(comp); DebugLogger.Log( $"[AI Images] Successfully added portrait component to {pawn.Name}" ); } else { DebugLogger.Error($"[AI Images] Failed to get comps list for {pawn.Name}"); } } else if (__instance is Pawn pawn2) { if (pawn2.RaceProps?.Humanlike != true) { DebugLogger.Log($"[AI Images] Skipping non-humanlike pawn: {pawn2.Name}"); } else if (pawn2.GetComp() != null) { DebugLogger.Log( $"[AI Images] Portrait component already exists for {pawn2.Name}" ); } } } } }