> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ss14.art/llms.txt
> Use this file to discover all available pages before exploring further.

# Картриджные загрузчики

Картриджные загрузчики — это такие вещи, как PDA и ПК.

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

## Концепции

### Вставка

`CartridgeLoaderSystem` отправит событие `CartridgeAddedEvent` сущности картриджа, когда тот будет вставлен или установлен на загрузчик.

### Установка

Прототипы картриджей могут быть указаны в `CartridgeLoaderComponent`, которые должны быть установлены при инициализации карты, а вставленные картриджи могут быть установлены на загрузчик игроками.
Загрузчики картриджей имеют максимальное количество программ, которые можно установить.
Лимит установки игнорируется при установке картриджей, указанных в прототипе загрузчика.

### Активация

Картридж/программа будет сохранён как активный в компоненте загрузчика картриджа, и `CartridgeActivatedEvent` будет вызван при нём, когда игрок откроет программу через UI.

### Деактивация

Когда игрок выходит из программы или переключается на другую программу, `CartridgeDeactivatedEvent` будет вызван на текущей активной программе, а сохранённая активная программа будет изменена/очищена.
Это не происходит, когда игрок закрывает UI загрузчика. Повторное открытие UI просто отобразит UI текущей активной программы.

### Релей событий

`CartridgeLoaderSystem` будет передавать определённые события текущей активной программе и всем программам, работающим в фоне. Это включает события сетевого взаимодействия устройств.

#### Текущие ретранслируемые события:

* `DeviceNetworkPacketEvent` через `CartridgeDeviceNetPacketEvent`
* `AfterInteractEvent` через `CartridgeAfterInteractEvent`
* Любой подкласс `CartridgeMessageEvent`, который оборачивается через `CartridgeUiMessage`, подкласс `BoundUserInterfaceMessage` для отправки сообщений из UI картриджа

Все ретранслируемые события содержат uid сущности загрузчика картриджа в качестве свойства: `LoaderUid`.

### Фоновые программы

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

Например, программа обмена сообщениями будет работать в фоне.

### Фрагменты UI программы

UI картриджей являются подклассами абстрактного класса `CartridgeUi`, который определяет методы для получения корневого элемента управления этого фрагмента UI и методы для его настройки и обновления. Возвращаемый корневой элемент управления прикрепляется к элементу управления в UI загрузчика картриджа с помощью метода `AddChild` этого элемента управления. Эти фрагменты UI называются UI fagments.

Прототипы картриджей определяют фрагмент UI для использования в поле `Ui` компонента `CartridgeUiComponent`.
Пример:

```yaml theme={null}
  - type: CartridgeUi
    ui: !type:NotekeeperUi
```

### Элементы домашнего экрана

<Danger>
  Элементы домашнего экрана ещё не реализованы
</Danger>

Картриджи могут добавлять что-то на домашний экран CartridgeLoader. Конкретный вариант загрузчика картриджа не обязан их показывать. (PDA будут, а ПК, возможно, нет).

Элементы домашнего экрана — это просто текст, который будет отображаться на домашнем экране, например:

```
- Alerts: 0
- New Messages: 14
- Latest news:
    John Genero caused an uproar when he slipped the clown that
    was leaving banana peels everywhere
```

Элементы сортируются по свойству приоритета, и есть ограниченное количество элементов, которые могут быть отображены.
Если элемент добавляется, когда элементы уже заполнены, удаляется элемент с самым низким приоритетом.
