Перейти к основному содержанию

Частицы и излучатели

Частицами называют двухмерные, обычно равноускоренные, тела в игровом пространстве. Они испускаются при взаимодействиях с блоками, от самих блоков во время их работы, разрушения инструментов и прочего, прочего, прочего. Излучатели определяют "источники"; те места, относительно которых частицы будут, например, перемещаться. Излучатели позволяют переопределять линейные ускорения испускаемых частиц, значительно расширяя сферы их применения.

Мы начнем с использования глобального излучателя, рассмотрим контексты использования новых систем излучателей и углубимся в небольшое количество математики совместно с ранее изученными игровыми объектами.

Глобальный излучатель — а большего и не нужно​

Поверьте, в большинстве случаев, глобального излучателя будет вполне достаточно. Вам не потребуется создавать свои, если частицы остаются сугубо линейными или и вовсе статичными. Большинство частиц в игре появляются единожды и исчезают через небольшой промежуток времени. Например, пылинки красного камня или окружение адских биомов. Отсутствие условий их существования позволяет добиться единовременного отображения большого количества частиц без провисаний.

В первую очередь, важно понимать, что частицы как и прочие рендеры остаются сугубо клиентскими. Так что наша задача как моддеров обеспечить либо передачу пакетов для их отображения, либо использовать клиентские события для этой цели. Прежде чем рассмотреть примеры, определимся с использованием глобального излучателя.

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. Там задействуется чуть больше геометрии, позволяя более тонко настроить поведение частиц. Пока мы остановимся лишь на использовании вариантов выше.

Привязываем к объектам​

Пока не реализовано
Загляните на эту страницу чуть позже, здесь обязательно появится то, чего вы так долго ждали. Или просто внесите вклад в создание этой страницы, это поможет сразу всем!