Расширенное использование таймеров (HPL2)
Таймеры настроены на ожидание в течение выбранного периода времени перед выполнением определенных команд. В предисловиях к пользовательским историям я видел слишком быстрые заставки. Например, игрок лежит в своей постели и встает. Естественно, это должно занять немного больше времени, если это специально не сделано. Например, если игрок просыпается от разбитого стекла или странных звуков.
Вот как может выглядеть простой таймер:
void OnStart()
{
SetPlayerCrouching(true);
SetPlayerActive(false);
FadeOut(0);
FadeIn(3);
AddTimer("", 3, "Intro");
}
void Intro(string &in asTimer)
{
SetPlayerCrouching(false);
SetPlayerActive(true);
PlaySoundAtEntity("", "react_sigh.snt", "Player", 0, false);
}
Этот скрипт не имеет никакого «аромата». Предполагается, что введение заставит игрока почувствовать интерес или беспокойство по поводу того, что будет впереди. Я не пытаюсь сказать, что люди, которые пишут свои собственные истории, не имеют опыта, я говорю, что они должны попытаться рискнуть чем-то большим и лучшим. Это все приводит к расширенному использованию таймеров.
Вот как может выглядеть расширенный таймер:
void OnStart()
{
PlaySoundAtEntity("", "break_glass_bottle.snt", "Player", 0, false);
SetPlayerActive(false);
SetPlayerCrouching(true);
FadeOut(0);
FadeIn(3);
AddTimer("T1", 3, "Intro");
AddTimer("T2", 6, "Intro");
AddTimer("T3", 8, "Intro");
AddTimer("T4", 10, "Intro");
AddTimer("T5", 12, "Intro");
}
void Intro(string &in asTimer)
{
string x = asTimer;
if (x == "T1")
{
PlaySoundAtEntity("", "react_sigh.snt", "Player", 0, false);
FadeOut(3);
}
else if (x == "T2")
{
FadeIn(3);
PlaySoundAtEntity("", "react_breath.snt", "Player", 0, false);
StartPlayerLookAt("ScriptArea_1", 2, 2, "");
}
else if (x == "T3")
{
StopPlayerLookAt();
StartPlayerLookAt("ScriptArea_2", 2, 2, "");
}
else if (x == "T4")
{
PlaySoundAtEntity("", "react_breath_slow.snt", "Player", 0, false);
StopPlayerLookAt();
}
else if (x == "T5")
{
SetPlayerCrouching(false);
SetPlayerActive(true);
}
}
Давайте разберем этот скрипт.
В void OnStart () игрок не может двигаться или смотреть туда, куда ему заблагорассудится. Экран полностью тёмный и изображение проявляется через 3 секунды. Здесь добавляются 5 таймеров с локальными именами от Т1 до Т5. Эти имена будут использоваться, чтобы отличать каждый таймер при использовании в функции Intro.
В void Intro (string & in asTimer) строковая переменная x равна значению таймера. Таким образом, по прошествии 3 секунд вызывается функция таймера Intro, в которой asTimer будет T1. Это позволяет оператору if видеть, какой таймер вызвал функцию, поэтому, если имя локального таймера T1, он будет воспроизводить звук и исчезать с экрана, достигая полностью черного цвета за 3 секунды. Остальные сделаны таким же образом.
Расширенный таймер позволяет организовать таймеры в одну функцию вместо множества функций.