Files
ai-images/Source/AIImages/Helpers/PawnPortraitHelper.cs

91 lines
2.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.IO;
using AIImages.Components;
using UnityEngine;
using Verse;
namespace AIImages.Helpers
{
/// <summary>
/// Вспомогательный класс для работы с портретами персонажей
/// </summary>
public static class PawnPortraitHelper
{
/// <summary>
/// Получить компонент портрета пешки
/// </summary>
public static PawnPortraitComp GetPortraitComp(Pawn pawn)
{
return pawn?.TryGetComp<PawnPortraitComp>();
}
/// <summary>
/// Сохранить путь к портрету на пешке
/// </summary>
public static void SavePortraitPath(Pawn pawn, string path)
{
var comp = GetPortraitComp(pawn);
if (comp != null)
{
comp.PortraitPath = path;
Log.Message($"[AI Images] Saved portrait path for {pawn.Name}: {path}");
}
}
/// <summary>
/// Получить путь к портрету пешки
/// </summary>
public static string GetPortraitPath(Pawn pawn)
{
var comp = GetPortraitComp(pawn);
return comp?.PortraitPath;
}
/// <summary>
/// Есть ли у пешки сохраненный портрет
/// </summary>
public static bool HasPortrait(Pawn pawn)
{
var comp = GetPortraitComp(pawn);
return comp != null && comp.HasPortrait;
}
/// <summary>
/// Загрузить портрет пешки как текстуру
/// </summary>
public static Texture2D LoadPortrait(Pawn pawn)
{
string path = GetPortraitPath(pawn);
if (string.IsNullOrEmpty(path) || !File.Exists(path))
{
return null;
}
try
{
byte[] imageData = File.ReadAllBytes(path);
Texture2D texture = new Texture2D(2, 2);
texture.LoadImage(imageData);
return texture;
}
catch (System.Exception ex)
{
Log.Warning($"[AI Images] Failed to load portrait for {pawn.Name}: {ex.Message}");
return null;
}
}
/// <summary>
/// Очистить портрет пешки
/// </summary>
public static void ClearPortrait(Pawn pawn)
{
var comp = GetPortraitComp(pawn);
if (comp != null)
{
comp.PortraitPath = null;
}
}
}
}