Операторы
Last updated
Last updated
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).
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@
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@
В языке нет отдельного типа Boolean. Результат каждого сравнения имеет значение только в пределах текущего .
Игра не поддерживает побитовые операции, поэтому для их использования нужен особый . Кроме того, в исходном коде при помощи директивы {$USE bitwise}
должно быть подключено соответствующее .
Игра поддерживает операции сложения и вычитания, которые не зависят от FPS. Прочитайте на GTAMods.com чтобы узнать больше.
Использование оператора =#
требует, чтобы тип обеих переменных был заранее.