initStdMath method
void
initStdMath()
Implementation
void initStdMath() {
final defMath =
LuaObject.table('math', {
'abs': LuaFuncBuilder.create('abs')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return x.abs();
},
),
'acos': LuaFuncBuilder.create('acos')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return math.acos(x);
},
),
'asin': LuaFuncBuilder.create('asin')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return math.asin(x);
},
),
'atan': LuaFuncBuilder.create('atan')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return math.atan(x);
},
),
'atan2': LuaFuncBuilder.create('atan2')
.arg('y')
.arg('x')
.exec(
call: () {
final y = findVar('y')?.valueAs<num>();
if (y == null) {
throw 'Expected num argument "y" for "${context!.id}".';
}
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return math.atan2(y, x);
},
),
'ceil': LuaFuncBuilder.create('ceil')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return x.ceil();
},
),
'cos': LuaFuncBuilder.create('cos')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return math.cos(x);
},
),
'sin': LuaFuncBuilder.create('sin')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return math.sin(x);
},
),
'tan': LuaFuncBuilder.create('tan')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return math.tan(x);
},
),
'cosh': LuaFuncBuilder.create('cosh')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return x; // TODO
},
),
'sinh': LuaFuncBuilder.create('sinh')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return x; // TODO
},
),
'tanh': LuaFuncBuilder.create('tanh')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return x; // TODO
},
),
'deg': LuaFuncBuilder.create('deg')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return x * 180.0 / math.pi;
},
),
'rad': LuaFuncBuilder.create('rad')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return x * math.pi / 180.0;
},
),
'exp': LuaFuncBuilder.create('exp')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return math.exp(x);
},
),
'floor': LuaFuncBuilder.create('floor')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return x.floor();
},
),
'fmod': LuaFuncBuilder.create('fmod')
.arg('x')
.arg('y')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
final y = findVar('y')?.valueAs<num>();
if (y == null) {
throw 'Expected num argument "y" for "${context!.id}".';
}
return x; // TODO: math.fmod(x / y);
},
),
'frexp': LuaFuncBuilder.create('frexp')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return x; // TODO
},
),
// TODO: math.huge
'log': LuaFuncBuilder.create('log')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return math.log(x);
},
),
'log10': LuaFuncBuilder.create('log10')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return x; // TODO
},
),
'pow': LuaFuncBuilder.create('pow')
.arg('x')
.arg('y')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
final y = findVar('y')?.valueAs<num>();
if (y == null) {
throw 'Expected num argument "y" for "${context!.id}".';
}
return math.pow(x, y);
},
),
'sqrt': LuaFuncBuilder.create('sqrt')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return math.sqrt(x);
},
),
'max': LuaFuncBuilder.create('max')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
final varargs = findVarArgs()
?.map(
(e) => switch (e.valueAs<num>()) {
final num n => n,
_ =>
throw 'Expected number arguments for "${context!.id}".',
},
)
.toList();
if ((varargs ?? []).isEmpty) return x;
return varargs!.fold(x, (v, n) => math.max(v, n));
},
),
'min': LuaFuncBuilder.create('min')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
final varargs = findVarArgs()
?.map(
(e) => switch (e.valueAs<num>()) {
final num n => n,
_ =>
throw 'Expected number arguments for "${context!.id}".',
},
)
.toList();
if ((varargs ?? []).isEmpty) return x;
return varargs!.fold(x, (v, n) => math.min(v, n));
},
),
// Does nothing atm.
'randomseed': LuaFuncBuilder.create('randomseed')
.arg('x')
.exec(
call: () {
final x = findVar('x')?.valueAs<num>();
if (x == null) {
throw 'Expected num argument "x" for "${context!.id}".';
}
return null;
},
),
'random': LuaFuncBuilder.create('random')
.arg('m')
.arg('n')
.exec(
call: () {
final m = findVar('m')?.valueAs<num>()?.toInt();
final n = findVar('n')?.valueAs<num>()?.toInt();
if (m != null) {
if (n != null) {
final m0 = math.min(m, n);
final n0 = math.max(m, n);
return math.Random().nextInt(n0 - m0) + m0 + 1;
} else {
return math.Random().nextInt(m) + 1;
}
}
return math.Random().nextDouble();
},
),
})
..doc = LuaDoc(
category: 'Runtime',
html: '''
The lua runtime math library.
''',
);
defGlobal(defMath);
}