В этом уроке мы познакомимся с созданием логики карты в режиме Designer Type. Настроим логику так, чтобы при попадании главного персонаж в регион, загорался источник света, а при выходе из региона - гас.
Для теста логики нам понадобится карта состоящая из шести объектов:
Ландшафт (HeightmapTerrain).
Небо (SkyDome).
Directional-источник света (Light).
Точка старта (SpawnPoint).
Регион (Region).
Spot-источник света (Light).
Главным образом, из всех объектов карты нас интересуют два: регион и spot-источник света. К ним и будет применена логика карты.
Начнем с того, что запустим редактор логики. Нажмите кнопку Logic Editor в меню World.
Главная наша задача - сделать надстройку над классом Region. Добавим соответствующий класс. Для этого нажмем правой кнопкой на элементе Map Classes списка Class List и в появившемся меню нажмем кнопку Create Class.
В окне создания класса укажем имя класса (например, Region_0), тип - надстраиваемый класс (Entity) и базовый класс - Region. После этого нажмем кнопку Ok.
Наш класс добавлен в список классов. Следующий шаг - добавление методов к классу. Начнем с метода, отвечающего за появление персонажа в регионе. Нажмем правой кнопкой на наш класс, выберем пункт Create Method. Среди методов выберем ObjectIn (именно он вызывается при попадании персонажа в регион). И, наконец, выберем способ создания метода: Designer Type.
Теперь заставим наш метод включать источник света. Добавим команду, нажав на кнопку Insert над списком Actions.
Чтобы получить доступ к источнику света, нам понадобится функция GetEntity. Кликните по ней дважды.
В качестве параметра у GetEntity значится null. Изменим параметр, кликнув по нему.
Нужный нам объект - spot-источник, который в нашем случае называется Light_0.
Теперь обратимся к свойству DiffuseColor нашего источника света. Для этого нужно кликнуть по надписи [...].
Дважды щелкнем по DiffuseColor в списке.
Теперь присвоим цвету источника значение. Начнем с оператора присваивания. Кликнем по [...].
И выберем оператор =, дважды кликнув по нему.
Осталось указать присваиваемое значение. Нажмем на аргумент null.
Цвет источника - это значение типа ColorValue. Чтобы создать новое значение данного типа, обратимся к списку Static Members, в котором выберем тип ColorValue. Теперь дважды щелкнем на одноименной функции (нас интересует вариант с тремя параметрами: r, g и b).
При попадании главного персонажа источник должен гореть ярко, а значит его цвет должен быть белым. Т.е. каждая компонента его цвета будет равна 1. Нажмем на первый параметр null.
Дважды кликнем по элементу Constant. Нам будет предложено значение по умолчанию, равное нулю. Нажмем на него, чтобы изменить на единицу.
Проделаем то же самое с остальными двумя компонентами цвета. После этого нажмем на кнопку Ok.
Во всех остальных окнах также нажмем Ok и увидим получившуюся команду.
С событием, связанным с попаданием главного персонажа в регион, мы закончили. Теперь нужно проделать все те же операции, но для обратного события - выхода главного персонажа из региона. Функция, вызываемая при этом событии, называется ObjectOut. Кроме того, свет мы будем тушить, а значит компоненты цвета источника будут равны нулю.
Не забудем сохранить карту вместе с ее логикой.
Теперь перейдем в окно редактора карт, чтобы добавить, созданный нами, логический класс к региону. Выделим регион на карте и укажем его параметр LogicClass.
Выберем класс Region_0 в предлагаемом списке и нажмем кнопку Ok.
Последний шаг - это небольшая мелочь, без которой не получилось бы увидеть зажигание света при попадании в регион. Необходимо выключить наш источник, т.е. сделать его цвет черным, чтобы заметить изменение цвета при срабатывании события.
Запустим карту в режиме симуляции, чтобы посмотреть, что у нас получилось.
При попадании главного персонажа в регион, свет загорается. И гаснет, когда персонаж из региона выходит. А значит логика карты работает!