Частицы и излучатели
Частицами называют двухмерные, обычно равноускоренные, тела в игровом пространстве. Они испускаются при взаимодействиях с блоками, от самих блоков во время их работы, разрушения инструментов и прочего, прочего, прочего. Излучатели определяют "источники"; те места, относительно которых частицы будут, например, перемещаться. Излучатели позволяют переопределять линейные уско рения испускаемых частиц, значительно расширяя сферы их применения.
Мы начнем с использования глобального излучателя, рассмотрим контексты использования новых систем излучателей и углубимся в небольшое количество математики совместно с ранее изученными игровыми объектами.
Глобальный излучатель — а большего и не нужно
Поверьте, в большинстве случаев, глобального излучателя будет вполне достаточно. Вам не потребуется создавать свои, если частицы остаются сугубо линейными или и вовсе статичными. Большинство частиц в игре появляются единожды и исчезают через небольшой промежуток времени. Например, пылинки красного камня или окружение адских биомов. Отсутствие условий их существования позволяет добиться единовременного отображения большого количества частиц без провисаний.
В первую очередь, важно понимать, что частицы как и прочие рендеры остаются сугубо клиентскими. Так что наша з адача как моддеров обеспечить либо передачу пакетов для их отображения, либо использовать клиентские события для этой цели. Прежде чем рассмотреть примеры, определимся с использованием глобального излучателя.
Particles.addParticle(<числовой идентификатор партикля>, <x>, <y>, <z>, <ускорение по x>, <ускорение по y>, <ускорение по x>, <вариация партикля>);
Particles.addFarParticle(<числовой идентификатор партикля>, <x>, <y>, <z>, <ускорение по x>, <ускорение по y>, <ускорение по x>, <вариация партикля>);
То есть все излучение частиц сводится к указанию идентификатора, начальной точки и линейного ускорения. Вариация в некоторых случаях определяет размер частицы, в некоторых, например, перевернута ли частица. Для нот над проигрывателем вариация определяет ее цвет, это внутреигровые партикли. Некоторые частицы имеют собственное ускорение помимо того, что мы можем указать здесь. Например, частички огня перемещаются и меняют размер независимо от входного ускорения, это опять же весьма специфично для определенных типов. Попробуйте сами поэкспериментировать с ними в игре.
Мы неоднократно задействовали первую функцию в прошлых примерах. Вторая же является полной копией первой, за немногим исключением того, что ко второй дополнительно накладывается шейдер размытия.
Паттерны ускорения
Отдельные частицы сами по себе весьма незначительны, игроку даже может быть сложно заметить их. Обычно для обозначения работы чего-либо задействуется целая куча партиклей. Мы воспользуемся кодом World of Magical Art для определения нескольких базовых форм, которые могут быть созданы с помощью частиц:
- Взрыв
- Окружность
- Линия
- Спираль
- Высокая спираль
- Эллипс
const effectExplode = function(type, x, y, z, power, count) {
count ? null : count = 25;
power ? null : power = 0.3;\n
for (let i = 0; i < count; i++) {
Particles.addParticle(type, x + 0.5, y + 0.5, z + 0.5, (Math.random() - 0.5) * power, (Math.random() - 0.5) * power, (Math.random() - 0.5) * power, 0);
}
};
Большинство модов так или иначе взаимодействуют с частицами, еще несколько подобных примеров можно найти, к примеру, в Ancient Wonders. Там задействуется чуть больше геометрии, позволяя более тонко настроить поведение частиц. Пока мы остановимся лишь на использовании вариантов выше.