Portal — туториал по созданию таймера обратного отсчёта

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Русский (ru)中文 (zh)Translate (Translate)
Создание уровней Portal

Это туториал покажет вам, как создать часы, которые можно было увидеть в самое первой камере игры Portal(en). В Portal часы использовались, чтобы отображать оставшееся время до открытия первого портала.

Создание

Шаг №1: модель

Модель часов

Создайте сущность prop_dynamic(en). Поставьте ей такие параметры:

Property Name Value
World Model models/props/clock.mdl
Pitch Yaw Roll -90 180 0
Disable Shadows Yes

Шаг №2: числовые браши

Создайте браш размерами 2д × 10ш × 10в, выровняв его максимально влево относительно дисплея часов. Примените текстуру signage/clock/clock_minutes на переднюю сторону, не забудьте в окне текстурирования нажать кнопку «Fit», чтобы текстура растянулась на весь браш. Затем, превратите его в func_brush(en), назвав её (параметр Name) как brush_clock_minutes.

Далее создайте ещё один браш размерами 2д × 2ш × 10в разместите его правее относительно первого браша. Примените текстуру signage/clock/clock_dots на переднюю сторону браша, растяните его кнопкой Fit. Превратите его в func_detail(en).

После этого, создайте очередной браш 2д × 10ш × 10в, на переднюю сторону которого примените текстуру signage/clock/clock_seconds, растянув её. Превратите браш в func_brush, назвав её как brush_clock_seconds.

Создайте ещё один браш с размерами 2д × 2ш × 10в с текстурой signage/clock/clock_dots, нажмите Fit и превратите его в func_detail.

Теперь создайте третий браш размерами 2д × 10ш × 10в с текстурой signage/clock/clock_centiseconds на передней стороне (не забудьте про Fit). Превратите его в сущность func_brush, поставьте параметр Name в значение brush_clock_centiseconds.

Далее снова создайте func_detail-браш с размерами 2д × 2ш × 10в, спереди которого будет растянутая текстура signage/clock/clock_dots.

Ну и наконец, создайте последний браш с размерами 2д × 10ш × 10в с растянутой текстурой signage/clock/clock_milliseconds. Пусть он будет func_brush-сущностью с именем brush_clock_milliseconds.


Шаг №3: логика изменения текстур

Создайте сущность env_texturetoggle(en). Поставьте параметр Name в значение texturetoggle_clock_minutes, а параметр Target Brush(es) в значение brush_clock_minutes.

Затем, создайте ещё один env_texturetoggle с именем texturetoggle_clock_seconds. Впишите в параметр Target Brush(es) brush_clock_seconds.

После этого, создайте сущность material_modify_control(en). Задайте ей такие параметры:

Property Name Value
Name mmc_clock_centiseconds
Parent brush_clock_centiseconds
Material to modify signage/clock/clock_centiseconds
Material variable to modify $frame

Наконец, создайте последний material_modify_control с такими параметрами:

Property Name Value
Name mmc_clock_milliseconds
Parent brush_clock_milliseconds
Material to modify signage/clock/clock_milliseconds
Material variable to modify $frame

Шаг №4: таймеры

Создайте сущность logic_timer(en). Задайте ей параметры следующим образом:

Property Name Value
Name timer_clock_minutes
Start Disabled Yes
Refire Interval 1

Затем, дарим сущности следующие Outputs:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTimer texturetoggle_clock_minutes IncrementTextureIndex   0.00 No
Io11.png OnTimer timer_clock_minutes Disable   0.10 No


Далее, создаём ещё один logic_timer даём ему почти такие же параметры, кроме Name, который будет timer_clock_seconds. Создаём такие Outputs:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTimer texturetoggle_clock_seconds IncrementTextureIndex   0.00 No
Io12.png OnTimer counter_clock Add 1 0.00 No
Io12.png OnTimer counter_clock_2 Add 1 0.00 No


Снова создаём (или копируем) logic_timer с такими же значениями, но Name меняем на timer_clock_centiseconds, задаём такой Output:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTimer mmc_clock_centiseconds StartFloatLerp 0 59 1 0 0.00 No


Наконец, делаем последний таймер (logic_timer), задаём ему следующие значения:

Property Name Value
Name timer_clock_milliseconds
Start Disabled Yes
Refire Interval .1

И пишем такой Output:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTimer mmc_clock_milliseconds StartFloatLerp 0 9 .1 1 0.00 No


Шаг №5: математика

Сущность counter_clock

Создаём math_counter(en), которая будет отсчитывать одну минуту. Даём имя (Name) counter_clock и максимальное значение (Maximum Legal Value) в 60, пишем Outputs:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnHitMax timer_clock_seconds Disable   0.00 No
Io11.png OnHitMax texturetoggle_clock_seconds SetTextureIndex 59 0.00 No
Io12.png OnHitMax timer_ticktock1 Disable   0.00 No
Сущность counter_clock_2

Далее, создаём ещё один math_counter с именем counter_clock_2 и максимальным значением 59. Снова пишем Outputs:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnHitMax timer_clock_centiseconds Disable   0.00 No
Io11.png OnHitMax timer_clock_milliseconds Disable   1.00 No

Шаг №6: звук

The sound_ticktock1 entity

Создаём сущность ambient_generic(en) с такими параметрами:

Property Name Value
Name sound_ticktock1
Sound Name Portal.room1_TickTock
Volume 5
Max Audible Distance 441
The timer_ticktock1 entity

Затем, делаем таймер (logic_timer):

Property Name Value
Name timer_ticktock1
Start Disabled Yes
Refire Interval 1

Дарим такой Output:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTimer sound_ticktock1 PlaySound   0.00 No

Шаг №7: автологика

Сущность logic_auto

Создаём logic_auto(en) и даём такие Otputs:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnMapSpawn mmc_clock_milliseconds SetMaterialVar 9 0.00 No
Io11.png OnMapSpawn mmc_clock_centiseconds SetMaterialVar 59 0.00 No
Io11.png OnMapSpawn texturetoggle_clock_seconds SetTextureIndex 59 0.00 No

Теперь при заходе на карту будет отображено время на таймере, а не что-то другое.

Шаг №8: триггер запуска

Сущность relay_start_clock

Создайте logic_relay(en) с именем relay_start_clock. И пропишите такие Outputs:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger timer_clock_minutes Enable   0.00 No
Io11.png OnTrigger timer_clock_seconds Enable   0.00 No
Io11.png OnTrigger timer_clock_centiseconds Enable   0.00 No
Io11.png OnTrigger timer_ticktock1 Enable   0.00 No
Io11.png OnTrigger timer_clock_milliseconds Enable   0.90 No

Часы теперь полностью готовы и ждут внедрения на карту!

Внедрение

Шаг №1: размещение

Разместите часы на карте, чтобы они были на нужной стене.

Шаг №2: запуск

Отправьте Input Trigger к сущности relay_start_clock, чтобы начать отсчёт.