Операторы
Sanny Builder поддерживает запись многих стандартных операций без опкодов. Компилятор анализирует обе стороны выражения и оператор между ними, чтобы подобрать правильный опкод.
В связи с особенностями языка, разные типы данных требуют разных опкодов. Например, в операции сложения двух целых чисел используется опкод, отличный от аналогичной операции с дробными числами. В некоторых случаях это требует предварительного объявления типа переменных, участвующих в выражении.
Большинство поддерживаемых операций в Sanny Builder используют лишь два операнда: один слева от оператора (LHS), и один - справа (RHS).
Присваивание
LHS = RHS
- операция присваивания.RHS
- число, переменная или строка. В присваиванииLHS
всегда является переменной.LHS += RHS
- операция сложения с присваиванием.LHS
иRHS
должны быть одного типа, целого или дробного. ЗначениеLHS
увеличивается на соответствующее значениеRHS
.LHS -= RHS
- операция вычитания с присваиваниемLHS *= RHS
- операция умножения с присваиваниемLHS /= RHS
- операция деления с присваиванием
Нижеперечисленные операции требуют расширения CLEO ({$USE CLEO}
или {$CLEO}
).
LHS = value1 + value2
- сложить два целых числа и записать результат вLHS
LHS = value1 - value2
- вычесть одно целое число из другого и записать результат вLHS
LHS = value1 * value2
- перемножить два целых числа и записать результат вLHS
LHS = value1 / value2
- разделить одно целое число на другое и записать результат вLHS
Сравнение
LHS == RHS
- операция "равно". Стороны должны иметь одинаковое значение, чтобы результат был истиной (true).LHS > RHS
- операция "больше чем"LHS >= RHS
- операция "больше либо равно"LHS < RHS
- операция "меньше чем"LHS <= RHS
- операция "меньше либо равно"LHS <> RHS
- операция "не равно". Стороны должны иметь разные значения, чтобы результат был истиной (true).
В языке нет отдельного типа Boolean. Результат каждого сравнения имеет значение только в пределах текущего условного выражения.
Побитовые операции
Игра не поддерживает побитовые операции, поэтому для их использования нужен особый плагин CLEO. Кроме того, в исходном коде при помощи директивы {$USE bitwise}
должно быть подключено соответствующее расширение.
AND
0B10
0@ = 1@ & 2@
OR
0B11
0@ = 1@ | 2@
XOR
0B12
0@ = 1@ ^ 2@
NOT
0B13
0@ = ~1@
MOD
0B14
0@ = 1@ % 2@
Shift Right
0B15
0@ = 1@ >> 2@
Shift Left
0B16
0@ = 1@ << 2@
AND (с присваиванием)
0B17
0@ &= 1@
OR (с присваиванием)
0B18
0@ |= 1@
XOR (с присваиванием)
0B19
0@ ^= 1@
NOT (унарный)
0B1A
~0@
MOD (с присваиванием)
0B1B
0@ %= 1@
Shift Right (с присваиванием)
0B1C
0@ >>= 1@
Shift Left (с присваиванием)
0B1D
0@ <<= 1@
FPS-независимое сложение и вычитание
Игра поддерживает операции сложения и вычитания, которые не зависят от FPS. Прочитайте статью на GTAMods.com чтобы узнать больше.
ADD_TIMED_VAL_TO_FLOAT_VAR
0078
$var +=@ 5.0
ADD_TIMED_VAL_TO_FLOAT_LVAR
0079
0@ +=@ 5.0
ADD_TIMED_FLOAT_VAR_TO_FLOAT_VAR
007A
$var1 +=@ $var2
ADD_TIMED_FLOAT_LVAR_TO_FLOAT_LVAR
007B
0@ +=@ 1@
ADD_TIMED_FLOAT_VAR_TO_FLOAT_LVAR
007C
0@ +=@ $var
ADD_TIMED_FLOAT_LVAR_TO_FLOAT_VAR
007D
$var +=@ 1@
SUB_TIMED_VAL_FROM_FLOAT_VAR
007E
$var -=@ 5.0
SUB_TIMED_VAL_FROM_FLOAT_LVAR
007F
0@ -=@ 5.0
SUB_TIMED_FLOAT_VAR_FROM_FLOAT_VAR
0080
$var1 -=@ $var2
SUB_TIMED_FLOAT_LVAR_FROM_FLOAT_LVAR
0081
0@ -=@ 1@
SUB_TIMED_FLOAT_VAR_FROM_FLOAT_LVAR
0082
0@ -=@ $var
SUB_TIMED_FLOAT_LVAR_FROM_FLOAT_VAR
0083
$var -=@ 1@
Конвертация типов
Некоторые значения могут быть сконвертированы в другой тип. Игра поддерживает перевод между типами Integer
и Float
.
Использование оператора =#
требует, чтобы тип обеих переменных был объявлен заранее.
CSET_VAR_INT_TO_VAR_FLOAT
008C
$i =# $f
CSET_VAR_FLOAT_TO_VAR_INT
008D
$f =# $i
CSET_LVAR_INT_TO_VAR_FLOAT
008E
0@ =# $f
CSET_LVAR_FLOAT_TO_VAR_INT
008F
1@ =# $i
CSET_VAR_INT_TO_LVAR_FLOAT
0090
$i =# 1@
CSET_VAR_FLOAT_TO_LVAR_INT
0091
$f =# 0@
CSET_LVAR_INT_TO_LVAR_FLOAT
0092
0@ =# 1@
CSET_LVAR_FLOAT_TO_LVAR_INT
0093
1@ =# 0@
Last updated