Files
mod_avatar_layers/docs/ru.md
T

43 lines
3.3 KiB
Markdown
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.
# Аватары из PNG-слоёв
`avatar_layers` — рабочая реализация `IAvatarRenderer` с идентификатором `layers`.
Контентный мод зависит от `avatar_layers>=1`, объявляет сущность `Kind: avatar` с
`Renderer: layers` и кладёт прозрачные PNG в свою папку `avatar_layers/`.
[Полный формат и пример ресурса](en.md).
## Привязки пресетов
- `canvas`: объект `Width`, `Height`, по умолчанию 512×1024 логических пикселя.
- `layers/<id>`: путь к PNG с расширением, либо объект настройки слоя.
- `null` вместо слоя удаляет его из изображения.
Объект слоя содержит `Image`, `Order`, `X`, `Y`, `Width`, `Height`, `Visible`,
`Opacity`, `FlipH`, `FlipV`. Нулевые размеры означают размер холста. Для вырезанных
фрагментов задавай прямоугольник явно; для слоёв одинакового холста достаточно пути.
Порядок отрисовки — по `Order`, при равенстве по ID слоя. Более поздний слой выше.
Неизвестные свойства, отсутствующие PNG и неверные размеры отклоняются.
```csharp
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 и проверяет
настоящую отрисовку по цветам пикселей, переключение пресетов и освобождение ресурсов.
Для пиксельных проверок нужен оконный рендерер. В обычной игре тестовые ресурсы не загружаются.