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

В редакторе можно создавать классы, и определять для них методы и переменные. Методы - это записанные алгоритмы. Причем записывать их можно двумя способами: Designer Type (с помощью пользовательского интерфейса) и Script Type (на языке программирования C#).

Одной из ключевых возможностей редактора, является возможность создавать классы, которые надстраиваются над определенным классом игрового объекта. Данная возможность позволяет создавать обработчики событий игровых классов. Примером использования, может служить надстройка над типом Region. У класса Region есть метод ObjectIn - событие, когда персонаж попадает внутрь области. В редакторе логики, мы можем написать такой алгоритм, что попадая в определенное место на карте, обозначенное объектом Region, впереди игрока обрушивалась балка с потолка.

Запуск редактора логики

Редактор логики запускается непосредственно из редактора карт. Чтобы запустить редактор, нужно открыть карту и затем в меню World нажать кнопку Logic Editor.

https://a.radikal.ru/a25/1905/fb/f2bbcb8efca3.png


Общий вид

https://c.radikal.ru/c36/1905/b0/20593310043f.jpg

Окно редактора логики имеет 4 основных области:

1 - Верхняя панель.
2 - Окно со списком классов.
3 - Рабочее окно.
4 - Окно вывода.
Ознакомимся с каждым элементом подробнее.

Верхняя панель

https://b.radikal.ru/b18/1905/18/2e87dc67217a.jpg
Верхняя панель состоит из главного меню и пары кнопок для быстрого вызова функций. Опишем основные функции главного меню.

Меню File.
https://b.radikal.ru/b29/1905/37/b8fc8b0d30bf.jpg
Save Map сохраняет изменения карты.

Меню View.
https://d.radikal.ru/d03/1905/52/1ab7c6c539e3.jpg

Настройка вида окна редактора.
Class List делает видимым окно классов.
Output делает видимым окно вывода, если соответствующее окно было закрыто.

Меню Tools.
https://c.radikal.ru/c29/1905/26/09fef17e45d9.jpg
Run Simulation запускает карту.
Build Test проверяет алгоритмы на синтаксические ошибки.

Окно со списком классов
https://d.radikal.ru/d38/1905/6a/27504090390e.jpg

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

Добавление нового класса
Добавление нового класса к логике карты осуществляется по нажатию кнопки Create Class контекстного меню элемента Map Classes в списке Классов.
https://a.radikal.ru/a28/1905/b8/44100004cb75.jpg

Предварительно новый класс настраивается в специальном окне.

https://c.radikal.ru/c18/1905/c8/e8e47a0c324a.jpg

Помимо имени класса необходимо указать его тип. Класс может быть двух типов:

Static. Обычный класс.
Entity. Класс, надстраиваемый над одним из классов игровых объектов. В поле Entity Class Type указывается над каким именно классом будет надстраиваться создаваемый класс.

Контекстное меню класса

Работа с классом осуществляется, в основном, через его контекстное меню. Рассмотрим функции доступные для изменения класса.

https://b.radikal.ru/b40/1905/9b/fc9e9247a7df.png

Edit (изменение). Позволяет сменить имя класса.

Delete (удаление). Позволяет удалить класс.

Create Method (создание метода). Добавляет метод к классу. Можно создать как произвольный пользовательский метод (меню Method), так и надстройку над методом базового Entity-класса. Кроме того, необходимо выбрать способ создания метода: Designer Type или Script Type.

https://c.radikal.ru/c24/1905/a0/759f0f93d4c0.png

Если добавляется пользовательский метод, то необходимо указать тип возвращаемого функцией значения. Если нет необходимости, чтобы функцию возвращала значение, то указывается тип void. Также при необходимости нужно указывать список входных параметров. Каждый параметр характеризуется именем и типом значения.

https://d.radikal.ru/d42/1905/b7/2081a4902f34.png

Create Variable (создание переменной). Добавляет переменную к классу. Необходимо указать название переменной и ее тип. В качестве типа могут выступать как простые типы, вроде числа или строки, так иодин классы игровых объектов.

https://b.radikal.ru/b11/1905/db/7211ee903f96.png

Если выставлен флаг Serialization, то значение переменной будет сохраняться при сохранении мира (Load/Save в Game.exe).

Create Custom Script Code. Позволяет присоединять к классу произвольный код, который может содержать методы и объявления переменных. К примеру, Custom Script Code позволяет определять сложные переменные, такие как списки, которые нельзя добавить с помощью меню Create Variable.

Рабочее окно

В рабочем окне записываются алгоритмы карты. Окно имеет различный вид, в зависимости от типа метода.

Неизменно наверху окна находится панель вкладок, с помощью которой можно переключаться между окнами редактирования различных методов.

Чтобы перейти в режим редактирования класса, необходимо щелкнуть по нему левой кнопкой мыши дважды.

Designer Type

https://a.radikal.ru/a20/1905/d7/8a459a0e1316.png

В режиме Designer Type рабочее окно состоит из двух областей: списка команд Actions и окна редактирования команды.

Designer Type подразумевает создание алгоритмов с помощью пользовательского интерфейса. Для добавления и удаления команд имеются две кнопки над списком Actions.

https://d.radikal.ru/d14/1905/49/20899f35e0e8.png

Также эти и другие функции редактирования доступны из контекстного меню элементов списка команд.

https://b.radikal.ru/b33/1905/02/a77bc7ea009f.png

Рассмотрим каждую из этих функций:

Insert (вставка). Добавляет новую команду перед текущей. Подробнее о командах в Designer Type написано ниже.
Insert (After Current) (вставка после текущего). Добавляет новую команду после выбранной. Доступно только для операторов, подразумевающих использование нескольких команд внутри себя. Это такие операторы как if (условный оператор) и while (цикл).
Copy (копирование). Копирует выбранную команду в буфер для последующий вставки.
Paste (вставка). Вставляет команду из буфера перед текущей.
Delete (удаление). Удаляет выбранную команду из списка.
Команды в Designer Type
Окно добавления команды выглядит следующим образом.

https://c.radikal.ru/c42/1905/e0/e786d010b67f.png
Создание команды проходит рекурсивно. В окне Choose Action выбирается какое-либо действие, для этого по нему нужно сделать двойной щелчок. Далее в том же окне добавленное действие настраивается: выбираются параметры, операторы, свойства. Для настройки вызывается то же самое окно Choose Action. Разница лишь в том, что изменяется список доступных методов - будут предложены лишь те, которые актуальны для добавленной в первом окне команды. Добавленное в новом окне, действие настраивается с помощью того же окна. Окно Choose Action появляется пока не настроена вся команда. Тогда, нажимая на кнопку Ok последовательно во всех открывшихся окнах, мы в итоге возвращаемся к самому первому окну Choose Action, нажимаем в нем Ok и команда появляется в списке.

https://d.radikal.ru/d01/1905/9e/491a6f09b279.png

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

https://a.radikal.ru/a28/1905/f0/9247849e799d.png

Основные комнады

https://a.radikal.ru/a41/1905/00/46a57048cf6e.png

Перечисленные выше типы можно назвать главными, т.к. с них начинается запись любой команды. Теперь коснемся остальных действий, которые можно выбрать в окне Choose Action.

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

https://a.radikal.ru/a41/1905/42/eaa63be0b329.png

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

Условные выражения
Условия используются в операторах If/Then/Else, While, а также могут быть значениями переменных или параметров типа Boolean. Результатом условного выражения является либо истина (True), либо ложь (False).

В качестве условных выражений могут использоваться логические операции. Их можно найти в среди статичных функций типа Boolean. Рассмотрим перечисленные там логические операции.

https://c.radikal.ru/c25/1905/3e/d32966a0f4d1.png

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

https://b.radikal.ru/b36/1905/b4/f324566b44a4.png

Условный оператор
https://d.radikal.ru/d19/1905/5d/9b012d5cf4f0.png

Условный оператор if\then\else можно найти в списке действий в разделе Control. Общий вид условного оператора:
"if условие then действие1 else действие2"

В поле условие вписываются условные выражения, речь о которых шла в разделе выше. Если условие выполняется, другими словами, условное выражение принимает значение True, то выполняются операторы из блока then (действие1). Если же условие не выполняются, то выполняются операторы из блока else (действие2).

Блок else не обязателен к заполнению. В случае, когда данный блок опущен, условный оператор принимает еще более простой вид:

"if условие then действие"

Оператор цикла
https://c.radikal.ru/c28/1905/20/8604aa06e271.png
Оператор цикла расположен в свитке Control списка команд. Общий вид оператора цикла:
"while условие действие"

Поле условие должно содержать условное выражение. До тех пор пока оно выполняется, циклично выполняются операторы блока while (действие). Т.е. сначала проверяется условие, если оно верно выполняются следующие за ним операторы. Затем условие опять проверяется и если оно еще верно, то выполняются операторы. И так далее до тех пор, пока условие выполняется.

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

Математические операции
В редакторе логике вы можете найти множество математических операций. Для таких операций как сложение, вычитание, умножение, деление имеются специальные методы-члены у различных числовых классов. К таким классам относятся:

Int32 - целочисленный, знаковый.
Single - дробный, знаковый.
Для более сложных операций имеется специальный класс Math. Приведем описание его методов.

https://d.radikal.ru/d31/1905/61/f0385a4c40b2.png

Базовые методы
В данном разделе будут приведены основные операции, которые могут вам понадобиться при создании логики карты.

Далее будут представлены статические классы и описания их членов. Все эти классы находятся в свитке Static Members списка команд.

Класс Entities.
https://c.radikal.ru/c40/1905/6d/3fc5b206a237.png

Класс EnityTypes.
https://b.radikal.ru/b31/1905/f6/bb1aef4a1c53.png

Класс Logic.
https://a.radikal.ru/a33/1905/f8/027e5842562e.png

Script Type
https://c.radikal.ru/c27/1905/46/1d295fbe9321.png

В режиме Script Type рабочее окно - это текстовый редактор с подсветкой синтаксиса, в котором пишется исходный код метода на языке C#.

Этот режим весьма удобен для программистов. Написание кода в режиме Script Type немногим отличается от написания кода проекта в среде программирования (например, в Visual Studio).

Компилирование кода осуществляется на этапе запуска карты. Кроме того, можно проверить код на ошибки, нажав кнопку Build Test.

Окно вывода

https://b.radikal.ru/b37/1905/cd/83d540b82338.png

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

Добавление логики к объектам карты
Основными элементами логики карты являются надстраиваемые классы. Чтобы добавить логику к объекту карты, необходимо указать логический класс объекта. За это отвечает параметр Logic Class.

https://b.radikal.ru/b02/1905/a1/135a4a7e58ba.png

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

https://d.radikal.ru/d13/1905/00/c79a0ba82f9d.png

Урок - Designer Type
Урок - Script Type

Отредактировано Wowka70 (2019-05-21 19:10:47)