В этом уроке мы опробуем возможности скриптового режима редактора логики. Для демонстрации возможностей будем использовать ту же карту, что и в предыдущем уроке. Как и в предыдущий раз, мы будем использовать события попадания и выхода главного персонажа в регион. Но на этот раз, заставим источник света плавно менять свой цвет.
Начнем с того, что добавим класс, надстраиваемый над объектом типа регион. Нажмем правой кнопкой на элемент Map Classes и выберем пункт Create Class.
В появившемся окне укажем имя класса, тип и класс, над которым будет произведена надстройка. Назовем класс Region_0. Т.к. нас интересует надстраиваемый класс, то в качестве типа выберем Entity. А классом для надстройки выберем Region.
Для управления источником света, нам понадобится следить за тем, находится персонаж в регионе или нет. Заведем соответствующую переменную. Нажмем правой кнопкой на класс Region_0 и выберем пункт Create Variable.
Зададим тип переменной - Boolean (логический тип, имеющий два значения: True (истина) и False (ложь)). А также укажем имя переменной - characterInRegion.
Переменная создана. А значит нужно добавить контроль ее значения. При попадании персонажа в регион, вызывается событие ObjectIn. Добавим соответствующую функцию к классу Region_0. Нажмем правой кнопкой на класс и выберем меню Create Method. Затем выберем событие ObjectIn и способ записи алгоритма - Script Type.
При попадании персонажа в регион, необходимо менять значение нашей переменной characterInRegion на значение True. В рабочем окне напишем следующий код:
characterInRegion = true;
Теперь нам необходимо отследить обратное событие - выход персонажа из региона. В нем мы должны поменять значение нашей переменной на значение False, а также потушить наш источник света. Добавим функцию ObjectOut к классу Region_0 и напишем в рабочем окне следующий код.
characterInRegion = false; ((Light) Entities.Instance.GetByName( "Light_0" )).DiffuseColor = new ColorValue(0, 0, 0);
А сейчас к перейдем самому интересному! Будем каждый кадр тик менять цвет источника света. Если персонаж находится внутри региона, то заставим источник плавно менять свой цвет с зеленого на красный. Событие, вызываемое каждый тик - это метод Tick. Добавим его к нашему классу Region_0. Ниже приведен код метода.
if(characterInRegion) { float t = (((int)(EngineApp.Instance.Time * 1000)) % 3000) / 3000.0f; float r = -4 * t * t + 4 * t; float g = 4 * t * t - 4 * t + 1; ((Light) Entities.Instance.GetByName( "Light_0" )).DiffuseColor = new ColorValue(r, g, 0); }
Цвет источника меняется циклично. Число 3000 здесь - это период смены цвета в миллисекундах.
Сохраним логику карты через меню File -> Save Map.
Нам осталось лишь задать логический класс для объекта регион. Для этого перейдем в редактор карт, выделим регион и укажем ему параметр LogicClass.
В появившемся окне выберем класс Region_0 и нажмем кнопку Ok.
Запустим нашу карту в режиме симуляции.
Зайдя в область региона, увидим, что источник света начинает плавно менять свой цвет.