Пользовательские события | Event Definition
Возможно вы видели такой элемент в триггерах как "Event Definition". И вполне вероятно недоумевали "А как его можно использовать?", "Как его программировать?".
Пытались создать какие-то действия в нём, но всё в пустую.
Пытались создать какие-то действия в нём, но всё в пустую.
Эта небольшая статья поможет ВАМ научится определять свои пользовательские события
Местами может быть не понятно, я буду рассказывать конкретно по пользовательским событиям. Другой базовой информации о триггерах не будет
Местами может быть не понятно, я буду рассказывать конкретно по пользовательским событиям. Другой базовой информации о триггерах не будет
Создание пользовательского события
в правой части триггеров, кликнув правой кнопкой мыши по списку нажмите на пункт "New -> New Event Definition"
Внутри этого созданного события вы увидите базовую структуру Определений действий.
Я расскажу только о тех, что нужны для событий
- Options: Позволяет задать некоторые опции для определения (Например чаще всего используется Create Thread, делающее так чтобы вызов этого Действия/Условия не останавливал основной код триггера)
- Parameters: Нужен для того чтобы событие работало только при каких-то прописанных значений (Из стандартных, хороший примером будет событие Key Pressed, в котором в качестве параметра можно выбрать кнопку активации)
На данном этапе уже можно добавить наше созданное событие к любому триггеру. Только она пока ни на что не реагирует
Регистрация события - Немного теории
И тут подошло время к тому, чтобы разобраться как же всё таки настроить событие так, чтобы оно реагировало на нужные нам вещи.
А всё обстоит на самом деле одновременно и очень хитро, а также и очень просто
События реагируют от других действий. Да-да, Те самые события, которые запускают целые цепочки действий, сами запускаются от другой цепочки действий.
События реагируют от других действий. Да-да, Те самые события, которые запускают целые цепочки действий, сами запускаются от другой цепочки действий.
Приведу пример:
- Есть действие, создания юнита Create Units Facing Angle (Кстати именно оно описано в самых недрах движка игры, остальные 3 работают на базе этого действия), оно из названия понятно создаёт юнитов
- Есть событие Unit is Create, Которое срабатывает после того как каким-либо образом какой-то юнит был создан
- В код действия создания юнита добавлено специальное действие, которое регистрирует событие создания юнитов
- И каждый раз, когда используется действие создания юнита где-либо в коде, будет срабатывать определенное действие, которое регистрирует событие, которое уже в свою очередь запустить другие цепочки действий
Мда уж... наверное закипает голова от всех этих действий, событий, условий и прочего
Регистрация события - Практика
Так как же всё таки происходит регистрация события?
Для этого существует специальное действие Register Events, которое необходимо вызывать внутри определяемого события
Оно способно работать в двух режимах:
- Добавив это действие в триггер - можно будет динамически назначить на этот триггер указанные события, с указанными параметрами
- Если добавить это событие в Event Definition - То оно по сути свяжет это определение события со всеми событиями что будут перечислены в этом действии
Существуют специальные действия с событием, которые позволяют отправлять общие "сообщения" с заданной строкой
- Send Generic Event - Действие, отправляющее строку
- Generic Event - Событие, регистрирующее строку
И пользовательские события как раз с помощью этого и работают
Нужно, в определении события добавить этот Register Events, и в нём указать событие Generic Event с какой-то строкой
Нужно, в определении события добавить этот Register Events, и в нём указать событие Generic Event с какой-то строкой
С помощью этого мы связали наше событие с "общим событием", которое будет реагировать только тогда, когда с помощью Send Generic Event будет отправлена указанная строка, в данном случае MyCustomEventDefinition
Теперь из любого другого триггера, мы можем добавить действие Send Generic Event с нашей строкой, но для начала я вам рекомендую для таких вот строк в события, заводить константы типа "Строка", в таком случае вам будет удобнее потом триггерить ваше событие из нескольких мест
Регистрация события - Использование параметров событий
Создание параметров может также показаться непонятным в использовании, но на деле все максимально понятно и логично, вам просто нужно в саму строку события при регистрации, "приплюсовать" строковые значения своих параметров
Вот наглядный пример:
После всех этих манипуляций мы наконец-таки сможем сделать "триггер-обработчик" в котором будет отправлять нашу ивентовую строку, А также для примера создадим два триггера с нашим событием но с разными параметрами
Конец
Надеюсь этой статьей я хоть кому-нибудь да помогу. Я и сам недавно пользовательские события освоил, хотя и имею уже достаточно значительный опыт в редакторе