Спрайты и иконки
SpriteComponent и IconComponent — два основных компонента отрисовки для сущностей. SpriteComponent предназначен для отрисовки сущностей на карте, тогда как IconComponent — более простой способ представить иконку сущности, скажем, в панели спавна.
Выбор текстуры
Есть два способа выбрать текстуру:
- Непосредственный файл текстуры (сейчас это PNG).
- Из RSI, с ID состояния. RSI — наш эквивалент формата DMI от BYOND, содержащий список иконок по ключу.
Загрузка из текстуры довольно проста. Вы просто указываете путь к файлу .png в VFS, и всё готово.
С RSI вам нужно указать сам RSI в одной переменной, а затем состояние RSI в другой.
IconComponent
У IconComponent есть 3 свойства в прототипе:
- type: Icon
texture: ""
sprite: ""
state: ""
texture используется для ссылки на непосредственную текстуру, например PNG. sprite и state используются для ссылки на RSI и соответствующее ему состояние соответственно. Они взаимоисключающие: нельзя использовать texture вместе с sprite и state.
.
SpriteComponent
Ах, вот тут становится весело. SpriteComponent делает всё: поддержку шейдеров, слои, направления, анимации…
Компонент использует несколько слоёв, вроде оверлеев в BYOND. Эти слои рисуются по порядку, то есть последний слой в списке будет сверху.
Вы можете указать слои в прототипе как список под ключом layers, вот так:
- type: Sprite
layers:
- texture: "a.png"
- texture: "b.png"
- ...
Слой в прототипе имеет следующие свойства:
texture: так же, как дляIconComponent.sprite: так же, как дляIconComponent. Если это не указано, слой может откатиться к свойствуspriteосновного прототипа (подробнее об этом ниже).state: так же, как дляIconComponent: используемое состояние RSI.shader: вот тут становится весело: ID используемого шейдера. Смотрите здесь документацию по шейдерам.scale: Масштаб, применяемый к слою, как vector 2 (2 числа с плавающей запятой, разделённые запятой).rotation: Поворот, применяемый к слою, в градусах.visible:trueилиfalse, включает/отключает слой. Это полезно, если слой включается кодом заново, например пламя сварочного инструмента.
У основного прототипа также есть некоторые свойства:
-
sprite,stateиtexture. Они служат быстрыми сокращениями для тех же свойств на слоях. Если они заданы, добавляется слой с ними в качестве параметров текстуры. Следует отметить, чтоspriteдействует для всех слоёв, если слой не указывает свой собственный. Так что вы можете задать базовый спрайт прототипа как RSI, и тогда каждому слою нужно указывать только состояние. -
scale: масштаб, применяемый к каждому слою. -
rotation: поворот, применяемый к каждому слою, в градусах. -
offset: величина, на которую смещается каждый слой. -
drawdepth: порядок отрисовки этого спрайта. Соответствует перечислениюDrawDepthв коде. Большее значение означает, что объект всегда будет отрисовываться поверх объектов с меньшей глубиной отрисовки. -
color: умножение цвета, применяемое к каждому слою. Используйте шестнадцатеричный цвет. -
directional: если true, спрайт не будет поворачиваться вместе с сущностью, а будет менять направление RSI на север/юг/восток/запад или что угодно. Если false, эти направления будут игнорироваться, и спрайт будет поворачиваться как обычно. Отключение этого полезно для спрайтов с видом сверху, которые должны поворачиваться, например пуль. -
visible: делает весь компонент видимым или нет.
Все эти свойства можно изменять во время выполнения с помощью методов компонента.