Летают бочки…
Вот представьте себе ситуацию: выезжает из-за поворота танк, разворачивается и начинает стрелять в игрока. Красиво! Но довольно сложно.Дело в том, что танк (func_tank) не может ездить, а то, что ездить может (func_train) - не может стрелять. Вот такая диалектика. Устранить противоречие помогает env_render. Как выглядит вся сцена с выезжающим танком изнутри? Выезжает не танк, а func_train. Когда он доезжает до того места, где должен начать стрелять, с помощью env_render func_train становится невидимым, а танк, который ВСЕГДА находился в одном и том же месте, с помощью другого env_render становится видимым и стреляет. По такому же принципу будет сделан наш следующий пример. Ситуацию с танком мы разберем позже, когда ознакомимся с func_tank. А пока смоделируем из знакомых нам entity одну очень красивую ситуацию. А суть дела вот в чем: Допустим, игроку через некий тоннель нужно добраться куда-то там такое. В принципе, куда ему надо добраться и почему - неважно, лишь бы добирался. Но на крышке люка стоят бочки с бензином. Пусть у него будет взрывпакет, для того, чтобы разнести эти бочки в клочья, оставаясь на достаточно безопасном расстоянии. Когда он взорвет бочки, одна из них взлетит в воздух и на некотором расстоянии от земли взорвется. Реализуем. Для начала постройте заготовку. Это будет платформа 1024х576, окруженная стенами высотой 144. Получившуюся комнату делит на две неравные части перегородка, оставляющая место для прохода из одной части в другую. Всю конструкцию окружите небом с таким расчетом, чтобы от пола до неба было расстояние больше 512.
Теперь посреди большой комнатки расположите платформу 256х256, на которой будут располагаться вход в тоннель и бочки с бензином. Поскольку нам не требуется особая точность, не рисуйте сам тоннель, а в центре платформы расположите имитацию люка. Пусть это будет структура решетчатого типа, func_breakable, с именем door, у которого отмечен флаг Only Trigger. Это нужно для того, чтобы игрок, по неразумению своему, не разбил люк фомкой, не посмотрев тем самым, какое зрелище ему приготовлено. Теперь расположим на платформе несколько бочек, которые по сценарию, взорвутся. Из заготовок Crates выберите steel pushable barrel (эти бочки будут взрываться) и rusty pushable barrel (бочка, которая будет летать).
Немного изменим свойства бочек - согласно заготовкам, они func_pushable (т.е. их можно двигать). Это свойство нам не нужно, поэтому измените Class тех бочек, которые будут взрываться на func_breakable. Бочка, которая будет летать, должна, конечно, иметь Class - func_train. Дайте ей имя train1. Настройки ее очень просты, существенно стоит подумать только о скорости передвижения. Я применил 512 - эта величина позволяет наблюдать, как бочка летит, и в то же время не создается впечатление, что бочка летит неестественно медленно. Точки, по которым движется бочка расположить тоже очень просто - начальная точка (path_corner) расположена в центре бочки, вторая (и конечная) точка пути расположена на расстоянии 512 по направлению вверх. Тем самым облегчаются расчеты, поскольку мы знаем, что лететь бочка будет ровно секунду. Теперь определим, как летающая бочка будет взрываться. Естественно, func_train не взорвется - у него просто нет такой способности. Соответственно, в том месте, где бочка остановится, должна изначально находиться ее копия, (имя boom) только не func_train, а func_breakable. Пусть она имеет в Render Mode - Texture, а FX Amount - 0. В таких условиях бочка будет сначала невидимой. Для того чтобы возникла иллюзия, что бочка взорвалась в небе, нужно, чтобы летающая бочка в тот момент, когда она достигнет конечной точки полета, стала невидимой, и в тот же момент взрывающаяся копия летающей бочки стала видимой и взорвалась. Для этого нужны ДВА env_render. Первый через секунду после старта бочки один из них (пусть его имя будет rndtrain) подействует на нее таким образом, чтобы Render Mode стало Texture, а FX Amount - 0. Таким образом, бочка станет невидимой (но никуда не денется, будет стоять на том же месте, но игрок не сможет добраться до нее и убедиться, что она там есть - иллюзия сохраняется). Второй (имя rndboom) нужен для того, чтобы показать невидимую копию летающей бочки с тем, чтобы ее тут же взорвать. Естественно, что для управления всем этим хозяйством нужен multi_manager. Установите его поблизости, дайте ему имя manager и занесите в дополнительные поля имена действующих объектов. У меня получилось вот так: |
|
Train1 (запускает летающую бочку) |
0.3 |
Door (взрывает люк, ведущий в тоннель) |
1 |
Rndtrain (делает летающую бочку невидимой) |
1.3 |
Rndboom (делает видимой взрывающуюся бочку) |
1.3 |
Boom (взрывает бочку) |
1.3 |
Теперь нужно привести в действие multi_manager. Для этого и послужат простые взрывающиеся бочки, расположенные вокруг летающей бочки. Пусть Class у них будет func_breakable, а поле Target On Break - manager. В поле Explode Magnitude (область взрыва поставьте 60) Теперь надо разместить info_player_start и weapon_satchel (взрывпакет), а лучше - несколько. Вдруг с первого раза взорвать не удастся. Разместите Light_environment для освещения карты. Вперед, но осторожно, взрывпакеты здорово взрываются! |