Difference between revisions of "Indicator Lights (Portal 2):ru"

From Valve Developer Community
Jump to: navigation, search
m
m (Таймер в рамке)
 
(20 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
{{otherlang2
 
{{otherlang2
|title = Лампы-индикаторы
+
|title = Индикаторные огни
 
|en = Indicator Lights (Portal 2)
 
|en = Indicator Lights (Portal 2)
 
}}
 
}}
[[File:Indiclights 1.png|right|170px]]
+
[[File:Indiclights 2.png|right|96px]]
'''Лампы-индикаторы''' представляют собой линии из маленьких ламп, которые служат в тестовых камерах для указания взаимодействия между двумя или более энтити на карте, часто между кнопкной и другим энтити in the world. Обычно лампы горят голубым, если они неактивны, и оранжевым, когда активны.
+
'''Индикаторные огни''' - световые дорожки в тестовых камерах, указывающие на взаимосвязанные энтити, например, кнопка и раздатчик.
 +
В неактивном состоянии огни имеют синий цвет, в активном - оранжевый.
  
== Как сделать Лампы-индикаторы ==
+
== Создание индикаторных огней ==
[[image:Indicator example1.jpg|300px|thumb|right|Indicator lights all laid out]]
+
[[image:Indicator example1.jpg|300px|thumb|right|Размещённые индикаторные огни]]
Этот урок предполагает, что вы обладаете базовыми знаниями о [[Hammer]].
+
Данное руководство предполагает наличие базовых знаний [[Hammer]].  
=== Шаг 1 ===
 
Создайте два энтити, на вашей карте, которые требуют взаимодействия друг с другом. Они могут варьироваться от [[Button_(Portal_2):ru#Floor_Button|Сверхпрочной сверхударной сверхкнопки]] для открывания простой выходной [[Test_Door_(Portal_2):ru|двери]], до [[Button_(Portal_2):ru#Button|кнопок]], которые будут временно взаимодействовать с [[Diversity_Vent|Вакуумными трубами]], которые будут поставлять [[Gel_(Portal_2):ru|гель]], в результате чего игрок станет на один шаг ближе к решению. Что бы вы не решите, зависит от вас, but always рядом с '''активатором''' разместите [[env_texturetoggle]] энтити - это поможет нам изменять цвет индикатора далее в уроке и поможет вам помнить, где вы разместили ваши энтити, resulting in a cleaner map.
 
  
=== Шаг 2 ===
+
'''1)''' В своей карте создайте две энтити, которые будут взаимодействовать. Это могут быть как [[Button (Portal 2):ru#Напольные кнопки|сверхпрочная сверхударная сверхкнопка :)]], открывающая выходную [[Test Door (Portal 2):ru|дверь]], так и [[Button (Portal 2):ru#Кнопка-пьедестал|кнопка-пьедестал]], которая запустит [[Diversity Vent:ru|пневматическую трубу]], из которой потечёт [[Gel_(Portal_2):ru|гель]], давая игроку на один шаг приблизиться к решению. То, что произойдёт, решаете вы, но всегда следом за '''активируемой штукой''' помещайте энтити [[env_texturetoggle]] — это поможет нам сменить цвет индикаторных огней в дальнейшем, а также напомнит, где вы разместили энтити - карта станет более понятной.
Select a texture for the lights in the texture browser, for this tutorial use "signage/indicator_lights/indicator_lights_floor" (Easily found by typing "indicator" in the filter bar).
+
 
 +
'''2)''' Выберите текстуру огней в браузере текстур, для данного руководства: "<code>signage/indicator_lights/indicator_lights_floor</code>" (легко находится, если ввести "indicator" в поле фильтра).
  
 
A1. <code>signage/indicator_lights/indicator_lights_floor</code>
 
A1. <code>signage/indicator_lights/indicator_lights_floor</code>
Line 19: Line 19:
 
<br>B1. <code>signage/indicator_lights/indicator_lights_corner_wall</code>
 
<br>B1. <code>signage/indicator_lights/indicator_lights_corner_wall</code>
 
<br>B2. <code>signage/indicator_lights/indicator_lights_corner_floor</code>
 
<br>B2. <code>signage/indicator_lights/indicator_lights_corner_floor</code>
{{Note|The textures in each pair of overlays are functionally and cosmetically indistinguishable; but you can still use both overlays if desired.}}
+
{{Note:ru|Текстуры в каждой паре оверлеев функционально и внешне неразличимы; но при желании вы можете использовать оба оверлея.}}
  
=== Шаг 3 ===
+
'''3)''' Выберите инструмент [[Hammer_Overlay_Tool|Overlay]] в Hammer, и разместите оверлеи огней там, где вам нужно. Функционально нет разницы, как они размещены, хотя между взаимодействующими энтитями желательно провести логичную линию, обычно это кратчайший путь между двумя энтитями; не забудьте, что в некоторых местах кратчайший путь идёт по стене. Кроме того, в целях согласованности с индикаторами в картах Valve, на сгибах световых дорожек (но не в переходах от пола к стене, например) в углу помещайте <code>signage/indicator_lights/indicator_lights_corner_wall</code>, также, как и в начале у активатора (но не активируемого объекта).
Select the [[Hammer_Overlay_Tool|Overlay]] option in hammer, and place your lights overlays as desired. Functionally it doesn't matter how they're placed, though a logical line between the entities interacting is desired, usually the shortest way between the two entities; don't forget the shortest way could travel on walls at some point. Also, to keep consistent with Valve's approach to these lights, when the line turns a <code>signage/indicator_lights/indicator_lights_corner_wall</code> should be in the corner, thus his name came to be.
 
  
The length of one strip is four circles, however sometimes you might want to have fewer overlays to keep your map clean. Luckily you can adjust the overlay properties to make it longer rather than make duplicates of the strip. This is accomplished by editing the '''U Start''' or '''U End''' keyvalue in the properties window for the overlay. Another way of accomplishing this is to stretch 'physically' the overlay in one of the '''2D views''' - make sure that the 'Texture Lock' is unchecked.  
+
Длина одной световой ленты - 4 кружка, но иногда вам может потребоваться другое их количество. К счастью, вы можете изменить свойства оверлея, чтобы удлинить его, а не использовать несколько оверлеев. Это можно сделать, отредактировав ключевое значение '''U Start''' или '''U End''' в окне свойств оверлея. Другой способ - растянуть оверлей 'физически' в одном из '''двухмерных видов''' — но сначала убедитесь, что флаг 'Texture Lock' снят. Помните, что индикаторные огни никогда не проходят между плиток!
{{tip|Remember that you can add decimal key values to the strips length. This is helpful if you want a strip of 5 circles, for example, which would be possible if you set the strip's length to 1.25 (each circle is 0.25). So if you want a strip of 11 circles, the strip's length would be 2.75.}}
+
{{tip:ru|Вы можете вводить десятичные ключевые значения для длины лент. Это пригодится, если вам нужна лента из 5 кружков, например, для этого вам потребуется ввести значение 1.25 (каждый кружок имеет длину 0.25). Так что, если вам потребуется линия из 11 кружков, длина ленты должна равняться 2.75.}}
  
=== Шаг 4 ===
+
4. Выберите размещённые вами оверлеи (ТОЛЬКО те пометки, которые вам нужны) и назовите их одинаково. В данном руководстве мы используем "indlights_1". Затем откройте свойства помещённой вами env_texturetoggle, и введите то же имя в поле Target Brush(es). Теперь назовите env_texturetoggle "texturetoggle_lights_01"
Select the overlays you just placed (and ONLY the overlays you want) and name them all the same. Use "indlights_1" for this tutorial. Then open up the env_texturetoggle you previously placed, and enter the same name into the Target Brush(es) field. Now name the env_texturetoggle "texturetoggle_lights_01"
 
  
=== Шаг 5 ===
+
5. Выберите энтити '''activator''' и откройте вкладку её выходов. В данном руководстве используется энтити простой кнопки, поэтому все выходные параметры в таблице будут соответствовать ей. Вам нужно только добавить следующие два входа к вашему активатору:
Select the '''activator''' entity, and go to the outputs menu. In this tutorial a simple button entity was used, so all output parameters in the table would relate to it. All you need to do is to add these two outputs to your activator:
 
 
:{| border=1 cellpadding="2" cellspacing="1"
 
:{| border=1 cellpadding="2" cellspacing="1"
 
|- align=left style="background:#DCDCDC; color:black"
 
|- align=left style="background:#DCDCDC; color:black"
Line 41: Line 38:
 
| [[Image:Io11.png]] || OnButtonReset || texturetoggle_lights_01 || SetTextureIndex || 0 || 0.00 || No
 
| [[Image:Io11.png]] || OnButtonReset || texturetoggle_lights_01 || SetTextureIndex || 0 || 0.00 || No
 
|}
 
|}
So basically, now when the button is pressed the <code>texturetoggle_lights_01</code> will change the overlays connected to it to the alternate "skin" of their's - the appropriate orange texture. After that when the button will reset the "skin" would return to the normal color - blue.
+
В общем, теперь по нажатии кнопки <code>texturetoggle_lights_01</code> изменит оверлеи, подключенные к ней, на их альтернативный "вариант", а именно на соответствующую оранжевую текстуру. После этого кнопка сбросит "вариант" на обычный синий цвет.
  
Done, your indicator lights should now be working!
+
Готово! Индикаторные огни должны работать!
  
== Checkmark Box ==
+
== Рамка с галочкой ==
[[Image:Indicator checkbox placement.jpg|250px|right|thumb|Where to put the '''prop_indicator_panel'''.]]
+
[[Image:Indicator checkbox placement.jpg|250px|right|thumb|Место, где будет помещена '''prop_indicator_panel'''.]]
A '''checkmark box''' is a binary indicator, meaning it only has off and on states. It is used to indicate the operated entity 'active state' - a blue 'X' mark when inactive and an orange 'V' mark when active.
+
'''Рамка с галочкой''' - бинарный индикатор, то есть он может иметь только два состояния. Он указывает на текущее состояние энтити - синяя пометка 'X', если неактивна, и оранжевая галочка, когда активна.
  
=== Шаг 1 ===
+
1. Создайте [[prop_static]] со следующими свойствами:
Create a [[prop_static]] with the following properties:
 
 
::{| class=standard-table
 
::{| class=standard-table
Property Name || Value
+
Свойство || Значение
 
|-
 
|-
 
| World Model || models/props/sign_frame01/sign_frame01.mdl
 
| World Model || models/props/sign_frame01/sign_frame01.mdl
 
|}
 
|}
Align it so it will be at the end of your light path.
+
Поместите её в конце световой дорожки.
  
=== Шаг 2 ===
+
2. В том же самом месте и с теми же "Pitch Yaw roll" поместите [[prop_indicator_panel]]. Лучше это сделать shift-перетаскиванием prop_static в то же место.
At the exact same spot, with the exact same "Pitch Yaw roll" place a [[prop_indicator_panel]]. The best way to do this  is to shift-drag the prop_static to the same place by moving it a unit to one direction and returning it.
+
{{Note:ru|Вид '''prop_indicator_panel'''' не должен ввести вас в заблуждение; В игре она выглядит лишь как рамка с галочкой. Именно поэтому также необходима <code>models/props/sign_frame01/sign_frame01.mdl</code>.}}  
{{Note|Do not be fooled by the '''prop_indicator_panel''''s appearance; in-game it is only drawn as the checkmark-box. This is why the <code>models/props/sign_frame01/sign_frame01.mdl</code> is needed as well.}}  
 
  
=== Шаг 3 ===
+
3. Заполните поля '''prop_indicator_panel'''' согласно вашему замыслу. Дайте энтити имя, и проверьте, что она связана с оверлеем, а ''не'' env_texturetoggle.
Fill the '''prop_indicator_panel''''s fields as desired. Give the entity a name, and make sure it is linked to the overlay ''not'' the env_texturetoggle.
 
 
::{| class=standard-table
 
::{| class=standard-table
Property Name || Value
+
Свойство || Значение
 
|-
 
|-
 
| Name || checkmark_indlights_1
 
| Name || checkmark_indlights_1
Line 72: Line 66:
 
|}
 
|}
  
{{Note|If you decide to fill the 'Indicator Lights' field in the prop_indicator_panel's properties, the prop_indicator_panel will act as an env_texturetoggle. So when it is "Checked" or Unchecked" it will change the "skin" of the indicator light path you attached to it accordingly.}}
+
{{Note:ru|Если вы хотите заполнить поле 'Indicator Lights' в свойствах prop_indicator_panel, то prop_indicator_panel будет работать как env_texturetoggle. Так что, когда она "включена" (Check) или "отключена" (Uncheck), она изменит "вариант" индикаторных огней, то есть путь, указанный к ним, соответственно.}}
  
=== Шаг 4 ===
+
4. Добавьте к энтити активатора ещё два входа:
Add to the activator entity another two outputs:
 
 
:{| border=1 cellpadding="2" cellspacing="1"
 
:{| border=1 cellpadding="2" cellspacing="1"
 
|- align=left style="background:#DCDCDC; color:black"
 
|- align=left style="background:#DCDCDC; color:black"
Line 85: Line 78:
 
| [[Image:Io11.png]] || OnButtonReset || checkmark_indlights_1 || Uncheck || &nbsp; || 0.00 || No
 
| [[Image:Io11.png]] || OnButtonReset || checkmark_indlights_1 || Uncheck || &nbsp; || 0.00 || No
 
|}
 
|}
So now you have an operating checkmark box as well, don't forget to link the activator to the activated entity too.
+
Теперь у вас есть и работающая рамка с галочкой, также не забудьте связать активатор с активируемой энтитей.
  
== Checkmark Timer ==
+
== Таймер в рамке ==
A '''checkmark timer''' acts almost as the checkmark box: showing the active state of the operated entity. However, it shows that the operation will last a limited amount of time. It is usually advised that the activator would be a simple [[Button (Portal 2)#Button|button]] because when activating a [[Button (Portal 2)#Floor Button|floor button]] the player expects the operation to be permanent until he steps off the button.
+
'''Таймер в рамке''' действует практически так же, как рамка с галочкой: показывает активное состояние управляемой энтити. Однако, таймер показывает, что действие будет длиться ограниченное количество времени. Как правило, рекомендуется, чтобы активатор являлся простой [[Button (Portal 2):ru#Кнопка-пьедестал|кнопкой]], поскольку при активации [[Button (Portal 2):ru#Напольные кнопки|напольной кнопкой]] игрок ожидает, что действие будет выполняться, пока напольная кнопка нажата.
  
Before placing a timer think if you ''really'' need it, and if so, how much time is the timer's active state going to be? You don't want the task to be impossible, you just want to add an element of stress to the puzzle.  
+
Перед добавлением таймера подумайте, ''действительно'' ли он вам нужен, и если это так, то на протяжении какого времени таймер должен быть активен? Не делайте задачу невыполнимой, вам лишь нужно добавить небольшое напряжение в головоломку.  
  
=== Шаг 1 ===
+
1. Снова, поместите prop_static со следующими свойствами:
Again, place a prop_static with the following properties:
 
 
::{| class=standard-table
 
::{| class=standard-table
Property Name || Value
+
Свойство || Значение
 
|-
 
|-
 
| World Model || models/props/sign_frame01/sign_frame01.mdl
 
| World Model || models/props/sign_frame01/sign_frame01.mdl
 
|}
 
|}
Align it so it will be at the end of your light path.
+
Поместите её в конце световой дорожки.
  
=== Шаг 2 ===
+
2. Поместите prop_indicator_panel в том же месте, что и <code>sign_frame01.mdl</code>. Теперь решите, сколько времени запускаемая энтити будет активна. В данном руководстве мы выберем 8 секунд, так что добавим следующие свойства:
Place a prop_indicator_panel at the exact same spot as the <code>sign_frame01.mdl</code>. Now you have to ask yourself: "how much time do I want the operated entity to be active?". For this tutorial I picked 8 seconds, so all I have to do is to add the following properties:
 
 
::{| class=standard-table
 
::{| class=standard-table
Property Name || Value
+
Свойство || Значение
 
|-
 
|-
 
| Name || checktime_indlights_1
 
| Name || checktime_indlights_1
Line 118: Line 109:
 
| Indicator Lights || indlights_1
 
| Indicator Lights || indlights_1
 
|}
 
|}
{{Note|Is checked marks if the panel will start with the 'V' mark. Because you want a timer make sure this field is set to 'No'.}}
+
{{Note:ru|Свойство Is checked показывает, будет ли панель сразу с галочкой. Так как вам нужен таймер, укажите 'No'.}}
  
=== Шаг 3 ===
+
3. Добавьте кнопку со следующими свойствами:
Add a button with the following properties:
 
 
::{| class=standard-table
 
::{| class=standard-table
 
!  Property Name || Value
 
!  Property Name || Value
Line 133: Line 123:
 
| Prevent fast reset? || No
 
| Prevent fast reset? || No
 
|}
 
|}
Setting the time in the 'Delay Before Reset' field will tell the button how much time the timer sound should be played. Setting the 'Prevent fast reset?' to 'No' allows to re-press the button at any given time during the timer duration. This will allow the player to restart the timer when he understands he acted to slowly without having to wait for the timer to reset on its own.
+
Заданное в поле 'Delay Before Reset' время сообщит кнопке, сколько времени должен тикать таймер. Задание 'Prevent fast reset?' на значение 'No' позволит нажать кнопку ещё раз в ходе работы таймера. Это позволит игроку перезапустить таймер, чтобы успеть сделать нужные действия.
{{Tip|It is also useful to use the 'Delay Before Reset' field to prevent pressing the button again while the connected entity is still working. For example, when delivering a [[Cube (Portal 2)|cube]] you don't want the player to be able to fizzle it before it reaches the ground.}}
+
{{Tip:ru|Также рекомендуется использовать поле 'Delay Before Reset', чтобы кнопку нельзя было нажать в то время, пока подключенная энтити ещё работает. Так, например, при получении [[Cube (Portal 2):ru|куба]] вы не сможете растворить куб прежде, чем закроется раздатчик.}}
  
=== Шаг 4 ===
+
4. И последнее, что нужно сделать для работы таймера, добавить этот выход на вкладке Output:
The last thing that needs to be done to make this timer operating is to add this single output in the Output tab:
 
 
:{| border=1 cellpadding="2" cellspacing="1"
 
:{| border=1 cellpadding="2" cellspacing="1"
 
|- align=left style="background:#DCDCDC; color:black"
 
|- align=left style="background:#DCDCDC; color:black"
Line 145: Line 134:
 
| [[Image:Io11.png]] || OnPressed || checktime_indlights_1 || Start || &nbsp; || 0.00 || No
 
| [[Image:Io11.png]] || OnPressed || checktime_indlights_1 || Start || &nbsp; || 0.00 || No
 
|}
 
|}
The timer will reset automatically when the time runs out. However, you can still add a 'Stop' command to stop the timer on it's current value or to send a 'Reset' output to reset it manually.
+
Таймер будет сбрасываться автоматически по истечении заданного времени. Однако, вы можете добавить команду 'Stop', чтобы остановить таймер в его текущем состоянии или чтобы отправить выход 'Reset' для сброса таймера вручную.
 +
 
 +
== Индикаторные огни старой лаборатории ==
 +
[[File:Indiclights neon 1.png|right|360px]]
 +
В браузере текстур выберите текстуру для огней (введите "neon" в фильтр).
 +
<br>Мы возьмём "<code>signage/indicator_lights/indicator_neon_straight</code>"
 +
{{Note:ru|Оверлеи индикаторных огней из [[Underground (Portal 2):ru|старой лаборатории]] обычно представляют собой текстуру 64x64 с одной неоновой лентой.}}
 +
 
 +
Как вы могли заметить, стандартный размер текстуры огней гораздо больше, чем должен быть. Чтобы это исправить, включите флаг 'Texture Lock', и в одном из '''двухмерных видов''' уменьшайте размер оверлея, пока он не станет размером 16x16. Теперь вернитесь к шагу 2 в создании индикаторной дорожки и триггеров.
 +
 
 +
== Рамка с галочкой старой лаборатории ==
 +
 
 +
Создайте блок браша размером 32Wx2Lx32H с текстурой tools/toolsnodraw. Спереди поместите оверлей <code>signage/indicator_lights/indicator_neon_check</code>, стороны покройте текстурой <code>plastic/plastickwall004a_dirty</code>. Проверьте, что установлен флаг 'Texture Lock', и подгоните размер оверлея по брашу. Переместите браш в конец индикаторной дорожки.
 +
 
 +
Преобразуйте браш в энтити func_brush и дайте ей то же имя, что было у ваших энтитей info_overlay.
 +
 
 +
Теперь всё должно работать.
 +
 
 +
=== Завершение ===
  
== Лампы-индикаторы из Old Aperture ==
+
Чтобы добавить звук мерцающих неоновых огней, просто поместите [[ambient_generic]] на панель с галочкой со следующими свойствами:
{{todo|they're a bit different than the normal lights...}}
+
::{| class=standard-table
*<code>signage/indicator_lights/indicator_neon_straight</code>
+
!  Свойство || Значение
 +
|-
 +
| Name || <имя_индикаторных_огней>_sound
 +
|-
 +
| Sound Name || VFX.OGSignFlicker
 +
|}
 +
Проверьте, чтобы на вкладке флагов он НЕ был зациклен (looped)? и добавьте ещё один выход к активатору:
 +
:{| border=1 cellpadding="2" cellspacing="1"
 +
|- align=left style="background:#DCDCDC; color:black"
 +
!
 +
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
 +
|-
 +
| [[Image:Io11.png]] || OnPressed || <indicator_light_name>_sound || PlaySound ||  || 0.00 || No
 +
|}
 
[[Category:Portal 2 Level Design:ru]]
 
[[Category:Portal 2 Level Design:ru]]

Latest revision as of 19:03, 11 September 2014

English
Indiclights 2.png

Индикаторные огни - световые дорожки в тестовых камерах, указывающие на взаимосвязанные энтити, например, кнопка и раздатчик. В неактивном состоянии огни имеют синий цвет, в активном - оранжевый.

Создание индикаторных огней

Размещённые индикаторные огни

Данное руководство предполагает наличие базовых знаний Hammer.

1) В своей карте создайте две энтити, которые будут взаимодействовать. Это могут быть как сверхпрочная сверхударная сверхкнопка :), открывающая выходную дверь, так и кнопка-пьедестал, которая запустит пневматическую трубу, из которой потечёт гель, давая игроку на один шаг приблизиться к решению. То, что произойдёт, решаете вы, но всегда следом за активируемой штукой помещайте энтити env_texturetoggle — это поможет нам сменить цвет индикаторных огней в дальнейшем, а также напомнит, где вы разместили энтити - карта станет более понятной.

2) Выберите текстуру огней в браузере текстур, для данного руководства: "signage/indicator_lights/indicator_lights_floor" (легко находится, если ввести "indicator" в поле фильтра).

A1. signage/indicator_lights/indicator_lights_floor
A2. signage/indicator_lights/indicator_lights_wall
B1. signage/indicator_lights/indicator_lights_corner_wall
B2. signage/indicator_lights/indicator_lights_corner_floor

Примечание:Текстуры в каждой паре оверлеев функционально и внешне неразличимы; но при желании вы можете использовать оба оверлея.

3) Выберите инструмент Overlay в Hammer, и разместите оверлеи огней там, где вам нужно. Функционально нет разницы, как они размещены, хотя между взаимодействующими энтитями желательно провести логичную линию, обычно это кратчайший путь между двумя энтитями; не забудьте, что в некоторых местах кратчайший путь идёт по стене. Кроме того, в целях согласованности с индикаторами в картах Valve, на сгибах световых дорожек (но не в переходах от пола к стене, например) в углу помещайте signage/indicator_lights/indicator_lights_corner_wall, также, как и в начале у активатора (но не активируемого объекта).

Длина одной световой ленты - 4 кружка, но иногда вам может потребоваться другое их количество. К счастью, вы можете изменить свойства оверлея, чтобы удлинить его, а не использовать несколько оверлеев. Это можно сделать, отредактировав ключевое значение U Start или U End в окне свойств оверлея. Другой способ - растянуть оверлей 'физически' в одном из двухмерных видов — но сначала убедитесь, что флаг 'Texture Lock' снят. Помните, что индикаторные огни никогда не проходят между плиток!

Совет:
Вы можете вводить десятичные ключевые значения для длины лент. Это пригодится, если вам нужна лента из 5 кружков, например, для этого вам потребуется ввести значение 1.25 (каждый кружок имеет длину 0.25). Так что, если вам потребуется линия из 11 кружков, длина ленты должна равняться 2.75.


4. Выберите размещённые вами оверлеи (ТОЛЬКО те пометки, которые вам нужны) и назовите их одинаково. В данном руководстве мы используем "indlights_1". Затем откройте свойства помещённой вами env_texturetoggle, и введите то же имя в поле Target Brush(es). Теперь назовите env_texturetoggle "texturetoggle_lights_01"

5. Выберите энтити activator и откройте вкладку её выходов. В данном руководстве используется энтити простой кнопки, поэтому все выходные параметры в таблице будут соответствовать ей. Вам нужно только добавить следующие два входа к вашему активатору:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnPressed texturetoggle_lights_01 SetTextureIndex 1 0.00 No
Io11.png OnButtonReset texturetoggle_lights_01 SetTextureIndex 0 0.00 No

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

Готово! Индикаторные огни должны работать!

Рамка с галочкой

Место, где будет помещена prop_indicator_panel.

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

1. Создайте prop_static со следующими свойствами:

Свойство Значение
World Model models/props/sign_frame01/sign_frame01.mdl

Поместите её в конце световой дорожки.

2. В том же самом месте и с теми же "Pitch Yaw roll" поместите prop_indicator_panel. Лучше это сделать shift-перетаскиванием prop_static в то же место.

Примечание:Вид prop_indicator_panel' не должен ввести вас в заблуждение; В игре она выглядит лишь как рамка с галочкой. Именно поэтому также необходима models/props/sign_frame01/sign_frame01.mdl.

3. Заполните поля prop_indicator_panel' согласно вашему замыслу. Дайте энтити имя, и проверьте, что она связана с оверлеем, а не env_texturetoggle.

Свойство Значение
Name checkmark_indlights_1
Indicator Lights indlights_1
Примечание:Если вы хотите заполнить поле 'Indicator Lights' в свойствах prop_indicator_panel, то prop_indicator_panel будет работать как env_texturetoggle. Так что, когда она "включена" (Check) или "отключена" (Uncheck), она изменит "вариант" индикаторных огней, то есть путь, указанный к ним, соответственно.

4. Добавьте к энтити активатора ещё два входа:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnPressed checkmark_indlights_1 Check   0.00 No
Io11.png OnButtonReset checkmark_indlights_1 Uncheck   0.00 No

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

Таймер в рамке

Таймер в рамке действует практически так же, как рамка с галочкой: показывает активное состояние управляемой энтити. Однако, таймер показывает, что действие будет длиться ограниченное количество времени. Как правило, рекомендуется, чтобы активатор являлся простой кнопкой, поскольку при активации напольной кнопкой игрок ожидает, что действие будет выполняться, пока напольная кнопка нажата.

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

1. Снова, поместите prop_static со следующими свойствами:

Свойство Значение
World Model models/props/sign_frame01/sign_frame01.mdl

Поместите её в конце световой дорожки.

2. Поместите prop_indicator_panel в том же месте, что и sign_frame01.mdl. Теперь решите, сколько времени запускаемая энтити будет активна. В данном руководстве мы выберем 8 секунд, так что добавим следующие свойства:

Свойство Значение
Name checktime_indlights_1
Timer Duration 8
Start visible? Yes
Is a timer Yes
Is checked No
Indicator Lights indlights_1
Примечание:Свойство Is checked показывает, будет ли панель сразу с галочкой. Так как вам нужен таймер, укажите 'No'.

3. Добавьте кнопку со следующими свойствами:

Property Name Value
Name button_01
Delay Before Reset 8
Play timer sound? Yes
Prevent fast reset? No

Заданное в поле 'Delay Before Reset' время сообщит кнопке, сколько времени должен тикать таймер. Задание 'Prevent fast reset?' на значение 'No' позволит нажать кнопку ещё раз в ходе работы таймера. Это позволит игроку перезапустить таймер, чтобы успеть сделать нужные действия.

Совет:
Также рекомендуется использовать поле 'Delay Before Reset', чтобы кнопку нельзя было нажать в то время, пока подключенная энтити ещё работает. Так, например, при получении куба вы не сможете растворить куб прежде, чем закроется раздатчик.


4. И последнее, что нужно сделать для работы таймера, добавить этот выход на вкладке Output:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnPressed checktime_indlights_1 Start   0.00 No

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

Индикаторные огни старой лаборатории

Indiclights neon 1.png

В браузере текстур выберите текстуру для огней (введите "neon" в фильтр).
Мы возьмём "signage/indicator_lights/indicator_neon_straight"

Примечание:Оверлеи индикаторных огней из старой лаборатории обычно представляют собой текстуру 64x64 с одной неоновой лентой.

Как вы могли заметить, стандартный размер текстуры огней гораздо больше, чем должен быть. Чтобы это исправить, включите флаг 'Texture Lock', и в одном из двухмерных видов уменьшайте размер оверлея, пока он не станет размером 16x16. Теперь вернитесь к шагу 2 в создании индикаторной дорожки и триггеров.

Рамка с галочкой старой лаборатории

Создайте блок браша размером 32Wx2Lx32H с текстурой tools/toolsnodraw. Спереди поместите оверлей signage/indicator_lights/indicator_neon_check, стороны покройте текстурой plastic/plastickwall004a_dirty. Проверьте, что установлен флаг 'Texture Lock', и подгоните размер оверлея по брашу. Переместите браш в конец индикаторной дорожки.

Преобразуйте браш в энтити func_brush и дайте ей то же имя, что было у ваших энтитей info_overlay.

Теперь всё должно работать.

Завершение

Чтобы добавить звук мерцающих неоновых огней, просто поместите ambient_generic на панель с галочкой со следующими свойствами:

Свойство Значение
Name <имя_индикаторных_огней>_sound
Sound Name VFX.OGSignFlicker

Проверьте, чтобы на вкладке флагов он НЕ был зациклен (looped)? и добавьте ещё один выход к активатору:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnPressed <indicator_light_name>_sound PlaySound 0.00 No