Маппер
Проверенный
Участник
Пользователь
- Сообщения
- 265
- Реакции
- 346
Реализация вполне себе простая. Конечно были сложности найти лучший вариант, но, тщетно. Также, можно и выключать свет вообще, а потом включить его в том состоянии, в каком он был, когда его отключили, но добавлять сюда это не стал, не знаю, где может пригодиться такое, кроме как у меня.
В архиве bsp, wad, jmf.
Принцип работы: Создаем 2 источника света, в виде двух light_surface, один для основного, второй для аварийного. Дублируя браши с текстурой основного света, превращаем его в энтить. В начале игры лампы аварийного света необходимо скрыть, иначе они будут отображаться негорящими поверх основного света. Для этого используем trigger_auto. Для переключения режима света используем рычаг(func_rot_button), который будет включать переключать основной и аварийный свет между собой. Для исправления одного бага, используем func_door.
1) В моем случае, текстура основного света имеет имя light01_pl, а аварийного light01_sl. Что означает Primary Lighting и Secondary Lighting.
Предполагается, что основной свет уже расставлен на карте. Если же нет, то это необходимо это проделать.
После расстановки основного источника света, необходимо перевести все браши с текстурой основного света в func_detail:
Параметры:
Продублированный основной свет превращаем в func_wall, добавив только имя:
Параметры:
3) Размещение двух light_surface.
Параметры основного света:
Остальные параметры и флаги для основного света не трогаем.
Параметры аварийного света:
Флаги:
4) Следующий шаг, создать кнопку, а в моем случае рычаг, который будет переключать основной свет и аварийный.
Параметры:
Флаги:
Параметры для скрытия:
Параметры для отображения:
2) Создадим 2 multi_manager’а для переключения основного света на аварийный и наоборот:
Параметры 2-го mm:
3) В multi_manager’ах мы указали изменение параметра target у рычага. Необходимо использовать 2 энтити trigger_changetarget:
Параметры 1-го trigger_changetarget:
Параметры 2-го trigger_changetarget:
Параметры:
2) Устраняем баг, если раунд закончился при включенном аварийном освещение. В новом раунде лампы аварийного света будут включены, и target у рычага остается с прошлого раунда. Исправлять такое поведение мы будем с помощью волшебного func_door:
Параметры:
Флаги:
Создаем multi_manager:
Параметры:
В архиве 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 у рычага. |
Download all Attachments
-
64.4 KB Просмотры: 2
Последнее редактирование: