Работа с реакторами

Реактор это любой объект взаимодействия в проекте, будь то модель, метка, текст и т.д. Все реакторы проекта добавляются в глобальный объект reactorController, с помощью которого можно получить доступ к любому реактору проекта. Ниже рассмотрены основные методы этого объекта.

Объект reactorController

Метод

Описание

getNumReactors()

Возвращает кол-во реакторов в проекте. Вызов эквивалентен значению поля size объекта reactorController.

getReactorById(id)

Возвращает реактор по уникальному идентификатору. Идентификатор можно узнать в EV Toolbox, нажав на объект правой кнопкой мыши в панели реакторов.

getReactorByName(name)

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

addReactor(reactor)

Добавляет созданный реактор в проект.

removeReactor(reactorOrId, destroy)

Удаляет указанный реактор из проекта. Параметры:

reactorOrId - реактор, который вы хотите удалить, или его идентификатор. destroy - флаг, если установлен, то реактор будет также уничтожен.

hasReactor(reactorOrId)

Позволяет узнать есть ли указанный ректор в проекте. Параметры:

reactorOrId - реактор или его идентификатор.

Создание реакторов

Любой реактор может быть создан в скриптах вручную. Для этого используется глобальный объект reactorFactory и его метод create, в который передаются два параметра - тип реактора и контекст реактора. Контекст реактора един для всех создаваемых реакторов и представлен глобальной переменной reactorContext, типы реакторов приведены ниже:

Реактор

Тип

AudioReactor

audio

CameraManipulatorBaseReactor

camera_manipulator.multitouch

CounterReactor

counter

DistanceReactor

distance

GroupNodeReactor

node.group

HudReactor

node.hud

ImageReactor

rect.image

InteractiveDeviceBaseReactor

interactive_device_base

IntersectorNodeReactor

node.intersector

MarkerReactor

node.marker

ModelReactor

node.model

MouseReactor

mouse_device

NodeReactor

node

RectReactor

node.rect

ScenarioChunkReactor

scenario.chunk

SceneReactor

node.scene

SwitchReactor

switch

SystemReactor

system

Text3dReactor

node.text3d

TextReactor

rect.text

TimerReactor

timer

TrackingSystemReactor

trackingsystem

TransformNodeReactor

node.transform

VideoCaptureReactor

rect.vcap

VideoReactor

rect.video

ViewerReactor

viewer

VRControllerReactor

vr_controller

Рассмотрим пример создания реактора модели:

reactor = reactorFactory:create("node.model", reactorContext) -- создание реактора типа "Модель"
reactorController:addReactor(reactor) -- добавление реактора в объект reactorController, управляющий всеми реакторами

reactor:freeze()      -- заморозка реактора для настройки его параметров

reactor.name                  = "model_logo"
reactor.model                 = resourceRepository:getResourceByName("ev_model.fbx") -- получения ресурса по имени
reactor.nodeMask              = NodeReactor.Mask.VISIBLE -- маска узла, в данном случае видимая
reactor.rotate                = osg.Vec3(90, 0, 0) -- вращение модели, в данном случае 90 градусов по оси X
reactor.trans                 = osg.Vec3(0, 0, 0)   -- перемещение модели, в метрах

reactor:thaw()
reactor:configure() -- завершение конфигурации реактора

Как уже было описано ранее, глобальный объект reactorFactory позволяет создать реактор указанного типа (в данном случае node.model для реактора модели). Вторым параметром идет глобальный объект reactorContext, представляющий собой общий для всех реакторов контекст. Для настройки реактора используются методы freeze(), thaw() и configure(), обозначающие начало и конец настройки параметров реактора соотвественно. Между вызовами этих методов идет непосредственно настройка параметров реактора. В данном случае мы устанавливаем имя реактора, Модель.Ресурс модели (ModelReactor.model), маску узла, Система координат.Вращение (TransformNodeReactor.rotate) и Система координат.Перемещение (TransformNodeReactor.trans). Для установки модели используется еще один глобальный объект resourceRepository и его метод getReactorByName, позволяющий получить любой ресурс проекта по его имени(подробнее см. работа с ресурсами).