From 46805970652163998811607b6cd288309fdce79e Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Tue, 20 Jan 2026 21:29:42 +1100 Subject: [PATCH] update to math library (v1.1.0) --- libs/math/math.c | 89 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 81 insertions(+), 8 deletions(-) diff --git a/libs/math/math.c b/libs/math/math.c index b48744c..36753b4 100644 --- a/libs/math/math.c +++ b/libs/math/math.c @@ -1,5 +1,10 @@ #include #include +#include +#include +#include +#include + GroundValue ground_sin(GroundScope* scope, List args) { return groundCreateValue( @@ -21,19 +26,15 @@ GroundValue ground_tan(GroundScope* scope, List args) { } GroundValue rad_to_deg(GroundScope* scope, List args) { - double radians = args.values[0].data.doubleVal; - return groundCreateValue( DOUBLE, - radians * (180.0 / M_PI) + args.values[0].data.doubleVal * (180.0 / M_PI) ); } GroundValue deg_to_rad(GroundScope* scope, List args) { - double deg = args.values[0].data.doubleVal; - return groundCreateValue( DOUBLE, - deg * (M_PI / 180.0) + args.values[0].data.doubleVal * (M_PI / 180.0) ); } @@ -62,16 +63,88 @@ GroundValue ground_sqrt(GroundScope* scope, List args) { ); } +GroundValue ground_abs(GroundScope* scope, List args) { + return groundCreateValue( + DOUBLE, + abs(args.values[0].data.doubleVal) + ); +} +GroundValue ground_min(GroundScope* scope, List args) { + double a = args.values[0].data.doubleVal; + double b = args.values[1].data.doubleVal; + + return groundCreateValue( + DOUBLE, + (a < b) ? a : b + ); +} +GroundValue ground_max(GroundScope* scope, List args) { + double a = args.values[0].data.doubleVal; + double b = args.values[1].data.doubleVal; + + return groundCreateValue( + DOUBLE, + (a > b) ? a : b + ); +} +GroundValue ground_clamp(GroundScope* scope, List args) { + double number = args.values[0].data.doubleVal; + double min = args.values[1].data.doubleVal; + double max = args.values[2].data.doubleVal; + + if (number < min) number = min; + if (number > max) number = max; + + return groundCreateValue( + DOUBLE, + number + ); +} + +GroundValue ground_random(GroundScope* scope, List args) { + int64_t min = args.values[0].data.intVal; + int64_t max = args.values[1].data.intVal; + + return groundCreateValue( + INT, + min + rand() % (max - min) + ); +} +GroundValue ground_random_double(GroundScope* scope, List args) { + double min = args.values[0].data.doubleVal; + double max = args.values[1].data.doubleVal; + + return groundCreateValue( + INT, + min + (double)rand() / RAND_MAX * (max - min) + ); +} +GroundValue ground_random_set_seed(GroundScope* scope, List args) { + srand(args.values[0].data.intVal); + return groundCreateValue( + INT, + 0 + ); +} + void ground_init(GroundScope* scope) { + srand(time(NULL)); groundAddNativeFunction(scope, "math_Sin", ground_sin, DOUBLE, 1, DOUBLE, "radians"); groundAddNativeFunction(scope, "math_Cos", ground_cos, DOUBLE, 1, DOUBLE, "radians"); groundAddNativeFunction(scope, "math_Tan", ground_tan, DOUBLE, 1, DOUBLE, "radians"); - groundAddNativeFunction(scope, "math_DegreesToRadians", deg_to_rad, DOUBLE, 1, DOUBLE, "degrees"); groundAddNativeFunction(scope, "math_RadiansToDegrees", rad_to_deg, DOUBLE, 1, DOUBLE, "radians"); groundAddNativeFunction(scope, "math_Modulos", ground_modulos, DOUBLE, 2, DOUBLE, "number1", DOUBLE, "number2"); groundAddNativeFunction(scope, "math_Pow", ground_pow, DOUBLE, 2, DOUBLE, "number1", DOUBLE, "number2"); - groundAddNativeFunction(scope, "math_Sqrt", ground_sqrt, DOUBLE, 1, DOUBLE, "number"); + + groundAddNativeFunction(scope, "math_Abs", ground_abs, DOUBLE, 1, DOUBLE, "number"); + groundAddNativeFunction(scope, "math_Min", ground_min, DOUBLE, 2, DOUBLE, "number1", DOUBLE, "number2"); + groundAddNativeFunction(scope, "math_Max", ground_max, DOUBLE, 2, DOUBLE, "number1", DOUBLE, "number2"); + groundAddNativeFunction(scope, "math_Clamp", ground_clamp, DOUBLE, 2, DOUBLE, "number", DOUBLE, "min", DOUBLE, "max"); + + groundAddNativeFunction(scope, "math_Random", ground_random, INT, 2, INT, "min", INT, "max"); + groundAddNativeFunction(scope, "math_RandomDouble", ground_random_double, DOUBLE, 2, DOUBLE, "min", DOUBLE, "max"); + groundAddNativeFunction(scope, "math_RandomSetSeed", ground_random_set_seed, INT, 1, INT, "seed"); } \ No newline at end of file