OpenComputers/Сигналы

Сигналы — это сообщения, которые посылаются компьютеру внешними источниками. Они используются во многих ситуациях.


Сигнал всегда содержит название. Кроме него он может содержать некоторое количество простых параметров.


Сигнал можно получить и обработать функцией computer.pullSignal() (Computer API), или, что более удобно, функцией event.pull() (Event API). Вторая функция предпочтительней, так как сигналы также распространяются как события (events), с которыми работают многие системные функции (поиск «главного» компонента, например).


Пример

Эта программа принимает сообщение модема:

local event = require("event") local _, localNetworkCard, remoteAddress, port, distance, payload = event.pull("modem_message") print("Received data '" .. tostring(payload) .. "' from address " .. remoteAddress .. " on network card " .. localNetworkCard .. " on port " .. port .. ".") if distance > 0 then print("Message was sent from " .. distance .. " blocks away.") end


Сигналы различных компонентов

Сигналы описаны в формате name(arg: type, ...). Это означает, что вы должны принимать их так: local name, arg, ... = event.pull().


Компьютер

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

Примечание: не используйте это событие, если возможно. Обрабатывайте сигнал component_available. Этот сигнал используется библиотекой Component API при добавлении «основного» компонента, или при переназначении «основного» компонента.


Сигнал посылает компьютер или робот, когда какой-либо компонент отсоединен.

Примечание: не используйте это событие, если возможно. Обрабатывайте сигнал component_unavailable. Этот сигнал используется библиотекой Component API при удалении «основного» компонента.


Этот сигнал посылает библиотека компонентов, когда добавлен или изменён «главный» компонент. Используйте его вместо component_added, чтобы избежать конфликтов с библиотекой компонентов.


Этот сигнал посылает библиотека компонентов, когда отсоединен или удален «главный» компонент. Используйте его вместо component_removed, чтобы избежать конфликтов с библиотекой компонентов.


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


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


Монитор

Сигнал посылает монитор, когда меняется его разрешение. Например, когда его вручную изменили при помощи GPU API.


Сигнал посылается мониторами второго или третьего уровней, когда пользователь щелкает мышью по экрану. Это означает левый щелчок мыши когда открыт интерфейс экрана (когда к нему присоединена клавиатура) или правый щелчок мыши на мониторе из игрового мира (когда клавиатура не присоединена).

Примечание: в будущем возможно появится функция, которая позволит отключить распознавание пользователя (если вы считаете, что это слишком… не реалистично). Однако это удобно при создания программ для большого количества пользователей.

Важно: этот сигнал посылается только пользователями, которые зарегистрированы на компьютере (см. Computer API). Или тогда, когда ни одного пользователя не зарегистрировано (когда все пользователи имеют доступ к компьютеру).


Этот сигнал практически эквивалентен сигналу touch. Различие в том, что сигнал drag «принадлежит» сигналу touch, посланному до этого. То есть он регистрирует продолжающееся движение мышки с нажатой кнопкой.


Этот сигнал будет послан только в том случае, если перед ним был послан сигнал drag. Сигнал обозначает, что пользователь отпустил кнопку мыши.


Этот сигнал посылают мониторы второго и третьего уровня, когда игрок использует колесико мыши в интерфейсе монитора.


Сигнал посылают мониторы второго и третьего уровня, когда по ним ходит игрок или другое существо.


Клавиатура

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

Важно: этот сигнал посылается только пользователями, которые зарегистрированы на компьютере (см. Computer API). Или тогда, когда ни одного пользователя не зарегистрировано (когда все пользователи имеют доступ к компьютеру).


Этот сигнал посылает клавиатура, когда пользователь отпустил кнопку в интерфейсе монитора.

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

Важно: этот сигнал посылается только пользователями, которые зарегистрированы на компьютере (см. Computer API). Или тогда, когда ни одного пользователя не зарегистрировано (когда все пользователи имеют доступ к компьютеру).


Это событие посылает клавиатура, когда пользователь вставляет текст из буфера обмена (⇧ Shift+Insert или серединная кнопка мыши). Учтите, что максимальная длина вставляемого текста ограничена (см. файл конфигурации).

Важно: этот сигнал посылается только пользователями, которые зарегистрированы на компьютере (см. Computer API). Или тогда, когда ни одного пользователя не зарегистрировано (когда все пользователи имеют доступ к компьютеру).


Красный контроллер и Красная плата

Сигнал посылается компонентом, который работает с красным камнем, когда входящий сигнал красного камня изменяется.


Сетевая плата или Беспроводная сетевая плата

Сигнал посылает сетевая плата (включая беспроводные), при получении пакета на открытый порт.

Примечание: адрес отправителя может не совпадать с адресом сетевой платы, которая его отправила, если по пути пакет прошел через один или несколько роутеров (коммутатор или точку доступа).

Остальные параметры — это собственно данные пакета, отправленного функцией modem.send() или modem.broadcast().


Робот

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

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

Если робот меняет местами содержимое двух слотов командой robot.transferTo(), будет послано четыре сигнала. По два сигнала на каждый слот.

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


Датчик движения

Событие создает проходящее в области видимости датчика живое существо. Последний параметр — ник игрока или название существа.


В данной статье используются материалы из статьи «OpenComputers/Сигналы» с вики-сайта Minecraft Wiki, расположенного на Фэндоме, и они распространяются согласно лицензии Creative Commons Attribution-Share Alike. Авторы статьи.