Переключаемый(аварийный) свет

Сообщения
165
Реакции
227
Реализация вполне себе простая. Конечно были сложности найти лучший вариант, но, тщетно. Также, можно и выключать свет вообще, а потом включить его в том состоянии, в каком он был, когда его отключили, но добавлять сюда это не стал, не знаю, где может пригодиться такое, кроме как у меня.
В архиве bsp, wad, jmf.
Принцип работы: Создаем 2 источника света, в виде двух light_surface, один для основного, второй для аварийного. Дублируя браши с текстурой основного света, превращаем его в энтить. В начале игры лампы аварийного света необходимо скрыть, иначе они будут отображаться негорящими поверх основного света. Для этого используем trigger_auto. Для переключения режима света используем рычаг(func_rot_button), который будет включать переключать основной и аварийный свет между собой. Для исправления одного бага, используем func_door.


1. Подготовка освещения к логике.

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

1) В моем случае, текстура основного света имеет имя light01_pl, а аварийного light01_sl. Что означает Primary Lighting и Secondary Lighting.
Предполагается, что основной свет уже расставлен на карте. Если же нет, то это необходимо это проделать.
После расстановки основного источника света, необходимо перевести все браши с текстурой основного света в func_detail:
Параметры:

Func_detail

Значение

Detail Level

2

Passable

yes

Примечание к func_detail: Если лампы соприкасаются с другим func_detail, то необходимо помнить, чтобы Detail Level у лампочек был всегда выше, чем на другом func_detail.
2) Следующим шагом будет дублирование брашей основного света. После дублирования основного света, скрываем неиспользуемые объекты, выделив дублированный объект и нажав сочетание клавиш Ctrl+H. Теперь, нам необходимо заменить текстуры основного света на всех лампах на аварийный. Проделать подобную операцию можно в Texture Application Mode(Shift+A). Откроется окно, выбираем Replace…, будет 2 поля. Find: текстура Red; Replace: текстура, на которую необходимо заменить. В моем случае выйдет вот так: Find: light01_pl Replace: light01_sl. Такую же операцию проводим и для боковых граней брашей аварийного освещения, избавляемся от ненужных полигонов. В поле Find вводим имя боковых граней текстуры лампы, в поле Replace текстура по имени noclip. В итоге, должна быть только текстура аварийного освещения.
Продублированный основной свет превращаем в func_wall, добавив только имя:
Параметры:

Func_wall

Значение

Name

SecondaryLight

3) Размещение двух light_surface.
Параметры основного света:

Light_surface

Значение

//

Texture Name

light01_pl

Имя текстуры

Texture Brightness

225

Яркость текстуры

Color

200 220 255

Цвет R G B

Adjust Emit Scale

40

Умножение света. Желательно устанавливать в районе от 10 до 50. Зависит от помещения, размера лампы.

Name

PrimaryLight

Имя для взаимодействия.

Остальные параметры и флаги для основного света не трогаем.

Параметры аварийного света:

Light_surface

Значение

//

Texture Name

light01_sl

Имя текстуры

Texture Brightness

100

Яркость текстуры

Color

255 250 208

Цвет R G B

Adjust Emit Scale

25

Умножение света. Желательно устанавливать в районе от 10 до 50. Зависит от помещения, размера лампы.

Name

SecondaryLight

Имя для взаимодействия.

Filter Entity Name

SecondaryLight

Поиск для освещения именно аварийных источников.
Флаги:


Flags



Initially Dark

Выключен в начале.

4) Следующий шаг, создать кнопку, а в моем случае рычаг, который будет переключать основной свет и аварийный.
Параметры:

Func_rot_button

Значение

Name

control_lighting

Target

light01
Флаги:


Flags



Not Solid

Делает рычаг не материальным

Toggle

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


2. Логика.
1) Уберем из видимости аварийный свет, объект func_wall с помощью энтити env_render:
Параметры для скрытия:

Env_render

Значение

Name

SecondaryLight_off

Target

SecondaryLight

Render Mode

Texture

FX Amount

0

Параметры для отображения:

Env_render

Значение

Name

SecondaryLight_on

Target

SecondaryLight

Render Mode

Normal

FX Amount

255

Примечание: Если вы планируете использовать детальные текстуры на источники света, то необходимо помнить, что детальная текстура накладывается на брашевую энтить только тогда, когда Render mode: Normal. Будь там любой другой режим, детальная текстура на эту поверхность, принадлежащую этой брашевой энтити, накладываться не будет!

2) Создадим 2 multi_manager’а для переключения основного света на аварийный и наоборот:
Примечание: Для добавления новых параметров необходимо отжать кнопку SmartEdit
Параметры 1-го mm:

Multi_manager

Значение

//

targetname

light01

Имя multi_manager’а

PrimaryLight

0.0

Выключение основного света

SecondaryLight

0.5

Включение аварийного света

SecondaryLight_on

0.5

Делает видимым func_wall.

light01_off

0.5

Переключение target у рычага с light01, на light02

Параметры 2-го mm:

Multi_manager

Значение

//

targetname

light02

Имя multi_manager’а

SecondaryLight

0.0

Выключение аварийного света

SecondaryLight_off

0.0

Скрытие ламп func_wall

PrimaryLight

0.5

Включение основного света

light02_off

0.5

Переключение target у рычага с light02, на light01

3) В multi_manager’ах мы указали изменение параметра target у рычага. Необходимо использовать 2 энтити trigger_changetarget:
Параметры 1-го trigger_changetarget:

trigger_changetarget

Значение

//

Name

light01_off

Имя для вызова

Target

control_lighting

Имя рычага, у которого будет менять target

New Target

light02

Новый target у рычага.

Параметры 2-го trigger_changetarget:

trigger_changetarget

Значение

//

Name

light02_off

Имя для вызова

Target

control_lighting

Имя рычага, у которого будет менять target

New Target

light01

Новый target у рычага.

3. Заключительный этап.
1) Размещаем trigger_auto для того, чтобы скрыть неактивные лампы в первом раунде:
Параметры:

Trigger_auto

Значение

Target

SecondaryLight_off

2) Устраняем баг, если раунд закончился при включенном аварийном освещение. В новом раунде лампы аварийного света будут включены, и target у рычага остается с прошлого раунда. Исправлять такое поведение мы будем с помощью волшебного func_door:
Параметры:

Func_door

Значение

Target

lighting_fix_mm

Delay before close

-1
Флаги:


Flags



Starts Open

Активировать в начале раунда.

Passable

Убрать коллизию.

Создаем multi_manager:
Параметры:

Multi_manager

Значение

//

targetname

lighting_fix_mm

Имя multi_manager’а

SecondaryLight_off

0.0

Скрывает лампы func_wall.

light02_off

0.0

Переключение target у рычага.
Основной Свет.jpgАварийный Свет.jpg
 

Вложения

Последнее редактирование:

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу