Table of Contents

Использование EventBus

В этом руководстве вы научитесь подписываться на события с помощью EventBus.

Что такое событие?

Событие - это часть кода, которая выполняется, когда в игре происходит определённое действие. Будь то откроется новое окно, игрок сменил карту, открывается достижение - это всё события.
Полный список всех событий вы можете посмотреть здесь.

Почему важны события?

События позволяют разработчикам реагировать на изменения в игре, обеспечивая более гибкое управление игровым процессом и возможность внедрять новые функции без изменения кода игры.

Подписка на события

Чтобы подписаться на события, вам нужно использовать метод Subscribe класса EventBus. Ниже приведён пример, который демонстрирует, как это сделать.
Предположим, что вы хотите подписаться на событие, связанное с добавлением предмета в инвентарь игрока. Вы можете подписаться на это событие следующим образом:

public void OnLoad(ModContext context)
{
    EventBus.Subscribe<ItemAddedEvent>(OnItemAdded); // подписываемся на событие во время загрузки мода
}

private void OnItemAdded(ItemAddedEvent e)
{
    // здесь мы можем, к примеру, получить ID и имя предмета.
    context.Logger.Log(e.ItemName);
    context.Logger.Log(e.ItemID.ToString());
}

Объяснение кода

  1. Подписка на событие: При загрузке мода, мы подписываемся на событие ItemAddedEvent, передавая метод OnItemAdded, который будет вызван каждый раз, когда у игрока в инвентаре появляется новый предмет.
  2. Обработка события: Метод OnItemAdded принимает объект события и выполняет необходимую логику. В данном случае мы выводим имя и ID предмета.

Отписка от события

Если вы думаете, что какое-то событие вам уже не понадобиться, то можно отписаться от этого события. Достаточно будет вызвать в нужный вам момент метод Unsubscribe:

public void OnShutdown()
{
    EventBus.Unsubscribe<ItemAddedEvent>(OnItemAdded);
}

Здесь мы отписываем метод OnItemAdded от события ItemAddedEvent во время завершения работы игры.