Files

3.3 KiB
Raw Permalink Blame History

Аватары из PNG-слоёв

avatar_layers — рабочая реализация IAvatarRenderer с идентификатором layers. Контентный мод зависит от avatar_layers>=1, объявляет сущность Kind: avatar с Renderer: layers и кладёт прозрачные PNG в свою папку avatar_layers/.

Полный формат и пример ресурса.

Привязки пресетов

  • canvas: объект Width, Height, по умолчанию 512×1024 логических пикселя.
  • layers/<id>: путь к PNG с расширением, либо объект настройки слоя.
  • null вместо слоя удаляет его из изображения.

Объект слоя содержит Image, Order, X, Y, Width, Height, Visible, Opacity, FlipH, FlipV. Нулевые размеры означают размер холста. Для вырезанных фрагментов задавай прямоугольник явно; для слоёв одинакового холста достаточно пути. Порядок отрисовки — по Order, при равенстве по ID слоя. Более поздний слой выше. Неизвестные свойства, отсутствующие PNG и неверные размеры отклоняются.

IAvatar avatar = AvatarCatalog.Create("my_content/marao");
IAvatarRenderer renderer = AvatarRenderers.Create(avatar);
host.AddChild(renderer.View);
avatar.ApplyPresets(new Dictionary<string, string> { ["eyes_state"] = "closed" });
renderer.Apply(avatar.Resolve());
// До уничтожения host или выгрузки мода:
renderer.Dispose();

Пресеты переключают картинки дискретно, даже если передано время перехода. Положение, прозрачность и отражение также задаются целевым состоянием. Плавные деформации, маски, анимации моргания и интеграция с диалогами пока не реализованы.

Рендерер переиспользует неизменившиеся PNG и освобождает ненужные текстуры после удаления старых узлов. Ошибочное визуальное состояние не заменяет предыдущее. Логическое состояние аватара хранится отдельно. Владелец явно применяет изменения и освобождает рендерер. Все визуальные операции выполняются на главном потоке Godot.

Тестовый набор --itest=avatar_layers_contracts содержит синтетические PNG и проверяет настоящую отрисовку по цветам пикселей, переключение пресетов и освобождение ресурсов. Для пиксельных проверок нужен оконный рендерер. В обычной игре тестовые ресурсы не загружаются.