Данная система дает возможность: - плавное
изменение какой-то переменной (консоли\энтити)
- плавный
старт\остановка движения тректрейна (поезда) (к примеру)
- изменение
переменной по экспоненциальной или логарифмической функции
- изменение
переменной в указанном диапазоне
... множество
мест применения. В этом учебнике я покажу способ
применения на плавном замедлении времени в игре. Это сложнее немного чем
плавный старт поезда, по этому первый пример будет именно на тректрейне. Традиционно начнем с пустой комнаты с
info_player_start'ом и сеткой на 4. Ставим path_track
с именем smooth_track_1, зажимаем
shift и делаем второй трек на расстоянии ~100 (к примеру) дюймов:
Мы поимели два трека на расстоянии 100 дюймов (юнитов) с
именами smooth_track_1 и smooth_track_2. Создаем func_tracktrain
с именем smooth_tracktrain_1 толщиной
1 дюйм (центр трейна не попадает в центр паза. не сдвигаем его!) в первом треке. (не обязательно точно в нем создавать, т. к. при
старте карты он будет автоматически телепортирован в первый (указанный в нем)
трек. Просто когда к нему будете что-то припаренчивать то ставьте ровно).
Указываем скорость MaxSpeed 40 (дюймов в сек) (смотря с какой
скоростью вы хотите иметь изменение переменной). При таком раскладе скорость
изменения нашей переменной от макс. до мин. займет 2.5 сек. Указываем First stop
target: smooth_track_1, флаги:
Теперь создаем trigger_multiple на пути тректрейна, чтобы трейн
задевал их при движении. Кол-во триггеров зависит от плавности изменения
переменной. К примеру моя переменная host_timescale,
мне нужно изменить ее от 0.2 до 1.0, я возьму 9 триггеров на каждое положение:
Флаги триггеров:Everything.
Теперь я ставлю point_clientcommand (имя smooth_servercommand),
а в других случаях (переменная энтити) ссылаемся прям на энтитю (к примеру
другой тректрейн (поезд\телега)). Аутпуты: У первого триггера: OnStartTouch -> smooth_servercommand
-> Command : host_timescale 1.0 OnStartTouch ->
smooth_servercommand -> Command : sv_cheats 1 -придетсявключитьчитыдляэтойкоманды. Второго: OnStartTouch ->
smooth_servercommand -> Command : host_timescale 0.9 ...
ит. д. ... Последнего: OnStartTouch ->
smooth_servercommand -> Command : host_timescale 0.2 В принципе все. Системой удобно
управлять с помощью logic_branch.
Ставим сие чудо с именем smooth_branch.
Аутпуты: OnFalse -> smooth_tracktrain_1 -> StartBackward OnTrue -> smooth_tracktrain_1 -> StartForward Когда нужно будет запустить систему- подаем
аутпут: smooth_branch -> SetValueTest : 1 //включить эффект smooth_branch -> SetValueTest : 0 //выключитьэффект Один момент в моем случае.. Мы
управляем временем, соответственно ползунок наш будет двигаться в соответствии
со временем (и сила эффекта будет работать по экспоненциальной\логарифмич.
функции, и время срабатывания эффекта увеличится, по этому мы должны с каждого
триггера подать аутпут на тректрейн (ползунок) на изменение скорости
передвижения. Теперь эффект будет изменятся линейно. Примечания: ·
с
помощью таких изменений в движении ползунка можно сделать изменение переменной
по экспоненциальной или логарифмической функции т. е. нелинейно. ·
На
пути ползунка можно сделать дополнительные треки (и телепортировать ползунок в
них), и так сделать изменение переменной в указанном диапазоне. (Bug: перед
телепортированием тректрейна инпутом TeleportToPathNode
нужно его сначала остановить, а после телепорта запустить). Расширение возможностей: Параллельно этому тректрейну можно
установить еще один (smooth_tracktrain_2). (используя текущий путь треков, просто сместив
ось).
Ставим 2 триггера (расстояние между
триггерами и трейном (у меня 3 дюйма) определяется расстоянием между двумя из
9-ти триггеров изменения переменной, соответственно и точностью изменения):
Флаги как и у предыдущих:
Parent: smooth_tracktrain_2 Аутпуты: Улевого: OnStartTouch -> smooth_tracktrain_1 ->
StartForward OnEndTouch -> smooth_tracktrain_1 -> Stop У правого (со стороны в которую будет
двигаться): OnStartTouch -> smooth_tracktrain_1 -> StartBackward OnEndTouch -> smooth_tracktrain_1 -> Stop Управляем эффектом: smooth_tracktrain_2 -> StartForward -начать
увеличение переменной smooth_tracktrain_2 -> Sop -остановить
увеличение переменной smooth_tracktrain_2 -> StartBackward -начать
уменьшение переменной Удобно это все прицепить к game_ui:
Снимаем все опции во флагах. Запустим game_ui с помощью logic_auto: OnMapSpawn -> smooth_game_ui -> Activate -> !player Delay: 3 -не ставьте меньше 3-х
сек. т. к. не успеет запустится. Управление правой\левой кнопкой мыши. logic_branch в принципе можно удалить
или переключить на smooth_tracktrain_2. На этом все. Исходник прилагаю. Удачи!
Автор: Stridemann
(stridemann@gmail.com) |