Спрайты и иконки

SpriteComponent и IconComponent — два основных компонента отрисовки для сущностей. SpriteComponent предназначен для отрисовки сущностей на карте, тогда как IconComponent — более простой способ представить иконку сущности, скажем, в панели спавна.

Выбор текстуры

Есть два способа выбрать текстуру:

  1. Непосредственный файл текстуры (сейчас это PNG).
  2. Из 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: делает весь компонент видимым или нет.

Все эти свойства можно изменять во время выполнения с помощью методов компонента.

Subpages