Введение в Expression и создание простейшей турели

Добавлен , опубликован
Всем привет! С вами Jesulin, и для вас, дорогие GMod-ддеры, я пишу эту статью. Сегодня мы напишем лёгкий код в Expression 2 и создадим чип для турели.
Требуемые инструменты:
-WireMod
-EasyPrecision (для точной расстановки деталей)
-PHX (пакет моделей)
-Прямые руки
-Базовое знание WireMod (умение подключать входы-выходы)
Цель урока
-Понять, что есть Expression 2 (далее - E2)
-Научится оформлять базовый код
-Научится создавать базовую турель через E2

1. E2 - как и зачем?

Expression 2 - самый сильный инструмент Wire Mod. Это язык программирования, благодаря которому вы сможете заменить тучу гейтов (Gate) одним несчастным чипом. На E2 можно написать что угодно - от базового Hello World вплоть до создания рабочей ОС прямо в игре. На данный момент мы не будем создавать ни Hello World, ни ОС. К ОС вы ещё не готовы, а Hello World не будет иметь практического применения как такового. Нам нужно что-то интересное и, если можно, полезное.

2. Код, оформление и написание

Я так полагаю, что меню вы открывать научились, равно как и провода класть.
Заходим в меню Wire>Wire - Control>Chip - Expression 2
Просто выбираем и возвращаемся в меню. Жмём правую кнопку мыши, и - та-да! Получаем вот это вот:
Нажмите выделенную кнопочку. Сотрите всё, что выделено серым. Это - комментарий, он нужен для того, чтобы не потеряться в коде. В нашем случае их можно не применять, так как код у нас будет простой. Но тем не менее, перед комментарием ставят символ #, и он значит что данный отрывок кода использоваться не будет.
Приступим непосредственно к коду:
У нас пять строчек - самые важные данные кода.
name - Имя чипа, которое будет использоваться (например - name Turret Chip)
input - Входы для проводов, пишутся через пробел (например - input A S)
output - Выходы для проводов, также пишутся через пробел (например - output Run)
persist - Внутренние переменные, через пробел. Мы их пока что использовать не будем (например - persist SomeValue)
trigger - пока что это вам совсем не нужно.

3. Приступаем к написанию кода

База оформления готова. Теперь непосредственно к самому коду.
В нашем чипе мы будем использовать функцию if then else
Выглядеть готовый код будет так:
Ну что же, создаём чип для контроля поворота турели!
@name Turret
@inputs A  D
@outputs Run Break

if (A==1) {Run=1} else {if (D==1) {Run=-1} else {Run=0}}
Итак, что же значит наш код?
Начнём с того, что функция if then else оформляется именно так:
if (условие) {тогда} {или}
Условие пишется в скобках:
(A==1)
A - Указанный в Inputs вход. Также можно использовать выражения типа A>B; A<B и тому подобное (b - переменная или число). Учтите, в условии пишем два знака "=". Без пробелов.
В нашем случае, условие будет выполнено, если во вход A подается сигнал 1. Надеюсь, что более детально обьяснять не потребуется.
Тогда - функция, которая будет выполнятся при выполненном условии:
{Run=1}
Run - Указанный в Outputs выход. Значит, при выполнении условия в выход Run подаётся сигнал.
Или - функция, которая будет выполнятся если условие НЕ выполнено:
else {Run=0}
Учтите то, что в Тогда и Или можно впихнуть ещё одну функцию - вот именно благодаря этому и будет работать наша турель. Не забудьте про пробел перед else.
Попробуйте разобрать уже данный выше код:
if (A==1) {Run=1} else {if (D==1) {Run=-1} else {Run=0}}
Старайтесь понять принцип. Можете даже рисовать на бумаге алгоритмы. Если вы не поняли принципа - я объясню.
Если в A поступает сигнал 1, то переменная Run подаёт на выход сигнал 1. Если же сигнала в А нет (равен нулю), то проверяем наличие сигнала 1 в D. Если он есть, то Run выдаёт -1. Если же сигнала в D нет, то Run не выдаёт сигнала (ноль).
Перепроверьте код. Каждый пробел и каждая скобка должны быть на месте. Попробуйте поставить чип - выйдите из редактора кода и щёлкните левой кнопкой мыши. Если выдаёт ошибку и чип не создаётся - перепроверьте. Войдите в редактор правой кнопкой мыши.

4. Конструкция турели.

Нам нужен пакет моделей PHX и инструмент EasyPrecision.
Из чего мы будем конструировать наш девайс:
Начнём!
Создайте Wire Wheel. Вы, надеюсь, знаете, где его искать?
Характеристики - за модель возьмите что-нибудь плоское. Я взял часики. Не волнуйтесь, видно их не будет.
Torque - 123, Friction - 1. Можете удвоить скорость, но сильно не увлекайтесь. Мои характеристики обеспечивают ей довольно медленный поворот, но вполне нормальное торможение, а значит и точность.
Создаём из пакета PHX следующие модели:
General Construction Props - Metal_Plate1 и Metal_Plate2x2
Specialized Construction Props - tri1x1x1
В Vehicles создаём Jeep Seat, или другое сидение по вашему желанию.
Теперь соединяем!
Берём платформу 2х2 и с помощью EasyPrecision Weld-им её к центру колеса.
Получаем вот это вот:
Далее - Присоединяем треугольный каркас к платформе. Ровненько, с помощью EasyPrecision Weld-им её как вам удобно. Мне нравится вот так:
Теперь возьмём единичную платформу, и прикрепим её так:
Осталось немного - прикрепляем Wire Turret, характеристики ваши и только ваши, и крепим куда захотим на единичную платформу. Я сделал так:
Теперь создаём Наш чип, ставим его где-нибудь на той же платформе.
После него создаём Advanced Pod Controller, правой кнопкой мыши соединяем его с выбранным вами креслом (само кресло крепить пока что не будем):

5. Провода

Пришло время соединить всю турель. Выбирайте инструмент Wire Advanced (и не забудьте в настройках выставить Width на 0 чтобы провода не было видно) и соединяйте. Но для начала поднимите платформу в воздух, чтобы вы могли подключить провода к колесу, типа этого:
Теперь, соединяем. Берём вайр и соединяем:
E2 Chip "A" - Advanced Pod Controller "A"
E2 Chip "D" - Advanced Pod Controller "D"
Wheel "A:Go" - E2 Chip "Run"
Wheel "B:Break" - Advanced Pod Controller "Space"
Turret "Fire" - Advanced Pod Controller "Space"
Прикрепляйте кресло Weld-ом туда, куда вам удобно.
Итак, теперь если вы всё сделали правильно, то садясь на кресло вы получаете полный контроль над турелью.

6. Последние штрихи.

-За передней панелью вам вряд ли будет хорошо видно. Сделаем её невидимой с помощью инструмента "Colour". Для этого выставьте всё на значения "0" и кликните на платформу.
-Управление можно изменить подключив тормоз (break) и огонь турелей (fire) на другой выход в Advanced Pod Controller.
-Скорость колеса советую увеличить.
-Советую применить Physical properties. Выставьте материал колеса "ice", и уберите галочку с "gravity Toggle"
Турель будет выглядеть вот так:
Если есть какие вопросы - прошу в комментарии.
Надеюсь, что тутор вам понравился. Удачи!
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
34
11 лет назад
2
if (A==1) {Run=1} else {if (D==1) {Run=-1} else {Run=0}}
лол угарел.
0
17
11 лет назад
0
Hellcore, тоже, кстати говоря
3
1
11 лет назад
3
Nevidim, Hellcore, ребят, я знаю, что выглядит нелепо, но что же - пока что для меня это единственный способ подать на один вход два сигнала, и знаете, работает он довольно неплохо.
2
15
11 лет назад
2
Не ну если работает, так зашибись, какие проблемы?
И не надо строить из себя крутых программистов -_-
1
24
11 лет назад
1
Teranozaur:
Не ну если работает, так зашибись, какие проблемы?
И не надо строить из себя крутых программистов -_-
никто не строит, это специфический каламбур, который вам не понять.
2
15
11 лет назад
2
Rescuer, о хо хо, нам не понять, ну не фига себе заявочки. Если вы тут все подумали про: "If, Then, Else", то это для всех не новость. Тролли сраные...
замечание от WebSter: грубо
1
24
11 лет назад
Отредактирован WebSter
1
В нормальных фирмах вас бы в шею за такой код выкинули. Правильно написанный код, должен представлять собой не только логику, но и нести информацию, что бы открыл, и сразу понял о чем речь. А это черт знает что такое, даже логика неочевидная из-за нубооформления конструкции.
@name Turret
@inputs KeyA  KeyD
@outputs ActionRun ActionBreak

if (KeyA == HaveSignal)
{
	ActionRun=1
} 
else if(KeyD == HaveSignal) 
{
	ActionRun=-1
}
else 
{
	ActionRun=0
}
HaveSignal = 1 вынести куда нить в константы, наверняка есть.
Зачем брейк, если не юзается? Экшн результы тоже в константы.
боюсь представить что в сложных алгоритмах у вас, если вы даже с примитивными конструкциями пользоваться не умеете.
1 пункт от WebSter: 1.1 (ненормативная лексика)
1
15
11 лет назад
1
Faion, какой ты крутооой...
боюсь представить что в сложных алгоритмах у вас, если вы даже с примитивными конструкциями пользоваться не умеете.
Не представляй.
2
15
11 лет назад
Отредактирован God_of_light
2
Faion, Run и Break - стандартизованные выражения в Gm, используются во всех скриптах просто как Run\Break.
Зачем брейк, если не юзается? Экшн результы тоже в константы.
В его коде функции Ран\Брейк контролируют колесо:
Run - вращает в одну сторону
Break - вращает в другую
Начет:
@inputs KeyA  KeyD
Да, соглашусь, удобнее
К тому же зачем вся ругань и крики. Jesulin же сказал что учится, совсем недавно работает с кодом. Кинули бы ему ссылки на статьи по кодингу, или еще чего.
1
24
11 лет назад
1
Faion, какой ты крутооой
Кэп? Вроде бы это очевидно.
Jesulin же сказал что учится, совсем недавно работает с кодом.
Вот пусть сначала научиться, а потом других пытается учить.
0
1
11 лет назад
0
Faion, я поделился тем, что знал. Образец турели вполне рабочий, тем более привлечь новичков в вайр и экспрешен в общем было бы очень даже неплохо.
Также должен сказать спасибо за правильное оформление конструкции. Выглядит куда проще и приятнее глазу.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.