From 13f74bf5a12536fbabb8e19916c514e2ed3e60bf Mon Sep 17 00:00:00 2001 From: Alexander Klingenbeck Date: Fri, 2 Jun 2023 18:58:53 +0200 Subject: [PATCH] refactor binding generation --- bindings/src/index.ts | 922 +++---------- bindings/src/interfaces.ts | 8 +- bindings/src/raylib-header.ts | 8 +- bindings/src/typescript.ts | 13 +- examples/lib.raylib.d.ts | 400 +++--- generate-bindings.js | 871 +++---------- src/bindings/js_raylib_core.h | 2286 ++++++++++++++++++--------------- 7 files changed, 1864 insertions(+), 2644 deletions(-) diff --git a/bindings/src/index.ts b/bindings/src/index.ts index 2567e18..501996e 100644 --- a/bindings/src/index.ts +++ b/bindings/src/index.ts @@ -3,6 +3,9 @@ import { RayLibApi, RayLibFunction, RayLibStruct } from "./interfaces"; import { RayLibHeader } from "./raylib-header"; import { HeaderParser } from "./header-parser"; import { RayLibAlias } from "./interfaces"; +import { QuickJsGenerator } from "./quickjs"; + +let api: RayLibApi function getFunction(funList: RayLibFunction[], name: string){ return funList.find(x => x.name === name) @@ -16,10 +19,14 @@ function getAliases(aliasList: RayLibAlias[], name: string) { return aliasList.filter(x => x.type === name).map(x => x.name) } +function ignore(name: string){ + getFunction(api.functions, name)!.binding = { ignore: true } +} + function main(){ // Load the pre-generated raylib api - const api = JSON.parse(readFileSync("thirdparty/raylib/parser/output/raylib_api.json", 'utf8')) + api = JSON.parse(readFileSync("thirdparty/raylib/parser/output/raylib_api.json", 'utf8')) const parser = new HeaderParser() @@ -274,19 +281,19 @@ function main(){ //destructor: "UnloadMaterial" } - getFunction(api.functions, "SetWindowIcons")!.binding = { ignore: true } - getFunction(api.functions, "GetWindowHandle")!.binding = { ignore: true } + ignore("SetWindowIcons") + ignore("GetWindowHandle") // Custom frame control functions // NOT SUPPORTED BECAUSE NEEDS COMPILER FLAG - getFunction(api.functions, "SwapScreenBuffer")!.binding = { ignore: true } - getFunction(api.functions, "PollInputEvents")!.binding = { ignore: true } - getFunction(api.functions, "WaitTime")!.binding = { ignore: true } + ignore("SwapScreenBuffer") + ignore("PollInputEvents") + ignore("WaitTime") - getFunction(api.functions, "BeginVrStereoMode")!.binding = { ignore: true } - getFunction(api.functions, "EndVrStereoMode")!.binding = { ignore: true } - getFunction(api.functions, "LoadVrStereoConfig")!.binding = { ignore: true } - getFunction(api.functions, "UnloadVrStereoConfig")!.binding = { ignore: true } + ignore("BeginVrStereoMode") + ignore("EndVrStereoMode") + ignore("LoadVrStereoConfig") + ignore("UnloadVrStereoConfig") getFunction(api.functions, "SetShaderValue")!.binding = { body: (gen) => { gen.jsToC("Shader","shader","argv[0]", core.structLookup) @@ -316,768 +323,205 @@ function main(){ gen.call("SetShaderValue", ["shader","locIndex","value","uniformType"]) gen.returnExp("JS_UNDEFINED") }} - getFunction(api.functions, "SetShaderValueV")!.binding = { ignore: true } + ignore("SetShaderValueV") + const traceLog = getFunction(api.functions, "TraceLog")! + traceLog.params?.pop() - const traceLog = apiDesc.getFunction("TraceLog") - if(!traceLog) throw new Error("TraceLog not found") - traceLog.params.pop() - core.addApiFunction(traceLog) - core.addApiFunctionByName("SetTraceLogLevel") - // Memory functions not supported on JS - core.addApiFunctionByName("OpenURL") - + // Memory functions not supported on JS, just use ArrayBuffer + ignore("MemAlloc") + ignore("MemRealloc") + ignore("MemFree") + // Callbacks not supported on JS + ignore("SetTraceLogCallback") + ignore("SetLoadFileDataCallback") + ignore("SetSaveFileDataCallback") + ignore("SetLoadFileTextCallback") + ignore("SetSaveFileTextCallback") // Files management functions - const lfd = apiDesc.getFunction("LoadFileData") - lfd?.params.pop() - core.addApiFunctionByName("LoadFileData", null, { body: gen => { - gen.jsToC("const char *", "fileName", "argv[0]") - gen.declare("bytesRead", "unsigned int") - gen.call("LoadFileData", ["fileName", "&bytesRead"], { type: "unsigned char *", name: "retVal" }) - gen.statement("JSValue buffer = JS_NewArrayBufferCopy(ctx, (const uint8_t*)retVal, bytesRead)") - gen.call("UnloadFileData", ["retVal"]) - gen.jsCleanUpParameter("const char*","fileName") - gen.returnExp("buffer") - } }) - //UnloadLoadFileData not needed, data is copied - // TODO: Works but unnecessary makes copy of memory - core.addApiFunctionByName("SaveFileData") - // Export data as code not needed - core.addApiFunctionByName("LoadFileText", null, { after: gen => gen.call("UnloadFileText", ["returnVal"]) }) - core.addApiFunctionByName("SaveFileText") - core.addApiFunctionByName("FileExists") - core.addApiFunctionByName("DirectoryExists") - core.addApiFunctionByName("IsFileExtension") - core.addApiFunctionByName("GetFileLength") - // TODO: Who needs to clean memory here? - core.addApiFunctionByName("GetFileExtension") - core.addApiFunctionByName("GetFileName") - core.addApiFunctionByName("GetFileNameWithoutExt") - core.addApiFunctionByName("GetDirectoryPath") - core.addApiFunctionByName("GetPrevDirectoryPath") - core.addApiFunctionByName("GetWorkingDirectory") - core.addApiFunctionByName("GetApplicationDirectory") - core.addApiFunctionByName("ChangeDirectory") - core.addApiFunctionByName("IsPathFile") - //core.addApiFunctionByName("LoadDirectoryFiles") - //core.addApiFunctionByName("LoadDirectoryFilesEx") - // UnloadDirectoryFiles - core.addApiFunctionByName("IsFileDropped") - const ldf = apiDesc.getFunction("LoadDroppedFiles") - ldf!.returnType = "string[]" - core.addApiFunction(ldf!, null, { + const lfd = getFunction(api.functions, "LoadFileData")! + lfd.params![lfd.params!.length-1].binding = { ignore: true } + lfd.binding = { body: gen => { - gen.call("LoadDroppedFiles", [], { type: "FilePathList", name: "files" }) - gen.call("JS_NewArray", ["ctx"], { type: "JSValue", name:"ret"}) - const f = gen.for("i", "files.count") - f.call("JS_SetPropertyUint32", ["ctx","ret", "i", "JS_NewString(ctx,files.paths[i])"]) - gen.call("UnloadDroppedFiles", ["files"]) + gen.jsToC("const char *", "fileName", "argv[0]") + gen.declare("bytesRead", "unsigned int") + gen.call("LoadFileData", ["fileName", "&bytesRead"], { type: "unsigned char *", name: "retVal" }) + gen.statement("JSValue buffer = JS_NewArrayBufferCopy(ctx, (const uint8_t*)retVal, bytesRead)") + gen.call("UnloadFileData", ["retVal"]) + gen.jsCleanUpParameter("const char*","fileName") + gen.returnExp("buffer") + } + } + ignore("UnloadFileData") + + // TODO: SaveFileData works but unnecessary makes copy of memory + getFunction(api.functions, "SaveFileData")!.binding = { } + ignore("ExportDataAsCode") + getFunction(api.functions, "LoadFileText")!.binding = { after: gen => gen.call("UnloadFileText", ["returnVal"]) } + ignore("UnloadFileText") + + const createFileList = (gen: QuickJsGenerator, loadName: string, unloadName: string, args: string[]) => { + gen.call(loadName, args, { type: "FilePathList", name: "files" }) + gen.call("JS_NewArray", ["ctx"], { type: "JSValue", name:"ret"}) + const f = gen.for("i", "files.count") + f.call("JS_SetPropertyUint32", ["ctx","ret", "i", "JS_NewString(ctx,files.paths[i])"]) + gen.call(unloadName, ["files"]) + } + getFunction(api.functions, "LoadDirectoryFiles")!.binding = { + jsReturns: "string[]", + body: gen => { + gen.jsToC("const char *", "dirPath", "argv[0]") + createFileList(gen, "LoadDirectoryFiles", "UnloadDirectoryFiles", ["dirPath"]) + gen.jsCleanUpParameter("const char *", "dirPath") gen.returnExp("ret") } - }) - // UnloadDroppedFiles - core.addApiFunctionByName("GetFileModTime") + } + getFunction(api.functions, "LoadDirectoryFilesEx")!.binding = { + jsReturns: "string[]", + body: gen => { + gen.jsToC("const char *", "basePath", "argv[0]") + gen.jsToC("const char *", "filter", "argv[1]") + gen.jsToC("bool", "scanSubdirs", "argv[2]") + createFileList(gen, "LoadDirectoryFilesEx", "UnloadDirectoryFiles", ["basePath", "filter", "scanSubdirs"]) + gen.jsCleanUpParameter("const char *", "basePath") + gen.jsCleanUpParameter("const char *", "filter") + gen.returnExp("ret") + } + } + ignore("UnloadDirectoryFiles") + getFunction(api.functions, "LoadDroppedFiles")!.binding = { + jsReturns: "string[]", + body: gen => { + createFileList(gen, "LoadDroppedFiles", "UnloadDroppedFiles", []) + gen.returnExp("ret") + } + } + ignore("UnloadDroppedFiles") // Compression/encoding functionality - //core.addApiFunctionByName("CompressData") - //core.addApiFunctionByName("DecompressData") - //core.addApiFunctionByName("EncodeDataBase64") - //core.addApiFunctionByName("DecodeDataBase64") + ignore("CompressData") + ignore("DecompressData") + ignore("EncodeDataBase64") + ignore("DecodeDataBase64") - // input handling functions - core.addApiFunctionByName("IsKeyPressed") - core.addApiFunctionByName("IsKeyDown") - core.addApiFunctionByName("IsKeyReleased") - core.addApiFunctionByName("IsKeyUp") - core.addApiFunctionByName("SetExitKey") - core.addApiFunctionByName("GetKeyPressed") - core.addApiFunctionByName("GetCharPressed") + ignore("DrawLineStrip") + ignore("DrawTriangleFan") + ignore("DrawTriangleStrip") + ignore("CheckCollisionPointPoly") + ignore("CheckCollisionLines") + ignore("LoadImageAnim") + ignore("ExportImageAsCode") - // input-related functions: gamepads - core.addApiFunctionByName("IsGamepadAvailable") - core.addApiFunctionByName("GetGamepadName") - core.addApiFunctionByName("IsGamepadButtonPressed") - core.addApiFunctionByName("IsGamepadButtonDown") - core.addApiFunctionByName("IsGamepadButtonReleased") - core.addApiFunctionByName("IsGamepadButtonUp") - core.addApiFunctionByName("GetGamepadButtonPressed") - core.addApiFunctionByName("GetGamepadAxisCount") - core.addApiFunctionByName("GetGamepadAxisMovement") - core.addApiFunctionByName("SetGamepadMappings") + getFunction(api.functions, "LoadImageColors")!.binding = { + jsReturns: "ArrayBuffer", + body: gen => { + gen.jsToC("Image","image","argv[0]", core.structLookup) + gen.call("LoadImageColors", ["image"], {name:"colors",type:"Color *"}) + gen.statement("JSValue retVal = JS_NewArrayBufferCopy(ctx, (const uint8_t*)colors, image.width*image.height*sizeof(Color))") + gen.call("UnloadImageColors", ["colors"]) + gen.returnExp("retVal") + } + } - // input-related functions: mouse - core.addApiFunctionByName("IsMouseButtonPressed") - core.addApiFunctionByName("IsMouseButtonDown") - core.addApiFunctionByName("IsMouseButtonReleased") - core.addApiFunctionByName("IsMouseButtonUp") - core.addApiFunctionByName("GetMouseX") - core.addApiFunctionByName("GetMouseY") - core.addApiFunctionByName("GetMousePosition") - core.addApiFunctionByName("GetMouseDelta") - core.addApiFunctionByName("SetMousePosition") - core.addApiFunctionByName("SetMouseOffset") - core.addApiFunctionByName("SetMouseScale") - core.addApiFunctionByName("GetMouseWheelMove") - core.addApiFunctionByName("GetMouseWheelMoveV") - core.addApiFunctionByName("SetMouseCursor") + ignore("LoadImagePalette") + ignore("UnloadImageColors") + ignore("UnloadImagePalette") + ignore("GetPixelColor") + ignore("SetPixelColor") - // input-related functions: touch - core.addApiFunctionByName("GetTouchX") - core.addApiFunctionByName("GetTouchY") - core.addApiFunctionByName("GetTouchPosition") - core.addApiFunctionByName("GetTouchPointId") - core.addApiFunctionByName("GetTouchPointCount") + const lfx = getFunction(api.functions, "LoadFontEx")! + lfx.params![2].binding = { ignore: true } + lfx.params![3].binding = { ignore: true } + lfx.binding = { customizeCall: "Font returnVal = LoadFontEx(fileName, fontSize, NULL, 0);" } - // Gesture and touch handling functions - core.addApiFunctionByName("SetGesturesEnabled") - core.addApiFunctionByName("IsGestureDetected") - core.addApiFunctionByName("GetGestureDetected") - core.addApiFunctionByName("GetGestureHoldDuration") - core.addApiFunctionByName("GetGestureDragVector") - core.addApiFunctionByName("GetGestureDragAngle") - core.addApiFunctionByName("GetGesturePinchVector") - core.addApiFunctionByName("GetGesturePinchAngle") - - // Camera system functions - core.addApiFunctionByName("UpdateCamera") - core.addApiFunctionByName("UpdateCameraPro") + ignore("LoadFontFromMemory") + ignore("LoadFontData") + ignore("GenImageFontAtlas") + ignore("UnloadFontData") + ignore("ExportFontAsCode") + ignore("DrawTextCodepoints") + ignore("GetGlyphInfo") + ignore("LoadUTF8") + ignore("UnloadUTF8") + ignore("LoadCodepoints") + ignore("UnloadCodepoints") + ignore("GetCodepointCount") + ignore("GetCodepoint") + ignore("GetCodepointNext") + ignore("GetCodepointPrevious") + ignore("CodepointToUTF8") - //api.functions.forEach(x => console.log(`core.addApiFunctionByName("${x.name}")`)) - - // module: rshapes - core.addApiFunctionByName("SetShapesTexture") - - // Basic shapes drawing functions - core.addApiFunctionByName("DrawPixel") - core.addApiFunctionByName("DrawPixelV") - core.addApiFunctionByName("DrawLine") - core.addApiFunctionByName("DrawLineV") - core.addApiFunctionByName("DrawLineEx") - core.addApiFunctionByName("DrawLineBezier") - core.addApiFunctionByName("DrawLineBezierQuad") - core.addApiFunctionByName("DrawLineBezierCubic") - // core.addApiFunctionByName("DrawLineStrip") - core.addApiFunctionByName("DrawCircle") - core.addApiFunctionByName("DrawCircleSector") - core.addApiFunctionByName("DrawCircleSectorLines") - core.addApiFunctionByName("DrawCircleGradient") - core.addApiFunctionByName("DrawCircleV") - core.addApiFunctionByName("DrawCircleLines") - core.addApiFunctionByName("DrawEllipse") - core.addApiFunctionByName("DrawEllipseLines") - core.addApiFunctionByName("DrawRing") - core.addApiFunctionByName("DrawRingLines") - core.addApiFunctionByName("DrawRectangle") - core.addApiFunctionByName("DrawRectangleV") - core.addApiFunctionByName("DrawRectangleRec") - core.addApiFunctionByName("DrawRectanglePro") - core.addApiFunctionByName("DrawRectangleGradientV") - core.addApiFunctionByName("DrawRectangleGradientH") - core.addApiFunctionByName("DrawRectangleGradientEx") - core.addApiFunctionByName("DrawRectangleLines") - core.addApiFunctionByName("DrawRectangleLinesEx") - core.addApiFunctionByName("DrawRectangleRounded") - core.addApiFunctionByName("DrawRectangleRoundedLines") - core.addApiFunctionByName("DrawTriangle") - core.addApiFunctionByName("DrawTriangleLines") - //core.addApiFunctionByName("DrawTriangleFan") - //core.addApiFunctionByName("DrawTriangleStrip") - core.addApiFunctionByName("DrawPoly") - core.addApiFunctionByName("DrawPolyLines") - core.addApiFunctionByName("DrawPolyLinesEx") - - // Basic shapes collision detection functions - core.addApiFunctionByName("CheckCollisionRecs") - core.addApiFunctionByName("CheckCollisionCircles") - core.addApiFunctionByName("CheckCollisionCircleRec") - core.addApiFunctionByName("CheckCollisionPointRec") - core.addApiFunctionByName("CheckCollisionPointCircle") - core.addApiFunctionByName("CheckCollisionPointTriangle") - // core.addApiFunctionByName("CheckCollisionPointPoly") - // core.addApiFunctionByName("CheckCollisionLines") - core.addApiFunctionByName("CheckCollisionPointLine") - core.addApiFunctionByName("GetCollisionRec") - - // Image loading functions - core.addApiFunctionByName("LoadImage") - core.addApiFunctionByName("LoadImageRaw") - // core.addApiFunctionByName("LoadImageAnim") - core.addApiFunctionByName("LoadImageFromMemory") - core.addApiFunctionByName("LoadImageFromTexture") - core.addApiFunctionByName("LoadImageFromScreen") - core.addApiFunctionByName("IsImageReady") - core.addApiFunctionByName("UnloadImage") - core.addApiFunctionByName("ExportImage") - // needed? - // core.addApiFunctionByName("ExportImageAsCode") - - // Image generation functions - core.addApiFunctionByName("GenImageColor") - core.addApiFunctionByName("GenImageGradientV") - core.addApiFunctionByName("GenImageGradientH") - core.addApiFunctionByName("GenImageGradientRadial") - core.addApiFunctionByName("GenImageChecked") - core.addApiFunctionByName("GenImageWhiteNoise") - core.addApiFunctionByName("GenImagePerlinNoise") - core.addApiFunctionByName("GenImageCellular") - core.addApiFunctionByName("GenImageText") - - // Image manipulations functions - core.addApiFunctionByName("ImageCopy") - core.addApiFunctionByName("ImageFromImage") - core.addApiFunctionByName("ImageText") - core.addApiFunctionByName("ImageTextEx") - core.addApiFunctionByName("ImageFormat") - core.addApiFunctionByName("ImageToPOT") - core.addApiFunctionByName("ImageCrop") - core.addApiFunctionByName("ImageAlphaCrop") - core.addApiFunctionByName("ImageAlphaClear") - core.addApiFunctionByName("ImageAlphaMask") - core.addApiFunctionByName("ImageAlphaPremultiply") - core.addApiFunctionByName("ImageBlurGaussian") - core.addApiFunctionByName("ImageResize") - core.addApiFunctionByName("ImageResizeNN") - core.addApiFunctionByName("ImageResizeCanvas") - core.addApiFunctionByName("ImageMipmaps") - core.addApiFunctionByName("ImageDither") - core.addApiFunctionByName("ImageFlipVertical") - core.addApiFunctionByName("ImageFlipHorizontal") - core.addApiFunctionByName("ImageRotateCW") - core.addApiFunctionByName("ImageRotateCCW") - core.addApiFunctionByName("ImageColorTint") - core.addApiFunctionByName("ImageColorInvert") - core.addApiFunctionByName("ImageColorGrayscale") - core.addApiFunctionByName("ImageColorContrast") - core.addApiFunctionByName("ImageColorBrightness") - core.addApiFunctionByName("ImageColorReplace") - const lic = apiDesc.getFunction("LoadImageColors") - lic.returnType = "unsigned char *" - core.addApiFunction(lic, null, { body: (gen) => { - gen.jsToC("Image","image","argv[0]", core.structLookup) - gen.call("LoadImageColors", ["image"], {name:"colors",type:"Color *"}) - gen.statement("JSValue retVal = JS_NewArrayBufferCopy(ctx, (const uint8_t*)colors, image.width*image.height*sizeof(Color))") - gen.call("UnloadImageColors", ["colors"]) - gen.returnExp("retVal") - }}) - //core.addApiFunctionByName("LoadImagePalette") - //core.addApiFunctionByName("UnloadImageColors") - //core.addApiFunctionByName("UnloadImagePalette") - core.addApiFunctionByName("GetImageAlphaBorder") - core.addApiFunctionByName("GetImageColor") - - // Image drawing functions - core.addApiFunctionByName("ImageClearBackground") - core.addApiFunctionByName("ImageDrawPixel") - core.addApiFunctionByName("ImageDrawPixelV") - core.addApiFunctionByName("ImageDrawLine") - core.addApiFunctionByName("ImageDrawLineV") - core.addApiFunctionByName("ImageDrawCircle") - core.addApiFunctionByName("ImageDrawCircleV") - core.addApiFunctionByName("ImageDrawCircleLines") - core.addApiFunctionByName("ImageDrawCircleLinesV") - core.addApiFunctionByName("ImageDrawRectangle") - core.addApiFunctionByName("ImageDrawRectangleV") - core.addApiFunctionByName("ImageDrawRectangleRec") - core.addApiFunctionByName("ImageDrawRectangleLines") - core.addApiFunctionByName("ImageDraw") - core.addApiFunctionByName("ImageDrawText") - core.addApiFunctionByName("ImageDrawTextEx") - - // Texture loading functions - core.addApiFunctionByName("LoadTexture") - core.addApiFunctionByName("LoadTextureFromImage") - core.addApiFunctionByName("LoadTextureCubemap") - core.addApiFunctionByName("LoadRenderTexture") - core.addApiFunctionByName("IsTextureReady") - core.addApiFunctionByName("UnloadTexture") - core.addApiFunctionByName("IsRenderTextureReady") - core.addApiFunctionByName("UnloadRenderTexture") - core.addApiFunctionByName("UpdateTexture") - core.addApiFunctionByName("UpdateTextureRec") - - // Texture configuration functions - core.addApiFunctionByName("GenTextureMipmaps") - core.addApiFunctionByName("SetTextureFilter") - core.addApiFunctionByName("SetTextureWrap") - - // Texture drawing functions - core.addApiFunctionByName("DrawTexture") - core.addApiFunctionByName("DrawTextureV") - core.addApiFunctionByName("DrawTextureEx") - core.addApiFunctionByName("DrawTextureRec") - core.addApiFunctionByName("DrawTexturePro") - core.addApiFunctionByName("DrawTextureNPatch") - - // Color/pixel related functions - core.addApiFunctionByName("Fade") - core.addApiFunctionByName("ColorToInt") - core.addApiFunctionByName("ColorNormalize") - core.addApiFunctionByName("ColorFromNormalized") - core.addApiFunctionByName("ColorToHSV") - core.addApiFunctionByName("ColorFromHSV") - core.addApiFunctionByName("ColorTint") - core.addApiFunctionByName("ColorBrightness") - core.addApiFunctionByName("ColorContrast") - core.addApiFunctionByName("ColorAlpha") - core.addApiFunctionByName("ColorAlphaBlend") - core.addApiFunctionByName("GetColor") - // core.addApiFunctionByName("GetPixelColor") - // core.addApiFunctionByName("SetPixelColor") - core.addApiFunctionByName("GetPixelDataSize") - - // module: rtext - - // Font loading/unloading - core.addApiFunctionByName("GetFontDefault") - core.addApiFunctionByName("LoadFont") - const lfx = apiDesc.getFunction("LoadFontEx") - lfx?.params!.pop() - lfx?.params!.pop() - core.addApiFunction(lfx!, null, { customizeCall: "Font returnVal = LoadFontEx(fileName, fontSize, NULL, 0);" }) - core.addApiFunctionByName("LoadFontFromImage") - // core.addApiFunctionByName("LoadFontFromMemory") - core.addApiFunctionByName("IsFontReady") - // core.addApiFunctionByName("LoadFontData") - // core.addApiFunctionByName("GenImageFontAtlas") - // core.addApiFunctionByName("UnloadFontData") - core.addApiFunctionByName("UnloadFont") - // core.addApiFunctionByName("ExportFontAsCode") - - // Text drawing functions - core.addApiFunctionByName("DrawFPS") - core.addApiFunctionByName("DrawText") - core.addApiFunctionByName("DrawTextEx") - core.addApiFunctionByName("DrawTextPro") - core.addApiFunctionByName("DrawTextCodepoint") - //core.addApiFunctionByName("DrawTextCodepoints") - - // Text font info functions - core.addApiFunctionByName("MeasureText") - core.addApiFunctionByName("MeasureTextEx") - core.addApiFunctionByName("GetGlyphIndex") - // core.addApiFunctionByName("GetGlyphInfo") - core.addApiFunctionByName("GetGlyphAtlasRec") - - // Text codepoints management functions (unicode characters) - // Is this needed? - // core.addApiFunctionByName("LoadUTF8") - // core.addApiFunctionByName("UnloadUTF8") - // core.addApiFunctionByName("LoadCodepoints") - // core.addApiFunctionByName("UnloadCodepoints") - // core.addApiFunctionByName("GetCodepointCount") - // core.addApiFunctionByName("GetCodepoint") - // core.addApiFunctionByName("GetCodepointNext") - // core.addApiFunctionByName("GetCodepointPrevious") - // core.addApiFunctionByName("CodepointToUTF8") - - // Text strings management functions (no UTF-8 strings, only byte chars) // Not supported, use JS Stdlib instead + api.functions.filter(x => x.name.startsWith("Text")).forEach(x => ignore(x.name)) - // module: rmodels - - // Basic geometric 3D shapes drawing functions - core.addApiFunctionByName("DrawLine3D") - core.addApiFunctionByName("DrawPoint3D") - core.addApiFunctionByName("DrawCircle3D") - core.addApiFunctionByName("DrawTriangle3D") - //core.addApiFunctionByName("DrawTriangleStrip3D") - core.addApiFunctionByName("DrawCube") - core.addApiFunctionByName("DrawCubeV") - core.addApiFunctionByName("DrawCubeWires") - core.addApiFunctionByName("DrawCubeWiresV") - core.addApiFunctionByName("DrawSphere") - core.addApiFunctionByName("DrawSphereEx") - core.addApiFunctionByName("DrawSphereWires") - core.addApiFunctionByName("DrawCylinder") - core.addApiFunctionByName("DrawCylinderEx") - core.addApiFunctionByName("DrawCylinderWires") - core.addApiFunctionByName("DrawCylinderWiresEx") - core.addApiFunctionByName("DrawCapsule") - core.addApiFunctionByName("DrawCapsuleWires") - core.addApiFunctionByName("DrawPlane") - core.addApiFunctionByName("DrawRay") - core.addApiFunctionByName("DrawGrid") - - // model management functions - core.addApiFunctionByName("LoadModel") - core.addApiFunctionByName("LoadModelFromMesh") - core.addApiFunctionByName("IsModelReady") - core.addApiFunctionByName("UnloadModel") - core.addApiFunctionByName("GetModelBoundingBox") - - // model drawing functions - core.addApiFunctionByName("DrawModel") - core.addApiFunctionByName("DrawModelEx") - core.addApiFunctionByName("DrawModelWires") - core.addApiFunctionByName("DrawModelWiresEx") - core.addApiFunctionByName("DrawBoundingBox") - core.addApiFunctionByName("DrawBillboard") - core.addApiFunctionByName("DrawBillboardRec") - core.addApiFunctionByName("DrawBillboardPro") - - // Mesh management functions - core.addApiFunctionByName("UploadMesh") - core.addApiFunctionByName("UpdateMeshBuffer") - core.addApiFunctionByName("UnloadMesh") - core.addApiFunctionByName("DrawMesh") - core.addApiFunctionByName("DrawMeshInstanced") - core.addApiFunctionByName("ExportMesh") - core.addApiFunctionByName("GetMeshBoundingBox") - core.addApiFunctionByName("GenMeshTangents") - - // Mesh generation functions - core.addApiFunctionByName("GenMeshPoly") - core.addApiFunctionByName("GenMeshPlane") - core.addApiFunctionByName("GenMeshCube") - core.addApiFunctionByName("GenMeshSphere") - core.addApiFunctionByName("GenMeshHemiSphere") - core.addApiFunctionByName("GenMeshCylinder") - core.addApiFunctionByName("GenMeshCone") - core.addApiFunctionByName("GenMeshTorus") - core.addApiFunctionByName("GenMeshKnot") - core.addApiFunctionByName("GenMeshHeightmap") - core.addApiFunctionByName("GenMeshCubicmap") - - // Material loading/unloading functions - // core.addApiFunctionByName("LoadMaterials") - core.addApiFunctionByName("LoadMaterialDefault") - core.addApiFunctionByName("IsMaterialReady") - core.addApiFunctionByName("UnloadMaterial") - core.addApiFunctionByName("SetMaterialTexture") - core.addApiFunctionByName("SetModelMaterial") - core.addApiFunctionByName("SetModelMeshMaterial") - - // Model animations loading/unloading functions - // core.addApiFunctionByName("LoadModelAnimations") - // core.addApiFunctionByName("UpdateModelAnimation") - // core.addApiFunctionByName("UnloadModelAnimation") - // core.addApiFunctionByName("UnloadModelAnimations") - // core.addApiFunctionByName("IsModelAnimationValid") - - // Collision detection functions - core.addApiFunctionByName("CheckCollisionSpheres") - core.addApiFunctionByName("CheckCollisionBoxes") - core.addApiFunctionByName("CheckCollisionBoxSphere") - core.addApiFunctionByName("GetRayCollisionSphere") - core.addApiFunctionByName("GetRayCollisionBox") - core.addApiFunctionByName("GetRayCollisionMesh") - core.addApiFunctionByName("GetRayCollisionTriangle") - core.addApiFunctionByName("GetRayCollisionQuad") - - // module: raudio - - // Audio device management functions - core.addApiFunctionByName("InitAudioDevice") - core.addApiFunctionByName("CloseAudioDevice") - core.addApiFunctionByName("IsAudioDeviceReady") - core.addApiFunctionByName("SetMasterVolume") - - // Wave/Sound loading/unloading functions - core.addApiFunctionByName("LoadWave") - core.addApiFunctionByName("LoadWaveFromMemory") - core.addApiFunctionByName("IsWaveReady") - core.addApiFunctionByName("LoadSound") - core.addApiFunctionByName("LoadSoundFromWave") - core.addApiFunctionByName("IsSoundReady") - core.addApiFunctionByName("UpdateSound") - core.addApiFunctionByName("UnloadWave") - core.addApiFunctionByName("UnloadSound") - core.addApiFunctionByName("ExportWave") - // core.addApiFunctionByName("ExportWaveAsCode") + ignore("DrawTriangleStrip3D") + ignore("LoadMaterials") + ignore("LoadModelAnimations") + ignore("UpdateModelAnimation") + ignore("UnloadModelAnimation") + ignore("UnloadModelAnimations") + ignore("IsModelAnimationValid") + ignore("ExportWaveAsCode") // Wave/Sound management functions - core.addApiFunctionByName("PlaySound") - core.addApiFunctionByName("StopSound") - core.addApiFunctionByName("PauseSound") - core.addApiFunctionByName("ResumeSound") - core.addApiFunctionByName("IsSoundPlaying") - core.addApiFunctionByName("SetSoundVolume") - core.addApiFunctionByName("SetSoundPitch") - core.addApiFunctionByName("SetSoundPan") - core.addApiFunctionByName("WaveCopy") - core.addApiFunctionByName("WaveCrop") - core.addApiFunctionByName("WaveFormat") - // core.addApiFunctionByName("LoadWaveSamples") - // core.addApiFunctionByName("UnloadWaveSamples") + ignore("LoadWaveSamples") + ignore("UnloadWaveSamples") + ignore("LoadMusicStreamFromMemory") + ignore("LoadAudioStream") + ignore("IsAudioStreamReady") + ignore("UnloadAudioStream") + ignore("UpdateAudioStream") + ignore("IsAudioStreamProcessed") + ignore("PlayAudioStream") + ignore("PauseAudioStream") + ignore("ResumeAudioStream") + ignore("IsAudioStreamPlaying") + ignore("StopAudioStream") + ignore("SetAudioStreamVolume") + ignore("SetAudioStreamPitch") + ignore("SetAudioStreamPan") + ignore("SetAudioStreamBufferSizeDefault") + ignore("SetAudioStreamCallback") + ignore("AttachAudioStreamProcessor") + ignore("DetachAudioStreamProcessor") + ignore("AttachAudioMixedProcessor") + ignore("DetachAudioMixedProcessor") - // Music management functions - core.addApiFunctionByName("LoadMusicStream") - // core.addApiFunctionByName("LoadMusicStreamFromMemory") - core.addApiFunctionByName("IsMusicReady") - core.addApiFunctionByName("UnloadMusicStream") - core.addApiFunctionByName("PlayMusicStream") - core.addApiFunctionByName("IsMusicStreamPlaying") - core.addApiFunctionByName("UpdateMusicStream") - core.addApiFunctionByName("StopMusicStream") - core.addApiFunctionByName("PauseMusicStream") - core.addApiFunctionByName("ResumeMusicStream") - core.addApiFunctionByName("SeekMusicStream") - core.addApiFunctionByName("SetMusicVolume") - core.addApiFunctionByName("SetMusicPitch") - core.addApiFunctionByName("SetMusicPan") - core.addApiFunctionByName("GetMusicTimeLength") - core.addApiFunctionByName("GetMusicTimePlayed") - - // AudioStream management functions - // core.addApiFunctionByName("LoadAudioStream") - // core.addApiFunctionByName("IsAudioStreamReady") - // core.addApiFunctionByName("UnloadAudioStream") - // core.addApiFunctionByName("UpdateAudioStream") - // core.addApiFunctionByName("IsAudioStreamProcessed") - // core.addApiFunctionByName("PlayAudioStream") - // core.addApiFunctionByName("PauseAudioStream") - // core.addApiFunctionByName("ResumeAudioStream") - // core.addApiFunctionByName("IsAudioStreamPlaying") - // core.addApiFunctionByName("StopAudioStream") - // core.addApiFunctionByName("SetAudioStreamVolume") - // core.addApiFunctionByName("SetAudioStreamPitch") - // core.addApiFunctionByName("SetAudioStreamPan") - // core.addApiFunctionByName("SetAudioStreamBufferSizeDefault") - // core.addApiFunctionByName("SetAudioStreamCallback") - - // core.addApiFunctionByName("AttachAudioStreamProcessor") - // core.addApiFunctionByName("DetachAudioStreamProcessor") - - // core.addApiFunctionByName("AttachAudioMixedProcessor") - // core.addApiFunctionByName("DetachAudioMixedProcessor") - - // module: raymath - - 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") + ignore("Vector3OrthoNormalize") + ignore("Vector3ToFloatV") + ignore("MatrixToFloatV") + ignore("QuaternionToAxisAngle") core.exportGlobalConstant("DEG2RAD", "(PI/180.0)") core.exportGlobalConstant("RAD2DEG", "(180.0/PI)") - // module: rcamera - core.addApiFunctionByName("GetCameraForward") - core.addApiFunctionByName("GetCameraUp") - core.addApiFunctionByName("GetCameraRight") - core.addApiFunctionByName("CameraMoveForward") - core.addApiFunctionByName("CameraMoveUp") - core.addApiFunctionByName("CameraMoveRight") - core.addApiFunctionByName("CameraMoveToTarget") - core.addApiFunctionByName("CameraYaw") - core.addApiFunctionByName("CameraPitch") - core.addApiFunctionByName("CameraRoll") - core.addApiFunctionByName("GetCameraViewMatrix") - core.addApiFunctionByName("GetCameraProjectionMatrix") - - // module: rgui - core.addApiFunctionByName("GuiEnable") - core.addApiFunctionByName("GuiDisable") - core.addApiFunctionByName("GuiLock") - core.addApiFunctionByName("GuiUnlock") - core.addApiFunctionByName("GuiIsLocked") - core.addApiFunctionByName("GuiFade") - core.addApiFunctionByName("GuiSetState") - core.addApiFunctionByName("GuiGetState") - core.addApiFunctionByName("GuiSetFont") - core.addApiFunctionByName("GuiGetFont") - core.addApiFunctionByName("GuiSetStyle") - core.addApiFunctionByName("GuiGetStyle") - core.addApiFunctionByName("GuiWindowBox") - core.addApiFunctionByName("GuiGroupBox") - core.addApiFunctionByName("GuiLine") - core.addApiFunctionByName("GuiPanel") - core.addApiFunctionByName("GuiScrollPanel") - core.addApiFunctionByName("GuiLabel") - core.addApiFunctionByName("GuiButton") - core.addApiFunctionByName("GuiLabelButton") - core.addApiFunctionByName("GuiToggle") - core.addApiFunctionByName("GuiToggleGroup") - core.addApiFunctionByName("GuiCheckBox") - core.addApiFunctionByName("GuiComboBox") - //core.addApiFunctionByName("GuiDropdownBox") - //core.addApiFunctionByName("GuiSpinner") - //core.addApiFunctionByName("GuiValueBox") - core.addApiFunctionByName("GuiTextBox") - //core.addApiFunctionByName("GuiTextBoxMulti") - core.addApiFunctionByName("GuiSlider") - core.addApiFunctionByName("GuiSliderBar") - core.addApiFunctionByName("GuiProgressBar") - core.addApiFunctionByName("GuiStatusBar") - core.addApiFunctionByName("GuiDummyRec") - core.addApiFunctionByName("GuiGrid") - //core.addApiFunctionByName("GuiListView") - //core.addApiFunctionByName("GuiListViewEx") - core.addApiFunctionByName("GuiMessageBox") - //core.addApiFunctionByName("GuiTextInputBox") - core.addApiFunctionByName("GuiColorPicker") - core.addApiFunctionByName("GuiColorPanel") - core.addApiFunctionByName("GuiColorBarAlpha") - core.addApiFunctionByName("GuiColorBarHue") - core.addApiFunctionByName("GuiLoadStyle") - core.addApiFunctionByName("GuiLoadStyleDefault") - core.addApiFunctionByName("GuiIconText") - core.addApiFunctionByName("GuiDrawIcon") - //core.addApiFunctionByName("GuiGetIcons") - //core.addApiFunctionByName("GuiGetIconData") - //core.addApiFunctionByName("GuiSetIconData") - core.addApiFunctionByName("GuiSetIconScale") - - // module: rlights + ignore("GuiDropdownBox") + ignore("GuiSpinner") + ignore("GuiValueBox") + ignore("GuiListView") + ignore("GuiListViewEx") + ignore("GuiTextInputBox") + ignore("GuiGetIcons") + ignore("GuiTabBar") + ignore("GuiLoadIcons") // TODO: Parse and support light struct - // core.addApiFunctionByName("CreateLight") - // core.addApiFunctionByName("UpdateLightValues") - - // module: reasings - core.addApiFunctionByName("EaseLinearNone") - core.addApiFunctionByName("EaseLinearIn") - core.addApiFunctionByName("EaseLinearOut") - core.addApiFunctionByName("EaseLinearInOut") - core.addApiFunctionByName("EaseSineIn") - core.addApiFunctionByName("EaseSineOut") - core.addApiFunctionByName("EaseSineInOut") - core.addApiFunctionByName("EaseCircIn") - core.addApiFunctionByName("EaseCircOut") - core.addApiFunctionByName("EaseCircInOut") - core.addApiFunctionByName("EaseCubicIn") - core.addApiFunctionByName("EaseCubicOut") - core.addApiFunctionByName("EaseCubicInOut") - core.addApiFunctionByName("EaseQuadIn") - core.addApiFunctionByName("EaseQuadOut") - core.addApiFunctionByName("EaseQuadInOut") - core.addApiFunctionByName("EaseExpoIn") - core.addApiFunctionByName("EaseExpoOut") - core.addApiFunctionByName("EaseExpoInOut") - core.addApiFunctionByName("EaseBackIn") - core.addApiFunctionByName("EaseBounceOut") - core.addApiFunctionByName("EaseBounceInOut") - core.addApiFunctionByName("EaseElasticIn") + ignore("CreateLight") + ignore("UpdateLightValues") + api.structs.forEach(x => core.addApiStruct(x)) + api.functions.forEach(x => core.addApiFunction(x)) 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) }) - - core.addAllEnums() - // api.enums.find(x => x.name === "KeyboardKey")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "MouseButton")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "ConfigFlags")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "BlendMode")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "TraceLogLevel")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "MouseCursor")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "PixelFormat")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "CameraProjection")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "CameraMode")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "ShaderLocationIndex")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "ShaderUniformDataType")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "MaterialMapIndex")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) + api.enums.forEach(x => core.addEnum(x)) core.exportGlobalConstant("MATERIAL_MAP_DIFFUSE", "Albedo material (same as: MATERIAL_MAP_DIFFUSE") core.exportGlobalConstant("MATERIAL_MAP_SPECULAR", "Metalness material (same as: MATERIAL_MAP_SPECULAR)") core.writeTo("src/bindings/js_raylib_core.h") core.typings.writeTo("examples/lib.raylib.d.ts") + const ignored = api.functions.filter(x => x.binding?.ignore).length + console.log(`Converted ${api.functions.length-ignored} function. ${ignored} ignored`) + console.log("Success!") } main() diff --git a/bindings/src/interfaces.ts b/bindings/src/interfaces.ts index 292b5d5..4b116c8 100644 --- a/bindings/src/interfaces.ts +++ b/bindings/src/interfaces.ts @@ -15,6 +15,11 @@ export interface FuncBindingOptions { customizeCall?: string, body?: (gen: QuickJsGenerator) => void, jsName?: string, + ignore?: boolean, + jsReturns?: string +} + +export interface ParamBindingOptions { ignore?: boolean } @@ -54,7 +59,8 @@ export interface RayLibEnum { export interface RayLibParamDescription { type: RayLibType | string, - name: string + name: string, + binding?: ParamBindingOptions } export interface RayLibFunction { diff --git a/bindings/src/raylib-header.ts b/bindings/src/raylib-header.ts index ca6c725..3a77ee5 100644 --- a/bindings/src/raylib-header.ts +++ b/bindings/src/raylib-header.ts @@ -22,6 +22,7 @@ export class RayLibHeader extends QuickJsHeader { if(options.ignore) return const jName = options.jsName || api.name.charAt(0).toLowerCase() + api.name.slice(1) + console.log("Binding function "+api.name) const fun = this.functions.jsBindingFunction(jName) if(options.body) { @@ -31,6 +32,7 @@ export class RayLibHeader extends QuickJsHeader { // read parameters api.params = api.params || [] for (let i = 0; i < api.params.length; i++) { + if(api.params[i]?.binding?.ignore) continue; const para = api.params[i] fun.jsToC(para.type,para.name,"argv["+i+"]", this.structLookup) } @@ -53,16 +55,18 @@ export class RayLibHeader extends QuickJsHeader { } // add binding to function declaration - this.moduleFunctionList.jsFuncDef(jName, api.params?.length ?? 0, fun.getTag("_name")) + this.moduleFunctionList.jsFuncDef(jName, (api.params || []).filter(x => !x.binding?.ignore).length, fun.getTag("_name")) this.typings.addFunction(jName,api) } addEnum(renum: RayLibEnum){ + console.log("Binding enum "+ renum.name) renum.values.forEach(x => this.exportGlobalConstant(x.name, x.description)) } addApiStruct(struct: RayLibStruct){ const options = struct.binding || {} + console.log("Binding struct "+ struct.name) const classId = this.definitions.jsClassId(`js_${struct.name}_class_id`) this.registerStruct(struct.name, classId) options.aliases?.forEach(x => this.registerStruct(x, classId)) @@ -97,7 +101,7 @@ export class RayLibHeader extends QuickJsHeader { this.moduleEntry.call("JS_AddModuleExport", ["ctx","m",'"'+struct.name+'"']) } - this.typings.addStruct(struct, options || {}) + this.typings.addStruct(struct) } exportGlobalStruct(structName: string, exportName: string, values: string[], description: string){ diff --git a/bindings/src/typescript.ts b/bindings/src/typescript.ts index f499b6f..05e34c0 100644 --- a/bindings/src/typescript.ts +++ b/bindings/src/typescript.ts @@ -1,7 +1,6 @@ -import { ApiFunction, ApiStruct } from "./api"; import { GenericCodeGenerator, FunctionArgument, CodeWriter } from "./generation" import { writeFileSync } from "fs"; -import { StructBindingOptions } from "./raylib-header"; +import { RayLibFunction, RayLibStruct } from "./interfaces"; export class TypeScriptDeclaration { root = new TypescriptGenerator() @@ -17,13 +16,15 @@ export class TypeScriptDeclaration { - addFunction(name: string, api: ApiFunction){ - const para = api.params.map(x => ({ name: x.name, type: this.toJsType(x.type)})) - const returnType = this.toJsType(api.returnType) + addFunction(name: string, api: RayLibFunction){ + const options = api.binding || {} + const para = (api.params || []).filter(x => !x.binding?.ignore).map(x => ({ name: x.name, type: this.toJsType(x.type)})) + const returnType = options.jsReturns ?? this.toJsType(api.returnType) this.functions.tsDeclareFunction(name, para, returnType, api.description) } - addStruct(api: ApiStruct, options: StructBindingOptions){ + addStruct(api: RayLibStruct){ + const options = api.binding || {} var fields = api.fields.filter(x => !!(options.properties || {})[x.name]).map(x => ({name: x.name, description: x.description, type: this.toJsType(x.type)})) this.structs.tsDeclareInterface(api.name, fields) this.structs.tsDeclareType(api.name, !!(options.createConstructor || options.createEmptyConstructor), options.createEmptyConstructor ? [] : fields) diff --git a/examples/lib.raylib.d.ts b/examples/lib.raylib.d.ts index 3d17b21..da35b7f 100644 --- a/examples/lib.raylib.d.ts +++ b/examples/lib.raylib.d.ts @@ -1,31 +1,3 @@ -interface Color { - /** Color red value */ - r: number, - /** Color green value */ - g: number, - /** Color blue value */ - b: number, - /** Color alpha value */ - a: number, -} -declare var Color: { - prototype: Color; - new(r: number, g: number, b: number, a: number): Color; -} -interface Rectangle { - /** Rectangle top-left corner position x */ - x: number, - /** Rectangle top-left corner position y */ - y: number, - /** Rectangle width */ - width: number, - /** Rectangle height */ - height: number, -} -declare var Rectangle: { - prototype: Rectangle; - new(x: number, y: number, width: number, height: number): Rectangle; -} interface Vector2 { /** Vector x component */ x: number, @@ -62,74 +34,72 @@ declare var Vector4: { prototype: Vector4; new(x: number, y: number, z: number, w: number): Vector4; } -interface Ray { - /** Ray position (origin) */ - position: Vector3, - /** Ray direction */ - direction: Vector3, -} -declare var Ray: { - prototype: Ray; - new(position: Vector3, direction: Vector3): Ray; -} -interface RayCollision { - /** Did the ray hit something? */ - hit: boolean, - /** Distance to the nearest hit */ - distance: number, - /** Point of the nearest hit */ - point: Vector3, - /** Surface normal of hit */ - normal: Vector3, -} -declare var RayCollision: { - prototype: RayCollision; -} -interface Camera2D { - /** Camera offset (displacement from target) */ - offset: Vector2, - /** Camera target (rotation and zoom origin) */ - target: Vector2, - /** Camera rotation in degrees */ - rotation: number, - /** Camera zoom (scaling), should be 1.0f by default */ - zoom: number, -} -declare var Camera2D: { - prototype: Camera2D; - new(offset: Vector2, target: Vector2, rotation: number, zoom: number): Camera2D; -} -interface Camera3D { - /** Camera position */ - position: Vector3, - /** Camera target it looks-at */ - target: Vector3, - /** Camera up vector (rotation over its axis) */ - up: Vector3, - /** Camera field-of-view aperture in Y (degrees) in perspective, used as near plane width in orthographic */ - fovy: number, - /** Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC */ - projection: number, -} -declare var Camera3D: { - prototype: Camera3D; - new(position: Vector3, target: Vector3, up: Vector3, fovy: number, projection: number): Camera3D; -} -interface BoundingBox { - /** Minimum vertex box-corner */ - min: Vector3, - /** Maximum vertex box-corner */ - max: Vector3, -} -declare var BoundingBox: { - prototype: BoundingBox; - new(min: Vector3, max: Vector3): BoundingBox; -} interface Matrix { } declare var Matrix: { prototype: Matrix; } +interface Color { + /** Color red value */ + r: number, + /** Color green value */ + g: number, + /** Color blue value */ + b: number, + /** Color alpha value */ + a: number, +} +declare var Color: { + prototype: Color; + new(r: number, g: number, b: number, a: number): Color; +} +interface Rectangle { + /** Rectangle top-left corner position x */ + x: number, + /** Rectangle top-left corner position y */ + y: number, + /** Rectangle width */ + width: number, + /** Rectangle height */ + height: number, +} +declare var Rectangle: { + prototype: Rectangle; + new(x: number, y: number, width: number, height: number): Rectangle; +} +interface Image { + /** Image base width */ + width: number, + /** Image base height */ + height: number, + /** Mipmap levels, 1 by default */ + mipmaps: number, + /** Data format (PixelFormat type) */ + format: number, +} +declare var Image: { + prototype: Image; +} +interface Texture { + /** Texture base width */ + width: number, + /** Texture base height */ + height: number, + /** Mipmap levels, 1 by default */ + mipmaps: number, + /** Data format (PixelFormat type) */ + format: number, +} +declare var Texture: { + prototype: Texture; +} +interface RenderTexture { + /** OpenGL framebuffer object id */ + id: number, +} +declare var RenderTexture: { + prototype: RenderTexture; +} interface NPatchInfo { /** Texture source rectangle */ source: Rectangle, @@ -148,62 +118,51 @@ declare var NPatchInfo: { prototype: NPatchInfo; new(source: Rectangle, left: number, top: number, right: number, bottom: number, layout: number): NPatchInfo; } -interface Image { - /** Image base width */ - width: number, - /** Image base height */ - height: number, - /** Mipmap levels, 1 by default */ - mipmaps: number, - /** Data format (PixelFormat type) */ - format: number, +interface GlyphInfo { } -declare var Image: { - prototype: Image; +declare var GlyphInfo: { + prototype: GlyphInfo; } -interface Wave { - /** Total number of frames (considering channels) */ - frameCount: number, - /** Frequency (samples per second) */ - sampleRate: number, - /** Bit depth (bits per sample): 8, 16, 32 (24 not supported) */ - sampleSize: number, - /** Number of channels (1-mono, 2-stereo, ...) */ - channels: number, +interface Font { + /** Base size (default chars height) */ + baseSize: number, + /** Number of glyph characters */ + glyphCount: number, + /** Padding around the glyph characters */ + glyphPadding: number, } -declare var Wave: { - prototype: Wave; +declare var Font: { + prototype: Font; } -interface Sound { - /** Total number of frames (considering channels) */ - frameCount: number, +interface Camera3D { + /** Camera position */ + position: Vector3, + /** Camera target it looks-at */ + target: Vector3, + /** Camera up vector (rotation over its axis) */ + up: Vector3, + /** Camera field-of-view aperture in Y (degrees) in perspective, used as near plane width in orthographic */ + fovy: number, + /** Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC */ + projection: number, } -declare var Sound: { - prototype: Sound; +declare var Camera3D: { + prototype: Camera3D; + new(position: Vector3, target: Vector3, up: Vector3, fovy: number, projection: number): Camera3D; } -interface Music { - /** Total number of frames (considering channels) */ - frameCount: number, - /** Music looping enable */ - looping: boolean, - /** Type of music context (audio filetype) */ - ctxType: number, +interface Camera2D { + /** Camera offset (displacement from target) */ + offset: Vector2, + /** Camera target (rotation and zoom origin) */ + target: Vector2, + /** Camera rotation in degrees */ + rotation: number, + /** Camera zoom (scaling), should be 1.0f by default */ + zoom: number, } -declare var Music: { - prototype: Music; -} -interface Model { - /** Local transform matrix */ - transform: Matrix, - /** Number of meshes */ - meshCount: number, - /** Number of materials */ - materialCount: number, - /** Number of bones */ - boneCount: number, -} -declare var Model: { - prototype: Model; +declare var Camera2D: { + prototype: Camera2D; + new(offset: Vector2, target: Vector2, rotation: number, zoom: number): Camera2D; } interface Mesh { /** Number of vertices stored in arrays */ @@ -244,37 +203,6 @@ interface Shader { declare var Shader: { prototype: Shader; } -interface Texture { - /** Texture base width */ - width: number, - /** Texture base height */ - height: number, - /** Mipmap levels, 1 by default */ - mipmaps: number, - /** Data format (PixelFormat type) */ - format: number, -} -declare var Texture: { - prototype: Texture; -} -interface Font { - /** Base size (default chars height) */ - baseSize: number, - /** Number of glyph characters */ - glyphCount: number, - /** Padding around the glyph characters */ - glyphPadding: number, -} -declare var Font: { - prototype: Font; -} -interface RenderTexture { - /** OpenGL framebuffer object id */ - id: number, -} -declare var RenderTexture: { - prototype: RenderTexture; -} interface MaterialMap { /** Material map texture */ texture: Texture, @@ -293,6 +221,118 @@ interface Material { declare var Material: { prototype: Material; } +interface Transform { +} +declare var Transform: { + prototype: Transform; +} +interface BoneInfo { +} +declare var BoneInfo: { + prototype: BoneInfo; +} +interface Model { + /** Local transform matrix */ + transform: Matrix, + /** Number of meshes */ + meshCount: number, + /** Number of materials */ + materialCount: number, + /** Number of bones */ + boneCount: number, +} +declare var Model: { + prototype: Model; +} +interface ModelAnimation { +} +declare var ModelAnimation: { + prototype: ModelAnimation; +} +interface Ray { + /** Ray position (origin) */ + position: Vector3, + /** Ray direction */ + direction: Vector3, +} +declare var Ray: { + prototype: Ray; + new(position: Vector3, direction: Vector3): Ray; +} +interface RayCollision { + /** Did the ray hit something? */ + hit: boolean, + /** Distance to the nearest hit */ + distance: number, + /** Point of the nearest hit */ + point: Vector3, + /** Surface normal of hit */ + normal: Vector3, +} +declare var RayCollision: { + prototype: RayCollision; +} +interface BoundingBox { + /** Minimum vertex box-corner */ + min: Vector3, + /** Maximum vertex box-corner */ + max: Vector3, +} +declare var BoundingBox: { + prototype: BoundingBox; + new(min: Vector3, max: Vector3): BoundingBox; +} +interface Wave { + /** Total number of frames (considering channels) */ + frameCount: number, + /** Frequency (samples per second) */ + sampleRate: number, + /** Bit depth (bits per sample): 8, 16, 32 (24 not supported) */ + sampleSize: number, + /** Number of channels (1-mono, 2-stereo, ...) */ + channels: number, +} +declare var Wave: { + prototype: Wave; +} +interface AudioStream { +} +declare var AudioStream: { + prototype: AudioStream; +} +interface Sound { + /** Total number of frames (considering channels) */ + frameCount: number, +} +declare var Sound: { + prototype: Sound; +} +interface Music { + /** Total number of frames (considering channels) */ + frameCount: number, + /** Music looping enable */ + looping: boolean, + /** Type of music context (audio filetype) */ + ctxType: number, +} +declare var Music: { + prototype: Music; +} +interface VrDeviceInfo { +} +declare var VrDeviceInfo: { + prototype: VrDeviceInfo; +} +interface VrStereoConfig { +} +declare var VrStereoConfig: { + prototype: VrStereoConfig; +} +interface FilePathList { +} +declare var FilePathList: { + prototype: FilePathList; +} /** Initialize window and OpenGL context */ declare function initWindow(width: number, height: number, title: string): void; /** Check if KEY_ESCAPE pressed or Close icon pressed */ @@ -509,6 +549,10 @@ declare function getApplicationDirectory(): string; declare function changeDirectory(dir: string): boolean; /** Check if a given path is a file or a directory */ declare function isPathFile(path: string): boolean; +/** Load directory filepaths */ +declare function loadDirectoryFiles(dirPath: string): string[]; +/** Load directory filepaths with extension filtering and recursive directory scan */ +declare function loadDirectoryFilesEx(basePath: string, filter: string, scanSubdirs: boolean): string[]; /** Check if a file has been dropped into window */ declare function isFileDropped(): boolean; /** Load dropped filepaths */ @@ -1025,8 +1069,6 @@ declare function isMaterialReady(material: Material): boolean; declare function unloadMaterial(material: Material): void; /** Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...) */ declare function setMaterialTexture(material: Material, mapType: number, texture: Texture): void; -/** Replace material in slot materialIndex */ -declare function setModelMaterial(model: Model, materialIndex: number, material: Material): void; /** Set material for a mesh */ declare function setModelMeshMaterial(model: Model, meshId: number, materialId: number): void; /** Check collision between two spheres */ @@ -1464,12 +1506,18 @@ declare function guiColorBarHue(bounds: Rectangle, text: string, value: number): declare function guiLoadStyle(fileName: string): void; /** Load style default over global style */ declare function guiLoadStyleDefault(): void; +/** Enable gui tooltips (global state) */ +declare function guiEnableTooltip(): void; +/** Disable gui tooltips (global state) */ +declare function guiDisableTooltip(): void; +/** Set tooltip string */ +declare function guiSetTooltip(tooltip: string): void; /** Get text with icon id prepended (if supported) */ declare function guiIconText(iconId: number, text: string): string; -/** Draw icon using pixel size at specified position */ -declare function guiDrawIcon(iconId: number, posX: number, posY: number, pixelSize: number, color: Color): void; /** Set default icon drawing size */ declare function guiSetIconScale(scale: number): void; +/** Draw icon using pixel size at specified position */ +declare function guiDrawIcon(iconId: number, posX: number, posY: number, pixelSize: number, color: Color): void; /** Linear Easing functions */ declare function easeLinearNone(t: number, b: number, c: number, d: number): number; /** Ease: Linear */ @@ -1516,6 +1564,8 @@ declare function easeBounceOut(t: number, b: number, c: number, d: number): numb declare function easeBounceInOut(t: number, b: number, c: number, d: number): number; /** Elastic Easing functions */ declare function easeElasticIn(t: number, b: number, c: number, d: number): number; +/** Replace material in slot materialIndex */ +declare function setModelMaterial(model: Model, materialIndex: number, material: Material): void; /** (PI/180.0) */ declare var DEG2RAD: number; /** (180.0/PI) */ diff --git a/generate-bindings.js b/generate-bindings.js index d47165a..ec6eec6 100644 --- a/generate-bindings.js +++ b/generate-bindings.js @@ -651,6 +651,7 @@ class RayLibHeader extends quickjs_1.QuickJsHeader { if (options.ignore) return; const jName = options.jsName || api.name.charAt(0).toLowerCase() + api.name.slice(1); + console.log("Binding function " + api.name); const fun = this.functions.jsBindingFunction(jName); if (options.body) { options.body(fun); @@ -661,6 +662,8 @@ class RayLibHeader extends quickjs_1.QuickJsHeader { // read parameters api.params = api.params || []; for (let i = 0; i < api.params.length; i++) { + if (api.params[i]?.binding?.ignore) + continue; const para = api.params[i]; fun.jsToC(para.type, para.name, "argv[" + i + "]", this.structLookup); } @@ -687,14 +690,16 @@ class RayLibHeader extends quickjs_1.QuickJsHeader { } } // add binding to function declaration - this.moduleFunctionList.jsFuncDef(jName, api.params?.length ?? 0, fun.getTag("_name")); + this.moduleFunctionList.jsFuncDef(jName, (api.params || []).filter(x => !x.binding?.ignore).length, fun.getTag("_name")); this.typings.addFunction(jName, api); } addEnum(renum) { + console.log("Binding enum " + renum.name); renum.values.forEach(x => this.exportGlobalConstant(x.name, x.description)); } addApiStruct(struct) { const options = struct.binding || {}; + console.log("Binding struct " + struct.name); const classId = this.definitions.jsClassId(`js_${struct.name}_class_id`); this.registerStruct(struct.name, classId); options.aliases?.forEach(x => this.registerStruct(x, classId)); @@ -726,7 +731,7 @@ class RayLibHeader extends quickjs_1.QuickJsHeader { this.moduleInit.call("JS_SetModuleExport", ["ctx", "m", `"${struct.name}"`, struct.name + "_constr"]); this.moduleEntry.call("JS_AddModuleExport", ["ctx", "m", '"' + struct.name + '"']); } - this.typings.addStruct(struct, options || {}); + this.typings.addStruct(struct); } exportGlobalStruct(structName, exportName, values, description) { this.moduleInit.declareStruct(structName, exportName + "_struct", values); @@ -768,11 +773,13 @@ class TypeScriptDeclaration { this.constants = this.root.child(); } addFunction(name, api) { - const para = api.params.map(x => ({ name: x.name, type: this.toJsType(x.type) })); - const returnType = this.toJsType(api.returnType); + const options = api.binding || {}; + const para = (api.params || []).filter(x => !x.binding?.ignore).map(x => ({ name: x.name, type: this.toJsType(x.type) })); + const returnType = options.jsReturns ?? this.toJsType(api.returnType); this.functions.tsDeclareFunction(name, para, returnType, api.description); } - addStruct(api, options) { + addStruct(api) { + const options = api.binding || {}; var fields = api.fields.filter(x => !!(options.properties || {})[x.name]).map(x => ({ name: x.name, description: x.description, type: this.toJsType(x.type) })); this.structs.tsDeclareInterface(api.name, fields); this.structs.tsDeclareType(api.name, !!(options.createConstructor || options.createEmptyConstructor), options.createEmptyConstructor ? [] : fields); @@ -915,6 +922,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); const fs_1 = __webpack_require__(/*! fs */ "fs"); const raylib_header_1 = __webpack_require__(/*! ./raylib-header */ "./src/raylib-header.ts"); const header_parser_1 = __webpack_require__(/*! ./header-parser */ "./src/header-parser.ts"); +let api; function getFunction(funList, name) { return funList.find(x => x.name === name); } @@ -924,9 +932,12 @@ function getStruct(strList, name) { function getAliases(aliasList, name) { return aliasList.filter(x => x.type === name).map(x => x.name); } +function ignore(name) { + getFunction(api.functions, name).binding = { ignore: true }; +} function main() { // Load the pre-generated raylib api - const api = JSON.parse((0, fs_1.readFileSync)("thirdparty/raylib/parser/output/raylib_api.json", 'utf8')); + api = JSON.parse((0, fs_1.readFileSync)("thirdparty/raylib/parser/output/raylib_api.json", 'utf8')); const parser = new header_parser_1.HeaderParser(); const rmathHeader = (0, fs_1.readFileSync)("thirdparty/raylib/src/raymath.h", "utf8"); const mathApi = parser.parseFunctions(rmathHeader); @@ -1171,17 +1182,17 @@ function main() { }, //destructor: "UnloadMaterial" }; - getFunction(api.functions, "SetWindowIcons").binding = { ignore: true }; - getFunction(api.functions, "GetWindowHandle").binding = { ignore: true }; + ignore("SetWindowIcons"); + ignore("GetWindowHandle"); // Custom frame control functions // NOT SUPPORTED BECAUSE NEEDS COMPILER FLAG - getFunction(api.functions, "SwapScreenBuffer").binding = { ignore: true }; - getFunction(api.functions, "PollInputEvents").binding = { ignore: true }; - getFunction(api.functions, "WaitTime").binding = { ignore: true }; - getFunction(api.functions, "BeginVrStereoMode").binding = { ignore: true }; - getFunction(api.functions, "EndVrStereoMode").binding = { ignore: true }; - getFunction(api.functions, "LoadVrStereoConfig").binding = { ignore: true }; - getFunction(api.functions, "UnloadVrStereoConfig").binding = { ignore: true }; + ignore("SwapScreenBuffer"); + ignore("PollInputEvents"); + ignore("WaitTime"); + ignore("BeginVrStereoMode"); + ignore("EndVrStereoMode"); + ignore("LoadVrStereoConfig"); + ignore("UnloadVrStereoConfig"); getFunction(api.functions, "SetShaderValue").binding = { body: (gen) => { gen.jsToC("Shader", "shader", "argv[0]", core.structLookup); gen.jsToC("int", "locIndex", "argv[1]", core.structLookup); @@ -1210,20 +1221,24 @@ function main() { gen.call("SetShaderValue", ["shader", "locIndex", "value", "uniformType"]); gen.returnExp("JS_UNDEFINED"); } }; - getFunction(api.functions, "SetShaderValueV").binding = { ignore: true }; - const traceLog = apiDesc.getFunction("TraceLog"); - if (!traceLog) - throw new Error("TraceLog not found"); - traceLog.params.pop(); - core.addApiFunction(traceLog); - core.addApiFunctionByName("SetTraceLogLevel"); - // Memory functions not supported on JS - core.addApiFunctionByName("OpenURL"); + ignore("SetShaderValueV"); + const traceLog = getFunction(api.functions, "TraceLog"); + traceLog.params?.pop(); + // Memory functions not supported on JS, just use ArrayBuffer + ignore("MemAlloc"); + ignore("MemRealloc"); + ignore("MemFree"); // Callbacks not supported on JS + ignore("SetTraceLogCallback"); + ignore("SetLoadFileDataCallback"); + ignore("SetSaveFileDataCallback"); + ignore("SetLoadFileTextCallback"); + ignore("SetSaveFileTextCallback"); // Files management functions - const lfd = apiDesc.getFunction("LoadFileData"); - lfd?.params.pop(); - core.addApiFunctionByName("LoadFileData", null, { body: gen => { + const lfd = getFunction(api.functions, "LoadFileData"); + lfd.params[lfd.params.length - 1].binding = { ignore: true }; + lfd.binding = { + body: gen => { gen.jsToC("const char *", "fileName", "argv[0]"); gen.declare("bytesRead", "unsigned int"); gen.call("LoadFileData", ["fileName", "&bytesRead"], { type: "unsigned char *", name: "retVal" }); @@ -1231,694 +1246,162 @@ function main() { gen.call("UnloadFileData", ["retVal"]); gen.jsCleanUpParameter("const char*", "fileName"); gen.returnExp("buffer"); - } }); - //UnloadLoadFileData not needed, data is copied - // TODO: Works but unnecessary makes copy of memory - core.addApiFunctionByName("SaveFileData"); - // Export data as code not needed - core.addApiFunctionByName("LoadFileText", null, { after: gen => gen.call("UnloadFileText", ["returnVal"]) }); - core.addApiFunctionByName("SaveFileText"); - core.addApiFunctionByName("FileExists"); - core.addApiFunctionByName("DirectoryExists"); - core.addApiFunctionByName("IsFileExtension"); - core.addApiFunctionByName("GetFileLength"); - // TODO: Who needs to clean memory here? - core.addApiFunctionByName("GetFileExtension"); - core.addApiFunctionByName("GetFileName"); - core.addApiFunctionByName("GetFileNameWithoutExt"); - core.addApiFunctionByName("GetDirectoryPath"); - core.addApiFunctionByName("GetPrevDirectoryPath"); - core.addApiFunctionByName("GetWorkingDirectory"); - core.addApiFunctionByName("GetApplicationDirectory"); - core.addApiFunctionByName("ChangeDirectory"); - core.addApiFunctionByName("IsPathFile"); - //core.addApiFunctionByName("LoadDirectoryFiles") - //core.addApiFunctionByName("LoadDirectoryFilesEx") - // UnloadDirectoryFiles - core.addApiFunctionByName("IsFileDropped"); - const ldf = apiDesc.getFunction("LoadDroppedFiles"); - ldf.returnType = "string[]"; - core.addApiFunction(ldf, null, { + } + }; + ignore("UnloadFileData"); + // TODO: SaveFileData works but unnecessary makes copy of memory + getFunction(api.functions, "SaveFileData").binding = {}; + ignore("ExportDataAsCode"); + getFunction(api.functions, "LoadFileText").binding = { after: gen => gen.call("UnloadFileText", ["returnVal"]) }; + ignore("UnloadFileText"); + const createFileList = (gen, loadName, unloadName, args) => { + gen.call(loadName, args, { type: "FilePathList", name: "files" }); + gen.call("JS_NewArray", ["ctx"], { type: "JSValue", name: "ret" }); + const f = gen.for("i", "files.count"); + f.call("JS_SetPropertyUint32", ["ctx", "ret", "i", "JS_NewString(ctx,files.paths[i])"]); + gen.call(unloadName, ["files"]); + }; + getFunction(api.functions, "LoadDirectoryFiles").binding = { + jsReturns: "string[]", body: gen => { - gen.call("LoadDroppedFiles", [], { type: "FilePathList", name: "files" }); - gen.call("JS_NewArray", ["ctx"], { type: "JSValue", name: "ret" }); - const f = gen.for("i", "files.count"); - f.call("JS_SetPropertyUint32", ["ctx", "ret", "i", "JS_NewString(ctx,files.paths[i])"]); - gen.call("UnloadDroppedFiles", ["files"]); + gen.jsToC("const char *", "dirPath", "argv[0]"); + createFileList(gen, "LoadDirectoryFiles", "UnloadDirectoryFiles", ["dirPath"]); + gen.jsCleanUpParameter("const char *", "dirPath"); gen.returnExp("ret"); } - }); - // UnloadDroppedFiles - core.addApiFunctionByName("GetFileModTime"); + }; + getFunction(api.functions, "LoadDirectoryFilesEx").binding = { + jsReturns: "string[]", + body: gen => { + gen.jsToC("const char *", "basePath", "argv[0]"); + gen.jsToC("const char *", "filter", "argv[1]"); + gen.jsToC("bool", "scanSubdirs", "argv[2]"); + createFileList(gen, "LoadDirectoryFilesEx", "UnloadDirectoryFiles", ["basePath", "filter", "scanSubdirs"]); + gen.jsCleanUpParameter("const char *", "basePath"); + gen.jsCleanUpParameter("const char *", "filter"); + gen.returnExp("ret"); + } + }; + ignore("UnloadDirectoryFiles"); + getFunction(api.functions, "LoadDroppedFiles").binding = { + jsReturns: "string[]", + body: gen => { + createFileList(gen, "LoadDroppedFiles", "UnloadDroppedFiles", []); + gen.returnExp("ret"); + } + }; + ignore("UnloadDroppedFiles"); // Compression/encoding functionality - //core.addApiFunctionByName("CompressData") - //core.addApiFunctionByName("DecompressData") - //core.addApiFunctionByName("EncodeDataBase64") - //core.addApiFunctionByName("DecodeDataBase64") - // input handling functions - core.addApiFunctionByName("IsKeyPressed"); - core.addApiFunctionByName("IsKeyDown"); - core.addApiFunctionByName("IsKeyReleased"); - core.addApiFunctionByName("IsKeyUp"); - core.addApiFunctionByName("SetExitKey"); - core.addApiFunctionByName("GetKeyPressed"); - core.addApiFunctionByName("GetCharPressed"); - // input-related functions: gamepads - core.addApiFunctionByName("IsGamepadAvailable"); - core.addApiFunctionByName("GetGamepadName"); - core.addApiFunctionByName("IsGamepadButtonPressed"); - core.addApiFunctionByName("IsGamepadButtonDown"); - core.addApiFunctionByName("IsGamepadButtonReleased"); - core.addApiFunctionByName("IsGamepadButtonUp"); - core.addApiFunctionByName("GetGamepadButtonPressed"); - core.addApiFunctionByName("GetGamepadAxisCount"); - core.addApiFunctionByName("GetGamepadAxisMovement"); - core.addApiFunctionByName("SetGamepadMappings"); - // input-related functions: mouse - core.addApiFunctionByName("IsMouseButtonPressed"); - core.addApiFunctionByName("IsMouseButtonDown"); - core.addApiFunctionByName("IsMouseButtonReleased"); - core.addApiFunctionByName("IsMouseButtonUp"); - core.addApiFunctionByName("GetMouseX"); - core.addApiFunctionByName("GetMouseY"); - core.addApiFunctionByName("GetMousePosition"); - core.addApiFunctionByName("GetMouseDelta"); - core.addApiFunctionByName("SetMousePosition"); - core.addApiFunctionByName("SetMouseOffset"); - core.addApiFunctionByName("SetMouseScale"); - core.addApiFunctionByName("GetMouseWheelMove"); - core.addApiFunctionByName("GetMouseWheelMoveV"); - core.addApiFunctionByName("SetMouseCursor"); - // input-related functions: touch - core.addApiFunctionByName("GetTouchX"); - core.addApiFunctionByName("GetTouchY"); - core.addApiFunctionByName("GetTouchPosition"); - core.addApiFunctionByName("GetTouchPointId"); - core.addApiFunctionByName("GetTouchPointCount"); - // Gesture and touch handling functions - core.addApiFunctionByName("SetGesturesEnabled"); - core.addApiFunctionByName("IsGestureDetected"); - core.addApiFunctionByName("GetGestureDetected"); - core.addApiFunctionByName("GetGestureHoldDuration"); - core.addApiFunctionByName("GetGestureDragVector"); - core.addApiFunctionByName("GetGestureDragAngle"); - core.addApiFunctionByName("GetGesturePinchVector"); - core.addApiFunctionByName("GetGesturePinchAngle"); - // Camera system functions - core.addApiFunctionByName("UpdateCamera"); - core.addApiFunctionByName("UpdateCameraPro"); - //api.functions.forEach(x => console.log(`core.addApiFunctionByName("${x.name}")`)) - // module: rshapes - core.addApiFunctionByName("SetShapesTexture"); - // Basic shapes drawing functions - core.addApiFunctionByName("DrawPixel"); - core.addApiFunctionByName("DrawPixelV"); - core.addApiFunctionByName("DrawLine"); - core.addApiFunctionByName("DrawLineV"); - core.addApiFunctionByName("DrawLineEx"); - core.addApiFunctionByName("DrawLineBezier"); - core.addApiFunctionByName("DrawLineBezierQuad"); - core.addApiFunctionByName("DrawLineBezierCubic"); - // core.addApiFunctionByName("DrawLineStrip") - core.addApiFunctionByName("DrawCircle"); - core.addApiFunctionByName("DrawCircleSector"); - core.addApiFunctionByName("DrawCircleSectorLines"); - core.addApiFunctionByName("DrawCircleGradient"); - core.addApiFunctionByName("DrawCircleV"); - core.addApiFunctionByName("DrawCircleLines"); - core.addApiFunctionByName("DrawEllipse"); - core.addApiFunctionByName("DrawEllipseLines"); - core.addApiFunctionByName("DrawRing"); - core.addApiFunctionByName("DrawRingLines"); - core.addApiFunctionByName("DrawRectangle"); - core.addApiFunctionByName("DrawRectangleV"); - core.addApiFunctionByName("DrawRectangleRec"); - core.addApiFunctionByName("DrawRectanglePro"); - core.addApiFunctionByName("DrawRectangleGradientV"); - core.addApiFunctionByName("DrawRectangleGradientH"); - core.addApiFunctionByName("DrawRectangleGradientEx"); - core.addApiFunctionByName("DrawRectangleLines"); - core.addApiFunctionByName("DrawRectangleLinesEx"); - core.addApiFunctionByName("DrawRectangleRounded"); - core.addApiFunctionByName("DrawRectangleRoundedLines"); - core.addApiFunctionByName("DrawTriangle"); - core.addApiFunctionByName("DrawTriangleLines"); - //core.addApiFunctionByName("DrawTriangleFan") - //core.addApiFunctionByName("DrawTriangleStrip") - core.addApiFunctionByName("DrawPoly"); - core.addApiFunctionByName("DrawPolyLines"); - core.addApiFunctionByName("DrawPolyLinesEx"); - // Basic shapes collision detection functions - core.addApiFunctionByName("CheckCollisionRecs"); - core.addApiFunctionByName("CheckCollisionCircles"); - core.addApiFunctionByName("CheckCollisionCircleRec"); - core.addApiFunctionByName("CheckCollisionPointRec"); - core.addApiFunctionByName("CheckCollisionPointCircle"); - core.addApiFunctionByName("CheckCollisionPointTriangle"); - // core.addApiFunctionByName("CheckCollisionPointPoly") - // core.addApiFunctionByName("CheckCollisionLines") - core.addApiFunctionByName("CheckCollisionPointLine"); - core.addApiFunctionByName("GetCollisionRec"); - // Image loading functions - core.addApiFunctionByName("LoadImage"); - core.addApiFunctionByName("LoadImageRaw"); - // core.addApiFunctionByName("LoadImageAnim") - core.addApiFunctionByName("LoadImageFromMemory"); - core.addApiFunctionByName("LoadImageFromTexture"); - core.addApiFunctionByName("LoadImageFromScreen"); - core.addApiFunctionByName("IsImageReady"); - core.addApiFunctionByName("UnloadImage"); - core.addApiFunctionByName("ExportImage"); - // needed? - // core.addApiFunctionByName("ExportImageAsCode") - // Image generation functions - core.addApiFunctionByName("GenImageColor"); - core.addApiFunctionByName("GenImageGradientV"); - core.addApiFunctionByName("GenImageGradientH"); - core.addApiFunctionByName("GenImageGradientRadial"); - core.addApiFunctionByName("GenImageChecked"); - core.addApiFunctionByName("GenImageWhiteNoise"); - core.addApiFunctionByName("GenImagePerlinNoise"); - core.addApiFunctionByName("GenImageCellular"); - core.addApiFunctionByName("GenImageText"); - // Image manipulations functions - core.addApiFunctionByName("ImageCopy"); - core.addApiFunctionByName("ImageFromImage"); - core.addApiFunctionByName("ImageText"); - core.addApiFunctionByName("ImageTextEx"); - core.addApiFunctionByName("ImageFormat"); - core.addApiFunctionByName("ImageToPOT"); - core.addApiFunctionByName("ImageCrop"); - core.addApiFunctionByName("ImageAlphaCrop"); - core.addApiFunctionByName("ImageAlphaClear"); - core.addApiFunctionByName("ImageAlphaMask"); - core.addApiFunctionByName("ImageAlphaPremultiply"); - core.addApiFunctionByName("ImageBlurGaussian"); - core.addApiFunctionByName("ImageResize"); - core.addApiFunctionByName("ImageResizeNN"); - core.addApiFunctionByName("ImageResizeCanvas"); - core.addApiFunctionByName("ImageMipmaps"); - core.addApiFunctionByName("ImageDither"); - core.addApiFunctionByName("ImageFlipVertical"); - core.addApiFunctionByName("ImageFlipHorizontal"); - core.addApiFunctionByName("ImageRotateCW"); - core.addApiFunctionByName("ImageRotateCCW"); - core.addApiFunctionByName("ImageColorTint"); - core.addApiFunctionByName("ImageColorInvert"); - core.addApiFunctionByName("ImageColorGrayscale"); - core.addApiFunctionByName("ImageColorContrast"); - core.addApiFunctionByName("ImageColorBrightness"); - core.addApiFunctionByName("ImageColorReplace"); - const lic = apiDesc.getFunction("LoadImageColors"); - lic.returnType = "unsigned char *"; - core.addApiFunction(lic, null, { body: (gen) => { + ignore("CompressData"); + ignore("DecompressData"); + ignore("EncodeDataBase64"); + ignore("DecodeDataBase64"); + ignore("DrawLineStrip"); + ignore("DrawTriangleFan"); + ignore("DrawTriangleStrip"); + ignore("CheckCollisionPointPoly"); + ignore("CheckCollisionLines"); + ignore("LoadImageAnim"); + ignore("ExportImageAsCode"); + getFunction(api.functions, "LoadImageColors").binding = { + jsReturns: "ArrayBuffer", + body: gen => { gen.jsToC("Image", "image", "argv[0]", core.structLookup); gen.call("LoadImageColors", ["image"], { name: "colors", type: "Color *" }); gen.statement("JSValue retVal = JS_NewArrayBufferCopy(ctx, (const uint8_t*)colors, image.width*image.height*sizeof(Color))"); gen.call("UnloadImageColors", ["colors"]); gen.returnExp("retVal"); - } }); - //core.addApiFunctionByName("LoadImagePalette") - //core.addApiFunctionByName("UnloadImageColors") - //core.addApiFunctionByName("UnloadImagePalette") - core.addApiFunctionByName("GetImageAlphaBorder"); - core.addApiFunctionByName("GetImageColor"); - // Image drawing functions - core.addApiFunctionByName("ImageClearBackground"); - core.addApiFunctionByName("ImageDrawPixel"); - core.addApiFunctionByName("ImageDrawPixelV"); - core.addApiFunctionByName("ImageDrawLine"); - core.addApiFunctionByName("ImageDrawLineV"); - core.addApiFunctionByName("ImageDrawCircle"); - core.addApiFunctionByName("ImageDrawCircleV"); - core.addApiFunctionByName("ImageDrawCircleLines"); - core.addApiFunctionByName("ImageDrawCircleLinesV"); - core.addApiFunctionByName("ImageDrawRectangle"); - core.addApiFunctionByName("ImageDrawRectangleV"); - core.addApiFunctionByName("ImageDrawRectangleRec"); - core.addApiFunctionByName("ImageDrawRectangleLines"); - core.addApiFunctionByName("ImageDraw"); - core.addApiFunctionByName("ImageDrawText"); - core.addApiFunctionByName("ImageDrawTextEx"); - // Texture loading functions - core.addApiFunctionByName("LoadTexture"); - core.addApiFunctionByName("LoadTextureFromImage"); - core.addApiFunctionByName("LoadTextureCubemap"); - core.addApiFunctionByName("LoadRenderTexture"); - core.addApiFunctionByName("IsTextureReady"); - core.addApiFunctionByName("UnloadTexture"); - core.addApiFunctionByName("IsRenderTextureReady"); - core.addApiFunctionByName("UnloadRenderTexture"); - core.addApiFunctionByName("UpdateTexture"); - core.addApiFunctionByName("UpdateTextureRec"); - // Texture configuration functions - core.addApiFunctionByName("GenTextureMipmaps"); - core.addApiFunctionByName("SetTextureFilter"); - core.addApiFunctionByName("SetTextureWrap"); - // Texture drawing functions - core.addApiFunctionByName("DrawTexture"); - core.addApiFunctionByName("DrawTextureV"); - core.addApiFunctionByName("DrawTextureEx"); - core.addApiFunctionByName("DrawTextureRec"); - core.addApiFunctionByName("DrawTexturePro"); - core.addApiFunctionByName("DrawTextureNPatch"); - // Color/pixel related functions - core.addApiFunctionByName("Fade"); - core.addApiFunctionByName("ColorToInt"); - core.addApiFunctionByName("ColorNormalize"); - core.addApiFunctionByName("ColorFromNormalized"); - core.addApiFunctionByName("ColorToHSV"); - core.addApiFunctionByName("ColorFromHSV"); - core.addApiFunctionByName("ColorTint"); - core.addApiFunctionByName("ColorBrightness"); - core.addApiFunctionByName("ColorContrast"); - core.addApiFunctionByName("ColorAlpha"); - core.addApiFunctionByName("ColorAlphaBlend"); - core.addApiFunctionByName("GetColor"); - // core.addApiFunctionByName("GetPixelColor") - // core.addApiFunctionByName("SetPixelColor") - core.addApiFunctionByName("GetPixelDataSize"); - // module: rtext - // Font loading/unloading - core.addApiFunctionByName("GetFontDefault"); - core.addApiFunctionByName("LoadFont"); - const lfx = apiDesc.getFunction("LoadFontEx"); - lfx?.params.pop(); - lfx?.params.pop(); - core.addApiFunction(lfx, null, { customizeCall: "Font returnVal = LoadFontEx(fileName, fontSize, NULL, 0);" }); - core.addApiFunctionByName("LoadFontFromImage"); - // core.addApiFunctionByName("LoadFontFromMemory") - core.addApiFunctionByName("IsFontReady"); - // core.addApiFunctionByName("LoadFontData") - // core.addApiFunctionByName("GenImageFontAtlas") - // core.addApiFunctionByName("UnloadFontData") - core.addApiFunctionByName("UnloadFont"); - // core.addApiFunctionByName("ExportFontAsCode") - // Text drawing functions - core.addApiFunctionByName("DrawFPS"); - core.addApiFunctionByName("DrawText"); - core.addApiFunctionByName("DrawTextEx"); - core.addApiFunctionByName("DrawTextPro"); - core.addApiFunctionByName("DrawTextCodepoint"); - //core.addApiFunctionByName("DrawTextCodepoints") - // Text font info functions - core.addApiFunctionByName("MeasureText"); - core.addApiFunctionByName("MeasureTextEx"); - core.addApiFunctionByName("GetGlyphIndex"); - // core.addApiFunctionByName("GetGlyphInfo") - core.addApiFunctionByName("GetGlyphAtlasRec"); - // Text codepoints management functions (unicode characters) - // Is this needed? - // core.addApiFunctionByName("LoadUTF8") - // core.addApiFunctionByName("UnloadUTF8") - // core.addApiFunctionByName("LoadCodepoints") - // core.addApiFunctionByName("UnloadCodepoints") - // core.addApiFunctionByName("GetCodepointCount") - // core.addApiFunctionByName("GetCodepoint") - // core.addApiFunctionByName("GetCodepointNext") - // core.addApiFunctionByName("GetCodepointPrevious") - // core.addApiFunctionByName("CodepointToUTF8") - // Text strings management functions (no UTF-8 strings, only byte chars) + } + }; + ignore("LoadImagePalette"); + ignore("UnloadImageColors"); + ignore("UnloadImagePalette"); + ignore("GetPixelColor"); + ignore("SetPixelColor"); + const lfx = getFunction(api.functions, "LoadFontEx"); + lfx.params[2].binding = { ignore: true }; + lfx.params[3].binding = { ignore: true }; + lfx.binding = { customizeCall: "Font returnVal = LoadFontEx(fileName, fontSize, NULL, 0);" }; + ignore("LoadFontFromMemory"); + ignore("LoadFontData"); + ignore("GenImageFontAtlas"); + ignore("UnloadFontData"); + ignore("ExportFontAsCode"); + ignore("DrawTextCodepoints"); + ignore("GetGlyphInfo"); + ignore("LoadUTF8"); + ignore("UnloadUTF8"); + ignore("LoadCodepoints"); + ignore("UnloadCodepoints"); + ignore("GetCodepointCount"); + ignore("GetCodepoint"); + ignore("GetCodepointNext"); + ignore("GetCodepointPrevious"); + ignore("CodepointToUTF8"); // Not supported, use JS Stdlib instead - // module: rmodels - // Basic geometric 3D shapes drawing functions - core.addApiFunctionByName("DrawLine3D"); - core.addApiFunctionByName("DrawPoint3D"); - core.addApiFunctionByName("DrawCircle3D"); - core.addApiFunctionByName("DrawTriangle3D"); - //core.addApiFunctionByName("DrawTriangleStrip3D") - core.addApiFunctionByName("DrawCube"); - core.addApiFunctionByName("DrawCubeV"); - core.addApiFunctionByName("DrawCubeWires"); - core.addApiFunctionByName("DrawCubeWiresV"); - core.addApiFunctionByName("DrawSphere"); - core.addApiFunctionByName("DrawSphereEx"); - core.addApiFunctionByName("DrawSphereWires"); - core.addApiFunctionByName("DrawCylinder"); - core.addApiFunctionByName("DrawCylinderEx"); - core.addApiFunctionByName("DrawCylinderWires"); - core.addApiFunctionByName("DrawCylinderWiresEx"); - core.addApiFunctionByName("DrawCapsule"); - core.addApiFunctionByName("DrawCapsuleWires"); - core.addApiFunctionByName("DrawPlane"); - core.addApiFunctionByName("DrawRay"); - core.addApiFunctionByName("DrawGrid"); - // model management functions - core.addApiFunctionByName("LoadModel"); - core.addApiFunctionByName("LoadModelFromMesh"); - core.addApiFunctionByName("IsModelReady"); - core.addApiFunctionByName("UnloadModel"); - core.addApiFunctionByName("GetModelBoundingBox"); - // model drawing functions - core.addApiFunctionByName("DrawModel"); - core.addApiFunctionByName("DrawModelEx"); - core.addApiFunctionByName("DrawModelWires"); - core.addApiFunctionByName("DrawModelWiresEx"); - core.addApiFunctionByName("DrawBoundingBox"); - core.addApiFunctionByName("DrawBillboard"); - core.addApiFunctionByName("DrawBillboardRec"); - core.addApiFunctionByName("DrawBillboardPro"); - // Mesh management functions - core.addApiFunctionByName("UploadMesh"); - core.addApiFunctionByName("UpdateMeshBuffer"); - core.addApiFunctionByName("UnloadMesh"); - core.addApiFunctionByName("DrawMesh"); - core.addApiFunctionByName("DrawMeshInstanced"); - core.addApiFunctionByName("ExportMesh"); - core.addApiFunctionByName("GetMeshBoundingBox"); - core.addApiFunctionByName("GenMeshTangents"); - // Mesh generation functions - core.addApiFunctionByName("GenMeshPoly"); - core.addApiFunctionByName("GenMeshPlane"); - core.addApiFunctionByName("GenMeshCube"); - core.addApiFunctionByName("GenMeshSphere"); - core.addApiFunctionByName("GenMeshHemiSphere"); - core.addApiFunctionByName("GenMeshCylinder"); - core.addApiFunctionByName("GenMeshCone"); - core.addApiFunctionByName("GenMeshTorus"); - core.addApiFunctionByName("GenMeshKnot"); - core.addApiFunctionByName("GenMeshHeightmap"); - core.addApiFunctionByName("GenMeshCubicmap"); - // Material loading/unloading functions - // core.addApiFunctionByName("LoadMaterials") - core.addApiFunctionByName("LoadMaterialDefault"); - core.addApiFunctionByName("IsMaterialReady"); - core.addApiFunctionByName("UnloadMaterial"); - core.addApiFunctionByName("SetMaterialTexture"); - core.addApiFunctionByName("SetModelMaterial"); - core.addApiFunctionByName("SetModelMeshMaterial"); - // Model animations loading/unloading functions - // core.addApiFunctionByName("LoadModelAnimations") - // core.addApiFunctionByName("UpdateModelAnimation") - // core.addApiFunctionByName("UnloadModelAnimation") - // core.addApiFunctionByName("UnloadModelAnimations") - // core.addApiFunctionByName("IsModelAnimationValid") - // Collision detection functions - core.addApiFunctionByName("CheckCollisionSpheres"); - core.addApiFunctionByName("CheckCollisionBoxes"); - core.addApiFunctionByName("CheckCollisionBoxSphere"); - core.addApiFunctionByName("GetRayCollisionSphere"); - core.addApiFunctionByName("GetRayCollisionBox"); - core.addApiFunctionByName("GetRayCollisionMesh"); - core.addApiFunctionByName("GetRayCollisionTriangle"); - core.addApiFunctionByName("GetRayCollisionQuad"); - // module: raudio - // Audio device management functions - core.addApiFunctionByName("InitAudioDevice"); - core.addApiFunctionByName("CloseAudioDevice"); - core.addApiFunctionByName("IsAudioDeviceReady"); - core.addApiFunctionByName("SetMasterVolume"); - // Wave/Sound loading/unloading functions - core.addApiFunctionByName("LoadWave"); - core.addApiFunctionByName("LoadWaveFromMemory"); - core.addApiFunctionByName("IsWaveReady"); - core.addApiFunctionByName("LoadSound"); - core.addApiFunctionByName("LoadSoundFromWave"); - core.addApiFunctionByName("IsSoundReady"); - core.addApiFunctionByName("UpdateSound"); - core.addApiFunctionByName("UnloadWave"); - core.addApiFunctionByName("UnloadSound"); - core.addApiFunctionByName("ExportWave"); - // core.addApiFunctionByName("ExportWaveAsCode") + api.functions.filter(x => x.name.startsWith("Text")).forEach(x => ignore(x.name)); + ignore("DrawTriangleStrip3D"); + ignore("LoadMaterials"); + ignore("LoadModelAnimations"); + ignore("UpdateModelAnimation"); + ignore("UnloadModelAnimation"); + ignore("UnloadModelAnimations"); + ignore("IsModelAnimationValid"); + ignore("ExportWaveAsCode"); // Wave/Sound management functions - core.addApiFunctionByName("PlaySound"); - core.addApiFunctionByName("StopSound"); - core.addApiFunctionByName("PauseSound"); - core.addApiFunctionByName("ResumeSound"); - core.addApiFunctionByName("IsSoundPlaying"); - core.addApiFunctionByName("SetSoundVolume"); - core.addApiFunctionByName("SetSoundPitch"); - core.addApiFunctionByName("SetSoundPan"); - core.addApiFunctionByName("WaveCopy"); - core.addApiFunctionByName("WaveCrop"); - core.addApiFunctionByName("WaveFormat"); - // core.addApiFunctionByName("LoadWaveSamples") - // core.addApiFunctionByName("UnloadWaveSamples") - // Music management functions - core.addApiFunctionByName("LoadMusicStream"); - // core.addApiFunctionByName("LoadMusicStreamFromMemory") - core.addApiFunctionByName("IsMusicReady"); - core.addApiFunctionByName("UnloadMusicStream"); - core.addApiFunctionByName("PlayMusicStream"); - core.addApiFunctionByName("IsMusicStreamPlaying"); - core.addApiFunctionByName("UpdateMusicStream"); - core.addApiFunctionByName("StopMusicStream"); - core.addApiFunctionByName("PauseMusicStream"); - core.addApiFunctionByName("ResumeMusicStream"); - core.addApiFunctionByName("SeekMusicStream"); - core.addApiFunctionByName("SetMusicVolume"); - core.addApiFunctionByName("SetMusicPitch"); - core.addApiFunctionByName("SetMusicPan"); - core.addApiFunctionByName("GetMusicTimeLength"); - core.addApiFunctionByName("GetMusicTimePlayed"); - // AudioStream management functions - // core.addApiFunctionByName("LoadAudioStream") - // core.addApiFunctionByName("IsAudioStreamReady") - // core.addApiFunctionByName("UnloadAudioStream") - // core.addApiFunctionByName("UpdateAudioStream") - // core.addApiFunctionByName("IsAudioStreamProcessed") - // core.addApiFunctionByName("PlayAudioStream") - // core.addApiFunctionByName("PauseAudioStream") - // core.addApiFunctionByName("ResumeAudioStream") - // core.addApiFunctionByName("IsAudioStreamPlaying") - // core.addApiFunctionByName("StopAudioStream") - // core.addApiFunctionByName("SetAudioStreamVolume") - // core.addApiFunctionByName("SetAudioStreamPitch") - // core.addApiFunctionByName("SetAudioStreamPan") - // core.addApiFunctionByName("SetAudioStreamBufferSizeDefault") - // core.addApiFunctionByName("SetAudioStreamCallback") - // core.addApiFunctionByName("AttachAudioStreamProcessor") - // core.addApiFunctionByName("DetachAudioStreamProcessor") - // core.addApiFunctionByName("AttachAudioMixedProcessor") - // core.addApiFunctionByName("DetachAudioMixedProcessor") - // module: raymath - 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"); + ignore("LoadWaveSamples"); + ignore("UnloadWaveSamples"); + ignore("LoadMusicStreamFromMemory"); + ignore("LoadAudioStream"); + ignore("IsAudioStreamReady"); + ignore("UnloadAudioStream"); + ignore("UpdateAudioStream"); + ignore("IsAudioStreamProcessed"); + ignore("PlayAudioStream"); + ignore("PauseAudioStream"); + ignore("ResumeAudioStream"); + ignore("IsAudioStreamPlaying"); + ignore("StopAudioStream"); + ignore("SetAudioStreamVolume"); + ignore("SetAudioStreamPitch"); + ignore("SetAudioStreamPan"); + ignore("SetAudioStreamBufferSizeDefault"); + ignore("SetAudioStreamCallback"); + ignore("AttachAudioStreamProcessor"); + ignore("DetachAudioStreamProcessor"); + ignore("AttachAudioMixedProcessor"); + ignore("DetachAudioMixedProcessor"); + ignore("Vector3OrthoNormalize"); + ignore("Vector3ToFloatV"); + ignore("MatrixToFloatV"); + ignore("QuaternionToAxisAngle"); core.exportGlobalConstant("DEG2RAD", "(PI/180.0)"); core.exportGlobalConstant("RAD2DEG", "(180.0/PI)"); - // module: rcamera - core.addApiFunctionByName("GetCameraForward"); - core.addApiFunctionByName("GetCameraUp"); - core.addApiFunctionByName("GetCameraRight"); - core.addApiFunctionByName("CameraMoveForward"); - core.addApiFunctionByName("CameraMoveUp"); - core.addApiFunctionByName("CameraMoveRight"); - core.addApiFunctionByName("CameraMoveToTarget"); - core.addApiFunctionByName("CameraYaw"); - core.addApiFunctionByName("CameraPitch"); - core.addApiFunctionByName("CameraRoll"); - core.addApiFunctionByName("GetCameraViewMatrix"); - core.addApiFunctionByName("GetCameraProjectionMatrix"); - // module: rgui - core.addApiFunctionByName("GuiEnable"); - core.addApiFunctionByName("GuiDisable"); - core.addApiFunctionByName("GuiLock"); - core.addApiFunctionByName("GuiUnlock"); - core.addApiFunctionByName("GuiIsLocked"); - core.addApiFunctionByName("GuiFade"); - core.addApiFunctionByName("GuiSetState"); - core.addApiFunctionByName("GuiGetState"); - core.addApiFunctionByName("GuiSetFont"); - core.addApiFunctionByName("GuiGetFont"); - core.addApiFunctionByName("GuiSetStyle"); - core.addApiFunctionByName("GuiGetStyle"); - core.addApiFunctionByName("GuiWindowBox"); - core.addApiFunctionByName("GuiGroupBox"); - core.addApiFunctionByName("GuiLine"); - core.addApiFunctionByName("GuiPanel"); - core.addApiFunctionByName("GuiScrollPanel"); - core.addApiFunctionByName("GuiLabel"); - core.addApiFunctionByName("GuiButton"); - core.addApiFunctionByName("GuiLabelButton"); - core.addApiFunctionByName("GuiToggle"); - core.addApiFunctionByName("GuiToggleGroup"); - core.addApiFunctionByName("GuiCheckBox"); - core.addApiFunctionByName("GuiComboBox"); - //core.addApiFunctionByName("GuiDropdownBox") - //core.addApiFunctionByName("GuiSpinner") - //core.addApiFunctionByName("GuiValueBox") - core.addApiFunctionByName("GuiTextBox"); - //core.addApiFunctionByName("GuiTextBoxMulti") - core.addApiFunctionByName("GuiSlider"); - core.addApiFunctionByName("GuiSliderBar"); - core.addApiFunctionByName("GuiProgressBar"); - core.addApiFunctionByName("GuiStatusBar"); - core.addApiFunctionByName("GuiDummyRec"); - core.addApiFunctionByName("GuiGrid"); - //core.addApiFunctionByName("GuiListView") - //core.addApiFunctionByName("GuiListViewEx") - core.addApiFunctionByName("GuiMessageBox"); - //core.addApiFunctionByName("GuiTextInputBox") - core.addApiFunctionByName("GuiColorPicker"); - core.addApiFunctionByName("GuiColorPanel"); - core.addApiFunctionByName("GuiColorBarAlpha"); - core.addApiFunctionByName("GuiColorBarHue"); - core.addApiFunctionByName("GuiLoadStyle"); - core.addApiFunctionByName("GuiLoadStyleDefault"); - core.addApiFunctionByName("GuiIconText"); - core.addApiFunctionByName("GuiDrawIcon"); - //core.addApiFunctionByName("GuiGetIcons") - //core.addApiFunctionByName("GuiGetIconData") - //core.addApiFunctionByName("GuiSetIconData") - core.addApiFunctionByName("GuiSetIconScale"); - // module: rlights + ignore("GuiDropdownBox"); + ignore("GuiSpinner"); + ignore("GuiValueBox"); + ignore("GuiListView"); + ignore("GuiListViewEx"); + ignore("GuiTextInputBox"); + ignore("GuiGetIcons"); + ignore("GuiTabBar"); + ignore("GuiLoadIcons"); // TODO: Parse and support light struct - // core.addApiFunctionByName("CreateLight") - // core.addApiFunctionByName("UpdateLightValues") - // module: reasings - core.addApiFunctionByName("EaseLinearNone"); - core.addApiFunctionByName("EaseLinearIn"); - core.addApiFunctionByName("EaseLinearOut"); - core.addApiFunctionByName("EaseLinearInOut"); - core.addApiFunctionByName("EaseSineIn"); - core.addApiFunctionByName("EaseSineOut"); - core.addApiFunctionByName("EaseSineInOut"); - core.addApiFunctionByName("EaseCircIn"); - core.addApiFunctionByName("EaseCircOut"); - core.addApiFunctionByName("EaseCircInOut"); - core.addApiFunctionByName("EaseCubicIn"); - core.addApiFunctionByName("EaseCubicOut"); - core.addApiFunctionByName("EaseCubicInOut"); - core.addApiFunctionByName("EaseQuadIn"); - core.addApiFunctionByName("EaseQuadOut"); - core.addApiFunctionByName("EaseQuadInOut"); - core.addApiFunctionByName("EaseExpoIn"); - core.addApiFunctionByName("EaseExpoOut"); - core.addApiFunctionByName("EaseExpoInOut"); - core.addApiFunctionByName("EaseBackIn"); - core.addApiFunctionByName("EaseBounceOut"); - core.addApiFunctionByName("EaseBounceInOut"); - core.addApiFunctionByName("EaseElasticIn"); + ignore("CreateLight"); + ignore("UpdateLightValues"); + api.structs.forEach(x => core.addApiStruct(x)); + api.functions.forEach(x => core.addApiFunction(x)); 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); }); - core.addAllEnums(); - // api.enums.find(x => x.name === "KeyboardKey")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "MouseButton")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "ConfigFlags")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "BlendMode")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "TraceLogLevel")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "MouseCursor")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "PixelFormat")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "CameraProjection")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "CameraMode")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "ShaderLocationIndex")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "ShaderUniformDataType")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) - // api.enums.find(x => x.name === "MaterialMapIndex")?.values.forEach(x => core.exportGlobalConstant(x.name, x.description)) + api.enums.forEach(x => core.addEnum(x)); core.exportGlobalConstant("MATERIAL_MAP_DIFFUSE", "Albedo material (same as: MATERIAL_MAP_DIFFUSE"); core.exportGlobalConstant("MATERIAL_MAP_SPECULAR", "Metalness material (same as: MATERIAL_MAP_SPECULAR)"); core.writeTo("src/bindings/js_raylib_core.h"); core.typings.writeTo("examples/lib.raylib.d.ts"); + const ignored = api.functions.filter(x => x.binding?.ignore).length; + console.log(`Converted ${api.functions.length - ignored} function. ${ignored} ignored`); + console.log("Success!"); } main(); diff --git a/src/bindings/js_raylib_core.h b/src/bindings/js_raylib_core.h index bb8c402..3ab25f0 100644 --- a/src/bindings/js_raylib_core.h +++ b/src/bindings/js_raylib_core.h @@ -19,208 +19,38 @@ #define countof(x) (sizeof(x) / sizeof((x)[0])) #endif -static JSClassID js_Color_class_id; -static JSClassID js_Rectangle_class_id; static JSClassID js_Vector2_class_id; static JSClassID js_Vector3_class_id; static JSClassID js_Vector4_class_id; -static JSClassID js_Ray_class_id; -static JSClassID js_RayCollision_class_id; -static JSClassID js_Camera2D_class_id; -static JSClassID js_Camera3D_class_id; -static JSClassID js_BoundingBox_class_id; static JSClassID js_Matrix_class_id; -static JSClassID js_NPatchInfo_class_id; +static JSClassID js_Color_class_id; +static JSClassID js_Rectangle_class_id; static JSClassID js_Image_class_id; -static JSClassID js_Wave_class_id; -static JSClassID js_Sound_class_id; -static JSClassID js_Music_class_id; -static JSClassID js_Model_class_id; +static JSClassID js_Texture_class_id; +static JSClassID js_RenderTexture_class_id; +static JSClassID js_NPatchInfo_class_id; +static JSClassID js_GlyphInfo_class_id; +static JSClassID js_Font_class_id; +static JSClassID js_Camera3D_class_id; +static JSClassID js_Camera2D_class_id; static JSClassID js_Mesh_class_id; static JSClassID js_Shader_class_id; -static JSClassID js_Texture_class_id; -static JSClassID js_Font_class_id; -static JSClassID js_RenderTexture_class_id; static JSClassID js_MaterialMap_class_id; static JSClassID js_Material_class_id; - -static void js_Color_finalizer(JSRuntime * rt, JSValue val) { - Color* ptr = JS_GetOpaque(val, js_Color_class_id); - if(ptr) { - js_free_rt(rt, ptr); - } -} - -static JSValue js_Color_get_r(JSContext* ctx, JSValueConst this_val) { - Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); - unsigned char r = ptr->r; - JSValue ret = JS_NewUint32(ctx, r); - return ret; -} - -static JSValue js_Color_set_r(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); - unsigned int _int_value; - JS_ToUint32(ctx, &_int_value, v); - unsigned char value = (unsigned char)_int_value; - ptr->r = value; - return JS_UNDEFINED; -} - -static JSValue js_Color_get_g(JSContext* ctx, JSValueConst this_val) { - Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); - unsigned char g = ptr->g; - JSValue ret = JS_NewUint32(ctx, g); - return ret; -} - -static JSValue js_Color_set_g(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); - unsigned int _int_value; - JS_ToUint32(ctx, &_int_value, v); - unsigned char value = (unsigned char)_int_value; - ptr->g = value; - return JS_UNDEFINED; -} - -static JSValue js_Color_get_b(JSContext* ctx, JSValueConst this_val) { - Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); - unsigned char b = ptr->b; - JSValue ret = JS_NewUint32(ctx, b); - return ret; -} - -static JSValue js_Color_set_b(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); - unsigned int _int_value; - JS_ToUint32(ctx, &_int_value, v); - unsigned char value = (unsigned char)_int_value; - ptr->b = value; - return JS_UNDEFINED; -} - -static JSValue js_Color_get_a(JSContext* ctx, JSValueConst this_val) { - Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); - unsigned char a = ptr->a; - JSValue ret = JS_NewUint32(ctx, a); - return ret; -} - -static JSValue js_Color_set_a(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); - unsigned int _int_value; - JS_ToUint32(ctx, &_int_value, v); - unsigned char value = (unsigned char)_int_value; - ptr->a = value; - return JS_UNDEFINED; -} - -static const JSCFunctionListEntry js_Color_proto_funcs[] = { - JS_CGETSET_DEF("r",js_Color_get_r,js_Color_set_r), - JS_CGETSET_DEF("g",js_Color_get_g,js_Color_set_g), - JS_CGETSET_DEF("b",js_Color_get_b,js_Color_set_b), - JS_CGETSET_DEF("a",js_Color_get_a,js_Color_set_a), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","Color", JS_PROP_CONFIGURABLE), -}; - -static int js_declare_Color(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_Color_class_id); - JSClassDef js_Color_def = { .class_name = "Color", .finalizer = js_Color_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_Color_class_id, &js_Color_def); - JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_Color_proto_funcs, countof(js_Color_proto_funcs)); - JS_SetClassProto(ctx, js_Color_class_id, proto); - return 0; -} - -static void js_Rectangle_finalizer(JSRuntime * rt, JSValue val) { - Rectangle* ptr = JS_GetOpaque(val, js_Rectangle_class_id); - if(ptr) { - js_free_rt(rt, ptr); - } -} - -static JSValue js_Rectangle_get_x(JSContext* ctx, JSValueConst this_val) { - Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); - float x = ptr->x; - JSValue ret = JS_NewFloat64(ctx, x); - return ret; -} - -static JSValue js_Rectangle_set_x(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); - double _double_value; - JS_ToFloat64(ctx, &_double_value, v); - float value = (float)_double_value; - ptr->x = value; - return JS_UNDEFINED; -} - -static JSValue js_Rectangle_get_y(JSContext* ctx, JSValueConst this_val) { - Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); - float y = ptr->y; - JSValue ret = JS_NewFloat64(ctx, y); - return ret; -} - -static JSValue js_Rectangle_set_y(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); - double _double_value; - JS_ToFloat64(ctx, &_double_value, v); - float value = (float)_double_value; - ptr->y = value; - return JS_UNDEFINED; -} - -static JSValue js_Rectangle_get_width(JSContext* ctx, JSValueConst this_val) { - Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); - float width = ptr->width; - JSValue ret = JS_NewFloat64(ctx, width); - return ret; -} - -static JSValue js_Rectangle_set_width(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); - double _double_value; - JS_ToFloat64(ctx, &_double_value, v); - float value = (float)_double_value; - ptr->width = value; - return JS_UNDEFINED; -} - -static JSValue js_Rectangle_get_height(JSContext* ctx, JSValueConst this_val) { - Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); - float height = ptr->height; - JSValue ret = JS_NewFloat64(ctx, height); - return ret; -} - -static JSValue js_Rectangle_set_height(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); - double _double_value; - JS_ToFloat64(ctx, &_double_value, v); - float value = (float)_double_value; - ptr->height = value; - return JS_UNDEFINED; -} - -static const JSCFunctionListEntry js_Rectangle_proto_funcs[] = { - JS_CGETSET_DEF("x",js_Rectangle_get_x,js_Rectangle_set_x), - JS_CGETSET_DEF("y",js_Rectangle_get_y,js_Rectangle_set_y), - JS_CGETSET_DEF("width",js_Rectangle_get_width,js_Rectangle_set_width), - JS_CGETSET_DEF("height",js_Rectangle_get_height,js_Rectangle_set_height), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","Rectangle", JS_PROP_CONFIGURABLE), -}; - -static int js_declare_Rectangle(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_Rectangle_class_id); - JSClassDef js_Rectangle_def = { .class_name = "Rectangle", .finalizer = js_Rectangle_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_Rectangle_class_id, &js_Rectangle_def); - JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_Rectangle_proto_funcs, countof(js_Rectangle_proto_funcs)); - JS_SetClassProto(ctx, js_Rectangle_class_id, proto); - return 0; -} +static JSClassID js_Transform_class_id; +static JSClassID js_BoneInfo_class_id; +static JSClassID js_Model_class_id; +static JSClassID js_ModelAnimation_class_id; +static JSClassID js_Ray_class_id; +static JSClassID js_RayCollision_class_id; +static JSClassID js_BoundingBox_class_id; +static JSClassID js_Wave_class_id; +static JSClassID js_AudioStream_class_id; +static JSClassID js_Sound_class_id; +static JSClassID js_Music_class_id; +static JSClassID js_VrDeviceInfo_class_id; +static JSClassID js_VrStereoConfig_class_id; +static JSClassID js_FilePathList_class_id; static void js_Vector2_finalizer(JSRuntime * rt, JSValue val) { Vector2* ptr = JS_GetOpaque(val, js_Vector2_class_id); @@ -438,366 +268,6 @@ static int js_declare_Vector4(JSContext * ctx, JSModuleDef * m) { return 0; } -static void js_Ray_finalizer(JSRuntime * rt, JSValue val) { - Ray* ptr = JS_GetOpaque(val, js_Ray_class_id); - if(ptr) { - js_free_rt(rt, ptr); - } -} - -static JSValue js_Ray_set_position(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Ray* ptr = JS_GetOpaque2(ctx, this_val, js_Ray_class_id); - Vector3* value_ptr = (Vector3*)JS_GetOpaque2(ctx, v, js_Vector3_class_id); - if(value_ptr == NULL) return JS_EXCEPTION; - Vector3 value = *value_ptr; - ptr->position = value; - return JS_UNDEFINED; -} - -static JSValue js_Ray_set_direction(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Ray* ptr = JS_GetOpaque2(ctx, this_val, js_Ray_class_id); - Vector3* value_ptr = (Vector3*)JS_GetOpaque2(ctx, v, js_Vector3_class_id); - if(value_ptr == NULL) return JS_EXCEPTION; - Vector3 value = *value_ptr; - ptr->direction = value; - return JS_UNDEFINED; -} - -static const JSCFunctionListEntry js_Ray_proto_funcs[] = { - JS_CGETSET_DEF("position",NULL,js_Ray_set_position), - JS_CGETSET_DEF("direction",NULL,js_Ray_set_direction), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","Ray", JS_PROP_CONFIGURABLE), -}; - -static int js_declare_Ray(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_Ray_class_id); - JSClassDef js_Ray_def = { .class_name = "Ray", .finalizer = js_Ray_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_Ray_class_id, &js_Ray_def); - JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_Ray_proto_funcs, countof(js_Ray_proto_funcs)); - JS_SetClassProto(ctx, js_Ray_class_id, proto); - return 0; -} - -static void js_RayCollision_finalizer(JSRuntime * rt, JSValue val) { - RayCollision* ptr = JS_GetOpaque(val, js_RayCollision_class_id); - if(ptr) { - js_free_rt(rt, ptr); - } -} - -static JSValue js_RayCollision_get_hit(JSContext* ctx, JSValueConst this_val) { - RayCollision* ptr = JS_GetOpaque2(ctx, this_val, js_RayCollision_class_id); - bool hit = ptr->hit; - JSValue ret = JS_NewBool(ctx, hit); - return ret; -} - -static JSValue js_RayCollision_get_distance(JSContext* ctx, JSValueConst this_val) { - RayCollision* ptr = JS_GetOpaque2(ctx, this_val, js_RayCollision_class_id); - float distance = ptr->distance; - JSValue ret = JS_NewFloat64(ctx, distance); - return ret; -} - -static JSValue js_RayCollision_get_point(JSContext* ctx, JSValueConst this_val) { - RayCollision* ptr = JS_GetOpaque2(ctx, this_val, js_RayCollision_class_id); - Vector3 point = ptr->point; - Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); - *ret_ptr = point; - JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); - JS_SetOpaque(ret, ret_ptr); - return ret; -} - -static JSValue js_RayCollision_get_normal(JSContext* ctx, JSValueConst this_val) { - RayCollision* ptr = JS_GetOpaque2(ctx, this_val, js_RayCollision_class_id); - Vector3 normal = ptr->normal; - Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); - *ret_ptr = normal; - JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); - JS_SetOpaque(ret, ret_ptr); - return ret; -} - -static const JSCFunctionListEntry js_RayCollision_proto_funcs[] = { - JS_CGETSET_DEF("hit",js_RayCollision_get_hit,NULL), - JS_CGETSET_DEF("distance",js_RayCollision_get_distance,NULL), - JS_CGETSET_DEF("point",js_RayCollision_get_point,NULL), - JS_CGETSET_DEF("normal",js_RayCollision_get_normal,NULL), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","RayCollision", JS_PROP_CONFIGURABLE), -}; - -static int js_declare_RayCollision(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_RayCollision_class_id); - JSClassDef js_RayCollision_def = { .class_name = "RayCollision", .finalizer = js_RayCollision_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_RayCollision_class_id, &js_RayCollision_def); - JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_RayCollision_proto_funcs, countof(js_RayCollision_proto_funcs)); - JS_SetClassProto(ctx, js_RayCollision_class_id, proto); - return 0; -} - -static void js_Camera2D_finalizer(JSRuntime * rt, JSValue val) { - Camera2D* ptr = JS_GetOpaque(val, js_Camera2D_class_id); - if(ptr) { - js_free_rt(rt, ptr); - } -} - -static JSValue js_Camera2D_get_offset(JSContext* ctx, JSValueConst this_val) { - Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); - Vector2 offset = ptr->offset; - Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); - *ret_ptr = offset; - JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); - JS_SetOpaque(ret, ret_ptr); - return ret; -} - -static JSValue js_Camera2D_set_offset(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); - Vector2* value_ptr = (Vector2*)JS_GetOpaque2(ctx, v, js_Vector2_class_id); - if(value_ptr == NULL) return JS_EXCEPTION; - Vector2 value = *value_ptr; - ptr->offset = value; - return JS_UNDEFINED; -} - -static JSValue js_Camera2D_get_target(JSContext* ctx, JSValueConst this_val) { - Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); - Vector2 target = ptr->target; - Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); - *ret_ptr = target; - JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); - JS_SetOpaque(ret, ret_ptr); - return ret; -} - -static JSValue js_Camera2D_set_target(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); - Vector2* value_ptr = (Vector2*)JS_GetOpaque2(ctx, v, js_Vector2_class_id); - if(value_ptr == NULL) return JS_EXCEPTION; - Vector2 value = *value_ptr; - ptr->target = value; - return JS_UNDEFINED; -} - -static JSValue js_Camera2D_get_rotation(JSContext* ctx, JSValueConst this_val) { - Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); - float rotation = ptr->rotation; - JSValue ret = JS_NewFloat64(ctx, rotation); - return ret; -} - -static JSValue js_Camera2D_set_rotation(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); - double _double_value; - JS_ToFloat64(ctx, &_double_value, v); - float value = (float)_double_value; - ptr->rotation = value; - return JS_UNDEFINED; -} - -static JSValue js_Camera2D_get_zoom(JSContext* ctx, JSValueConst this_val) { - Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); - float zoom = ptr->zoom; - JSValue ret = JS_NewFloat64(ctx, zoom); - return ret; -} - -static JSValue js_Camera2D_set_zoom(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); - double _double_value; - JS_ToFloat64(ctx, &_double_value, v); - float value = (float)_double_value; - ptr->zoom = value; - return JS_UNDEFINED; -} - -static const JSCFunctionListEntry js_Camera2D_proto_funcs[] = { - JS_CGETSET_DEF("offset",js_Camera2D_get_offset,js_Camera2D_set_offset), - JS_CGETSET_DEF("target",js_Camera2D_get_target,js_Camera2D_set_target), - JS_CGETSET_DEF("rotation",js_Camera2D_get_rotation,js_Camera2D_set_rotation), - JS_CGETSET_DEF("zoom",js_Camera2D_get_zoom,js_Camera2D_set_zoom), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","Camera2D", JS_PROP_CONFIGURABLE), -}; - -static int js_declare_Camera2D(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_Camera2D_class_id); - JSClassDef js_Camera2D_def = { .class_name = "Camera2D", .finalizer = js_Camera2D_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_Camera2D_class_id, &js_Camera2D_def); - JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_Camera2D_proto_funcs, countof(js_Camera2D_proto_funcs)); - JS_SetClassProto(ctx, js_Camera2D_class_id, proto); - return 0; -} - -static void js_Camera3D_finalizer(JSRuntime * rt, JSValue val) { - Camera3D* ptr = JS_GetOpaque(val, js_Camera3D_class_id); - if(ptr) { - js_free_rt(rt, ptr); - } -} - -static JSValue js_Camera3D_get_position(JSContext* ctx, JSValueConst this_val) { - Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); - Vector3 position = ptr->position; - Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); - *ret_ptr = position; - JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); - JS_SetOpaque(ret, ret_ptr); - return ret; -} - -static JSValue js_Camera3D_set_position(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); - Vector3* value_ptr = (Vector3*)JS_GetOpaque2(ctx, v, js_Vector3_class_id); - if(value_ptr == NULL) return JS_EXCEPTION; - Vector3 value = *value_ptr; - ptr->position = value; - return JS_UNDEFINED; -} - -static JSValue js_Camera3D_get_target(JSContext* ctx, JSValueConst this_val) { - Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); - Vector3 target = ptr->target; - Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); - *ret_ptr = target; - JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); - JS_SetOpaque(ret, ret_ptr); - return ret; -} - -static JSValue js_Camera3D_set_target(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); - Vector3* value_ptr = (Vector3*)JS_GetOpaque2(ctx, v, js_Vector3_class_id); - if(value_ptr == NULL) return JS_EXCEPTION; - Vector3 value = *value_ptr; - ptr->target = value; - return JS_UNDEFINED; -} - -static JSValue js_Camera3D_set_up(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); - Vector3* value_ptr = (Vector3*)JS_GetOpaque2(ctx, v, js_Vector3_class_id); - if(value_ptr == NULL) return JS_EXCEPTION; - Vector3 value = *value_ptr; - ptr->up = value; - return JS_UNDEFINED; -} - -static JSValue js_Camera3D_get_fovy(JSContext* ctx, JSValueConst this_val) { - Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); - float fovy = ptr->fovy; - JSValue ret = JS_NewFloat64(ctx, fovy); - return ret; -} - -static JSValue js_Camera3D_set_fovy(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); - double _double_value; - JS_ToFloat64(ctx, &_double_value, v); - float value = (float)_double_value; - ptr->fovy = value; - return JS_UNDEFINED; -} - -static JSValue js_Camera3D_get_projection(JSContext* ctx, JSValueConst this_val) { - Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); - int projection = ptr->projection; - JSValue ret = JS_NewInt32(ctx, projection); - return ret; -} - -static JSValue js_Camera3D_set_projection(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); - int value; - JS_ToInt32(ctx, &value, v); - ptr->projection = value; - return JS_UNDEFINED; -} - -static const JSCFunctionListEntry js_Camera3D_proto_funcs[] = { - JS_CGETSET_DEF("position",js_Camera3D_get_position,js_Camera3D_set_position), - JS_CGETSET_DEF("target",js_Camera3D_get_target,js_Camera3D_set_target), - JS_CGETSET_DEF("up",NULL,js_Camera3D_set_up), - JS_CGETSET_DEF("fovy",js_Camera3D_get_fovy,js_Camera3D_set_fovy), - JS_CGETSET_DEF("projection",js_Camera3D_get_projection,js_Camera3D_set_projection), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","Camera3D", JS_PROP_CONFIGURABLE), -}; - -static int js_declare_Camera3D(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_Camera3D_class_id); - JSClassDef js_Camera3D_def = { .class_name = "Camera3D", .finalizer = js_Camera3D_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_Camera3D_class_id, &js_Camera3D_def); - JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_Camera3D_proto_funcs, countof(js_Camera3D_proto_funcs)); - JS_SetClassProto(ctx, js_Camera3D_class_id, proto); - return 0; -} - -static void js_BoundingBox_finalizer(JSRuntime * rt, JSValue val) { - BoundingBox* ptr = JS_GetOpaque(val, js_BoundingBox_class_id); - if(ptr) { - js_free_rt(rt, ptr); - } -} - -static JSValue js_BoundingBox_get_min(JSContext* ctx, JSValueConst this_val) { - BoundingBox* ptr = JS_GetOpaque2(ctx, this_val, js_BoundingBox_class_id); - Vector3 min = ptr->min; - Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); - *ret_ptr = min; - JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); - JS_SetOpaque(ret, ret_ptr); - return ret; -} - -static JSValue js_BoundingBox_set_min(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - BoundingBox* ptr = JS_GetOpaque2(ctx, this_val, js_BoundingBox_class_id); - Vector3* value_ptr = (Vector3*)JS_GetOpaque2(ctx, v, js_Vector3_class_id); - if(value_ptr == NULL) return JS_EXCEPTION; - Vector3 value = *value_ptr; - ptr->min = value; - return JS_UNDEFINED; -} - -static JSValue js_BoundingBox_get_max(JSContext* ctx, JSValueConst this_val) { - BoundingBox* ptr = JS_GetOpaque2(ctx, this_val, js_BoundingBox_class_id); - Vector3 max = ptr->max; - Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); - *ret_ptr = max; - JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); - JS_SetOpaque(ret, ret_ptr); - return ret; -} - -static JSValue js_BoundingBox_set_max(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - BoundingBox* ptr = JS_GetOpaque2(ctx, this_val, js_BoundingBox_class_id); - Vector3* value_ptr = (Vector3*)JS_GetOpaque2(ctx, v, js_Vector3_class_id); - if(value_ptr == NULL) return JS_EXCEPTION; - Vector3 value = *value_ptr; - ptr->max = value; - return JS_UNDEFINED; -} - -static const JSCFunctionListEntry js_BoundingBox_proto_funcs[] = { - JS_CGETSET_DEF("min",js_BoundingBox_get_min,js_BoundingBox_set_min), - JS_CGETSET_DEF("max",js_BoundingBox_get_max,js_BoundingBox_set_max), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","BoundingBox", JS_PROP_CONFIGURABLE), -}; - -static int js_declare_BoundingBox(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_BoundingBox_class_id); - JSClassDef js_BoundingBox_def = { .class_name = "BoundingBox", .finalizer = js_BoundingBox_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_BoundingBox_class_id, &js_BoundingBox_def); - JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_BoundingBox_proto_funcs, countof(js_BoundingBox_proto_funcs)); - JS_SetClassProto(ctx, js_BoundingBox_class_id, proto); - return 0; -} - static void js_Matrix_finalizer(JSRuntime * rt, JSValue val) { Matrix* ptr = JS_GetOpaque(val, js_Matrix_class_id); if(ptr) { @@ -819,6 +289,319 @@ static int js_declare_Matrix(JSContext * ctx, JSModuleDef * m) { return 0; } +static void js_Color_finalizer(JSRuntime * rt, JSValue val) { + Color* ptr = JS_GetOpaque(val, js_Color_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static JSValue js_Color_get_r(JSContext* ctx, JSValueConst this_val) { + Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); + unsigned char r = ptr->r; + JSValue ret = JS_NewUint32(ctx, r); + return ret; +} + +static JSValue js_Color_set_r(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); + unsigned int _int_value; + JS_ToUint32(ctx, &_int_value, v); + unsigned char value = (unsigned char)_int_value; + ptr->r = value; + return JS_UNDEFINED; +} + +static JSValue js_Color_get_g(JSContext* ctx, JSValueConst this_val) { + Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); + unsigned char g = ptr->g; + JSValue ret = JS_NewUint32(ctx, g); + return ret; +} + +static JSValue js_Color_set_g(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); + unsigned int _int_value; + JS_ToUint32(ctx, &_int_value, v); + unsigned char value = (unsigned char)_int_value; + ptr->g = value; + return JS_UNDEFINED; +} + +static JSValue js_Color_get_b(JSContext* ctx, JSValueConst this_val) { + Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); + unsigned char b = ptr->b; + JSValue ret = JS_NewUint32(ctx, b); + return ret; +} + +static JSValue js_Color_set_b(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); + unsigned int _int_value; + JS_ToUint32(ctx, &_int_value, v); + unsigned char value = (unsigned char)_int_value; + ptr->b = value; + return JS_UNDEFINED; +} + +static JSValue js_Color_get_a(JSContext* ctx, JSValueConst this_val) { + Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); + unsigned char a = ptr->a; + JSValue ret = JS_NewUint32(ctx, a); + return ret; +} + +static JSValue js_Color_set_a(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Color* ptr = JS_GetOpaque2(ctx, this_val, js_Color_class_id); + unsigned int _int_value; + JS_ToUint32(ctx, &_int_value, v); + unsigned char value = (unsigned char)_int_value; + ptr->a = value; + return JS_UNDEFINED; +} + +static const JSCFunctionListEntry js_Color_proto_funcs[] = { + JS_CGETSET_DEF("r",js_Color_get_r,js_Color_set_r), + JS_CGETSET_DEF("g",js_Color_get_g,js_Color_set_g), + JS_CGETSET_DEF("b",js_Color_get_b,js_Color_set_b), + JS_CGETSET_DEF("a",js_Color_get_a,js_Color_set_a), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","Color", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_Color(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_Color_class_id); + JSClassDef js_Color_def = { .class_name = "Color", .finalizer = js_Color_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_Color_class_id, &js_Color_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_Color_proto_funcs, countof(js_Color_proto_funcs)); + JS_SetClassProto(ctx, js_Color_class_id, proto); + return 0; +} + +static void js_Rectangle_finalizer(JSRuntime * rt, JSValue val) { + Rectangle* ptr = JS_GetOpaque(val, js_Rectangle_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static JSValue js_Rectangle_get_x(JSContext* ctx, JSValueConst this_val) { + Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); + float x = ptr->x; + JSValue ret = JS_NewFloat64(ctx, x); + return ret; +} + +static JSValue js_Rectangle_set_x(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); + double _double_value; + JS_ToFloat64(ctx, &_double_value, v); + float value = (float)_double_value; + ptr->x = value; + return JS_UNDEFINED; +} + +static JSValue js_Rectangle_get_y(JSContext* ctx, JSValueConst this_val) { + Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); + float y = ptr->y; + JSValue ret = JS_NewFloat64(ctx, y); + return ret; +} + +static JSValue js_Rectangle_set_y(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); + double _double_value; + JS_ToFloat64(ctx, &_double_value, v); + float value = (float)_double_value; + ptr->y = value; + return JS_UNDEFINED; +} + +static JSValue js_Rectangle_get_width(JSContext* ctx, JSValueConst this_val) { + Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); + float width = ptr->width; + JSValue ret = JS_NewFloat64(ctx, width); + return ret; +} + +static JSValue js_Rectangle_set_width(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); + double _double_value; + JS_ToFloat64(ctx, &_double_value, v); + float value = (float)_double_value; + ptr->width = value; + return JS_UNDEFINED; +} + +static JSValue js_Rectangle_get_height(JSContext* ctx, JSValueConst this_val) { + Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); + float height = ptr->height; + JSValue ret = JS_NewFloat64(ctx, height); + return ret; +} + +static JSValue js_Rectangle_set_height(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Rectangle* ptr = JS_GetOpaque2(ctx, this_val, js_Rectangle_class_id); + double _double_value; + JS_ToFloat64(ctx, &_double_value, v); + float value = (float)_double_value; + ptr->height = value; + return JS_UNDEFINED; +} + +static const JSCFunctionListEntry js_Rectangle_proto_funcs[] = { + JS_CGETSET_DEF("x",js_Rectangle_get_x,js_Rectangle_set_x), + JS_CGETSET_DEF("y",js_Rectangle_get_y,js_Rectangle_set_y), + JS_CGETSET_DEF("width",js_Rectangle_get_width,js_Rectangle_set_width), + JS_CGETSET_DEF("height",js_Rectangle_get_height,js_Rectangle_set_height), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","Rectangle", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_Rectangle(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_Rectangle_class_id); + JSClassDef js_Rectangle_def = { .class_name = "Rectangle", .finalizer = js_Rectangle_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_Rectangle_class_id, &js_Rectangle_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_Rectangle_proto_funcs, countof(js_Rectangle_proto_funcs)); + JS_SetClassProto(ctx, js_Rectangle_class_id, proto); + return 0; +} + +static void js_Image_finalizer(JSRuntime * rt, JSValue val) { + Image* ptr = JS_GetOpaque(val, js_Image_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static JSValue js_Image_get_width(JSContext* ctx, JSValueConst this_val) { + Image* ptr = JS_GetOpaque2(ctx, this_val, js_Image_class_id); + int width = ptr->width; + JSValue ret = JS_NewInt32(ctx, width); + return ret; +} + +static JSValue js_Image_get_height(JSContext* ctx, JSValueConst this_val) { + Image* ptr = JS_GetOpaque2(ctx, this_val, js_Image_class_id); + int height = ptr->height; + JSValue ret = JS_NewInt32(ctx, height); + return ret; +} + +static JSValue js_Image_get_mipmaps(JSContext* ctx, JSValueConst this_val) { + Image* ptr = JS_GetOpaque2(ctx, this_val, js_Image_class_id); + int mipmaps = ptr->mipmaps; + JSValue ret = JS_NewInt32(ctx, mipmaps); + return ret; +} + +static JSValue js_Image_get_format(JSContext* ctx, JSValueConst this_val) { + Image* ptr = JS_GetOpaque2(ctx, this_val, js_Image_class_id); + int format = ptr->format; + JSValue ret = JS_NewInt32(ctx, format); + return ret; +} + +static const JSCFunctionListEntry js_Image_proto_funcs[] = { + JS_CGETSET_DEF("width",js_Image_get_width,NULL), + JS_CGETSET_DEF("height",js_Image_get_height,NULL), + JS_CGETSET_DEF("mipmaps",js_Image_get_mipmaps,NULL), + JS_CGETSET_DEF("format",js_Image_get_format,NULL), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","Image", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_Image(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_Image_class_id); + JSClassDef js_Image_def = { .class_name = "Image", .finalizer = js_Image_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_Image_class_id, &js_Image_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_Image_proto_funcs, countof(js_Image_proto_funcs)); + JS_SetClassProto(ctx, js_Image_class_id, proto); + return 0; +} + +static void js_Texture_finalizer(JSRuntime * rt, JSValue val) { + Texture* ptr = JS_GetOpaque(val, js_Texture_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static JSValue js_Texture_get_width(JSContext* ctx, JSValueConst this_val) { + Texture* ptr = JS_GetOpaque2(ctx, this_val, js_Texture_class_id); + int width = ptr->width; + JSValue ret = JS_NewInt32(ctx, width); + return ret; +} + +static JSValue js_Texture_get_height(JSContext* ctx, JSValueConst this_val) { + Texture* ptr = JS_GetOpaque2(ctx, this_val, js_Texture_class_id); + int height = ptr->height; + JSValue ret = JS_NewInt32(ctx, height); + return ret; +} + +static JSValue js_Texture_get_mipmaps(JSContext* ctx, JSValueConst this_val) { + Texture* ptr = JS_GetOpaque2(ctx, this_val, js_Texture_class_id); + int mipmaps = ptr->mipmaps; + JSValue ret = JS_NewInt32(ctx, mipmaps); + return ret; +} + +static JSValue js_Texture_get_format(JSContext* ctx, JSValueConst this_val) { + Texture* ptr = JS_GetOpaque2(ctx, this_val, js_Texture_class_id); + int format = ptr->format; + JSValue ret = JS_NewInt32(ctx, format); + return ret; +} + +static const JSCFunctionListEntry js_Texture_proto_funcs[] = { + JS_CGETSET_DEF("width",js_Texture_get_width,NULL), + JS_CGETSET_DEF("height",js_Texture_get_height,NULL), + JS_CGETSET_DEF("mipmaps",js_Texture_get_mipmaps,NULL), + JS_CGETSET_DEF("format",js_Texture_get_format,NULL), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","Texture", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_Texture(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_Texture_class_id); + JSClassDef js_Texture_def = { .class_name = "Texture", .finalizer = js_Texture_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_Texture_class_id, &js_Texture_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_Texture_proto_funcs, countof(js_Texture_proto_funcs)); + JS_SetClassProto(ctx, js_Texture_class_id, proto); + return 0; +} + +static void js_RenderTexture_finalizer(JSRuntime * rt, JSValue val) { + RenderTexture* ptr = JS_GetOpaque(val, js_RenderTexture_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static JSValue js_RenderTexture_get_id(JSContext* ctx, JSValueConst this_val) { + RenderTexture* ptr = JS_GetOpaque2(ctx, this_val, js_RenderTexture_class_id); + unsigned int id = ptr->id; + JSValue ret = JS_NewUint32(ctx, id); + return ret; +} + +static const JSCFunctionListEntry js_RenderTexture_proto_funcs[] = { + JS_CGETSET_DEF("id",js_RenderTexture_get_id,NULL), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","RenderTexture", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_RenderTexture(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_RenderTexture_class_id); + JSClassDef js_RenderTexture_def = { .class_name = "RenderTexture", .finalizer = js_RenderTexture_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_RenderTexture_class_id, &js_RenderTexture_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_RenderTexture_proto_funcs, countof(js_RenderTexture_proto_funcs)); + JS_SetClassProto(ctx, js_RenderTexture_class_id, proto); + return 0; +} + static void js_NPatchInfo_finalizer(JSRuntime * rt, JSValue val) { NPatchInfo* ptr = JS_GetOpaque(val, js_NPatchInfo_class_id); if(ptr) { @@ -940,255 +723,268 @@ static int js_declare_NPatchInfo(JSContext * ctx, JSModuleDef * m) { return 0; } -static void js_Image_finalizer(JSRuntime * rt, JSValue val) { - Image* ptr = JS_GetOpaque(val, js_Image_class_id); +static void js_GlyphInfo_finalizer(JSRuntime * rt, JSValue val) { + GlyphInfo* ptr = JS_GetOpaque(val, js_GlyphInfo_class_id); if(ptr) { js_free_rt(rt, ptr); } } -static JSValue js_Image_get_width(JSContext* ctx, JSValueConst this_val) { - Image* ptr = JS_GetOpaque2(ctx, this_val, js_Image_class_id); - int width = ptr->width; - JSValue ret = JS_NewInt32(ctx, width); - return ret; -} - -static JSValue js_Image_get_height(JSContext* ctx, JSValueConst this_val) { - Image* ptr = JS_GetOpaque2(ctx, this_val, js_Image_class_id); - int height = ptr->height; - JSValue ret = JS_NewInt32(ctx, height); - return ret; -} - -static JSValue js_Image_get_mipmaps(JSContext* ctx, JSValueConst this_val) { - Image* ptr = JS_GetOpaque2(ctx, this_val, js_Image_class_id); - int mipmaps = ptr->mipmaps; - JSValue ret = JS_NewInt32(ctx, mipmaps); - return ret; -} - -static JSValue js_Image_get_format(JSContext* ctx, JSValueConst this_val) { - Image* ptr = JS_GetOpaque2(ctx, this_val, js_Image_class_id); - int format = ptr->format; - JSValue ret = JS_NewInt32(ctx, format); - return ret; -} - -static const JSCFunctionListEntry js_Image_proto_funcs[] = { - JS_CGETSET_DEF("width",js_Image_get_width,NULL), - JS_CGETSET_DEF("height",js_Image_get_height,NULL), - JS_CGETSET_DEF("mipmaps",js_Image_get_mipmaps,NULL), - JS_CGETSET_DEF("format",js_Image_get_format,NULL), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","Image", JS_PROP_CONFIGURABLE), +static const JSCFunctionListEntry js_GlyphInfo_proto_funcs[] = { + JS_PROP_STRING_DEF("[Symbol.toStringTag]","GlyphInfo", JS_PROP_CONFIGURABLE), }; -static int js_declare_Image(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_Image_class_id); - JSClassDef js_Image_def = { .class_name = "Image", .finalizer = js_Image_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_Image_class_id, &js_Image_def); +static int js_declare_GlyphInfo(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_GlyphInfo_class_id); + JSClassDef js_GlyphInfo_def = { .class_name = "GlyphInfo", .finalizer = js_GlyphInfo_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_GlyphInfo_class_id, &js_GlyphInfo_def); JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_Image_proto_funcs, countof(js_Image_proto_funcs)); - JS_SetClassProto(ctx, js_Image_class_id, proto); + JS_SetPropertyFunctionList(ctx, proto, js_GlyphInfo_proto_funcs, countof(js_GlyphInfo_proto_funcs)); + JS_SetClassProto(ctx, js_GlyphInfo_class_id, proto); return 0; } -static void js_Wave_finalizer(JSRuntime * rt, JSValue val) { - Wave* ptr = JS_GetOpaque(val, js_Wave_class_id); +static void js_Font_finalizer(JSRuntime * rt, JSValue val) { + Font* ptr = JS_GetOpaque(val, js_Font_class_id); if(ptr) { js_free_rt(rt, ptr); } } -static JSValue js_Wave_get_frameCount(JSContext* ctx, JSValueConst this_val) { - Wave* ptr = JS_GetOpaque2(ctx, this_val, js_Wave_class_id); - unsigned int frameCount = ptr->frameCount; - JSValue ret = JS_NewUint32(ctx, frameCount); +static JSValue js_Font_get_baseSize(JSContext* ctx, JSValueConst this_val) { + Font* ptr = JS_GetOpaque2(ctx, this_val, js_Font_class_id); + int baseSize = ptr->baseSize; + JSValue ret = JS_NewInt32(ctx, baseSize); return ret; } -static JSValue js_Wave_get_sampleRate(JSContext* ctx, JSValueConst this_val) { - Wave* ptr = JS_GetOpaque2(ctx, this_val, js_Wave_class_id); - unsigned int sampleRate = ptr->sampleRate; - JSValue ret = JS_NewUint32(ctx, sampleRate); +static JSValue js_Font_get_glyphCount(JSContext* ctx, JSValueConst this_val) { + Font* ptr = JS_GetOpaque2(ctx, this_val, js_Font_class_id); + int glyphCount = ptr->glyphCount; + JSValue ret = JS_NewInt32(ctx, glyphCount); return ret; } -static JSValue js_Wave_get_sampleSize(JSContext* ctx, JSValueConst this_val) { - Wave* ptr = JS_GetOpaque2(ctx, this_val, js_Wave_class_id); - unsigned int sampleSize = ptr->sampleSize; - JSValue ret = JS_NewUint32(ctx, sampleSize); +static JSValue js_Font_get_glyphPadding(JSContext* ctx, JSValueConst this_val) { + Font* ptr = JS_GetOpaque2(ctx, this_val, js_Font_class_id); + int glyphPadding = ptr->glyphPadding; + JSValue ret = JS_NewInt32(ctx, glyphPadding); return ret; } -static JSValue js_Wave_get_channels(JSContext* ctx, JSValueConst this_val) { - Wave* ptr = JS_GetOpaque2(ctx, this_val, js_Wave_class_id); - unsigned int channels = ptr->channels; - JSValue ret = JS_NewUint32(ctx, channels); - return ret; -} - -static const JSCFunctionListEntry js_Wave_proto_funcs[] = { - JS_CGETSET_DEF("frameCount",js_Wave_get_frameCount,NULL), - JS_CGETSET_DEF("sampleRate",js_Wave_get_sampleRate,NULL), - JS_CGETSET_DEF("sampleSize",js_Wave_get_sampleSize,NULL), - JS_CGETSET_DEF("channels",js_Wave_get_channels,NULL), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","Wave", JS_PROP_CONFIGURABLE), +static const JSCFunctionListEntry js_Font_proto_funcs[] = { + JS_CGETSET_DEF("baseSize",js_Font_get_baseSize,NULL), + JS_CGETSET_DEF("glyphCount",js_Font_get_glyphCount,NULL), + JS_CGETSET_DEF("glyphPadding",js_Font_get_glyphPadding,NULL), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","Font", JS_PROP_CONFIGURABLE), }; -static int js_declare_Wave(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_Wave_class_id); - JSClassDef js_Wave_def = { .class_name = "Wave", .finalizer = js_Wave_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_Wave_class_id, &js_Wave_def); +static int js_declare_Font(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_Font_class_id); + JSClassDef js_Font_def = { .class_name = "Font", .finalizer = js_Font_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_Font_class_id, &js_Font_def); JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_Wave_proto_funcs, countof(js_Wave_proto_funcs)); - JS_SetClassProto(ctx, js_Wave_class_id, proto); + JS_SetPropertyFunctionList(ctx, proto, js_Font_proto_funcs, countof(js_Font_proto_funcs)); + JS_SetClassProto(ctx, js_Font_class_id, proto); return 0; } -static void js_Sound_finalizer(JSRuntime * rt, JSValue val) { - Sound* ptr = JS_GetOpaque(val, js_Sound_class_id); +static void js_Camera3D_finalizer(JSRuntime * rt, JSValue val) { + Camera3D* ptr = JS_GetOpaque(val, js_Camera3D_class_id); if(ptr) { js_free_rt(rt, ptr); } } -static JSValue js_Sound_get_frameCount(JSContext* ctx, JSValueConst this_val) { - Sound* ptr = JS_GetOpaque2(ctx, this_val, js_Sound_class_id); - unsigned int frameCount = ptr->frameCount; - JSValue ret = JS_NewUint32(ctx, frameCount); - return ret; -} - -static const JSCFunctionListEntry js_Sound_proto_funcs[] = { - JS_CGETSET_DEF("frameCount",js_Sound_get_frameCount,NULL), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","Sound", JS_PROP_CONFIGURABLE), -}; - -static int js_declare_Sound(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_Sound_class_id); - JSClassDef js_Sound_def = { .class_name = "Sound", .finalizer = js_Sound_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_Sound_class_id, &js_Sound_def); - JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_Sound_proto_funcs, countof(js_Sound_proto_funcs)); - JS_SetClassProto(ctx, js_Sound_class_id, proto); - return 0; -} - -static void js_Music_finalizer(JSRuntime * rt, JSValue val) { - Music* ptr = JS_GetOpaque(val, js_Music_class_id); - if(ptr) { - js_free_rt(rt, ptr); - } -} - -static JSValue js_Music_get_frameCount(JSContext* ctx, JSValueConst this_val) { - Music* ptr = JS_GetOpaque2(ctx, this_val, js_Music_class_id); - unsigned int frameCount = ptr->frameCount; - JSValue ret = JS_NewUint32(ctx, frameCount); - return ret; -} - -static JSValue js_Music_get_looping(JSContext* ctx, JSValueConst this_val) { - Music* ptr = JS_GetOpaque2(ctx, this_val, js_Music_class_id); - bool looping = ptr->looping; - JSValue ret = JS_NewBool(ctx, looping); - return ret; -} - -static JSValue js_Music_set_looping(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Music* ptr = JS_GetOpaque2(ctx, this_val, js_Music_class_id); - bool value = JS_ToBool(ctx, v); - ptr->looping = value; - return JS_UNDEFINED; -} - -static JSValue js_Music_get_ctxType(JSContext* ctx, JSValueConst this_val) { - Music* ptr = JS_GetOpaque2(ctx, this_val, js_Music_class_id); - int ctxType = ptr->ctxType; - JSValue ret = JS_NewInt32(ctx, ctxType); - return ret; -} - -static const JSCFunctionListEntry js_Music_proto_funcs[] = { - JS_CGETSET_DEF("frameCount",js_Music_get_frameCount,NULL), - JS_CGETSET_DEF("looping",js_Music_get_looping,js_Music_set_looping), - JS_CGETSET_DEF("ctxType",js_Music_get_ctxType,NULL), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","Music", JS_PROP_CONFIGURABLE), -}; - -static int js_declare_Music(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_Music_class_id); - JSClassDef js_Music_def = { .class_name = "Music", .finalizer = js_Music_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_Music_class_id, &js_Music_def); - JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_Music_proto_funcs, countof(js_Music_proto_funcs)); - JS_SetClassProto(ctx, js_Music_class_id, proto); - return 0; -} - -static void js_Model_finalizer(JSRuntime * rt, JSValue val) { - Model* ptr = JS_GetOpaque(val, js_Model_class_id); - if(ptr) { - js_free_rt(rt, ptr); - } -} - -static JSValue js_Model_get_transform(JSContext* ctx, JSValueConst this_val) { - Model* ptr = JS_GetOpaque2(ctx, this_val, js_Model_class_id); - Matrix transform = ptr->transform; - Matrix* ret_ptr = (Matrix*)js_malloc(ctx, sizeof(Matrix)); - *ret_ptr = transform; - JSValue ret = JS_NewObjectClass(ctx, js_Matrix_class_id); +static JSValue js_Camera3D_get_position(JSContext* ctx, JSValueConst this_val) { + Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); + Vector3 position = ptr->position; + Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); + *ret_ptr = position; + JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); JS_SetOpaque(ret, ret_ptr); return ret; } -static JSValue js_Model_set_transform(JSContext* ctx, JSValueConst this_val, JSValueConst v) { - Model* ptr = JS_GetOpaque2(ctx, this_val, js_Model_class_id); - Matrix* value_ptr = (Matrix*)JS_GetOpaque2(ctx, v, js_Matrix_class_id); +static JSValue js_Camera3D_set_position(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); + Vector3* value_ptr = (Vector3*)JS_GetOpaque2(ctx, v, js_Vector3_class_id); if(value_ptr == NULL) return JS_EXCEPTION; - Matrix value = *value_ptr; - ptr->transform = value; + Vector3 value = *value_ptr; + ptr->position = value; return JS_UNDEFINED; } -static JSValue js_Model_get_meshCount(JSContext* ctx, JSValueConst this_val) { - Model* ptr = JS_GetOpaque2(ctx, this_val, js_Model_class_id); - int meshCount = ptr->meshCount; - JSValue ret = JS_NewInt32(ctx, meshCount); +static JSValue js_Camera3D_get_target(JSContext* ctx, JSValueConst this_val) { + Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); + Vector3 target = ptr->target; + Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); + *ret_ptr = target; + JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); + JS_SetOpaque(ret, ret_ptr); return ret; } -static JSValue js_Model_get_materialCount(JSContext* ctx, JSValueConst this_val) { - Model* ptr = JS_GetOpaque2(ctx, this_val, js_Model_class_id); - int materialCount = ptr->materialCount; - JSValue ret = JS_NewInt32(ctx, materialCount); +static JSValue js_Camera3D_set_target(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); + Vector3* value_ptr = (Vector3*)JS_GetOpaque2(ctx, v, js_Vector3_class_id); + if(value_ptr == NULL) return JS_EXCEPTION; + Vector3 value = *value_ptr; + ptr->target = value; + return JS_UNDEFINED; +} + +static JSValue js_Camera3D_set_up(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); + Vector3* value_ptr = (Vector3*)JS_GetOpaque2(ctx, v, js_Vector3_class_id); + if(value_ptr == NULL) return JS_EXCEPTION; + Vector3 value = *value_ptr; + ptr->up = value; + return JS_UNDEFINED; +} + +static JSValue js_Camera3D_get_fovy(JSContext* ctx, JSValueConst this_val) { + Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); + float fovy = ptr->fovy; + JSValue ret = JS_NewFloat64(ctx, fovy); return ret; } -static JSValue js_Model_get_boneCount(JSContext* ctx, JSValueConst this_val) { - Model* ptr = JS_GetOpaque2(ctx, this_val, js_Model_class_id); - int boneCount = ptr->boneCount; - JSValue ret = JS_NewInt32(ctx, boneCount); +static JSValue js_Camera3D_set_fovy(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); + double _double_value; + JS_ToFloat64(ctx, &_double_value, v); + float value = (float)_double_value; + ptr->fovy = value; + return JS_UNDEFINED; +} + +static JSValue js_Camera3D_get_projection(JSContext* ctx, JSValueConst this_val) { + Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); + int projection = ptr->projection; + JSValue ret = JS_NewInt32(ctx, projection); return ret; } -static const JSCFunctionListEntry js_Model_proto_funcs[] = { - JS_CGETSET_DEF("transform",js_Model_get_transform,js_Model_set_transform), - JS_CGETSET_DEF("meshCount",js_Model_get_meshCount,NULL), - JS_CGETSET_DEF("materialCount",js_Model_get_materialCount,NULL), - JS_CGETSET_DEF("boneCount",js_Model_get_boneCount,NULL), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","Model", JS_PROP_CONFIGURABLE), +static JSValue js_Camera3D_set_projection(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Camera3D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera3D_class_id); + int value; + JS_ToInt32(ctx, &value, v); + ptr->projection = value; + return JS_UNDEFINED; +} + +static const JSCFunctionListEntry js_Camera3D_proto_funcs[] = { + JS_CGETSET_DEF("position",js_Camera3D_get_position,js_Camera3D_set_position), + JS_CGETSET_DEF("target",js_Camera3D_get_target,js_Camera3D_set_target), + JS_CGETSET_DEF("up",NULL,js_Camera3D_set_up), + JS_CGETSET_DEF("fovy",js_Camera3D_get_fovy,js_Camera3D_set_fovy), + JS_CGETSET_DEF("projection",js_Camera3D_get_projection,js_Camera3D_set_projection), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","Camera3D", JS_PROP_CONFIGURABLE), }; -static int js_declare_Model(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_Model_class_id); - JSClassDef js_Model_def = { .class_name = "Model", .finalizer = js_Model_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_Model_class_id, &js_Model_def); +static int js_declare_Camera3D(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_Camera3D_class_id); + JSClassDef js_Camera3D_def = { .class_name = "Camera3D", .finalizer = js_Camera3D_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_Camera3D_class_id, &js_Camera3D_def); JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_Model_proto_funcs, countof(js_Model_proto_funcs)); - JS_SetClassProto(ctx, js_Model_class_id, proto); + JS_SetPropertyFunctionList(ctx, proto, js_Camera3D_proto_funcs, countof(js_Camera3D_proto_funcs)); + JS_SetClassProto(ctx, js_Camera3D_class_id, proto); + return 0; +} + +static void js_Camera2D_finalizer(JSRuntime * rt, JSValue val) { + Camera2D* ptr = JS_GetOpaque(val, js_Camera2D_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static JSValue js_Camera2D_get_offset(JSContext* ctx, JSValueConst this_val) { + Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); + Vector2 offset = ptr->offset; + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = offset; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_Camera2D_set_offset(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); + Vector2* value_ptr = (Vector2*)JS_GetOpaque2(ctx, v, js_Vector2_class_id); + if(value_ptr == NULL) return JS_EXCEPTION; + Vector2 value = *value_ptr; + ptr->offset = value; + return JS_UNDEFINED; +} + +static JSValue js_Camera2D_get_target(JSContext* ctx, JSValueConst this_val) { + Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); + Vector2 target = ptr->target; + Vector2* ret_ptr = (Vector2*)js_malloc(ctx, sizeof(Vector2)); + *ret_ptr = target; + JSValue ret = JS_NewObjectClass(ctx, js_Vector2_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_Camera2D_set_target(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); + Vector2* value_ptr = (Vector2*)JS_GetOpaque2(ctx, v, js_Vector2_class_id); + if(value_ptr == NULL) return JS_EXCEPTION; + Vector2 value = *value_ptr; + ptr->target = value; + return JS_UNDEFINED; +} + +static JSValue js_Camera2D_get_rotation(JSContext* ctx, JSValueConst this_val) { + Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); + float rotation = ptr->rotation; + JSValue ret = JS_NewFloat64(ctx, rotation); + return ret; +} + +static JSValue js_Camera2D_set_rotation(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); + double _double_value; + JS_ToFloat64(ctx, &_double_value, v); + float value = (float)_double_value; + ptr->rotation = value; + return JS_UNDEFINED; +} + +static JSValue js_Camera2D_get_zoom(JSContext* ctx, JSValueConst this_val) { + Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); + float zoom = ptr->zoom; + JSValue ret = JS_NewFloat64(ctx, zoom); + return ret; +} + +static JSValue js_Camera2D_set_zoom(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Camera2D* ptr = JS_GetOpaque2(ctx, this_val, js_Camera2D_class_id); + double _double_value; + JS_ToFloat64(ctx, &_double_value, v); + float value = (float)_double_value; + ptr->zoom = value; + return JS_UNDEFINED; +} + +static const JSCFunctionListEntry js_Camera2D_proto_funcs[] = { + JS_CGETSET_DEF("offset",js_Camera2D_get_offset,js_Camera2D_set_offset), + JS_CGETSET_DEF("target",js_Camera2D_get_target,js_Camera2D_set_target), + JS_CGETSET_DEF("rotation",js_Camera2D_get_rotation,js_Camera2D_set_rotation), + JS_CGETSET_DEF("zoom",js_Camera2D_get_zoom,js_Camera2D_set_zoom), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","Camera2D", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_Camera2D(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_Camera2D_class_id); + JSClassDef js_Camera2D_def = { .class_name = "Camera2D", .finalizer = js_Camera2D_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_Camera2D_class_id, &js_Camera2D_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_Camera2D_proto_funcs, countof(js_Camera2D_proto_funcs)); + JS_SetClassProto(ctx, js_Camera2D_class_id, proto); return 0; } @@ -1428,133 +1224,6 @@ static int js_declare_Shader(JSContext * ctx, JSModuleDef * m) { return 0; } -static void js_Texture_finalizer(JSRuntime * rt, JSValue val) { - Texture* ptr = JS_GetOpaque(val, js_Texture_class_id); - if(ptr) { - js_free_rt(rt, ptr); - } -} - -static JSValue js_Texture_get_width(JSContext* ctx, JSValueConst this_val) { - Texture* ptr = JS_GetOpaque2(ctx, this_val, js_Texture_class_id); - int width = ptr->width; - JSValue ret = JS_NewInt32(ctx, width); - return ret; -} - -static JSValue js_Texture_get_height(JSContext* ctx, JSValueConst this_val) { - Texture* ptr = JS_GetOpaque2(ctx, this_val, js_Texture_class_id); - int height = ptr->height; - JSValue ret = JS_NewInt32(ctx, height); - return ret; -} - -static JSValue js_Texture_get_mipmaps(JSContext* ctx, JSValueConst this_val) { - Texture* ptr = JS_GetOpaque2(ctx, this_val, js_Texture_class_id); - int mipmaps = ptr->mipmaps; - JSValue ret = JS_NewInt32(ctx, mipmaps); - return ret; -} - -static JSValue js_Texture_get_format(JSContext* ctx, JSValueConst this_val) { - Texture* ptr = JS_GetOpaque2(ctx, this_val, js_Texture_class_id); - int format = ptr->format; - JSValue ret = JS_NewInt32(ctx, format); - return ret; -} - -static const JSCFunctionListEntry js_Texture_proto_funcs[] = { - JS_CGETSET_DEF("width",js_Texture_get_width,NULL), - JS_CGETSET_DEF("height",js_Texture_get_height,NULL), - JS_CGETSET_DEF("mipmaps",js_Texture_get_mipmaps,NULL), - JS_CGETSET_DEF("format",js_Texture_get_format,NULL), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","Texture", JS_PROP_CONFIGURABLE), -}; - -static int js_declare_Texture(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_Texture_class_id); - JSClassDef js_Texture_def = { .class_name = "Texture", .finalizer = js_Texture_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_Texture_class_id, &js_Texture_def); - JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_Texture_proto_funcs, countof(js_Texture_proto_funcs)); - JS_SetClassProto(ctx, js_Texture_class_id, proto); - return 0; -} - -static void js_Font_finalizer(JSRuntime * rt, JSValue val) { - Font* ptr = JS_GetOpaque(val, js_Font_class_id); - if(ptr) { - js_free_rt(rt, ptr); - } -} - -static JSValue js_Font_get_baseSize(JSContext* ctx, JSValueConst this_val) { - Font* ptr = JS_GetOpaque2(ctx, this_val, js_Font_class_id); - int baseSize = ptr->baseSize; - JSValue ret = JS_NewInt32(ctx, baseSize); - return ret; -} - -static JSValue js_Font_get_glyphCount(JSContext* ctx, JSValueConst this_val) { - Font* ptr = JS_GetOpaque2(ctx, this_val, js_Font_class_id); - int glyphCount = ptr->glyphCount; - JSValue ret = JS_NewInt32(ctx, glyphCount); - return ret; -} - -static JSValue js_Font_get_glyphPadding(JSContext* ctx, JSValueConst this_val) { - Font* ptr = JS_GetOpaque2(ctx, this_val, js_Font_class_id); - int glyphPadding = ptr->glyphPadding; - JSValue ret = JS_NewInt32(ctx, glyphPadding); - return ret; -} - -static const JSCFunctionListEntry js_Font_proto_funcs[] = { - JS_CGETSET_DEF("baseSize",js_Font_get_baseSize,NULL), - JS_CGETSET_DEF("glyphCount",js_Font_get_glyphCount,NULL), - JS_CGETSET_DEF("glyphPadding",js_Font_get_glyphPadding,NULL), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","Font", JS_PROP_CONFIGURABLE), -}; - -static int js_declare_Font(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_Font_class_id); - JSClassDef js_Font_def = { .class_name = "Font", .finalizer = js_Font_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_Font_class_id, &js_Font_def); - JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_Font_proto_funcs, countof(js_Font_proto_funcs)); - JS_SetClassProto(ctx, js_Font_class_id, proto); - return 0; -} - -static void js_RenderTexture_finalizer(JSRuntime * rt, JSValue val) { - RenderTexture* ptr = JS_GetOpaque(val, js_RenderTexture_class_id); - if(ptr) { - js_free_rt(rt, ptr); - } -} - -static JSValue js_RenderTexture_get_id(JSContext* ctx, JSValueConst this_val) { - RenderTexture* ptr = JS_GetOpaque2(ctx, this_val, js_RenderTexture_class_id); - unsigned int id = ptr->id; - JSValue ret = JS_NewUint32(ctx, id); - return ret; -} - -static const JSCFunctionListEntry js_RenderTexture_proto_funcs[] = { - JS_CGETSET_DEF("id",js_RenderTexture_get_id,NULL), - JS_PROP_STRING_DEF("[Symbol.toStringTag]","RenderTexture", JS_PROP_CONFIGURABLE), -}; - -static int js_declare_RenderTexture(JSContext * ctx, JSModuleDef * m) { - JS_NewClassID(&js_RenderTexture_class_id); - JSClassDef js_RenderTexture_def = { .class_name = "RenderTexture", .finalizer = js_RenderTexture_finalizer }; - JS_NewClass(JS_GetRuntime(ctx), js_RenderTexture_class_id, &js_RenderTexture_def); - JSValue proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_RenderTexture_proto_funcs, countof(js_RenderTexture_proto_funcs)); - JS_SetClassProto(ctx, js_RenderTexture_class_id, proto); - return 0; -} - static void js_MaterialMap_finalizer(JSRuntime * rt, JSValue val) { MaterialMap* ptr = JS_GetOpaque(val, js_MaterialMap_class_id); if(ptr) { @@ -1654,46 +1323,511 @@ static int js_declare_Material(JSContext * ctx, JSModuleDef * m) { return 0; } -static JSValue js_Color_constructor(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { - unsigned int _int_r; - JS_ToUint32(ctx, &_int_r, argv[0]); - unsigned char r = (unsigned char)_int_r; - unsigned int _int_g; - JS_ToUint32(ctx, &_int_g, argv[1]); - unsigned char g = (unsigned char)_int_g; - unsigned int _int_b; - JS_ToUint32(ctx, &_int_b, argv[2]); - unsigned char b = (unsigned char)_int_b; - unsigned int _int_a; - JS_ToUint32(ctx, &_int_a, argv[3]); - unsigned char a = (unsigned char)_int_a; - Color _struct = { r, g, b, a }; - Color* _return_ptr = (Color*)js_malloc(ctx, sizeof(Color)); - *_return_ptr = _struct; - JSValue _return = JS_NewObjectClass(ctx, js_Color_class_id); - JS_SetOpaque(_return, _return_ptr); - return _return; +static void js_Transform_finalizer(JSRuntime * rt, JSValue val) { + Transform* ptr = JS_GetOpaque(val, js_Transform_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } } -static JSValue js_Rectangle_constructor(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; - double _double_width; - JS_ToFloat64(ctx, &_double_width, argv[2]); - float width = (float)_double_width; - double _double_height; - JS_ToFloat64(ctx, &_double_height, argv[3]); - float height = (float)_double_height; - Rectangle _struct = { x, y, width, height }; - Rectangle* _return_ptr = (Rectangle*)js_malloc(ctx, sizeof(Rectangle)); - *_return_ptr = _struct; - JSValue _return = JS_NewObjectClass(ctx, js_Rectangle_class_id); - JS_SetOpaque(_return, _return_ptr); - return _return; +static const JSCFunctionListEntry js_Transform_proto_funcs[] = { + JS_PROP_STRING_DEF("[Symbol.toStringTag]","Transform", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_Transform(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_Transform_class_id); + JSClassDef js_Transform_def = { .class_name = "Transform", .finalizer = js_Transform_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_Transform_class_id, &js_Transform_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_Transform_proto_funcs, countof(js_Transform_proto_funcs)); + JS_SetClassProto(ctx, js_Transform_class_id, proto); + return 0; +} + +static void js_BoneInfo_finalizer(JSRuntime * rt, JSValue val) { + BoneInfo* ptr = JS_GetOpaque(val, js_BoneInfo_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static const JSCFunctionListEntry js_BoneInfo_proto_funcs[] = { + JS_PROP_STRING_DEF("[Symbol.toStringTag]","BoneInfo", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_BoneInfo(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_BoneInfo_class_id); + JSClassDef js_BoneInfo_def = { .class_name = "BoneInfo", .finalizer = js_BoneInfo_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_BoneInfo_class_id, &js_BoneInfo_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_BoneInfo_proto_funcs, countof(js_BoneInfo_proto_funcs)); + JS_SetClassProto(ctx, js_BoneInfo_class_id, proto); + return 0; +} + +static void js_Model_finalizer(JSRuntime * rt, JSValue val) { + Model* ptr = JS_GetOpaque(val, js_Model_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static JSValue js_Model_get_transform(JSContext* ctx, JSValueConst this_val) { + Model* ptr = JS_GetOpaque2(ctx, this_val, js_Model_class_id); + Matrix transform = ptr->transform; + Matrix* ret_ptr = (Matrix*)js_malloc(ctx, sizeof(Matrix)); + *ret_ptr = transform; + JSValue ret = JS_NewObjectClass(ctx, js_Matrix_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_Model_set_transform(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Model* ptr = JS_GetOpaque2(ctx, this_val, js_Model_class_id); + Matrix* value_ptr = (Matrix*)JS_GetOpaque2(ctx, v, js_Matrix_class_id); + if(value_ptr == NULL) return JS_EXCEPTION; + Matrix value = *value_ptr; + ptr->transform = value; + return JS_UNDEFINED; +} + +static JSValue js_Model_get_meshCount(JSContext* ctx, JSValueConst this_val) { + Model* ptr = JS_GetOpaque2(ctx, this_val, js_Model_class_id); + int meshCount = ptr->meshCount; + JSValue ret = JS_NewInt32(ctx, meshCount); + return ret; +} + +static JSValue js_Model_get_materialCount(JSContext* ctx, JSValueConst this_val) { + Model* ptr = JS_GetOpaque2(ctx, this_val, js_Model_class_id); + int materialCount = ptr->materialCount; + JSValue ret = JS_NewInt32(ctx, materialCount); + return ret; +} + +static JSValue js_Model_get_boneCount(JSContext* ctx, JSValueConst this_val) { + Model* ptr = JS_GetOpaque2(ctx, this_val, js_Model_class_id); + int boneCount = ptr->boneCount; + JSValue ret = JS_NewInt32(ctx, boneCount); + return ret; +} + +static const JSCFunctionListEntry js_Model_proto_funcs[] = { + JS_CGETSET_DEF("transform",js_Model_get_transform,js_Model_set_transform), + JS_CGETSET_DEF("meshCount",js_Model_get_meshCount,NULL), + JS_CGETSET_DEF("materialCount",js_Model_get_materialCount,NULL), + JS_CGETSET_DEF("boneCount",js_Model_get_boneCount,NULL), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","Model", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_Model(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_Model_class_id); + JSClassDef js_Model_def = { .class_name = "Model", .finalizer = js_Model_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_Model_class_id, &js_Model_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_Model_proto_funcs, countof(js_Model_proto_funcs)); + JS_SetClassProto(ctx, js_Model_class_id, proto); + return 0; +} + +static void js_ModelAnimation_finalizer(JSRuntime * rt, JSValue val) { + ModelAnimation* ptr = JS_GetOpaque(val, js_ModelAnimation_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static const JSCFunctionListEntry js_ModelAnimation_proto_funcs[] = { + JS_PROP_STRING_DEF("[Symbol.toStringTag]","ModelAnimation", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_ModelAnimation(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_ModelAnimation_class_id); + JSClassDef js_ModelAnimation_def = { .class_name = "ModelAnimation", .finalizer = js_ModelAnimation_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_ModelAnimation_class_id, &js_ModelAnimation_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_ModelAnimation_proto_funcs, countof(js_ModelAnimation_proto_funcs)); + JS_SetClassProto(ctx, js_ModelAnimation_class_id, proto); + return 0; +} + +static void js_Ray_finalizer(JSRuntime * rt, JSValue val) { + Ray* ptr = JS_GetOpaque(val, js_Ray_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static JSValue js_Ray_set_position(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Ray* ptr = JS_GetOpaque2(ctx, this_val, js_Ray_class_id); + Vector3* value_ptr = (Vector3*)JS_GetOpaque2(ctx, v, js_Vector3_class_id); + if(value_ptr == NULL) return JS_EXCEPTION; + Vector3 value = *value_ptr; + ptr->position = value; + return JS_UNDEFINED; +} + +static JSValue js_Ray_set_direction(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Ray* ptr = JS_GetOpaque2(ctx, this_val, js_Ray_class_id); + Vector3* value_ptr = (Vector3*)JS_GetOpaque2(ctx, v, js_Vector3_class_id); + if(value_ptr == NULL) return JS_EXCEPTION; + Vector3 value = *value_ptr; + ptr->direction = value; + return JS_UNDEFINED; +} + +static const JSCFunctionListEntry js_Ray_proto_funcs[] = { + JS_CGETSET_DEF("position",NULL,js_Ray_set_position), + JS_CGETSET_DEF("direction",NULL,js_Ray_set_direction), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","Ray", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_Ray(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_Ray_class_id); + JSClassDef js_Ray_def = { .class_name = "Ray", .finalizer = js_Ray_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_Ray_class_id, &js_Ray_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_Ray_proto_funcs, countof(js_Ray_proto_funcs)); + JS_SetClassProto(ctx, js_Ray_class_id, proto); + return 0; +} + +static void js_RayCollision_finalizer(JSRuntime * rt, JSValue val) { + RayCollision* ptr = JS_GetOpaque(val, js_RayCollision_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static JSValue js_RayCollision_get_hit(JSContext* ctx, JSValueConst this_val) { + RayCollision* ptr = JS_GetOpaque2(ctx, this_val, js_RayCollision_class_id); + bool hit = ptr->hit; + JSValue ret = JS_NewBool(ctx, hit); + return ret; +} + +static JSValue js_RayCollision_get_distance(JSContext* ctx, JSValueConst this_val) { + RayCollision* ptr = JS_GetOpaque2(ctx, this_val, js_RayCollision_class_id); + float distance = ptr->distance; + JSValue ret = JS_NewFloat64(ctx, distance); + return ret; +} + +static JSValue js_RayCollision_get_point(JSContext* ctx, JSValueConst this_val) { + RayCollision* ptr = JS_GetOpaque2(ctx, this_val, js_RayCollision_class_id); + Vector3 point = ptr->point; + Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); + *ret_ptr = point; + JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_RayCollision_get_normal(JSContext* ctx, JSValueConst this_val) { + RayCollision* ptr = JS_GetOpaque2(ctx, this_val, js_RayCollision_class_id); + Vector3 normal = ptr->normal; + Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); + *ret_ptr = normal; + JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static const JSCFunctionListEntry js_RayCollision_proto_funcs[] = { + JS_CGETSET_DEF("hit",js_RayCollision_get_hit,NULL), + JS_CGETSET_DEF("distance",js_RayCollision_get_distance,NULL), + JS_CGETSET_DEF("point",js_RayCollision_get_point,NULL), + JS_CGETSET_DEF("normal",js_RayCollision_get_normal,NULL), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","RayCollision", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_RayCollision(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_RayCollision_class_id); + JSClassDef js_RayCollision_def = { .class_name = "RayCollision", .finalizer = js_RayCollision_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_RayCollision_class_id, &js_RayCollision_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_RayCollision_proto_funcs, countof(js_RayCollision_proto_funcs)); + JS_SetClassProto(ctx, js_RayCollision_class_id, proto); + return 0; +} + +static void js_BoundingBox_finalizer(JSRuntime * rt, JSValue val) { + BoundingBox* ptr = JS_GetOpaque(val, js_BoundingBox_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static JSValue js_BoundingBox_get_min(JSContext* ctx, JSValueConst this_val) { + BoundingBox* ptr = JS_GetOpaque2(ctx, this_val, js_BoundingBox_class_id); + Vector3 min = ptr->min; + Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); + *ret_ptr = min; + JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_BoundingBox_set_min(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + BoundingBox* ptr = JS_GetOpaque2(ctx, this_val, js_BoundingBox_class_id); + Vector3* value_ptr = (Vector3*)JS_GetOpaque2(ctx, v, js_Vector3_class_id); + if(value_ptr == NULL) return JS_EXCEPTION; + Vector3 value = *value_ptr; + ptr->min = value; + return JS_UNDEFINED; +} + +static JSValue js_BoundingBox_get_max(JSContext* ctx, JSValueConst this_val) { + BoundingBox* ptr = JS_GetOpaque2(ctx, this_val, js_BoundingBox_class_id); + Vector3 max = ptr->max; + Vector3* ret_ptr = (Vector3*)js_malloc(ctx, sizeof(Vector3)); + *ret_ptr = max; + JSValue ret = JS_NewObjectClass(ctx, js_Vector3_class_id); + JS_SetOpaque(ret, ret_ptr); + return ret; +} + +static JSValue js_BoundingBox_set_max(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + BoundingBox* ptr = JS_GetOpaque2(ctx, this_val, js_BoundingBox_class_id); + Vector3* value_ptr = (Vector3*)JS_GetOpaque2(ctx, v, js_Vector3_class_id); + if(value_ptr == NULL) return JS_EXCEPTION; + Vector3 value = *value_ptr; + ptr->max = value; + return JS_UNDEFINED; +} + +static const JSCFunctionListEntry js_BoundingBox_proto_funcs[] = { + JS_CGETSET_DEF("min",js_BoundingBox_get_min,js_BoundingBox_set_min), + JS_CGETSET_DEF("max",js_BoundingBox_get_max,js_BoundingBox_set_max), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","BoundingBox", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_BoundingBox(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_BoundingBox_class_id); + JSClassDef js_BoundingBox_def = { .class_name = "BoundingBox", .finalizer = js_BoundingBox_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_BoundingBox_class_id, &js_BoundingBox_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_BoundingBox_proto_funcs, countof(js_BoundingBox_proto_funcs)); + JS_SetClassProto(ctx, js_BoundingBox_class_id, proto); + return 0; +} + +static void js_Wave_finalizer(JSRuntime * rt, JSValue val) { + Wave* ptr = JS_GetOpaque(val, js_Wave_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static JSValue js_Wave_get_frameCount(JSContext* ctx, JSValueConst this_val) { + Wave* ptr = JS_GetOpaque2(ctx, this_val, js_Wave_class_id); + unsigned int frameCount = ptr->frameCount; + JSValue ret = JS_NewUint32(ctx, frameCount); + return ret; +} + +static JSValue js_Wave_get_sampleRate(JSContext* ctx, JSValueConst this_val) { + Wave* ptr = JS_GetOpaque2(ctx, this_val, js_Wave_class_id); + unsigned int sampleRate = ptr->sampleRate; + JSValue ret = JS_NewUint32(ctx, sampleRate); + return ret; +} + +static JSValue js_Wave_get_sampleSize(JSContext* ctx, JSValueConst this_val) { + Wave* ptr = JS_GetOpaque2(ctx, this_val, js_Wave_class_id); + unsigned int sampleSize = ptr->sampleSize; + JSValue ret = JS_NewUint32(ctx, sampleSize); + return ret; +} + +static JSValue js_Wave_get_channels(JSContext* ctx, JSValueConst this_val) { + Wave* ptr = JS_GetOpaque2(ctx, this_val, js_Wave_class_id); + unsigned int channels = ptr->channels; + JSValue ret = JS_NewUint32(ctx, channels); + return ret; +} + +static const JSCFunctionListEntry js_Wave_proto_funcs[] = { + JS_CGETSET_DEF("frameCount",js_Wave_get_frameCount,NULL), + JS_CGETSET_DEF("sampleRate",js_Wave_get_sampleRate,NULL), + JS_CGETSET_DEF("sampleSize",js_Wave_get_sampleSize,NULL), + JS_CGETSET_DEF("channels",js_Wave_get_channels,NULL), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","Wave", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_Wave(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_Wave_class_id); + JSClassDef js_Wave_def = { .class_name = "Wave", .finalizer = js_Wave_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_Wave_class_id, &js_Wave_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_Wave_proto_funcs, countof(js_Wave_proto_funcs)); + JS_SetClassProto(ctx, js_Wave_class_id, proto); + return 0; +} + +static void js_AudioStream_finalizer(JSRuntime * rt, JSValue val) { + AudioStream* ptr = JS_GetOpaque(val, js_AudioStream_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static const JSCFunctionListEntry js_AudioStream_proto_funcs[] = { + JS_PROP_STRING_DEF("[Symbol.toStringTag]","AudioStream", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_AudioStream(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_AudioStream_class_id); + JSClassDef js_AudioStream_def = { .class_name = "AudioStream", .finalizer = js_AudioStream_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_AudioStream_class_id, &js_AudioStream_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_AudioStream_proto_funcs, countof(js_AudioStream_proto_funcs)); + JS_SetClassProto(ctx, js_AudioStream_class_id, proto); + return 0; +} + +static void js_Sound_finalizer(JSRuntime * rt, JSValue val) { + Sound* ptr = JS_GetOpaque(val, js_Sound_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static JSValue js_Sound_get_frameCount(JSContext* ctx, JSValueConst this_val) { + Sound* ptr = JS_GetOpaque2(ctx, this_val, js_Sound_class_id); + unsigned int frameCount = ptr->frameCount; + JSValue ret = JS_NewUint32(ctx, frameCount); + return ret; +} + +static const JSCFunctionListEntry js_Sound_proto_funcs[] = { + JS_CGETSET_DEF("frameCount",js_Sound_get_frameCount,NULL), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","Sound", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_Sound(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_Sound_class_id); + JSClassDef js_Sound_def = { .class_name = "Sound", .finalizer = js_Sound_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_Sound_class_id, &js_Sound_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_Sound_proto_funcs, countof(js_Sound_proto_funcs)); + JS_SetClassProto(ctx, js_Sound_class_id, proto); + return 0; +} + +static void js_Music_finalizer(JSRuntime * rt, JSValue val) { + Music* ptr = JS_GetOpaque(val, js_Music_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static JSValue js_Music_get_frameCount(JSContext* ctx, JSValueConst this_val) { + Music* ptr = JS_GetOpaque2(ctx, this_val, js_Music_class_id); + unsigned int frameCount = ptr->frameCount; + JSValue ret = JS_NewUint32(ctx, frameCount); + return ret; +} + +static JSValue js_Music_get_looping(JSContext* ctx, JSValueConst this_val) { + Music* ptr = JS_GetOpaque2(ctx, this_val, js_Music_class_id); + bool looping = ptr->looping; + JSValue ret = JS_NewBool(ctx, looping); + return ret; +} + +static JSValue js_Music_set_looping(JSContext* ctx, JSValueConst this_val, JSValueConst v) { + Music* ptr = JS_GetOpaque2(ctx, this_val, js_Music_class_id); + bool value = JS_ToBool(ctx, v); + ptr->looping = value; + return JS_UNDEFINED; +} + +static JSValue js_Music_get_ctxType(JSContext* ctx, JSValueConst this_val) { + Music* ptr = JS_GetOpaque2(ctx, this_val, js_Music_class_id); + int ctxType = ptr->ctxType; + JSValue ret = JS_NewInt32(ctx, ctxType); + return ret; +} + +static const JSCFunctionListEntry js_Music_proto_funcs[] = { + JS_CGETSET_DEF("frameCount",js_Music_get_frameCount,NULL), + JS_CGETSET_DEF("looping",js_Music_get_looping,js_Music_set_looping), + JS_CGETSET_DEF("ctxType",js_Music_get_ctxType,NULL), + JS_PROP_STRING_DEF("[Symbol.toStringTag]","Music", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_Music(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_Music_class_id); + JSClassDef js_Music_def = { .class_name = "Music", .finalizer = js_Music_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_Music_class_id, &js_Music_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_Music_proto_funcs, countof(js_Music_proto_funcs)); + JS_SetClassProto(ctx, js_Music_class_id, proto); + return 0; +} + +static void js_VrDeviceInfo_finalizer(JSRuntime * rt, JSValue val) { + VrDeviceInfo* ptr = JS_GetOpaque(val, js_VrDeviceInfo_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static const JSCFunctionListEntry js_VrDeviceInfo_proto_funcs[] = { + JS_PROP_STRING_DEF("[Symbol.toStringTag]","VrDeviceInfo", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_VrDeviceInfo(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_VrDeviceInfo_class_id); + JSClassDef js_VrDeviceInfo_def = { .class_name = "VrDeviceInfo", .finalizer = js_VrDeviceInfo_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_VrDeviceInfo_class_id, &js_VrDeviceInfo_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_VrDeviceInfo_proto_funcs, countof(js_VrDeviceInfo_proto_funcs)); + JS_SetClassProto(ctx, js_VrDeviceInfo_class_id, proto); + return 0; +} + +static void js_VrStereoConfig_finalizer(JSRuntime * rt, JSValue val) { + VrStereoConfig* ptr = JS_GetOpaque(val, js_VrStereoConfig_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static const JSCFunctionListEntry js_VrStereoConfig_proto_funcs[] = { + JS_PROP_STRING_DEF("[Symbol.toStringTag]","VrStereoConfig", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_VrStereoConfig(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_VrStereoConfig_class_id); + JSClassDef js_VrStereoConfig_def = { .class_name = "VrStereoConfig", .finalizer = js_VrStereoConfig_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_VrStereoConfig_class_id, &js_VrStereoConfig_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_VrStereoConfig_proto_funcs, countof(js_VrStereoConfig_proto_funcs)); + JS_SetClassProto(ctx, js_VrStereoConfig_class_id, proto); + return 0; +} + +static void js_FilePathList_finalizer(JSRuntime * rt, JSValue val) { + FilePathList* ptr = JS_GetOpaque(val, js_FilePathList_class_id); + if(ptr) { + js_free_rt(rt, ptr); + } +} + +static const JSCFunctionListEntry js_FilePathList_proto_funcs[] = { + JS_PROP_STRING_DEF("[Symbol.toStringTag]","FilePathList", JS_PROP_CONFIGURABLE), +}; + +static int js_declare_FilePathList(JSContext * ctx, JSModuleDef * m) { + JS_NewClassID(&js_FilePathList_class_id); + JSClassDef js_FilePathList_def = { .class_name = "FilePathList", .finalizer = js_FilePathList_finalizer }; + JS_NewClass(JS_GetRuntime(ctx), js_FilePathList_class_id, &js_FilePathList_def); + JSValue proto = JS_NewObject(ctx); + JS_SetPropertyFunctionList(ctx, proto, js_FilePathList_proto_funcs, countof(js_FilePathList_proto_funcs)); + JS_SetClassProto(ctx, js_FilePathList_class_id, proto); + return 0; } static JSValue js_Vector2_constructor(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { @@ -1750,38 +1884,66 @@ static JSValue js_Vector4_constructor(JSContext * ctx, JSValueConst this_val, in return _return; } -static JSValue js_Ray_constructor(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { - Vector3* position_ptr = (Vector3*)JS_GetOpaque2(ctx, argv[0], js_Vector3_class_id); - if(position_ptr == NULL) return JS_EXCEPTION; - Vector3 position = *position_ptr; - Vector3* direction_ptr = (Vector3*)JS_GetOpaque2(ctx, argv[1], js_Vector3_class_id); - if(direction_ptr == NULL) return JS_EXCEPTION; - Vector3 direction = *direction_ptr; - Ray _struct = { position, direction }; - Ray* _return_ptr = (Ray*)js_malloc(ctx, sizeof(Ray)); +static JSValue js_Color_constructor(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + unsigned int _int_r; + JS_ToUint32(ctx, &_int_r, argv[0]); + unsigned char r = (unsigned char)_int_r; + unsigned int _int_g; + JS_ToUint32(ctx, &_int_g, argv[1]); + unsigned char g = (unsigned char)_int_g; + unsigned int _int_b; + JS_ToUint32(ctx, &_int_b, argv[2]); + unsigned char b = (unsigned char)_int_b; + unsigned int _int_a; + JS_ToUint32(ctx, &_int_a, argv[3]); + unsigned char a = (unsigned char)_int_a; + Color _struct = { r, g, b, a }; + Color* _return_ptr = (Color*)js_malloc(ctx, sizeof(Color)); *_return_ptr = _struct; - JSValue _return = JS_NewObjectClass(ctx, js_Ray_class_id); + JSValue _return = JS_NewObjectClass(ctx, js_Color_class_id); JS_SetOpaque(_return, _return_ptr); return _return; } -static JSValue js_Camera2D_constructor(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { - Vector2* offset_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); - if(offset_ptr == NULL) return JS_EXCEPTION; - Vector2 offset = *offset_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_rotation; - JS_ToFloat64(ctx, &_double_rotation, argv[2]); - float rotation = (float)_double_rotation; - double _double_zoom; - JS_ToFloat64(ctx, &_double_zoom, argv[3]); - float zoom = (float)_double_zoom; - Camera2D _struct = { offset, target, rotation, zoom }; - Camera2D* _return_ptr = (Camera2D*)js_malloc(ctx, sizeof(Camera2D)); +static JSValue js_Rectangle_constructor(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; + double _double_width; + JS_ToFloat64(ctx, &_double_width, argv[2]); + float width = (float)_double_width; + double _double_height; + JS_ToFloat64(ctx, &_double_height, argv[3]); + float height = (float)_double_height; + Rectangle _struct = { x, y, width, height }; + Rectangle* _return_ptr = (Rectangle*)js_malloc(ctx, sizeof(Rectangle)); *_return_ptr = _struct; - JSValue _return = JS_NewObjectClass(ctx, js_Camera2D_class_id); + JSValue _return = JS_NewObjectClass(ctx, js_Rectangle_class_id); + JS_SetOpaque(_return, _return_ptr); + return _return; +} + +static JSValue js_NPatchInfo_constructor(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Rectangle* source_ptr = (Rectangle*)JS_GetOpaque2(ctx, argv[0], js_Rectangle_class_id); + if(source_ptr == NULL) return JS_EXCEPTION; + Rectangle source = *source_ptr; + int left; + JS_ToInt32(ctx, &left, argv[1]); + int top; + JS_ToInt32(ctx, &top, argv[2]); + int right; + JS_ToInt32(ctx, &right, argv[3]); + int bottom; + JS_ToInt32(ctx, &bottom, argv[4]); + int layout; + JS_ToInt32(ctx, &layout, argv[5]); + NPatchInfo _struct = { source, left, top, right, bottom, layout }; + NPatchInfo* _return_ptr = (NPatchInfo*)js_malloc(ctx, sizeof(NPatchInfo)); + *_return_ptr = _struct; + JSValue _return = JS_NewObjectClass(ctx, js_NPatchInfo_class_id); JS_SetOpaque(_return, _return_ptr); return _return; } @@ -1809,6 +1971,51 @@ static JSValue js_Camera3D_constructor(JSContext * ctx, JSValueConst this_val, i return _return; } +static JSValue js_Camera2D_constructor(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector2* offset_ptr = (Vector2*)JS_GetOpaque2(ctx, argv[0], js_Vector2_class_id); + if(offset_ptr == NULL) return JS_EXCEPTION; + Vector2 offset = *offset_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_rotation; + JS_ToFloat64(ctx, &_double_rotation, argv[2]); + float rotation = (float)_double_rotation; + double _double_zoom; + JS_ToFloat64(ctx, &_double_zoom, argv[3]); + float zoom = (float)_double_zoom; + Camera2D _struct = { offset, target, rotation, zoom }; + Camera2D* _return_ptr = (Camera2D*)js_malloc(ctx, sizeof(Camera2D)); + *_return_ptr = _struct; + JSValue _return = JS_NewObjectClass(ctx, js_Camera2D_class_id); + JS_SetOpaque(_return, _return_ptr); + return _return; +} + +static JSValue js_Mesh_constructor(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Mesh _struct = { }; + Mesh* _return_ptr = (Mesh*)js_malloc(ctx, sizeof(Mesh)); + *_return_ptr = _struct; + JSValue _return = JS_NewObjectClass(ctx, js_Mesh_class_id); + JS_SetOpaque(_return, _return_ptr); + return _return; +} + +static JSValue js_Ray_constructor(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Vector3* position_ptr = (Vector3*)JS_GetOpaque2(ctx, argv[0], js_Vector3_class_id); + if(position_ptr == NULL) return JS_EXCEPTION; + Vector3 position = *position_ptr; + Vector3* direction_ptr = (Vector3*)JS_GetOpaque2(ctx, argv[1], js_Vector3_class_id); + if(direction_ptr == NULL) return JS_EXCEPTION; + Vector3 direction = *direction_ptr; + Ray _struct = { position, direction }; + Ray* _return_ptr = (Ray*)js_malloc(ctx, sizeof(Ray)); + *_return_ptr = _struct; + JSValue _return = JS_NewObjectClass(ctx, js_Ray_class_id); + JS_SetOpaque(_return, _return_ptr); + return _return; +} + static JSValue js_BoundingBox_constructor(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { Vector3* min_ptr = (Vector3*)JS_GetOpaque2(ctx, argv[0], js_Vector3_class_id); if(min_ptr == NULL) return JS_EXCEPTION; @@ -1824,37 +2031,6 @@ static JSValue js_BoundingBox_constructor(JSContext * ctx, JSValueConst this_val return _return; } -static JSValue js_NPatchInfo_constructor(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { - Rectangle* source_ptr = (Rectangle*)JS_GetOpaque2(ctx, argv[0], js_Rectangle_class_id); - if(source_ptr == NULL) return JS_EXCEPTION; - Rectangle source = *source_ptr; - int left; - JS_ToInt32(ctx, &left, argv[1]); - int top; - JS_ToInt32(ctx, &top, argv[2]); - int right; - JS_ToInt32(ctx, &right, argv[3]); - int bottom; - JS_ToInt32(ctx, &bottom, argv[4]); - int layout; - JS_ToInt32(ctx, &layout, argv[5]); - NPatchInfo _struct = { source, left, top, right, bottom, layout }; - NPatchInfo* _return_ptr = (NPatchInfo*)js_malloc(ctx, sizeof(NPatchInfo)); - *_return_ptr = _struct; - JSValue _return = JS_NewObjectClass(ctx, js_NPatchInfo_class_id); - JS_SetOpaque(_return, _return_ptr); - return _return; -} - -static JSValue js_Mesh_constructor(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { - Mesh _struct = { }; - Mesh* _return_ptr = (Mesh*)js_malloc(ctx, sizeof(Mesh)); - *_return_ptr = _struct; - JSValue _return = JS_NewObjectClass(ctx, js_Mesh_class_id); - JS_SetOpaque(_return, _return_ptr); - return _return; -} - static JSValue js_initWindow(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { int width; JS_ToInt32(ctx, &width, argv[0]); @@ -2200,7 +2376,6 @@ static JSValue js_beginDrawing(JSContext * ctx, JSValueConst this_val, int argc, } static JSValue js_endDrawing(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { - app_update_quickjs(); EndDrawing(); return JS_UNDEFINED; } @@ -2765,6 +2940,33 @@ static JSValue js_isPathFile(JSContext * ctx, JSValueConst this_val, int argc, J return ret; } +static JSValue js_loadDirectoryFiles(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + const char * dirPath = (const char *)JS_ToCString(ctx, argv[0]); + FilePathList files = LoadDirectoryFiles(dirPath); + JSValue ret = JS_NewArray(ctx); + for(int i; i < files.count; i++){ + JS_SetPropertyUint32(ctx, ret, i, JS_NewString(ctx,files.paths[i])); + } + UnloadDirectoryFiles(files); + JS_FreeCString(ctx, dirPath); + return ret; +} + +static JSValue js_loadDirectoryFilesEx(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + const char * basePath = (const char *)JS_ToCString(ctx, argv[0]); + const char * filter = (const char *)JS_ToCString(ctx, argv[1]); + bool scanSubdirs = JS_ToBool(ctx, argv[2]); + FilePathList files = LoadDirectoryFilesEx(basePath, filter, scanSubdirs); + JSValue ret = JS_NewArray(ctx); + for(int i; i < files.count; i++){ + JS_SetPropertyUint32(ctx, ret, i, JS_NewString(ctx,files.paths[i])); + } + UnloadDirectoryFiles(files); + JS_FreeCString(ctx, basePath); + JS_FreeCString(ctx, filter); + return ret; +} + static JSValue js_isFileDropped(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { bool returnVal = IsFileDropped(); JSValue ret = JS_NewBool(ctx, returnVal); @@ -6278,18 +6480,6 @@ static JSValue js_setMaterialTexture(JSContext * ctx, JSValueConst this_val, int return JS_UNDEFINED; } -static JSValue js_setModelMaterial(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { - Model* model = (Model*)JS_GetOpaque2(ctx, argv[0], js_Model_class_id); - if(model == NULL) return JS_EXCEPTION; - int materialIndex; - JS_ToInt32(ctx, &materialIndex, argv[1]); - Material* material_ptr = (Material*)JS_GetOpaque2(ctx, argv[2], js_Material_class_id); - if(material_ptr == NULL) return JS_EXCEPTION; - Material material = *material_ptr; - SetModelMaterial(model, materialIndex, material); - return JS_UNDEFINED; -} - static JSValue js_setModelMeshMaterial(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { Model* model = (Model*)JS_GetOpaque2(ctx, argv[0], js_Model_class_id); if(model == NULL) return JS_EXCEPTION; @@ -8925,6 +9115,23 @@ static JSValue js_guiLoadStyleDefault(JSContext * ctx, JSValueConst this_val, in return JS_UNDEFINED; } +static JSValue js_guiEnableTooltip(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + GuiEnableTooltip(); + return JS_UNDEFINED; +} + +static JSValue js_guiDisableTooltip(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + GuiDisableTooltip(); + return JS_UNDEFINED; +} + +static JSValue js_guiSetTooltip(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + const char * tooltip = (const char *)JS_ToCString(ctx, argv[0]); + GuiSetTooltip(tooltip); + JS_FreeCString(ctx, tooltip); + return JS_UNDEFINED; +} + static JSValue js_guiIconText(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { int iconId; JS_ToInt32(ctx, &iconId, argv[0]); @@ -8935,6 +9142,13 @@ static JSValue js_guiIconText(JSContext * ctx, JSValueConst this_val, int argc, return ret; } +static JSValue js_guiSetIconScale(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + int scale; + JS_ToInt32(ctx, &scale, argv[0]); + GuiSetIconScale(scale); + return JS_UNDEFINED; +} + static JSValue js_guiDrawIcon(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { int iconId; JS_ToInt32(ctx, &iconId, argv[0]); @@ -8951,13 +9165,6 @@ static JSValue js_guiDrawIcon(JSContext * ctx, JSValueConst this_val, int argc, return JS_UNDEFINED; } -static JSValue js_guiSetIconScale(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { - int scale; - JS_ToInt32(ctx, &scale, argv[0]); - GuiSetIconScale(scale); - return JS_UNDEFINED; -} - static JSValue js_easeLinearNone(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { double _double_t; JS_ToFloat64(ctx, &_double_t, argv[0]); @@ -9372,6 +9579,18 @@ static JSValue js_easeElasticIn(JSContext * ctx, JSValueConst this_val, int argc return ret; } +static JSValue js_setModelMaterial(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { + Model* model = (Model*)JS_GetOpaque2(ctx, argv[0], js_Model_class_id); + if(model == NULL) return JS_EXCEPTION; + int materialIndex; + JS_ToInt32(ctx, &materialIndex, argv[1]); + Material* material_ptr = (Material*)JS_GetOpaque2(ctx, argv[2], js_Material_class_id); + if(material_ptr == NULL) return JS_EXCEPTION; + Material material = *material_ptr; + SetModelMaterial(model, materialIndex, material); + return JS_UNDEFINED; +} + static const JSCFunctionListEntry js_raylib_core_funcs[] = { JS_CFUNC_DEF("initWindow",3,js_initWindow), JS_CFUNC_DEF("windowShouldClose",0,js_windowShouldClose), @@ -9481,6 +9700,8 @@ static const JSCFunctionListEntry js_raylib_core_funcs[] = { JS_CFUNC_DEF("getApplicationDirectory",0,js_getApplicationDirectory), JS_CFUNC_DEF("changeDirectory",1,js_changeDirectory), JS_CFUNC_DEF("isPathFile",1,js_isPathFile), + JS_CFUNC_DEF("loadDirectoryFiles",1,js_loadDirectoryFiles), + JS_CFUNC_DEF("loadDirectoryFilesEx",3,js_loadDirectoryFilesEx), JS_CFUNC_DEF("isFileDropped",0,js_isFileDropped), JS_CFUNC_DEF("loadDroppedFiles",0,js_loadDroppedFiles), JS_CFUNC_DEF("getFileModTime",1,js_getFileModTime), @@ -9739,7 +9960,6 @@ static const JSCFunctionListEntry js_raylib_core_funcs[] = { JS_CFUNC_DEF("isMaterialReady",1,js_isMaterialReady), JS_CFUNC_DEF("unloadMaterial",1,js_unloadMaterial), JS_CFUNC_DEF("setMaterialTexture",3,js_setMaterialTexture), - JS_CFUNC_DEF("setModelMaterial",3,js_setModelMaterial), JS_CFUNC_DEF("setModelMeshMaterial",3,js_setModelMeshMaterial), JS_CFUNC_DEF("checkCollisionSpheres",4,js_checkCollisionSpheres), JS_CFUNC_DEF("checkCollisionBoxes",2,js_checkCollisionBoxes), @@ -9947,9 +10167,12 @@ static const JSCFunctionListEntry js_raylib_core_funcs[] = { JS_CFUNC_DEF("guiColorBarHue",3,js_guiColorBarHue), JS_CFUNC_DEF("guiLoadStyle",1,js_guiLoadStyle), JS_CFUNC_DEF("guiLoadStyleDefault",0,js_guiLoadStyleDefault), + JS_CFUNC_DEF("guiEnableTooltip",0,js_guiEnableTooltip), + JS_CFUNC_DEF("guiDisableTooltip",0,js_guiDisableTooltip), + JS_CFUNC_DEF("guiSetTooltip",1,js_guiSetTooltip), JS_CFUNC_DEF("guiIconText",2,js_guiIconText), - JS_CFUNC_DEF("guiDrawIcon",5,js_guiDrawIcon), JS_CFUNC_DEF("guiSetIconScale",1,js_guiSetIconScale), + JS_CFUNC_DEF("guiDrawIcon",5,js_guiDrawIcon), JS_CFUNC_DEF("easeLinearNone",4,js_easeLinearNone), JS_CFUNC_DEF("easeLinearIn",4,js_easeLinearIn), JS_CFUNC_DEF("easeLinearOut",4,js_easeLinearOut), @@ -9973,16 +10196,13 @@ static const JSCFunctionListEntry js_raylib_core_funcs[] = { JS_CFUNC_DEF("easeBounceOut",4,js_easeBounceOut), JS_CFUNC_DEF("easeBounceInOut",4,js_easeBounceInOut), JS_CFUNC_DEF("easeElasticIn",4,js_easeElasticIn), + JS_CFUNC_DEF("setModelMaterial",3,js_setModelMaterial), }; static int js_raylib_core_init(JSContext * ctx, JSModuleDef * m) { JS_SetModuleExportList(ctx, m,js_raylib_core_funcs,countof(js_raylib_core_funcs)); - js_declare_Color(ctx, m); - JSValue Color_constr = JS_NewCFunction2(ctx, js_Color_constructor,"Color)", 4, JS_CFUNC_constructor_or_func, 0); - JS_SetModuleExport(ctx, m, "Color", Color_constr); - js_declare_Rectangle(ctx, m); - JSValue Rectangle_constr = JS_NewCFunction2(ctx, js_Rectangle_constructor,"Rectangle)", 4, JS_CFUNC_constructor_or_func, 0); - JS_SetModuleExport(ctx, m, "Rectangle", Rectangle_constr); + JS_SetModuleExport(ctx, m, "DEG2RAD", JS_NewInt32(ctx, DEG2RAD)); + JS_SetModuleExport(ctx, m, "RAD2DEG", JS_NewInt32(ctx, RAD2DEG)); js_declare_Vector2(ctx, m); JSValue Vector2_constr = JS_NewCFunction2(ctx, js_Vector2_constructor,"Vector2)", 2, JS_CFUNC_constructor_or_func, 0); JS_SetModuleExport(ctx, m, "Vector2", Vector2_constr); @@ -9992,39 +10212,51 @@ static int js_raylib_core_init(JSContext * ctx, JSModuleDef * m) { js_declare_Vector4(ctx, m); JSValue Vector4_constr = JS_NewCFunction2(ctx, js_Vector4_constructor,"Vector4)", 4, JS_CFUNC_constructor_or_func, 0); JS_SetModuleExport(ctx, m, "Vector4", Vector4_constr); - js_declare_Ray(ctx, m); - JSValue Ray_constr = JS_NewCFunction2(ctx, js_Ray_constructor,"Ray)", 2, JS_CFUNC_constructor_or_func, 0); - JS_SetModuleExport(ctx, m, "Ray", Ray_constr); - js_declare_RayCollision(ctx, m); - js_declare_Camera2D(ctx, m); - JSValue Camera2D_constr = JS_NewCFunction2(ctx, js_Camera2D_constructor,"Camera2D)", 4, JS_CFUNC_constructor_or_func, 0); - JS_SetModuleExport(ctx, m, "Camera2D", Camera2D_constr); - js_declare_Camera3D(ctx, m); - JSValue Camera3D_constr = JS_NewCFunction2(ctx, js_Camera3D_constructor,"Camera3D)", 5, JS_CFUNC_constructor_or_func, 0); - JS_SetModuleExport(ctx, m, "Camera3D", Camera3D_constr); - js_declare_BoundingBox(ctx, m); - JSValue BoundingBox_constr = JS_NewCFunction2(ctx, js_BoundingBox_constructor,"BoundingBox)", 2, JS_CFUNC_constructor_or_func, 0); - JS_SetModuleExport(ctx, m, "BoundingBox", BoundingBox_constr); js_declare_Matrix(ctx, m); + js_declare_Color(ctx, m); + JSValue Color_constr = JS_NewCFunction2(ctx, js_Color_constructor,"Color)", 4, JS_CFUNC_constructor_or_func, 0); + JS_SetModuleExport(ctx, m, "Color", Color_constr); + js_declare_Rectangle(ctx, m); + JSValue Rectangle_constr = JS_NewCFunction2(ctx, js_Rectangle_constructor,"Rectangle)", 4, JS_CFUNC_constructor_or_func, 0); + JS_SetModuleExport(ctx, m, "Rectangle", Rectangle_constr); + js_declare_Image(ctx, m); + js_declare_Texture(ctx, m); + js_declare_RenderTexture(ctx, m); js_declare_NPatchInfo(ctx, m); JSValue NPatchInfo_constr = JS_NewCFunction2(ctx, js_NPatchInfo_constructor,"NPatchInfo)", 6, JS_CFUNC_constructor_or_func, 0); JS_SetModuleExport(ctx, m, "NPatchInfo", NPatchInfo_constr); - js_declare_Image(ctx, m); - js_declare_Wave(ctx, m); - js_declare_Sound(ctx, m); - js_declare_Music(ctx, m); - js_declare_Model(ctx, m); + js_declare_GlyphInfo(ctx, m); + js_declare_Font(ctx, m); + js_declare_Camera3D(ctx, m); + JSValue Camera3D_constr = JS_NewCFunction2(ctx, js_Camera3D_constructor,"Camera3D)", 5, JS_CFUNC_constructor_or_func, 0); + JS_SetModuleExport(ctx, m, "Camera3D", Camera3D_constr); + js_declare_Camera2D(ctx, m); + JSValue Camera2D_constr = JS_NewCFunction2(ctx, js_Camera2D_constructor,"Camera2D)", 4, JS_CFUNC_constructor_or_func, 0); + JS_SetModuleExport(ctx, m, "Camera2D", Camera2D_constr); js_declare_Mesh(ctx, m); JSValue Mesh_constr = JS_NewCFunction2(ctx, js_Mesh_constructor,"Mesh)", 15, JS_CFUNC_constructor_or_func, 0); JS_SetModuleExport(ctx, m, "Mesh", Mesh_constr); js_declare_Shader(ctx, m); - js_declare_Texture(ctx, m); - js_declare_Font(ctx, m); - js_declare_RenderTexture(ctx, m); js_declare_MaterialMap(ctx, m); js_declare_Material(ctx, m); - JS_SetModuleExport(ctx, m, "DEG2RAD", JS_NewInt32(ctx, DEG2RAD)); - JS_SetModuleExport(ctx, m, "RAD2DEG", JS_NewInt32(ctx, RAD2DEG)); + js_declare_Transform(ctx, m); + js_declare_BoneInfo(ctx, m); + js_declare_Model(ctx, m); + js_declare_ModelAnimation(ctx, m); + js_declare_Ray(ctx, m); + JSValue Ray_constr = JS_NewCFunction2(ctx, js_Ray_constructor,"Ray)", 2, JS_CFUNC_constructor_or_func, 0); + JS_SetModuleExport(ctx, m, "Ray", Ray_constr); + js_declare_RayCollision(ctx, m); + js_declare_BoundingBox(ctx, m); + JSValue BoundingBox_constr = JS_NewCFunction2(ctx, js_BoundingBox_constructor,"BoundingBox)", 2, JS_CFUNC_constructor_or_func, 0); + JS_SetModuleExport(ctx, m, "BoundingBox", BoundingBox_constr); + js_declare_Wave(ctx, m); + js_declare_AudioStream(ctx, m); + js_declare_Sound(ctx, m); + js_declare_Music(ctx, m); + js_declare_VrDeviceInfo(ctx, m); + js_declare_VrStereoConfig(ctx, m); + js_declare_FilePathList(ctx, m); Color LIGHTGRAY_struct = { 200, 200, 200, 255 }; Color* LIGHTGRAY_js_ptr = (Color*)js_malloc(ctx, sizeof(Color)); *LIGHTGRAY_js_ptr = LIGHTGRAY_struct; @@ -10815,19 +11047,19 @@ JSModuleDef * js_init_module_raylib_core(JSContext * ctx, const char * module_na m = JS_NewCModule(ctx, module_name, js_raylib_core_init); if(!m) return NULL; JS_AddModuleExportList(ctx, m, js_raylib_core_funcs, countof(js_raylib_core_funcs)); - JS_AddModuleExport(ctx, m, "Color"); - JS_AddModuleExport(ctx, m, "Rectangle"); + JS_AddModuleExport(ctx, m, "DEG2RAD"); + JS_AddModuleExport(ctx, m, "RAD2DEG"); JS_AddModuleExport(ctx, m, "Vector2"); JS_AddModuleExport(ctx, m, "Vector3"); JS_AddModuleExport(ctx, m, "Vector4"); - JS_AddModuleExport(ctx, m, "Ray"); - JS_AddModuleExport(ctx, m, "Camera2D"); - JS_AddModuleExport(ctx, m, "Camera3D"); - JS_AddModuleExport(ctx, m, "BoundingBox"); + JS_AddModuleExport(ctx, m, "Color"); + JS_AddModuleExport(ctx, m, "Rectangle"); JS_AddModuleExport(ctx, m, "NPatchInfo"); + JS_AddModuleExport(ctx, m, "Camera3D"); + JS_AddModuleExport(ctx, m, "Camera2D"); JS_AddModuleExport(ctx, m, "Mesh"); - JS_AddModuleExport(ctx, m, "DEG2RAD"); - JS_AddModuleExport(ctx, m, "RAD2DEG"); + JS_AddModuleExport(ctx, m, "Ray"); + JS_AddModuleExport(ctx, m, "BoundingBox"); JS_AddModuleExport(ctx, m, "LIGHTGRAY"); JS_AddModuleExport(ctx, m, "GRAY"); JS_AddModuleExport(ctx, m, "DARKGRAY");