From b43d924be8e5ff483414a838fb19431a54d3818d Mon Sep 17 00:00:00 2001 From: "Alexander Klingenbeck (SHS DI SY R&D DEV4)" Date: Mon, 15 May 2023 17:44:28 +0200 Subject: [PATCH] Add math bindings --- bindings/raylib_math_api.json | 1665 +-------------------------------- bindings/src/generation.ts | 2 - bindings/src/index.ts | 117 ++- bindings/src/raylib-header.ts | 2 + examples/js_example.js | 3 +- examples/lib.raylib.d.ts | 74 ++ generate-bindings.js | 117 ++- src/bindings/js_raylib_core.h | 545 +++++++++++ thirdparty/raylib | 2 +- 9 files changed, 855 insertions(+), 1672 deletions(-) diff --git a/bindings/raylib_math_api.json b/bindings/raylib_math_api.json index cbf9f7e..3cd9177 100644 --- a/bindings/raylib_math_api.json +++ b/bindings/raylib_math_api.json @@ -1,1664 +1 @@ -[ - { - "name": "Clamp", - "returnType": "float", - "params": [ - { - "name": "value", - "type": "float" - }, - { - "name": "min", - "type": "float" - }, - { - "name": "max", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Lerp", - "returnType": "float", - "params": [ - { - "name": "start", - "type": "float" - }, - { - "name": "end", - "type": "float" - }, - { - "name": "amount", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Normalize", - "returnType": "float", - "params": [ - { - "name": "value", - "type": "float" - }, - { - "name": "start", - "type": "float" - }, - { - "name": "end", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Remap", - "returnType": "float", - "params": [ - { - "name": "value", - "type": "float" - }, - { - "name": "inputStart", - "type": "float" - }, - { - "name": "inputEnd", - "type": "float" - }, - { - "name": "outputStart", - "type": "float" - }, - { - "name": "outputEnd", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Wrap", - "returnType": "float", - "params": [ - { - "name": "value", - "type": "float" - }, - { - "name": "min", - "type": "float" - }, - { - "name": "max", - "type": "float" - } - ], - "description": "" - }, - { - "name": "FloatEquals", - "returnType": "int", - "params": [ - { - "name": "x", - "type": "float" - }, - { - "name": "y", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Vector2Zero", - "returnType": "Vector2", - "params": [], - "description": "" - }, - { - "name": "Vector2One", - "returnType": "Vector2", - "params": [], - "description": "" - }, - { - "name": "Vector2Add", - "returnType": "Vector2", - "params": [ - { - "name": "v1", - "type": "Vector2" - }, - { - "name": "v2", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2AddValue", - "returnType": "Vector2", - "params": [ - { - "name": "v", - "type": "Vector2" - }, - { - "name": "add", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Vector2Subtract", - "returnType": "Vector2", - "params": [ - { - "name": "v1", - "type": "Vector2" - }, - { - "name": "v2", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2SubtractValue", - "returnType": "Vector2", - "params": [ - { - "name": "v", - "type": "Vector2" - }, - { - "name": "sub", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Vector2Length", - "returnType": "float", - "params": [ - { - "name": "v", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2LengthSqr", - "returnType": "float", - "params": [ - { - "name": "v", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2DotProduct", - "returnType": "float", - "params": [ - { - "name": "v1", - "type": "Vector2" - }, - { - "name": "v2", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2Distance", - "returnType": "float", - "params": [ - { - "name": "v1", - "type": "Vector2" - }, - { - "name": "v2", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2DistanceSqr", - "returnType": "float", - "params": [ - { - "name": "v1", - "type": "Vector2" - }, - { - "name": "v2", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2Angle", - "returnType": "float", - "params": [ - { - "name": "v1", - "type": "Vector2" - }, - { - "name": "v2", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2LineAngle", - "returnType": "float", - "params": [ - { - "name": "start", - "type": "Vector2" - }, - { - "name": "end", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2Scale", - "returnType": "Vector2", - "params": [ - { - "name": "v", - "type": "Vector2" - }, - { - "name": "scale", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Vector2Multiply", - "returnType": "Vector2", - "params": [ - { - "name": "v1", - "type": "Vector2" - }, - { - "name": "v2", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2Negate", - "returnType": "Vector2", - "params": [ - { - "name": "v", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2Divide", - "returnType": "Vector2", - "params": [ - { - "name": "v1", - "type": "Vector2" - }, - { - "name": "v2", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2Normalize", - "returnType": "Vector2", - "params": [ - { - "name": "v", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2Transform", - "returnType": "Vector2", - "params": [ - { - "name": "v", - "type": "Vector2" - }, - { - "name": "mat", - "type": "Matrix" - } - ], - "description": "" - }, - { - "name": "Vector2Lerp", - "returnType": "Vector2", - "params": [ - { - "name": "v1", - "type": "Vector2" - }, - { - "name": "v2", - "type": "Vector2" - }, - { - "name": "amount", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Vector2Reflect", - "returnType": "Vector2", - "params": [ - { - "name": "v", - "type": "Vector2" - }, - { - "name": "normal", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2Rotate", - "returnType": "Vector2", - "params": [ - { - "name": "v", - "type": "Vector2" - }, - { - "name": "angle", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Vector2MoveTowards", - "returnType": "Vector2", - "params": [ - { - "name": "v", - "type": "Vector2" - }, - { - "name": "target", - "type": "Vector2" - }, - { - "name": "maxDistance", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Vector2Invert", - "returnType": "Vector2", - "params": [ - { - "name": "v", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2Clamp", - "returnType": "Vector2", - "params": [ - { - "name": "v", - "type": "Vector2" - }, - { - "name": "min", - "type": "Vector2" - }, - { - "name": "max", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector2ClampValue", - "returnType": "Vector2", - "params": [ - { - "name": "v", - "type": "Vector2" - }, - { - "name": "min", - "type": "float" - }, - { - "name": "max", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Vector2Equals", - "returnType": "int", - "params": [ - { - "name": "p", - "type": "Vector2" - }, - { - "name": "q", - "type": "Vector2" - } - ], - "description": "" - }, - { - "name": "Vector3Zero", - "returnType": "Vector3", - "params": [], - "description": "" - }, - { - "name": "Vector3One", - "returnType": "Vector3", - "params": [], - "description": "" - }, - { - "name": "Vector3Add", - "returnType": "Vector3", - "params": [ - { - "name": "v1", - "type": "Vector3" - }, - { - "name": "v2", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3AddValue", - "returnType": "Vector3", - "params": [ - { - "name": "v", - "type": "Vector3" - }, - { - "name": "add", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Vector3Subtract", - "returnType": "Vector3", - "params": [ - { - "name": "v1", - "type": "Vector3" - }, - { - "name": "v2", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3SubtractValue", - "returnType": "Vector3", - "params": [ - { - "name": "v", - "type": "Vector3" - }, - { - "name": "sub", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Vector3Scale", - "returnType": "Vector3", - "params": [ - { - "name": "v", - "type": "Vector3" - }, - { - "name": "scalar", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Vector3Multiply", - "returnType": "Vector3", - "params": [ - { - "name": "v1", - "type": "Vector3" - }, - { - "name": "v2", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3CrossProduct", - "returnType": "Vector3", - "params": [ - { - "name": "v1", - "type": "Vector3" - }, - { - "name": "v2", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3Perpendicular", - "returnType": "Vector3", - "params": [ - { - "name": "v", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3Length", - "returnType": "float", - "params": [ - { - "name": "v", - "type": "const Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3LengthSqr", - "returnType": "float", - "params": [ - { - "name": "v", - "type": "const Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3DotProduct", - "returnType": "float", - "params": [ - { - "name": "v1", - "type": "Vector3" - }, - { - "name": "v2", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3Distance", - "returnType": "float", - "params": [ - { - "name": "v1", - "type": "Vector3" - }, - { - "name": "v2", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3DistanceSqr", - "returnType": "float", - "params": [ - { - "name": "v1", - "type": "Vector3" - }, - { - "name": "v2", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3Angle", - "returnType": "float", - "params": [ - { - "name": "v1", - "type": "Vector3" - }, - { - "name": "v2", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3Negate", - "returnType": "Vector3", - "params": [ - { - "name": "v", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3Divide", - "returnType": "Vector3", - "params": [ - { - "name": "v1", - "type": "Vector3" - }, - { - "name": "v2", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3Normalize", - "returnType": "Vector3", - "params": [ - { - "name": "v", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3OrthoNormalize", - "returnType": "void", - "params": [ - { - "name": "v1", - "type": "Vector3 *" - }, - { - "name": "v2", - "type": "Vector3 *" - } - ], - "description": "" - }, - { - "name": "Vector3Transform", - "returnType": "Vector3", - "params": [ - { - "name": "v", - "type": "Vector3" - }, - { - "name": "mat", - "type": "Matrix" - } - ], - "description": "" - }, - { - "name": "Vector3RotateByQuaternion", - "returnType": "Vector3", - "params": [ - { - "name": "v", - "type": "Vector3" - }, - { - "name": "q", - "type": "Quaternion" - } - ], - "description": "" - }, - { - "name": "Vector3RotateByAxisAngle", - "returnType": "Vector3", - "params": [ - { - "name": "v", - "type": "Vector3" - }, - { - "name": "axis", - "type": "Vector3" - }, - { - "name": "angle", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Vector3Lerp", - "returnType": "Vector3", - "params": [ - { - "name": "v1", - "type": "Vector3" - }, - { - "name": "v2", - "type": "Vector3" - }, - { - "name": "amount", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Vector3Reflect", - "returnType": "Vector3", - "params": [ - { - "name": "v", - "type": "Vector3" - }, - { - "name": "normal", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3Min", - "returnType": "Vector3", - "params": [ - { - "name": "v1", - "type": "Vector3" - }, - { - "name": "v2", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3Max", - "returnType": "Vector3", - "params": [ - { - "name": "v1", - "type": "Vector3" - }, - { - "name": "v2", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3Barycenter", - "returnType": "Vector3", - "params": [ - { - "name": "p", - "type": "Vector3" - }, - { - "name": "a", - "type": "Vector3" - }, - { - "name": "b", - "type": "Vector3" - }, - { - "name": "c", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3Unproject", - "returnType": "Vector3", - "params": [ - { - "name": "source", - "type": "Vector3" - }, - { - "name": "projection", - "type": "Matrix" - }, - { - "name": "view", - "type": "Matrix" - } - ], - "description": "" - }, - { - "name": "Vector3ToFloatV", - "returnType": "float3", - "params": [ - { - "name": "v", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3Invert", - "returnType": "Vector3", - "params": [ - { - "name": "v", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3Clamp", - "returnType": "Vector3", - "params": [ - { - "name": "v", - "type": "Vector3" - }, - { - "name": "min", - "type": "Vector3" - }, - { - "name": "max", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3ClampValue", - "returnType": "Vector3", - "params": [ - { - "name": "v", - "type": "Vector3" - }, - { - "name": "min", - "type": "float" - }, - { - "name": "max", - "type": "float" - } - ], - "description": "" - }, - { - "name": "Vector3Equals", - "returnType": "int", - "params": [ - { - "name": "p", - "type": "Vector3" - }, - { - "name": "q", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "Vector3Refract", - "returnType": "Vector3", - "params": [ - { - "name": "v", - "type": "Vector3" - }, - { - "name": "n", - "type": "Vector3" - }, - { - "name": "r", - "type": "float" - } - ], - "description": "" - }, - { - "name": "MatrixDeterminant", - "returnType": "float", - "params": [ - { - "name": "mat", - "type": "Matrix" - } - ], - "description": "" - }, - { - "name": "MatrixTrace", - "returnType": "float", - "params": [ - { - "name": "mat", - "type": "Matrix" - } - ], - "description": "" - }, - { - "name": "MatrixTranspose", - "returnType": "Matrix", - "params": [ - { - "name": "mat", - "type": "Matrix" - } - ], - "description": "" - }, - { - "name": "MatrixInvert", - "returnType": "Matrix", - "params": [ - { - "name": "mat", - "type": "Matrix" - } - ], - "description": "" - }, - { - "name": "MatrixIdentity", - "returnType": "Matrix", - "params": [], - "description": "" - }, - { - "name": "MatrixAdd", - "returnType": "Matrix", - "params": [ - { - "name": "left", - "type": "Matrix" - }, - { - "name": "right", - "type": "Matrix" - } - ], - "description": "" - }, - { - "name": "MatrixSubtract", - "returnType": "Matrix", - "params": [ - { - "name": "left", - "type": "Matrix" - }, - { - "name": "right", - "type": "Matrix" - } - ], - "description": "" - }, - { - "name": "MatrixMultiply", - "returnType": "Matrix", - "params": [ - { - "name": "left", - "type": "Matrix" - }, - { - "name": "right", - "type": "Matrix" - } - ], - "description": "" - }, - { - "name": "MatrixTranslate", - "returnType": "Matrix", - "params": [ - { - "name": "x", - "type": "float" - }, - { - "name": "y", - "type": "float" - }, - { - "name": "z", - "type": "float" - } - ], - "description": "" - }, - { - "name": "MatrixRotate", - "returnType": "Matrix", - "params": [ - { - "name": "axis", - "type": "Vector3" - }, - { - "name": "angle", - "type": "float" - } - ], - "description": "" - }, - { - "name": "MatrixRotateX", - "returnType": "Matrix", - "params": [ - { - "name": "angle", - "type": "float" - } - ], - "description": "" - }, - { - "name": "MatrixRotateY", - "returnType": "Matrix", - "params": [ - { - "name": "angle", - "type": "float" - } - ], - "description": "" - }, - { - "name": "MatrixRotateZ", - "returnType": "Matrix", - "params": [ - { - "name": "angle", - "type": "float" - } - ], - "description": "" - }, - { - "name": "MatrixRotateXYZ", - "returnType": "Matrix", - "params": [ - { - "name": "angle", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "MatrixRotateZYX", - "returnType": "Matrix", - "params": [ - { - "name": "angle", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "MatrixScale", - "returnType": "Matrix", - "params": [ - { - "name": "x", - "type": "float" - }, - { - "name": "y", - "type": "float" - }, - { - "name": "z", - "type": "float" - } - ], - "description": "" - }, - { - "name": "MatrixFrustum", - "returnType": "Matrix", - "params": [ - { - "name": "left", - "type": "double" - }, - { - "name": "right", - "type": "double" - }, - { - "name": "bottom", - "type": "double" - }, - { - "name": "top", - "type": "double" - }, - { - "name": "near", - "type": "double" - }, - { - "name": "far", - "type": "double" - } - ], - "description": "" - }, - { - "name": "MatrixPerspective", - "returnType": "Matrix", - "params": [ - { - "name": "fovy", - "type": "double" - }, - { - "name": "aspect", - "type": "double" - }, - { - "name": "near", - "type": "double" - }, - { - "name": "far", - "type": "double" - } - ], - "description": "" - }, - { - "name": "MatrixOrtho", - "returnType": "Matrix", - "params": [ - { - "name": "left", - "type": "double" - }, - { - "name": "right", - "type": "double" - }, - { - "name": "bottom", - "type": "double" - }, - { - "name": "top", - "type": "double" - }, - { - "name": "near", - "type": "double" - }, - { - "name": "far", - "type": "double" - } - ], - "description": "" - }, - { - "name": "MatrixLookAt", - "returnType": "Matrix", - "params": [ - { - "name": "eye", - "type": "Vector3" - }, - { - "name": "target", - "type": "Vector3" - }, - { - "name": "up", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "MatrixToFloatV", - "returnType": "float16", - "params": [ - { - "name": "mat", - "type": "Matrix" - } - ], - "description": "" - }, - { - "name": "QuaternionAdd", - "returnType": "Quaternion", - "params": [ - { - "name": "q1", - "type": "Quaternion" - }, - { - "name": "q2", - "type": "Quaternion" - } - ], - "description": "" - }, - { - "name": "QuaternionAddValue", - "returnType": "Quaternion", - "params": [ - { - "name": "q", - "type": "Quaternion" - }, - { - "name": "add", - "type": "float" - } - ], - "description": "" - }, - { - "name": "QuaternionSubtract", - "returnType": "Quaternion", - "params": [ - { - "name": "q1", - "type": "Quaternion" - }, - { - "name": "q2", - "type": "Quaternion" - } - ], - "description": "" - }, - { - "name": "QuaternionSubtractValue", - "returnType": "Quaternion", - "params": [ - { - "name": "q", - "type": "Quaternion" - }, - { - "name": "sub", - "type": "float" - } - ], - "description": "" - }, - { - "name": "QuaternionIdentity", - "returnType": "Quaternion", - "params": [], - "description": "" - }, - { - "name": "QuaternionLength", - "returnType": "float", - "params": [ - { - "name": "q", - "type": "Quaternion" - } - ], - "description": "" - }, - { - "name": "QuaternionNormalize", - "returnType": "Quaternion", - "params": [ - { - "name": "q", - "type": "Quaternion" - } - ], - "description": "" - }, - { - "name": "QuaternionInvert", - "returnType": "Quaternion", - "params": [ - { - "name": "q", - "type": "Quaternion" - } - ], - "description": "" - }, - { - "name": "QuaternionMultiply", - "returnType": "Quaternion", - "params": [ - { - "name": "q1", - "type": "Quaternion" - }, - { - "name": "q2", - "type": "Quaternion" - } - ], - "description": "" - }, - { - "name": "QuaternionScale", - "returnType": "Quaternion", - "params": [ - { - "name": "q", - "type": "Quaternion" - }, - { - "name": "mul", - "type": "float" - } - ], - "description": "" - }, - { - "name": "QuaternionDivide", - "returnType": "Quaternion", - "params": [ - { - "name": "q1", - "type": "Quaternion" - }, - { - "name": "q2", - "type": "Quaternion" - } - ], - "description": "" - }, - { - "name": "QuaternionLerp", - "returnType": "Quaternion", - "params": [ - { - "name": "q1", - "type": "Quaternion" - }, - { - "name": "q2", - "type": "Quaternion" - }, - { - "name": "amount", - "type": "float" - } - ], - "description": "" - }, - { - "name": "QuaternionNlerp", - "returnType": "Quaternion", - "params": [ - { - "name": "q1", - "type": "Quaternion" - }, - { - "name": "q2", - "type": "Quaternion" - }, - { - "name": "amount", - "type": "float" - } - ], - "description": "" - }, - { - "name": "QuaternionSlerp", - "returnType": "Quaternion", - "params": [ - { - "name": "q1", - "type": "Quaternion" - }, - { - "name": "q2", - "type": "Quaternion" - }, - { - "name": "amount", - "type": "float" - } - ], - "description": "" - }, - { - "name": "QuaternionFromVector3ToVector3", - "returnType": "Quaternion", - "params": [ - { - "name": "from", - "type": "Vector3" - }, - { - "name": "to", - "type": "Vector3" - } - ], - "description": "" - }, - { - "name": "QuaternionFromMatrix", - "returnType": "Quaternion", - "params": [ - { - "name": "mat", - "type": "Matrix" - } - ], - "description": "" - }, - { - "name": "QuaternionToMatrix", - "returnType": "Matrix", - "params": [ - { - "name": "q", - "type": "Quaternion" - } - ], - "description": "" - }, - { - "name": "QuaternionFromAxisAngle", - "returnType": "Quaternion", - "params": [ - { - "name": "axis", - "type": "Vector3" - }, - { - "name": "angle", - "type": "float" - } - ], - "description": "" - }, - { - "name": "QuaternionToAxisAngle", - "returnType": "void", - "params": [ - { - "name": "q", - "type": "Quaternion" - }, - { - "name": "outAxis", - "type": "Vector3 *" - }, - { - "name": "outAngle", - "type": "float *" - } - ], - "description": "" - }, - { - "name": "QuaternionFromEuler", - "returnType": "Quaternion", - "params": [ - { - "name": "pitch", - "type": "float" - }, - { - "name": "yaw", - "type": "float" - }, - { - "name": "roll", - "type": "float" - } - ], - "description": "" - }, - { - "name": "QuaternionToEuler", - "returnType": "Vector3", - "params": [ - { - "name": "q", - "type": "Quaternion" - } - ], - "description": "" - }, - { - "name": "QuaternionTransform", - "returnType": "Quaternion", - "params": [ - { - "name": "q", - "type": "Quaternion" - }, - { - "name": "mat", - "type": "Matrix" - } - ], - "description": "" - }, - { - "name": "QuaternionEquals", - "returnType": "int", - "params": [ - { - "name": "p", - "type": "Quaternion" - }, - { - "name": "q", - "type": "Quaternion" - } - ], - "description": "" - } -] \ No newline at end of file +[{"name":"Clamp","returnType":"float","params":[{"name":"value","type":"float"},{"name":"min","type":"float"},{"name":"max","type":"float"}],"description":""},{"name":"Lerp","returnType":"float","params":[{"name":"start","type":"float"},{"name":"end","type":"float"},{"name":"amount","type":"float"}],"description":""},{"name":"Normalize","returnType":"float","params":[{"name":"value","type":"float"},{"name":"start","type":"float"},{"name":"end","type":"float"}],"description":""},{"name":"Remap","returnType":"float","params":[{"name":"value","type":"float"},{"name":"inputStart","type":"float"},{"name":"inputEnd","type":"float"},{"name":"outputStart","type":"float"},{"name":"outputEnd","type":"float"}],"description":""},{"name":"Wrap","returnType":"float","params":[{"name":"value","type":"float"},{"name":"min","type":"float"},{"name":"max","type":"float"}],"description":""},{"name":"FloatEquals","returnType":"int","params":[{"name":"x","type":"float"},{"name":"y","type":"float"}],"description":""},{"name":"Vector2Zero","returnType":"Vector2","params":[],"description":""},{"name":"Vector2One","returnType":"Vector2","params":[],"description":""},{"name":"Vector2Add","returnType":"Vector2","params":[{"name":"v1","type":"Vector2"},{"name":"v2","type":"Vector2"}],"description":""},{"name":"Vector2AddValue","returnType":"Vector2","params":[{"name":"v","type":"Vector2"},{"name":"add","type":"float"}],"description":""},{"name":"Vector2Subtract","returnType":"Vector2","params":[{"name":"v1","type":"Vector2"},{"name":"v2","type":"Vector2"}],"description":""},{"name":"Vector2SubtractValue","returnType":"Vector2","params":[{"name":"v","type":"Vector2"},{"name":"sub","type":"float"}],"description":""},{"name":"Vector2Length","returnType":"float","params":[{"name":"v","type":"Vector2"}],"description":""},{"name":"Vector2LengthSqr","returnType":"float","params":[{"name":"v","type":"Vector2"}],"description":""},{"name":"Vector2DotProduct","returnType":"float","params":[{"name":"v1","type":"Vector2"},{"name":"v2","type":"Vector2"}],"description":""},{"name":"Vector2Distance","returnType":"float","params":[{"name":"v1","type":"Vector2"},{"name":"v2","type":"Vector2"}],"description":""},{"name":"Vector2DistanceSqr","returnType":"float","params":[{"name":"v1","type":"Vector2"},{"name":"v2","type":"Vector2"}],"description":""},{"name":"Vector2Angle","returnType":"float","params":[{"name":"v1","type":"Vector2"},{"name":"v2","type":"Vector2"}],"description":""},{"name":"Vector2LineAngle","returnType":"float","params":[{"name":"start","type":"Vector2"},{"name":"end","type":"Vector2"}],"description":""},{"name":"Vector2Scale","returnType":"Vector2","params":[{"name":"v","type":"Vector2"},{"name":"scale","type":"float"}],"description":""},{"name":"Vector2Multiply","returnType":"Vector2","params":[{"name":"v1","type":"Vector2"},{"name":"v2","type":"Vector2"}],"description":""},{"name":"Vector2Negate","returnType":"Vector2","params":[{"name":"v","type":"Vector2"}],"description":""},{"name":"Vector2Divide","returnType":"Vector2","params":[{"name":"v1","type":"Vector2"},{"name":"v2","type":"Vector2"}],"description":""},{"name":"Vector2Normalize","returnType":"Vector2","params":[{"name":"v","type":"Vector2"}],"description":""},{"name":"Vector2Transform","returnType":"Vector2","params":[{"name":"v","type":"Vector2"},{"name":"mat","type":"Matrix"}],"description":""},{"name":"Vector2Lerp","returnType":"Vector2","params":[{"name":"v1","type":"Vector2"},{"name":"v2","type":"Vector2"},{"name":"amount","type":"float"}],"description":""},{"name":"Vector2Reflect","returnType":"Vector2","params":[{"name":"v","type":"Vector2"},{"name":"normal","type":"Vector2"}],"description":""},{"name":"Vector2Rotate","returnType":"Vector2","params":[{"name":"v","type":"Vector2"},{"name":"angle","type":"float"}],"description":""},{"name":"Vector2MoveTowards","returnType":"Vector2","params":[{"name":"v","type":"Vector2"},{"name":"target","type":"Vector2"},{"name":"maxDistance","type":"float"}],"description":""},{"name":"Vector2Invert","returnType":"Vector2","params":[{"name":"v","type":"Vector2"}],"description":""},{"name":"Vector2Clamp","returnType":"Vector2","params":[{"name":"v","type":"Vector2"},{"name":"min","type":"Vector2"},{"name":"max","type":"Vector2"}],"description":""},{"name":"Vector2ClampValue","returnType":"Vector2","params":[{"name":"v","type":"Vector2"},{"name":"min","type":"float"},{"name":"max","type":"float"}],"description":""},{"name":"Vector2Equals","returnType":"int","params":[{"name":"p","type":"Vector2"},{"name":"q","type":"Vector2"}],"description":""},{"name":"Vector3Zero","returnType":"Vector3","params":[],"description":""},{"name":"Vector3One","returnType":"Vector3","params":[],"description":""},{"name":"Vector3Add","returnType":"Vector3","params":[{"name":"v1","type":"Vector3"},{"name":"v2","type":"Vector3"}],"description":""},{"name":"Vector3AddValue","returnType":"Vector3","params":[{"name":"v","type":"Vector3"},{"name":"add","type":"float"}],"description":""},{"name":"Vector3Subtract","returnType":"Vector3","params":[{"name":"v1","type":"Vector3"},{"name":"v2","type":"Vector3"}],"description":""},{"name":"Vector3SubtractValue","returnType":"Vector3","params":[{"name":"v","type":"Vector3"},{"name":"sub","type":"float"}],"description":""},{"name":"Vector3Scale","returnType":"Vector3","params":[{"name":"v","type":"Vector3"},{"name":"scalar","type":"float"}],"description":""},{"name":"Vector3Multiply","returnType":"Vector3","params":[{"name":"v1","type":"Vector3"},{"name":"v2","type":"Vector3"}],"description":""},{"name":"Vector3CrossProduct","returnType":"Vector3","params":[{"name":"v1","type":"Vector3"},{"name":"v2","type":"Vector3"}],"description":""},{"name":"Vector3Perpendicular","returnType":"Vector3","params":[{"name":"v","type":"Vector3"}],"description":""},{"name":"Vector3Length","returnType":"float","params":[{"name":"v","type":"const Vector3"}],"description":""},{"name":"Vector3LengthSqr","returnType":"float","params":[{"name":"v","type":"const Vector3"}],"description":""},{"name":"Vector3DotProduct","returnType":"float","params":[{"name":"v1","type":"Vector3"},{"name":"v2","type":"Vector3"}],"description":""},{"name":"Vector3Distance","returnType":"float","params":[{"name":"v1","type":"Vector3"},{"name":"v2","type":"Vector3"}],"description":""},{"name":"Vector3DistanceSqr","returnType":"float","params":[{"name":"v1","type":"Vector3"},{"name":"v2","type":"Vector3"}],"description":""},{"name":"Vector3Angle","returnType":"float","params":[{"name":"v1","type":"Vector3"},{"name":"v2","type":"Vector3"}],"description":""},{"name":"Vector3Negate","returnType":"Vector3","params":[{"name":"v","type":"Vector3"}],"description":""},{"name":"Vector3Divide","returnType":"Vector3","params":[{"name":"v1","type":"Vector3"},{"name":"v2","type":"Vector3"}],"description":""},{"name":"Vector3Normalize","returnType":"Vector3","params":[{"name":"v","type":"Vector3"}],"description":""},{"name":"Vector3OrthoNormalize","returnType":"void","params":[{"name":"v1","type":"Vector3 *"},{"name":"v2","type":"Vector3 *"}],"description":""},{"name":"Vector3Transform","returnType":"Vector3","params":[{"name":"v","type":"Vector3"},{"name":"mat","type":"Matrix"}],"description":""},{"name":"Vector3RotateByQuaternion","returnType":"Vector3","params":[{"name":"v","type":"Vector3"},{"name":"q","type":"Quaternion"}],"description":""},{"name":"Vector3RotateByAxisAngle","returnType":"Vector3","params":[{"name":"v","type":"Vector3"},{"name":"axis","type":"Vector3"},{"name":"angle","type":"float"}],"description":""},{"name":"Vector3Lerp","returnType":"Vector3","params":[{"name":"v1","type":"Vector3"},{"name":"v2","type":"Vector3"},{"name":"amount","type":"float"}],"description":""},{"name":"Vector3Reflect","returnType":"Vector3","params":[{"name":"v","type":"Vector3"},{"name":"normal","type":"Vector3"}],"description":""},{"name":"Vector3Min","returnType":"Vector3","params":[{"name":"v1","type":"Vector3"},{"name":"v2","type":"Vector3"}],"description":""},{"name":"Vector3Max","returnType":"Vector3","params":[{"name":"v1","type":"Vector3"},{"name":"v2","type":"Vector3"}],"description":""},{"name":"Vector3Barycenter","returnType":"Vector3","params":[{"name":"p","type":"Vector3"},{"name":"a","type":"Vector3"},{"name":"b","type":"Vector3"},{"name":"c","type":"Vector3"}],"description":""},{"name":"Vector3Unproject","returnType":"Vector3","params":[{"name":"source","type":"Vector3"},{"name":"projection","type":"Matrix"},{"name":"view","type":"Matrix"}],"description":""},{"name":"Vector3ToFloatV","returnType":"float3","params":[{"name":"v","type":"Vector3"}],"description":""},{"name":"Vector3Invert","returnType":"Vector3","params":[{"name":"v","type":"Vector3"}],"description":""},{"name":"Vector3Clamp","returnType":"Vector3","params":[{"name":"v","type":"Vector3"},{"name":"min","type":"Vector3"},{"name":"max","type":"Vector3"}],"description":""},{"name":"Vector3ClampValue","returnType":"Vector3","params":[{"name":"v","type":"Vector3"},{"name":"min","type":"float"},{"name":"max","type":"float"}],"description":""},{"name":"Vector3Equals","returnType":"int","params":[{"name":"p","type":"Vector3"},{"name":"q","type":"Vector3"}],"description":""},{"name":"Vector3Refract","returnType":"Vector3","params":[{"name":"v","type":"Vector3"},{"name":"n","type":"Vector3"},{"name":"r","type":"float"}],"description":""},{"name":"MatrixDeterminant","returnType":"float","params":[{"name":"mat","type":"Matrix"}],"description":""},{"name":"MatrixTrace","returnType":"float","params":[{"name":"mat","type":"Matrix"}],"description":""},{"name":"MatrixTranspose","returnType":"Matrix","params":[{"name":"mat","type":"Matrix"}],"description":""},{"name":"MatrixInvert","returnType":"Matrix","params":[{"name":"mat","type":"Matrix"}],"description":""},{"name":"MatrixIdentity","returnType":"Matrix","params":[],"description":""},{"name":"MatrixAdd","returnType":"Matrix","params":[{"name":"left","type":"Matrix"},{"name":"right","type":"Matrix"}],"description":""},{"name":"MatrixSubtract","returnType":"Matrix","params":[{"name":"left","type":"Matrix"},{"name":"right","type":"Matrix"}],"description":""},{"name":"MatrixMultiply","returnType":"Matrix","params":[{"name":"left","type":"Matrix"},{"name":"right","type":"Matrix"}],"description":""},{"name":"MatrixTranslate","returnType":"Matrix","params":[{"name":"x","type":"float"},{"name":"y","type":"float"},{"name":"z","type":"float"}],"description":""},{"name":"MatrixRotate","returnType":"Matrix","params":[{"name":"axis","type":"Vector3"},{"name":"angle","type":"float"}],"description":""},{"name":"MatrixRotateX","returnType":"Matrix","params":[{"name":"angle","type":"float"}],"description":""},{"name":"MatrixRotateY","returnType":"Matrix","params":[{"name":"angle","type":"float"}],"description":""},{"name":"MatrixRotateZ","returnType":"Matrix","params":[{"name":"angle","type":"float"}],"description":""},{"name":"MatrixRotateXYZ","returnType":"Matrix","params":[{"name":"angle","type":"Vector3"}],"description":""},{"name":"MatrixRotateZYX","returnType":"Matrix","params":[{"name":"angle","type":"Vector3"}],"description":""},{"name":"MatrixScale","returnType":"Matrix","params":[{"name":"x","type":"float"},{"name":"y","type":"float"},{"name":"z","type":"float"}],"description":""},{"name":"MatrixFrustum","returnType":"Matrix","params":[{"name":"left","type":"double"},{"name":"right","type":"double"},{"name":"bottom","type":"double"},{"name":"top","type":"double"},{"name":"near","type":"double"},{"name":"far","type":"double"}],"description":""},{"name":"MatrixPerspective","returnType":"Matrix","params":[{"name":"fovy","type":"double"},{"name":"aspect","type":"double"},{"name":"near","type":"double"},{"name":"far","type":"double"}],"description":""},{"name":"MatrixOrtho","returnType":"Matrix","params":[{"name":"left","type":"double"},{"name":"right","type":"double"},{"name":"bottom","type":"double"},{"name":"top","type":"double"},{"name":"near","type":"double"},{"name":"far","type":"double"}],"description":""},{"name":"MatrixLookAt","returnType":"Matrix","params":[{"name":"eye","type":"Vector3"},{"name":"target","type":"Vector3"},{"name":"up","type":"Vector3"}],"description":""},{"name":"MatrixToFloatV","returnType":"float16","params":[{"name":"mat","type":"Matrix"}],"description":""},{"name":"QuaternionAdd","returnType":"Quaternion","params":[{"name":"q1","type":"Quaternion"},{"name":"q2","type":"Quaternion"}],"description":""},{"name":"QuaternionAddValue","returnType":"Quaternion","params":[{"name":"q","type":"Quaternion"},{"name":"add","type":"float"}],"description":""},{"name":"QuaternionSubtract","returnType":"Quaternion","params":[{"name":"q1","type":"Quaternion"},{"name":"q2","type":"Quaternion"}],"description":""},{"name":"QuaternionSubtractValue","returnType":"Quaternion","params":[{"name":"q","type":"Quaternion"},{"name":"sub","type":"float"}],"description":""},{"name":"QuaternionIdentity","returnType":"Quaternion","params":[],"description":""},{"name":"QuaternionLength","returnType":"float","params":[{"name":"q","type":"Quaternion"}],"description":""},{"name":"QuaternionNormalize","returnType":"Quaternion","params":[{"name":"q","type":"Quaternion"}],"description":""},{"name":"QuaternionInvert","returnType":"Quaternion","params":[{"name":"q","type":"Quaternion"}],"description":""},{"name":"QuaternionMultiply","returnType":"Quaternion","params":[{"name":"q1","type":"Quaternion"},{"name":"q2","type":"Quaternion"}],"description":""},{"name":"QuaternionScale","returnType":"Quaternion","params":[{"name":"q","type":"Quaternion"},{"name":"mul","type":"float"}],"description":""},{"name":"QuaternionDivide","returnType":"Quaternion","params":[{"name":"q1","type":"Quaternion"},{"name":"q2","type":"Quaternion"}],"description":""},{"name":"QuaternionLerp","returnType":"Quaternion","params":[{"name":"q1","type":"Quaternion"},{"name":"q2","type":"Quaternion"},{"name":"amount","type":"float"}],"description":""},{"name":"QuaternionNlerp","returnType":"Quaternion","params":[{"name":"q1","type":"Quaternion"},{"name":"q2","type":"Quaternion"},{"name":"amount","type":"float"}],"description":""},{"name":"QuaternionSlerp","returnType":"Quaternion","params":[{"name":"q1","type":"Quaternion"},{"name":"q2","type":"Quaternion"},{"name":"amount","type":"float"}],"description":""},{"name":"QuaternionFromVector3ToVector3","returnType":"Quaternion","params":[{"name":"from","type":"Vector3"},{"name":"to","type":"Vector3"}],"description":""},{"name":"QuaternionFromMatrix","returnType":"Quaternion","params":[{"name":"mat","type":"Matrix"}],"description":""},{"name":"QuaternionToMatrix","returnType":"Matrix","params":[{"name":"q","type":"Quaternion"}],"description":""},{"name":"QuaternionFromAxisAngle","returnType":"Quaternion","params":[{"name":"axis","type":"Vector3"},{"name":"angle","type":"float"}],"description":""},{"name":"QuaternionToAxisAngle","returnType":"void","params":[{"name":"q","type":"Quaternion"},{"name":"outAxis","type":"Vector3 *"},{"name":"outAngle","type":"float *"}],"description":""},{"name":"QuaternionFromEuler","returnType":"Quaternion","params":[{"name":"pitch","type":"float"},{"name":"yaw","type":"float"},{"name":"roll","type":"float"}],"description":""},{"name":"QuaternionToEuler","returnType":"Vector3","params":[{"name":"q","type":"Quaternion"}],"description":""},{"name":"QuaternionTransform","returnType":"Quaternion","params":[{"name":"q","type":"Quaternion"},{"name":"mat","type":"Matrix"}],"description":""},{"name":"QuaternionEquals","returnType":"int","params":[{"name":"p","type":"Quaternion"},{"name":"q","type":"Quaternion"}],"description":""}] \ No newline at end of file diff --git a/bindings/src/generation.ts b/bindings/src/generation.ts index af9cbd3..57e9bd5 100644 --- a/bindings/src/generation.ts +++ b/bindings/src/generation.ts @@ -69,8 +69,6 @@ export interface FunctionArgument { description?: string } - - export abstract class GenericCodeGenerator { private children: CodeGenerator[] = [] private text: string[] = [] diff --git a/bindings/src/index.ts b/bindings/src/index.ts index ac2ae84..7f8fa06 100644 --- a/bindings/src/index.ts +++ b/bindings/src/index.ts @@ -15,7 +15,7 @@ function parseMathHeader(): RayLibFunction[] { const frags = arg.split(' ') const name = frags.pop() const type = frags.join(' ').replace("*", " *") - console.log({ name: name || "", type: type }) + return { name: name || "", type: type } }) return { @@ -33,6 +33,8 @@ function main(){ writeFileSync("bindings/raylib_math_api.json", JSON.stringify(mathApi)) const api = JSON.parse(readFileSync("thirdparty/raylib/parser/output/raylib_api.json", 'utf8')) + mathApi.forEach(x => api.functions.push(x)) + const apiDesc = new ApiDescription(api) const core = new RayLibHeader("raylib_core", apiDesc) core.addApiStructByName("Color", { @@ -799,7 +801,118 @@ function main(){ // module: raymath - //mathApi.forEach(x => console.log(`core.addApi`)) + core.addApiFunctionByName("Clamp") + core.addApiFunctionByName("Lerp") + core.addApiFunctionByName("Normalize") + core.addApiFunctionByName("Remap") + core.addApiFunctionByName("Wrap") + core.addApiFunctionByName("FloatEquals") + core.addApiFunctionByName("Vector2Zero") + core.addApiFunctionByName("Vector2One") + core.addApiFunctionByName("Vector2Add") + core.addApiFunctionByName("Vector2AddValue") + core.addApiFunctionByName("Vector2Subtract") + core.addApiFunctionByName("Vector2SubtractValue") + core.addApiFunctionByName("Vector2Length") + core.addApiFunctionByName("Vector2LengthSqr") + core.addApiFunctionByName("Vector2DotProduct") + core.addApiFunctionByName("Vector2Distance") + core.addApiFunctionByName("Vector2DistanceSqr") + core.addApiFunctionByName("Vector2Angle") + core.addApiFunctionByName("Vector2LineAngle") + core.addApiFunctionByName("Vector2Scale") + core.addApiFunctionByName("Vector2Multiply") + core.addApiFunctionByName("Vector2Negate") + core.addApiFunctionByName("Vector2Divide") + core.addApiFunctionByName("Vector2Normalize") + core.addApiFunctionByName("Vector2Transform") + core.addApiFunctionByName("Vector2Lerp") + core.addApiFunctionByName("Vector2Reflect") + core.addApiFunctionByName("Vector2Rotate") + core.addApiFunctionByName("Vector2MoveTowards") + core.addApiFunctionByName("Vector2Invert") + core.addApiFunctionByName("Vector2Clamp") + core.addApiFunctionByName("Vector2ClampValue") + core.addApiFunctionByName("Vector2Equals") + core.addApiFunctionByName("Vector3Zero") + core.addApiFunctionByName("Vector3One") + core.addApiFunctionByName("Vector3Add") + core.addApiFunctionByName("Vector3AddValue") + // core.addApiFunctionByName("Vector3Subtract") + // core.addApiFunctionByName("Vector3SubtractValue") + // core.addApiFunctionByName("Vector3Scale") + // core.addApiFunctionByName("Vector3Multiply") + // core.addApiFunctionByName("Vector3CrossProduct") + // core.addApiFunctionByName("Vector3Perpendicular") + // core.addApiFunctionByName("Vector3Length") + // core.addApiFunctionByName("Vector3LengthSqr") + // core.addApiFunctionByName("Vector3DotProduct") + // core.addApiFunctionByName("Vector3Distance") + // core.addApiFunctionByName("Vector3DistanceSqr") + // core.addApiFunctionByName("Vector3Angle") + // core.addApiFunctionByName("Vector3Negate") + // core.addApiFunctionByName("Vector3Divide") + // core.addApiFunctionByName("Vector3Normalize") + // core.addApiFunctionByName("Vector3OrthoNormalize") + // core.addApiFunctionByName("Vector3Transform") + // core.addApiFunctionByName("Vector3RotateByQuaternion") + // core.addApiFunctionByName("Vector3RotateByAxisAngle") + // core.addApiFunctionByName("Vector3Lerp") + // core.addApiFunctionByName("Vector3Reflect") + // core.addApiFunctionByName("Vector3Min") + // core.addApiFunctionByName("Vector3Max") + // core.addApiFunctionByName("Vector3Barycenter") + // core.addApiFunctionByName("Vector3Unproject") + // core.addApiFunctionByName("Vector3ToFloatV") + // core.addApiFunctionByName("Vector3Invert") + // core.addApiFunctionByName("Vector3Clamp") + // core.addApiFunctionByName("Vector3ClampValue") + // core.addApiFunctionByName("Vector3Equals") + // core.addApiFunctionByName("Vector3Refract") + // core.addApiFunctionByName("MatrixDeterminant") + // core.addApiFunctionByName("MatrixTrace") + // core.addApiFunctionByName("MatrixTranspose") + // core.addApiFunctionByName("MatrixInvert") + // core.addApiFunctionByName("MatrixIdentity") + // core.addApiFunctionByName("MatrixAdd") + // core.addApiFunctionByName("MatrixSubtract") + // core.addApiFunctionByName("MatrixMultiply") + // core.addApiFunctionByName("MatrixTranslate") + // core.addApiFunctionByName("MatrixRotate") + // core.addApiFunctionByName("MatrixRotateX") + // core.addApiFunctionByName("MatrixRotateY") + // core.addApiFunctionByName("MatrixRotateZ") + // core.addApiFunctionByName("MatrixRotateXYZ") + // core.addApiFunctionByName("MatrixRotateZYX") + // core.addApiFunctionByName("MatrixScale") + // core.addApiFunctionByName("MatrixFrustum") + // core.addApiFunctionByName("MatrixPerspective") + // core.addApiFunctionByName("MatrixOrtho") + // core.addApiFunctionByName("MatrixLookAt") + // core.addApiFunctionByName("MatrixToFloatV") + // core.addApiFunctionByName("QuaternionAdd") + // core.addApiFunctionByName("QuaternionAddValue") + // core.addApiFunctionByName("QuaternionSubtract") + // core.addApiFunctionByName("QuaternionSubtractValue") + // core.addApiFunctionByName("QuaternionIdentity") + // core.addApiFunctionByName("QuaternionLength") + // core.addApiFunctionByName("QuaternionNormalize") + // core.addApiFunctionByName("QuaternionInvert") + // core.addApiFunctionByName("QuaternionMultiply") + // core.addApiFunctionByName("QuaternionScale") + // core.addApiFunctionByName("QuaternionDivide") + // core.addApiFunctionByName("QuaternionLerp") + // core.addApiFunctionByName("QuaternionNlerp") + // core.addApiFunctionByName("QuaternionSlerp") + // core.addApiFunctionByName("QuaternionFromVector3ToVector3") + // core.addApiFunctionByName("QuaternionFromMatrix") + // core.addApiFunctionByName("QuaternionToMatrix") + // core.addApiFunctionByName("QuaternionFromAxisAngle") + // core.addApiFunctionByName("QuaternionToAxisAngle") + // core.addApiFunctionByName("QuaternionFromEuler") + // core.addApiFunctionByName("QuaternionToEuler") + // core.addApiFunctionByName("QuaternionTransform") + // core.addApiFunctionByName("QuaternionEquals") api.defines.filter(x => x.type === "COLOR").map(x => ({ name: x.name, description: x.description, values: (x.value.match(/\{([^}]+)\}/) || "")[1].split(',').map(x => x.trim()) })).forEach(x => { core.exportGlobalStruct("Color", x.name, x.values, x.description) diff --git a/bindings/src/raylib-header.ts b/bindings/src/raylib-header.ts index d9208a9..d44d874 100644 --- a/bindings/src/raylib-header.ts +++ b/bindings/src/raylib-header.ts @@ -23,6 +23,8 @@ export class RayLibHeader extends QuickJsHeader { constructor(name: string, private api: ApiDescription){ super(name) this.includes.include("raylib.h") + //this.includes.line("#define RAYMATH_IMPLEMENTATION") + this.includes.include("raymath.h") } addApiFunction(api: ApiFunction, jsName: string | null = null, options: FuncBindingOptions = {}){ diff --git a/examples/js_example.js b/examples/js_example.js index 9c190c0..d5045c7 100644 --- a/examples/js_example.js +++ b/examples/js_example.js @@ -1,7 +1,8 @@ import { Timers } from "./examples/common/timers.js" const timers = new Timers() - +console.log(clamp(-1.5,0,5)) +console.log(vector2Distance(new Vector2(0,0), new Vector2(1,0))) initWindow(640, 480, "Javascript Tests") const pos = new Vector2(getScreenWidth()/2,getScreenHeight()/2) diff --git a/examples/lib.raylib.d.ts b/examples/lib.raylib.d.ts index 3aed2ec..cc52c1a 100644 --- a/examples/lib.raylib.d.ts +++ b/examples/lib.raylib.d.ts @@ -833,6 +833,80 @@ declare function setMusicPan(music: Music, pan: number): void; declare function getMusicTimeLength(music: Music): number; /** Get current music time played (in seconds) */ declare function getMusicTimePlayed(music: Music): number; +/** */ +declare function clamp(value: number, min: number, max: number): number; +/** */ +declare function lerp(start: number, end: number, amount: number): number; +/** */ +declare function normalize(value: number, start: number, end: number): number; +/** */ +declare function remap(value: number, inputStart: number, inputEnd: number, outputStart: number, outputEnd: number): number; +/** */ +declare function wrap(value: number, min: number, max: number): number; +/** */ +declare function floatEquals(x: number, y: number): number; +/** */ +declare function vector2Zero(): Vector2; +/** */ +declare function vector2One(): Vector2; +/** */ +declare function vector2Add(v1: Vector2, v2: Vector2): Vector2; +/** */ +declare function vector2AddValue(v: Vector2, add: number): Vector2; +/** */ +declare function vector2Subtract(v1: Vector2, v2: Vector2): Vector2; +/** */ +declare function vector2SubtractValue(v: Vector2, sub: number): Vector2; +/** */ +declare function vector2Length(v: Vector2): number; +/** */ +declare function vector2LengthSqr(v: Vector2): number; +/** */ +declare function vector2DotProduct(v1: Vector2, v2: Vector2): number; +/** */ +declare function vector2Distance(v1: Vector2, v2: Vector2): number; +/** */ +declare function vector2DistanceSqr(v1: Vector2, v2: Vector2): number; +/** */ +declare function vector2Angle(v1: Vector2, v2: Vector2): number; +/** */ +declare function vector2LineAngle(start: Vector2, end: Vector2): number; +/** */ +declare function vector2Scale(v: Vector2, scale: number): Vector2; +/** */ +declare function vector2Multiply(v1: Vector2, v2: Vector2): Vector2; +/** */ +declare function vector2Negate(v: Vector2): Vector2; +/** */ +declare function vector2Divide(v1: Vector2, v2: Vector2): Vector2; +/** */ +declare function vector2Normalize(v: Vector2): Vector2; +/** */ +declare function vector2Transform(v: Vector2, mat: Matrix): Vector2; +/** */ +declare function vector2Lerp(v1: Vector2, v2: Vector2, amount: number): Vector2; +/** */ +declare function vector2Reflect(v: Vector2, normal: Vector2): Vector2; +/** */ +declare function vector2Rotate(v: Vector2, angle: number): Vector2; +/** */ +declare function vector2MoveTowards(v: Vector2, target: Vector2, maxDistance: number): Vector2; +/** */ +declare function vector2Invert(v: Vector2): Vector2; +/** */ +declare function vector2Clamp(v: Vector2, min: Vector2, max: Vector2): Vector2; +/** */ +declare function vector2ClampValue(v: Vector2, min: number, max: number): Vector2; +/** */ +declare function vector2Equals(p: Vector2, q: Vector2): number; +/** */ +declare function vector3Zero(): Vector3; +/** */ +declare function vector3One(): Vector3; +/** */ +declare function vector3Add(v1: Vector3, v2: Vector3): Vector3; +/** */ +declare function vector3AddValue(v: Vector3, add: number): Vector3; /** Light Gray */ declare var LIGHTGRAY: Color; /** Gray */ diff --git a/generate-bindings.js b/generate-bindings.js index 1ac2c59..e84af11 100644 --- a/generate-bindings.js +++ b/generate-bindings.js @@ -549,6 +549,8 @@ class RayLibHeader extends quickjs_1.QuickJsHeader { this.api = api; this.typings = new typescript_1.TypeScriptDeclaration(); this.includes.include("raylib.h"); + //this.includes.line("#define RAYMATH_IMPLEMENTATION") + this.includes.include("raymath.h"); } addApiFunction(api, jsName = null, options = {}) { const jName = jsName || api.name.charAt(0).toLowerCase() + api.name.slice(1); @@ -812,7 +814,6 @@ function parseMathHeader() { const frags = arg.split(' '); const name = frags.pop(); const type = frags.join(' ').replace("*", " *"); - console.log({ name: name || "", type: type }); return { name: name || "", type: type }; }); return { @@ -827,6 +828,7 @@ function main() { const mathApi = parseMathHeader(); (0, fs_1.writeFileSync)("bindings/raylib_math_api.json", JSON.stringify(mathApi)); const api = JSON.parse((0, fs_1.readFileSync)("thirdparty/raylib/parser/output/raylib_api.json", 'utf8')); + mathApi.forEach(x => api.functions.push(x)); const apiDesc = new api_1.ApiDescription(api); const core = new raylib_header_1.RayLibHeader("raylib_core", apiDesc); core.addApiStructByName("Color", { @@ -1538,7 +1540,118 @@ function main() { // core.addApiFunctionByName("AttachAudioMixedProcessor") // core.addApiFunctionByName("DetachAudioMixedProcessor") // module: raymath - //mathApi.forEach(x => console.log(`core.addApi`)) + core.addApiFunctionByName("Clamp"); + core.addApiFunctionByName("Lerp"); + core.addApiFunctionByName("Normalize"); + core.addApiFunctionByName("Remap"); + core.addApiFunctionByName("Wrap"); + core.addApiFunctionByName("FloatEquals"); + core.addApiFunctionByName("Vector2Zero"); + core.addApiFunctionByName("Vector2One"); + core.addApiFunctionByName("Vector2Add"); + core.addApiFunctionByName("Vector2AddValue"); + core.addApiFunctionByName("Vector2Subtract"); + core.addApiFunctionByName("Vector2SubtractValue"); + core.addApiFunctionByName("Vector2Length"); + core.addApiFunctionByName("Vector2LengthSqr"); + core.addApiFunctionByName("Vector2DotProduct"); + core.addApiFunctionByName("Vector2Distance"); + core.addApiFunctionByName("Vector2DistanceSqr"); + core.addApiFunctionByName("Vector2Angle"); + core.addApiFunctionByName("Vector2LineAngle"); + core.addApiFunctionByName("Vector2Scale"); + core.addApiFunctionByName("Vector2Multiply"); + core.addApiFunctionByName("Vector2Negate"); + core.addApiFunctionByName("Vector2Divide"); + core.addApiFunctionByName("Vector2Normalize"); + core.addApiFunctionByName("Vector2Transform"); + core.addApiFunctionByName("Vector2Lerp"); + core.addApiFunctionByName("Vector2Reflect"); + core.addApiFunctionByName("Vector2Rotate"); + core.addApiFunctionByName("Vector2MoveTowards"); + core.addApiFunctionByName("Vector2Invert"); + core.addApiFunctionByName("Vector2Clamp"); + core.addApiFunctionByName("Vector2ClampValue"); + core.addApiFunctionByName("Vector2Equals"); + core.addApiFunctionByName("Vector3Zero"); + core.addApiFunctionByName("Vector3One"); + core.addApiFunctionByName("Vector3Add"); + core.addApiFunctionByName("Vector3AddValue"); + // core.addApiFunctionByName("Vector3Subtract") + // core.addApiFunctionByName("Vector3SubtractValue") + // core.addApiFunctionByName("Vector3Scale") + // core.addApiFunctionByName("Vector3Multiply") + // core.addApiFunctionByName("Vector3CrossProduct") + // core.addApiFunctionByName("Vector3Perpendicular") + // core.addApiFunctionByName("Vector3Length") + // core.addApiFunctionByName("Vector3LengthSqr") + // core.addApiFunctionByName("Vector3DotProduct") + // core.addApiFunctionByName("Vector3Distance") + // core.addApiFunctionByName("Vector3DistanceSqr") + // core.addApiFunctionByName("Vector3Angle") + // core.addApiFunctionByName("Vector3Negate") + // core.addApiFunctionByName("Vector3Divide") + // core.addApiFunctionByName("Vector3Normalize") + // core.addApiFunctionByName("Vector3OrthoNormalize") + // core.addApiFunctionByName("Vector3Transform") + // core.addApiFunctionByName("Vector3RotateByQuaternion") + // core.addApiFunctionByName("Vector3RotateByAxisAngle") + // core.addApiFunctionByName("Vector3Lerp") + // core.addApiFunctionByName("Vector3Reflect") + // core.addApiFunctionByName("Vector3Min") + // core.addApiFunctionByName("Vector3Max") + // core.addApiFunctionByName("Vector3Barycenter") + // core.addApiFunctionByName("Vector3Unproject") + // core.addApiFunctionByName("Vector3ToFloatV") + // core.addApiFunctionByName("Vector3Invert") + // core.addApiFunctionByName("Vector3Clamp") + // core.addApiFunctionByName("Vector3ClampValue") + // core.addApiFunctionByName("Vector3Equals") + // core.addApiFunctionByName("Vector3Refract") + // core.addApiFunctionByName("MatrixDeterminant") + // core.addApiFunctionByName("MatrixTrace") + // core.addApiFunctionByName("MatrixTranspose") + // core.addApiFunctionByName("MatrixInvert") + // core.addApiFunctionByName("MatrixIdentity") + // core.addApiFunctionByName("MatrixAdd") + // core.addApiFunctionByName("MatrixSubtract") + // core.addApiFunctionByName("MatrixMultiply") + // core.addApiFunctionByName("MatrixTranslate") + // core.addApiFunctionByName("MatrixRotate") + // core.addApiFunctionByName("MatrixRotateX") + // core.addApiFunctionByName("MatrixRotateY") + // core.addApiFunctionByName("MatrixRotateZ") + // core.addApiFunctionByName("MatrixRotateXYZ") + // core.addApiFunctionByName("MatrixRotateZYX") + // core.addApiFunctionByName("MatrixScale") + // core.addApiFunctionByName("MatrixFrustum") + // core.addApiFunctionByName("MatrixPerspective") + // core.addApiFunctionByName("MatrixOrtho") + // core.addApiFunctionByName("MatrixLookAt") + // core.addApiFunctionByName("MatrixToFloatV") + // core.addApiFunctionByName("QuaternionAdd") + // core.addApiFunctionByName("QuaternionAddValue") + // core.addApiFunctionByName("QuaternionSubtract") + // core.addApiFunctionByName("QuaternionSubtractValue") + // core.addApiFunctionByName("QuaternionIdentity") + // core.addApiFunctionByName("QuaternionLength") + // core.addApiFunctionByName("QuaternionNormalize") + // core.addApiFunctionByName("QuaternionInvert") + // core.addApiFunctionByName("QuaternionMultiply") + // core.addApiFunctionByName("QuaternionScale") + // core.addApiFunctionByName("QuaternionDivide") + // core.addApiFunctionByName("QuaternionLerp") + // core.addApiFunctionByName("QuaternionNlerp") + // core.addApiFunctionByName("QuaternionSlerp") + // core.addApiFunctionByName("QuaternionFromVector3ToVector3") + // core.addApiFunctionByName("QuaternionFromMatrix") + // core.addApiFunctionByName("QuaternionToMatrix") + // core.addApiFunctionByName("QuaternionFromAxisAngle") + // core.addApiFunctionByName("QuaternionToAxisAngle") + // core.addApiFunctionByName("QuaternionFromEuler") + // core.addApiFunctionByName("QuaternionToEuler") + // core.addApiFunctionByName("QuaternionTransform") + // core.addApiFunctionByName("QuaternionEquals") api.defines.filter(x => x.type === "COLOR").map(x => ({ name: x.name, description: x.description, values: (x.value.match(/\{([^}]+)\}/) || "")[1].split(',').map(x => x.trim()) })).forEach(x => { core.exportGlobalStruct("Color", x.name, x.values, x.description); }); diff --git a/src/bindings/js_raylib_core.h b/src/bindings/js_raylib_core.h index 5b8ce5e..ce26077 100644 --- a/src/bindings/js_raylib_core.h +++ b/src/bindings/js_raylib_core.h @@ -7,6 +7,7 @@ #include #include +#include #ifndef countof #define countof(x) (sizeof(x) / sizeof((x)[0])) @@ -5197,6 +5198,513 @@ static JSValue js_getMusicTimePlayed(JSContext * ctx, JSValueConst this_val, int return ret; } +static JSValue js_clamp(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + double _double_value; + JS_ToFloat64(ctx, &_double_value, argv[0]); + float value = (float)_double_value; + double _double_min; + JS_ToFloat64(ctx, &_double_min, argv[1]); + float min = (float)_double_min; + double _double_max; + JS_ToFloat64(ctx, &_double_max, argv[2]); + float max = (float)_double_max; + float returnVal = Clamp(value, min, max); + JSValue ret = JS_NewFloat64(ctx, returnVal); + return ret; +} + +static JSValue js_lerp(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + double _double_start; + JS_ToFloat64(ctx, &_double_start, argv[0]); + float start = (float)_double_start; + double _double_end; + JS_ToFloat64(ctx, &_double_end, argv[1]); + float end = (float)_double_end; + double _double_amount; + JS_ToFloat64(ctx, &_double_amount, argv[2]); + float amount = (float)_double_amount; + float returnVal = Lerp(start, end, amount); + JSValue ret = JS_NewFloat64(ctx, returnVal); + return ret; +} + +static JSValue js_normalize(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + double _double_value; + JS_ToFloat64(ctx, &_double_value, argv[0]); + float value = (float)_double_value; + double _double_start; + JS_ToFloat64(ctx, &_double_start, argv[1]); + float start = (float)_double_start; + double _double_end; + JS_ToFloat64(ctx, &_double_end, argv[2]); + float end = (float)_double_end; + float returnVal = Normalize(value, start, end); + JSValue ret = JS_NewFloat64(ctx, returnVal); + return ret; +} + +static JSValue js_remap(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + double _double_value; + JS_ToFloat64(ctx, &_double_value, argv[0]); + float value = (float)_double_value; + double _double_inputStart; + JS_ToFloat64(ctx, &_double_inputStart, argv[1]); + float inputStart = (float)_double_inputStart; + double _double_inputEnd; + JS_ToFloat64(ctx, &_double_inputEnd, argv[2]); + float inputEnd = (float)_double_inputEnd; + double _double_outputStart; + JS_ToFloat64(ctx, &_double_outputStart, argv[3]); + float outputStart = (float)_double_outputStart; + double _double_outputEnd; + JS_ToFloat64(ctx, &_double_outputEnd, argv[4]); + float outputEnd = (float)_double_outputEnd; + float returnVal = Remap(value, inputStart, inputEnd, outputStart, outputEnd); + JSValue ret = JS_NewFloat64(ctx, returnVal); + return ret; +} + +static JSValue js_wrap(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + double _double_value; + JS_ToFloat64(ctx, &_double_value, argv[0]); + float value = (float)_double_value; + double _double_min; + JS_ToFloat64(ctx, &_double_min, argv[1]); + float min = (float)_double_min; + double _double_max; + JS_ToFloat64(ctx, &_double_max, argv[2]); + float max = (float)_double_max; + float returnVal = Wrap(value, min, max); + JSValue ret = JS_NewFloat64(ctx, returnVal); + return ret; +} + +static JSValue js_floatEquals(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + double _double_x; + JS_ToFloat64(ctx, &_double_x, argv[0]); + float x = (float)_double_x; + double _double_y; + JS_ToFloat64(ctx, &_double_y, argv[1]); + float y = (float)_double_y; + int returnVal = FloatEquals(x, y); + JSValue ret = JS_NewInt32(ctx, returnVal); + return ret; +} + +static JSValue js_vector2Zero(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2 returnVal = Vector2Zero(); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2One(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2 returnVal = Vector2One(); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2Add(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v1_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v1_ptr == NULL) return JS_EXCEPTION; + Vector2 v1 = *v1_ptr; + Vector2* v2_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[1], js_Vector2_class_id); + if(v2_ptr == NULL) return JS_EXCEPTION; + Vector2 v2 = *v2_ptr; + Vector2 returnVal = Vector2Add(v1, v2); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2AddValue(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector2 v = *v_ptr; + double _double_add; + JS_ToFloat64(ctx, &_double_add, argv[1]); + float add = (float)_double_add; + Vector2 returnVal = Vector2AddValue(v, add); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2Subtract(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v1_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v1_ptr == NULL) return JS_EXCEPTION; + Vector2 v1 = *v1_ptr; + Vector2* v2_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[1], js_Vector2_class_id); + if(v2_ptr == NULL) return JS_EXCEPTION; + Vector2 v2 = *v2_ptr; + Vector2 returnVal = Vector2Subtract(v1, v2); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2SubtractValue(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector2 v = *v_ptr; + double _double_sub; + JS_ToFloat64(ctx, &_double_sub, argv[1]); + float sub = (float)_double_sub; + Vector2 returnVal = Vector2SubtractValue(v, sub); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2Length(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector2 v = *v_ptr; + float returnVal = Vector2Length(v); + JSValue ret = JS_NewFloat64(ctx, returnVal); + return ret; +} + +static JSValue js_vector2LengthSqr(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector2 v = *v_ptr; + float returnVal = Vector2LengthSqr(v); + JSValue ret = JS_NewFloat64(ctx, returnVal); + return ret; +} + +static JSValue js_vector2DotProduct(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v1_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v1_ptr == NULL) return JS_EXCEPTION; + Vector2 v1 = *v1_ptr; + Vector2* v2_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[1], js_Vector2_class_id); + if(v2_ptr == NULL) return JS_EXCEPTION; + Vector2 v2 = *v2_ptr; + float returnVal = Vector2DotProduct(v1, v2); + JSValue ret = JS_NewFloat64(ctx, returnVal); + return ret; +} + +static JSValue js_vector2Distance(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v1_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v1_ptr == NULL) return JS_EXCEPTION; + Vector2 v1 = *v1_ptr; + Vector2* v2_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[1], js_Vector2_class_id); + if(v2_ptr == NULL) return JS_EXCEPTION; + Vector2 v2 = *v2_ptr; + float returnVal = Vector2Distance(v1, v2); + JSValue ret = JS_NewFloat64(ctx, returnVal); + return ret; +} + +static JSValue js_vector2DistanceSqr(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v1_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v1_ptr == NULL) return JS_EXCEPTION; + Vector2 v1 = *v1_ptr; + Vector2* v2_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[1], js_Vector2_class_id); + if(v2_ptr == NULL) return JS_EXCEPTION; + Vector2 v2 = *v2_ptr; + float returnVal = Vector2DistanceSqr(v1, v2); + JSValue ret = JS_NewFloat64(ctx, returnVal); + return ret; +} + +static JSValue js_vector2Angle(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v1_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v1_ptr == NULL) return JS_EXCEPTION; + Vector2 v1 = *v1_ptr; + Vector2* v2_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[1], js_Vector2_class_id); + if(v2_ptr == NULL) return JS_EXCEPTION; + Vector2 v2 = *v2_ptr; + float returnVal = Vector2Angle(v1, v2); + JSValue ret = JS_NewFloat64(ctx, returnVal); + return ret; +} + +static JSValue js_vector2LineAngle(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* start_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(start_ptr == NULL) return JS_EXCEPTION; + Vector2 start = *start_ptr; + Vector2* end_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[1], js_Vector2_class_id); + if(end_ptr == NULL) return JS_EXCEPTION; + Vector2 end = *end_ptr; + float returnVal = Vector2LineAngle(start, end); + JSValue ret = JS_NewFloat64(ctx, returnVal); + return ret; +} + +static JSValue js_vector2Scale(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector2 v = *v_ptr; + double _double_scale; + JS_ToFloat64(ctx, &_double_scale, argv[1]); + float scale = (float)_double_scale; + Vector2 returnVal = Vector2Scale(v, scale); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2Multiply(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v1_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v1_ptr == NULL) return JS_EXCEPTION; + Vector2 v1 = *v1_ptr; + Vector2* v2_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[1], js_Vector2_class_id); + if(v2_ptr == NULL) return JS_EXCEPTION; + Vector2 v2 = *v2_ptr; + Vector2 returnVal = Vector2Multiply(v1, v2); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2Negate(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector2 v = *v_ptr; + Vector2 returnVal = Vector2Negate(v); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2Divide(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v1_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v1_ptr == NULL) return JS_EXCEPTION; + Vector2 v1 = *v1_ptr; + Vector2* v2_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[1], js_Vector2_class_id); + if(v2_ptr == NULL) return JS_EXCEPTION; + Vector2 v2 = *v2_ptr; + Vector2 returnVal = Vector2Divide(v1, v2); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2Normalize(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector2 v = *v_ptr; + Vector2 returnVal = Vector2Normalize(v); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2Transform(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector2 v = *v_ptr; + Matrix* mat_ptr = (Matrix*)JS_GetOpaque2(ctx, argv[1], js_Matrix_class_id); + if(mat_ptr == NULL) return JS_EXCEPTION; + Matrix mat = *mat_ptr; + Vector2 returnVal = Vector2Transform(v, mat); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2Lerp(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v1_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v1_ptr == NULL) return JS_EXCEPTION; + Vector2 v1 = *v1_ptr; + Vector2* v2_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[1], js_Vector2_class_id); + if(v2_ptr == NULL) return JS_EXCEPTION; + Vector2 v2 = *v2_ptr; + double _double_amount; + JS_ToFloat64(ctx, &_double_amount, argv[2]); + float amount = (float)_double_amount; + Vector2 returnVal = Vector2Lerp(v1, v2, amount); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2Reflect(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector2 v = *v_ptr; + Vector2* normal_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[1], js_Vector2_class_id); + if(normal_ptr == NULL) return JS_EXCEPTION; + Vector2 normal = *normal_ptr; + Vector2 returnVal = Vector2Reflect(v, normal); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2Rotate(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector2 v = *v_ptr; + double _double_angle; + JS_ToFloat64(ctx, &_double_angle, argv[1]); + float angle = (float)_double_angle; + Vector2 returnVal = Vector2Rotate(v, angle); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2MoveTowards(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector2 v = *v_ptr; + Vector2* target_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[1], js_Vector2_class_id); + if(target_ptr == NULL) return JS_EXCEPTION; + Vector2 target = *target_ptr; + double _double_maxDistance; + JS_ToFloat64(ctx, &_double_maxDistance, argv[2]); + float maxDistance = (float)_double_maxDistance; + Vector2 returnVal = Vector2MoveTowards(v, target, maxDistance); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2Invert(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector2 v = *v_ptr; + Vector2 returnVal = Vector2Invert(v); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2Clamp(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector2 v = *v_ptr; + Vector2* min_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[1], js_Vector2_class_id); + if(min_ptr == NULL) return JS_EXCEPTION; + Vector2 min = *min_ptr; + Vector2* max_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[2], js_Vector2_class_id); + if(max_ptr == NULL) return JS_EXCEPTION; + Vector2 max = *max_ptr; + Vector2 returnVal = Vector2Clamp(v, min, max); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2ClampValue(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* v_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector2 v = *v_ptr; + double _double_min; + JS_ToFloat64(ctx, &_double_min, argv[1]); + float min = (float)_double_min; + double _double_max; + JS_ToFloat64(ctx, &_double_max, argv[2]); + float max = (float)_double_max; + Vector2 returnVal = Vector2ClampValue(v, min, max); + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector2Equals(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* p_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(p_ptr == NULL) return JS_EXCEPTION; + Vector2 p = *p_ptr; + Vector2* q_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[1], js_Vector2_class_id); + if(q_ptr == NULL) return JS_EXCEPTION; + Vector2 q = *q_ptr; + int returnVal = Vector2Equals(p, q); + JSValue ret = JS_NewInt32(ctx, returnVal); + return ret; +} + +static JSValue js_vector3Zero(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector3 returnVal = Vector3Zero(); + Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector3One(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector3 returnVal = Vector3One(); + Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector3Add(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector3* v1_ptr = (Vector3*)JS_GetOpaque2(ctx, argv[0], js_Vector3_class_id); + if(v1_ptr == NULL) return JS_EXCEPTION; + Vector3 v1 = *v1_ptr; + Vector3* v2_ptr = (Vector3*)JS_GetOpaque2(ctx, argv[1], js_Vector3_class_id); + if(v2_ptr == NULL) return JS_EXCEPTION; + Vector3 v2 = *v2_ptr; + Vector3 returnVal = Vector3Add(v1, v2); + Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_vector3AddValue(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector3* v_ptr = (Vector3*)JS_GetOpaque2(ctx, argv[0], js_Vector3_class_id); + if(v_ptr == NULL) return JS_EXCEPTION; + Vector3 v = *v_ptr; + double _double_add; + JS_ToFloat64(ctx, &_double_add, argv[1]); + float add = (float)_double_add; + Vector3 returnVal = Vector3AddValue(v, add); + Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); + *ret_ptr = returnVal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + static const JSCFunctionListEntry js_raylib_core_funcs[] = { JS_CFUNC_DEF("initWindow",3,js_initWindow), JS_CFUNC_DEF("windowShouldClose",0,js_windowShouldClose), @@ -5517,6 +6025,43 @@ static const JSCFunctionListEntry js_raylib_core_funcs[] = { JS_CFUNC_DEF("setMusicPan",2,js_setMusicPan), JS_CFUNC_DEF("getMusicTimeLength",1,js_getMusicTimeLength), JS_CFUNC_DEF("getMusicTimePlayed",1,js_getMusicTimePlayed), + JS_CFUNC_DEF("clamp",3,js_clamp), + JS_CFUNC_DEF("lerp",3,js_lerp), + JS_CFUNC_DEF("normalize",3,js_normalize), + JS_CFUNC_DEF("remap",5,js_remap), + JS_CFUNC_DEF("wrap",3,js_wrap), + JS_CFUNC_DEF("floatEquals",2,js_floatEquals), + JS_CFUNC_DEF("vector2Zero",0,js_vector2Zero), + JS_CFUNC_DEF("vector2One",0,js_vector2One), + JS_CFUNC_DEF("vector2Add",2,js_vector2Add), + JS_CFUNC_DEF("vector2AddValue",2,js_vector2AddValue), + JS_CFUNC_DEF("vector2Subtract",2,js_vector2Subtract), + JS_CFUNC_DEF("vector2SubtractValue",2,js_vector2SubtractValue), + JS_CFUNC_DEF("vector2Length",1,js_vector2Length), + JS_CFUNC_DEF("vector2LengthSqr",1,js_vector2LengthSqr), + JS_CFUNC_DEF("vector2DotProduct",2,js_vector2DotProduct), + JS_CFUNC_DEF("vector2Distance",2,js_vector2Distance), + JS_CFUNC_DEF("vector2DistanceSqr",2,js_vector2DistanceSqr), + JS_CFUNC_DEF("vector2Angle",2,js_vector2Angle), + JS_CFUNC_DEF("vector2LineAngle",2,js_vector2LineAngle), + JS_CFUNC_DEF("vector2Scale",2,js_vector2Scale), + JS_CFUNC_DEF("vector2Multiply",2,js_vector2Multiply), + JS_CFUNC_DEF("vector2Negate",1,js_vector2Negate), + JS_CFUNC_DEF("vector2Divide",2,js_vector2Divide), + JS_CFUNC_DEF("vector2Normalize",1,js_vector2Normalize), + JS_CFUNC_DEF("vector2Transform",2,js_vector2Transform), + JS_CFUNC_DEF("vector2Lerp",3,js_vector2Lerp), + JS_CFUNC_DEF("vector2Reflect",2,js_vector2Reflect), + JS_CFUNC_DEF("vector2Rotate",2,js_vector2Rotate), + JS_CFUNC_DEF("vector2MoveTowards",3,js_vector2MoveTowards), + JS_CFUNC_DEF("vector2Invert",1,js_vector2Invert), + JS_CFUNC_DEF("vector2Clamp",3,js_vector2Clamp), + JS_CFUNC_DEF("vector2ClampValue",3,js_vector2ClampValue), + JS_CFUNC_DEF("vector2Equals",2,js_vector2Equals), + JS_CFUNC_DEF("vector3Zero",0,js_vector3Zero), + JS_CFUNC_DEF("vector3One",0,js_vector3One), + JS_CFUNC_DEF("vector3Add",2,js_vector3Add), + JS_CFUNC_DEF("vector3AddValue",2,js_vector3AddValue), }; static int js_raylib_core_init(JSContext * ctx, JSModuleDef * m) { diff --git a/thirdparty/raylib b/thirdparty/raylib index a48bb6e..5573f0f 160000 --- a/thirdparty/raylib +++ b/thirdparty/raylib @@ -1 +1 @@ -Subproject commit a48bb6e1ed7b33190e486ba65b7875f0dff73701 +Subproject commit 5573f0f1c7b29bfe46d0b70487e4adb4d01cba62