Эта статья не переведена до конца. Пожалуйста помогите нам доперевести ее. Спасибо! |
Особенности
Wire Expression 2
Уникальный чип, функцию которого может задать сам игрок с помощью собственного языка программирования.
Синтаксис
Синтаксис Expression 2 сильно изменился со времен прошлого Expression Chip, придется изучить немного больше команд, но это сделает ваши постройки намного более функциональными. Помните что как правило существует несколько способов написания кода, и задача может быть решена несколькими путями.
Синтаксис Пример Упрощенный Описание # #this is comment Все, что находится за знаком # считается комментарием и не учитывается при обработке кода if () {} else {} if (A) {D=B} else {D=C} if (A) {D=B} если A истина то выполняем первую операцию, иначе вторую. else {} не обязателен, например: "if (A) {C=B}" elseif () {} elseif (A) {B = C} Впереди обязательно должен быть if или elseif. Дополнительная проверка в случае ложности исходного утверждения ~ if(~Time & Time == 0) {DO stuff} Изменялось ли значение на входе между выполнениями? $ Opitch = Pitch + ($Pitch *3) Возвращает разницу между выполнениями в виде числа. (Работает только с объявленными переменными типа number, vector, and angle) ++ if(Count == 2 {Count++} Count = Count + 1 Прибавляет 1 к заданной переменной. -- if(Count == 3){Count--} Count = Count - 1 Вычитает 1 из заданной переменной. += if(Count == 4){Count += 2} Count = Count + 2 Прибавляет число после += к заданной переменной. -= if(Count == 5) {Count -= 2} Count = Count - 2 Вычитает число после -= из заданной переменной. ( ? : ) D = (A ? B : C) Если A истина то возвращает B иначе C. I if (A I B) {C = 1} Если A или B истина C=1. & if (A & B) {C = 1} Если A и B истина C=1. ! if (!A) {B = 1} Должно предшествовать число. Возвращает 1 если A ложно (эквивалентно "A == 0"). Должно предшествовать число. -> ->Input or ->Output Если вы используете его на входе, он возвращает 1, когда вход подсоединяется к чему либо. Если вы используете его на выходе, он возвращает количество входов присоединённых на выход. #ifdef #ifdef entity():setAlpha(number) Проверяет может ли данная функция выполняться на сервере. #else #else entity():setModel(string) Должно предшествовать #ifdef. Если данная функция не может использоваться на сервере запустится код после #else... #endif #endif Должно предшествовать #ifdef или #else .Закрывает выражение #ifdef.
Переменные
В E2, все входы, выходы и переменные должны быть объявлены с заглавной буквы:
Синтаксис Описание @persist variable Это не будет работать, так как переменная "variable" объявлена со строчной буквы. @persist Variable Это будет работать, так как переменная "Variable" начинается с заглавной буквы.
Выражение @trigger
Выражение @trigger может выборочно разрешать и запрещать входам вызывать выполнение кода. Возможные значения: all/none, или список разрешенных входов
Синтаксис Описание @trigger all всё по старому, изменение значения на входах всегда вызывает выполнение кода @trigger none изменение значения на входах никогда не вызывает выполнение кода, его вызывает только таймер, и.т.п. функции @trigger Time Button выполнение кода вызывается только при изменении значений на входах Time и Button
Циклы
Синтаксис Пример Описание while () {} while (A) {B++} Любые инструкции в фигурных скобках будет повторяться, пока условие в круглых скобках истинно. Если условие ложно, инструкции будут пропущены и E2 будет продолжаться с конца цикла. Заметим, что условие проверяется только в самом начале каждого цикла. for () {} for (I = A, B[, C]) {} Добавляет значение C переменной для каждой итерации, пока она равна значению B. Если шаг C не указан, то он будет установлен на единицу. Обратите внимание, что А и В вычисляются только один раз - если они рассчитываются из переменных, что цикл устанавливает новые значения, это не изменит число итераций. foreach () {} foreach(K,V:type=Table) {} Проверяет каждый элемент указанного типа в таблице. Назначает ключ к К и значение V. Элементы, которые не имеют определенного типа будут пропущены. Элементы могут быть добавлены, удалены или изменены, однако добавляемые элементы не будут обрабатываться в текущем цикле. Только цикл по строке индексов при использовании таблицы. continue if (A) {continue} Может быть использовано только в while/for/foreach цикле. Эта команда позволяет немедленно вернуться к началу цикла, пропуская следующие инструкции. break if (A) {break} Может быть использовано только в while/for/foreach цикле. Эта команда позволяет немедленно вернуться к выходу из цикла, пропуская следующие инструкции.
Производительность
Были проведены некоторые тесты в игре:
~3.000.000/сек арифметических операций (+-*/) на числах, 2000 операций, 200 выполнений за 0.13сек
~850.000/сек арифметических операций (+-*/) на векторах, 2000 операций, 100 выполнений за 0.23сек
Горячие Клавиши Редактора
Ctrl-Пробел Проверить (и переместить курсор на ошибку)
Ctrl-S Сохранить
Ctrl-Z Отменить
Ctrl-Y Вернуть
Ctrl-X Вырезать
Ctrl-C Копировать
Ctrl-V Вставить
Ctrl-A Выделить Всё
Ctrl-Up Прокрутить Вверх
Ctrl-Down Прокрутить Вниз
Ctrl-Left Прокрутить Влево
Ctrl-Right Прокрутить Вправо
Консольные команды
Команда Описание wire_expression2_model <model> Вручную меняет модель чипа wire_expression2_reload Перезагружает все расширения для E2, полезно для отладки своих расширений. Помните, что клиентские файлы в мультиплеере берутся из кэша g-mod. wire_expression2_debug 0/1 Включает режим отладки, который может быть полезен для разработчиков. Необходимо ввести "wire_expression2_reload" после изменения, чтобы сработало. wire_expression2_extension_enable <extension> Включить определенное расширение wire_expression2_extension_disable <extension> Выключить определенное расширение wire_expression2_unlimited 0/1 Включить/выключить ограничения по производительности
Типы
Expression2 использует несколько типов данных. По понятным причинам, тут только верхушка всего айсберга.
Сокращение Типы Number(Числа) V2 / V / V4 2D / 3D / 4D Vector(Векторы) A Angle(Углы) S String(Строки) E Entity(Объекты) R Array(Массивы) T Table(Таблицы) RD Ranger Data(Рейнджеры) B Bone(Кости) M2 / M / M4 2x2 / 3x3 / 4x4 Matrix(Матрицы) XWL Wirelink C Комплексные числа Q Кватернионы
Числа
Описание
Производит операции над числами