В этом уроке мы познакомимся с созданием логики карты в режиме Designer Type. Настроим логику так, чтобы при попадании главного персонаж в регион, загорался источник света, а при выходе из региона - гас.

Для теста логики нам понадобится карта состоящая из шести объектов:

Ландшафт (HeightmapTerrain).
Небо (SkyDome).
Directional-источник света (Light).
Точка старта (SpawnPoint).
Регион (Region).
Spot-источник света (Light).

https://c.radikal.ru/c36/1905/33/9dbba5982a79.png
Главным образом, из всех объектов карты нас интересуют два: регион и spot-источник света. К ним и будет применена логика карты.

Начнем с того, что запустим редактор логики. Нажмите кнопку Logic Editor в меню World.

https://a.radikal.ru/a11/1905/1b/f7c1a8d4d65e.png

Главная наша задача - сделать надстройку над классом Region. Добавим соответствующий класс. Для этого нажмем правой кнопкой на элементе Map Classes списка Class List и в появившемся меню нажмем кнопку Create Class.

https://b.radikal.ru/b38/1905/bd/8f95ad59af30.png

В окне создания класса укажем имя класса (например, Region_0), тип - надстраиваемый класс (Entity) и базовый класс - Region. После этого нажмем кнопку Ok.

https://c.radikal.ru/c23/1905/cd/f67656522143.png

Наш класс добавлен в список классов. Следующий шаг - добавление методов к классу. Начнем с метода, отвечающего за появление персонажа в регионе. Нажмем правой кнопкой на наш класс, выберем пункт Create Method. Среди методов выберем ObjectIn (именно он вызывается при попадании персонажа в регион). И, наконец, выберем способ создания метода: Designer Type.

https://a.radikal.ru/a35/1905/ac/084aa38235b7.png

Теперь заставим наш метод включать источник света. Добавим команду, нажав на кнопку Insert над списком Actions.

https://b.radikal.ru/b35/1905/0c/04f1704fa7f2.png

Чтобы получить доступ к источнику света, нам понадобится функция GetEntity. Кликните по ней дважды.

https://a.radikal.ru/a00/1905/2e/a0a936b84916.png

В качестве параметра у GetEntity значится null. Изменим параметр, кликнув по нему.

https://d.radikal.ru/d03/1905/39/e46325ec9bd7.png

Нужный нам объект - spot-источник, который в нашем случае называется Light_0.

https://c.radikal.ru/c21/1905/66/6cb37684a21d.png

Теперь обратимся к свойству DiffuseColor нашего источника света. Для этого нужно кликнуть по надписи [...].

https://c.radikal.ru/c15/1905/7c/eb2ab8372697.png

Дважды щелкнем по DiffuseColor в списке.

https://d.radikal.ru/d43/1905/f0/078644ace07f.png

Теперь присвоим цвету источника значение. Начнем с оператора присваивания. Кликнем по [...].

https://b.radikal.ru/b18/1905/42/77ca8fd2e739.png

И выберем оператор =, дважды кликнув по нему.

https://a.radikal.ru/a02/1905/6b/05ce0dc4f790.png

Осталось указать присваиваемое значение. Нажмем на аргумент null.

https://a.radikal.ru/a11/1905/fe/51684b7babad.png

Цвет источника - это значение типа ColorValue. Чтобы создать новое значение данного типа, обратимся к списку Static Members, в котором выберем тип ColorValue. Теперь дважды щелкнем на одноименной функции (нас интересует вариант с тремя параметрами: r, g и b).

https://b.radikal.ru/b23/1905/a0/1742ad189e0d.png

При попадании главного персонажа источник должен гореть ярко, а значит его цвет должен быть белым. Т.е. каждая компонента его цвета будет равна 1. Нажмем на первый параметр null.

https://d.radikal.ru/d42/1905/01/2ad0f18dbd03.png

Дважды кликнем по элементу Constant. Нам будет предложено значение по умолчанию, равное нулю. Нажмем на него, чтобы изменить на единицу.

https://d.radikal.ru/d35/1905/48/4b2fa45ea2f8.png

Проделаем то же самое с остальными двумя компонентами цвета. После этого нажмем на кнопку Ok.

https://d.radikal.ru/d04/1905/e1/eca311b526eb.png

Во всех остальных окнах также нажмем Ok и увидим получившуюся команду.

https://c.radikal.ru/c13/1905/4b/bdc2ccd50db4.png

С событием, связанным с попаданием главного персонажа в регион, мы закончили. Теперь нужно проделать все те же операции, но для обратного события - выхода главного персонажа из региона. Функция, вызываемая при этом событии, называется ObjectOut. Кроме того, свет мы будем тушить, а значит компоненты цвета источника будут равны нулю.

https://a.radikal.ru/a32/1905/4f/428535a42baa.png

Не забудем сохранить карту вместе с ее логикой.

https://b.radikal.ru/b31/1905/6e/fc43bbce670d.png

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

https://b.radikal.ru/b25/1905/e9/6b15c0c042a5.png

Выберем класс Region_0 в предлагаемом списке и нажмем кнопку Ok.

https://a.radikal.ru/a09/1905/78/0c5d7d9f63c0.png

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

https://c.radikal.ru/c12/1905/de/02a1c8060948.png

Запустим карту в режиме симуляции, чтобы посмотреть, что у нас получилось.

https://c.radikal.ru/c41/1905/99/b924db91cb13.png

При попадании главного персонажа в регион, свет загорается. И гаснет, когда персонаж из региона выходит. А значит логика карты работает!

https://b.radikal.ru/b21/1905/fe/bba26fd13a7b.pnghttps://d.radikal.ru/d40/1905/cf/1bb005914cbe.png