Продолжаем серию статей по маппингу в играх с помощью Hammer Editor.
Звуки ходьбы как у солдат без замены файлов. Действия при нажатии клавиш ходьбы.
Первое что нам необходимо это установить на карту энтити game_ui отвечающую за нажатие клавиш игроком, её настройки:
Name gameUI
FieldOfView -1.0
И во вкладке Flags убрать все галочки.
Для включения этой энтити logic_auto не подойдёт, по этому создадим тригеер который включит game_ui, создаём браш, превращаем его в trigger_once, во вкладке Flags отмечаем Clients и в Output добавляем:
OnStartTouch gameUI Activate
ИгрокКоснулсяТриггера gameUI Активировать
Далее расположим на карте 4шт logic_branch (энтити которая может лишь менять одно своё значение на 0 или 1) - в данном случае они понадобятся для отслеживания того что игрок удерживает клавишу.
Для удобства расположим их так же как и располагаются клавиши ходьбы на клавиатуре. Верхнюю назовём forward, нижнюю back, левую и правую соответственно left и right.
Поле InitialValue у всех logic_branch должно быть 0.
Возвращаемся обратно к game_ui, переходим во вкладку Output и создаём следующие команды:
PressedForward forward SetValue 1
UnpressedForward forward SetValue 0
Что означает:
ПриНажатииВперёд forward УстановитьЗначение 1
ПриОтжатииВперёд forward УстановитьЗначение 0
Так же делаем для всех клавиш передвижения, в итоге получиться:
PressedForward forward SetValue 1
UnpressedForward forward SetValue 0
PressedBack back SetValue 1
Unpressed back SetValue 0
PressedMoveRight right SetValue 1
UnpressedMoveRight right SetValue 0
PressedMoveLeft left SetValue 1
UnpressedMoveLeft left SetValue 0
Добавляем на карту logic_branch_listener - энтити которая будет проверять все наши logic_branch и выносить вердикт, указываем в полях Logic Branch названия наших logic_branch (логично), должно получиться следующее:
Logic Branch 01 forward
Logic Branch 02 back
Logic Branch 03 right
Logic Branch 04 left
Теперь делаем периодичность между воспроизведениями звуков шагов, для этого расположим на карте один logic_timer, дадим ему имя StepTimer, в поле Start Disabled (отключен в начале) установим значение Yes, а Use Random Time (использовать случайное время) - No.
В поле Refire Interval установим значение 0.4 - это и есть периодичность воспроизведения каждого звука шага в секундах, получается чуть меньше половины секунды.
Возвращаемся обратно к logic_branch_listener, переходим во вкладку Output и создаём следующие команды:
OnMixed StepTimer Enable
OnAllFalse StepTimer Disable
Что означает:
Если logic_branch имеют не одинаковые значения (то есть хоть какая-то клавиша нажата) StepTimer Включается
Если все logic_branch имеют значение 0 StepTimer Выключается
Осталось совсем не много, создаём 6шт ambient_generic (энтити воспроизведения звука) каждый на отдельный звук ходьбы. Установим всем поле Volume (громкость) на 8, и во вкладке Flags отметим все галочки.
Даём каждому имя step1, step2 ... и так до step6, так же у каждого в поле Sound Name (имя звука) указываем необходимый звук - у step1 это npc/combine_soldier/gear1.wav , у step2 тоже самое, но в конце gear2.wav и так далее, получится 6шт step от 1 до 6, с звуками gear так же от 1 до 6.
Создаем logic_case энтити которая случайным образом будет воспроизводить один из 6 звуков за каждый шаг. Даём ей имя CombineStep и в полях Case (кейс рандома) выставляем цифры от 1 до 7, получится следующее:
Case 01 1
Case 02 2
... и так до 7 ...
Case 07 7
(почему до 7, а не до 6 - иногда в редких случаях при запуске карты у этой энтити последний кейс никогда не будет браться в рандом, возможно это её баг)
Во вкладке Outputs добавляем следующее:
OnCase01 step1 PlaySound
OnCase02 step2 PlaySound
... и так до 6 ...
OnCase06 step6 PlaySound
Осталось последнее - запускать logic_case для случайного воспроизведения одного из звуков.
Для этого переходим обратно к logic_timer и в Output добавляем:
OnTimer CombineStep PickRandomShuffle
При Срабатывании Таймера CombineStep Выбрать Случайный Не Повторяюшийся Кейс
И так, предлагаю восстановить логическую цепочку всех действий, это типа как проверка правильности решения примера по алгебре:
Игрок коснулся trigger_once активировав этим game_ui, он нажимает клавишу Вперёд, game_ui считывает нажатие и меняет значение logic_branch с 0 на 1, logic_branch_listener замечает это изменение и запускает logic_timer который через 0.4 секунды отправляет на logic_case команду на запуск случайного не повторяющегося кейса, logic_case выбирает кейс номер 4 и запускает четвёртый ambient_generic который воспроизводит звук npc/combine_soldier/gear4.wav
Игрок отпускает клавишу Вперёд, game_ui считывает это и меняет значение logic_branch на 0, logic_branch_listener замечает это изменение и отключает logic_timer.