diff options
| author | jussi | 2024-02-25 14:06:59 +0200 |
|---|---|---|
| committer | jussi | 2024-02-25 14:06:59 +0200 |
| commit | 47ed28b006db71d823cfaa24fa143ab5cfcf279b (patch) | |
| tree | adf35906662b0646a14adfa6a37260c797cd325a | |
| parent | 631cea6aa7510ba53d4f14b5537e1719a72976b9 (diff) | |
| download | reilua-enhanced-47ed28b006db71d823cfaa24fa143ab5cfcf279b.tar.gz reilua-enhanced-47ed28b006db71d823cfaa24fa143ab5cfcf279b.tar.bz2 reilua-enhanced-47ed28b006db71d823cfaa24fa143ab5cfcf279b.zip | |
Added various missing functions.
| -rw-r--r-- | API.md | 94 | ||||
| -rw-r--r-- | README.md | 15 | ||||
| -rw-r--r-- | ReiLua_API.lua | 89 | ||||
| -rw-r--r-- | apiScanner.lua | 225 | ||||
| -rw-r--r-- | changelog | 14 | ||||
| -rw-r--r-- | examples/image_draw/main.lua | 2 | ||||
| -rw-r--r-- | examples/pong/main.lua | 2 | ||||
| -rw-r--r-- | examples/resources/lib/gui.lua | 2 | ||||
| -rw-r--r-- | examples/resources/lib/raygui.lua | 2 | ||||
| -rw-r--r-- | examples/window/main.lua | 7 | ||||
| -rw-r--r-- | include/audio.h | 2 | ||||
| -rw-r--r-- | include/core.h | 10 | ||||
| -rw-r--r-- | include/models.h | 2 | ||||
| -rw-r--r-- | include/text.h | 4 | ||||
| -rw-r--r-- | include/textures.h | 4 | ||||
| -rw-r--r-- | src/audio.c | 38 | ||||
| -rw-r--r-- | src/core.c | 122 | ||||
| -rw-r--r-- | src/lua_core.c | 23 | ||||
| -rw-r--r-- | src/models.c | 43 | ||||
| -rw-r--r-- | src/text.c | 75 | ||||
| -rw-r--r-- | src/textures.c | 98 |
21 files changed, 696 insertions, 177 deletions
@@ -4494,6 +4494,14 @@ Detect if a key has been pressed once --- +> pressed = RL.IsKeyPressedRepeat( int key ) + +Check if a key has been pressed again (Only PLATFORM_DESKTOP) + +- Success return bool + +--- + > pressed = RL.IsKeyDown( int key ) Detect if a key is being pressed @@ -4584,6 +4592,22 @@ Detect if a gamepad button has been released once --- +> notPressed = RL.IsGamepadButtonUp( int gamepad, int button ) + +Check if a gamepad button is NOT being pressed + +- Success return bool + +--- + +> button = RL.GetGamepadButtonPressed() + +Get the last gamepad button pressed + +- Success return int + +--- + > count = RL.GetGamepadAxisCount( int gamepad ) Return gamepad axis count for a gamepad @@ -4680,12 +4704,20 @@ Set mouse scaling > movement = RL.GetMouseWheelMove() -Returns mouse wheel movement Y +Get mouse wheel movement for X or Y, whichever is larger - Success return float --- +> movement = RL.GetMouseWheelMoveV() + +Get mouse wheel movement for both X and Y + +- Success return Vector2 + +--- + > RL.SetMouseCursor( int cursor ) Set mouse cursor @@ -5705,7 +5737,15 @@ Create an image from another image piece --- -> image = RL.ImageText( Font font, string text, float fontSize, float spacing, Color tint ) +> image = RL.ImageText( string text, int fontSize, Color tint ) + +Create an image from text (default font) + +- Success return Image + +--- + +> image = RL.ImageTextEx( Font font, string text, float fontSize, float spacing, Color tint ) Create an image from text (custom sprite font) @@ -5977,6 +6017,12 @@ Draw a source image within a destination image (Tint applied to source) --- +> RL.ImageDrawText( Image dst, string text, Vector2 position, float fontSize, Color tint ) + +Draw text (using default font) within an image (destination) + +--- + > RL.ImageDrawTextEx( Image dst, Font font, string text, Vector2 position, float fontSize, float spacing, Color tint ) Draw text (Custom sprite font) within an image (Destination) @@ -6150,6 +6196,12 @@ Draw a Texture2D --- +> RL.DrawTextureEx( Texture texture, Vector2 position, float rotation, float scale, Color tint ) + +Draw a Texture2D with extended parameters + +--- + > RL.DrawTextureRec( Texture texture, Rectangle source, Vector2 position, Color tint ) Draw a part of a texture defined by a rectangle @@ -6476,7 +6528,15 @@ Set vertical line spacing when drawing with line-breaks --- -> size = RL.MeasureText( Font font, string text, float fontSize, float spacing ) +> width = RL.MeasureText( string text, int fontSize ) + +Measure string width for default font + +- Success return int + +--- + +> size = RL.MeasureTextEx( Font font, string text, float fontSize, float spacing ) Measure string size for Font @@ -6748,6 +6808,12 @@ Draw a color-filled triangle (Vertex in counter-clockwise order!) --- +> RL.DrawTriangleStrip3D( Vector3{} points, Color color ) + +Draw a triangle strip defined by points + +--- + > RL.DrawCube( Vector3 position, Vector3 size, Color color ) Draw cube @@ -7146,6 +7212,14 @@ Generate sphere mesh (Standard sphere) --- +> mesh = RL.GenMeshHemiSphere( float radius, int rings, int slices ) + +Generate half-sphere mesh (no bottom cap) + +- Success return Mesh + +--- + > mesh = RL.GenMeshCylinder( float radius, float height, int slices ) Generate cylinder mesh @@ -7595,6 +7669,12 @@ Checks if a sound is ready --- +> RL.UpdateSound( Sound sound, Buffer data, int sampleCount ) + +Update sound buffer with new data + +--- + > RL.UnloadWave( Wave wave ) Unload wave data @@ -7689,6 +7769,14 @@ Convert wave data to desired format --- +> samples = RL.LoadWaveSamples( Wave wave ) + +Load samples data from wave as a 32bit float data array + +- Success return float{} + +--- + > wave = RL.WaveCopy( Wave wave ) Copy a wave to a new wave @@ -41,27 +41,34 @@ Example of basic "main.lua" file that will show basic windows with text. ```Lua local textColor = RL.BLACK local textPos = { 192, 200 } +local textSize = 20 +local text = "Congrats! You created your first window!" function RL.init() RL.SetWindowTitle( "First window" ) + RL.SetWindowState( RL.FLAG_VSYNC_HINT ) end function RL.update( delta ) if RL.IsKeyPressed( RL.KEY_ENTER ) then - textColor = BLUE - textPos = { 230, 230 } + local winSize = RL.GetScreenSize() + + textSize = RL.MeasureText( text, textSize ) + textColor = RL.BLUE + textPos = { winSize[1] / 2 - textSize[1] / 2, winSize[2] / 2 - textSize[2] / 2 } end if RL.IsKeyPressed( RL.KEY_SPACE ) then - textColor = RL.BLACK + textColor = RL.RED textPos = { 192, 200 } end end function RL.draw() RL.ClearBackground( RL.RAYWHITE ) - RL.DrawText( RL.GetFontDefault(), "Congrats! You created your first window!", textPos, 20, 2, textColor ) + RL.DrawText( text, textPos, textSize, textColor ) end + ``` Application folder structure should be... diff --git a/ReiLua_API.lua b/ReiLua_API.lua index 5236275..66f3132 100644 --- a/ReiLua_API.lua +++ b/ReiLua_API.lua @@ -1963,6 +1963,12 @@ function RL.DecodeDataBase64( data ) end ---@return any pressed function RL.IsKeyPressed( key ) end +---Check if a key has been pressed again (Only PLATFORM_DESKTOP) +---- Success return bool +---@param key integer +---@return any pressed +function RL.IsKeyPressedRepeat( key ) end + ---Detect if a key is being pressed ---- Success return bool ---@param key integer @@ -2031,6 +2037,18 @@ function RL.IsGamepadButtonDown( gamepad, button ) end ---@return any released function RL.IsGamepadButtonReleased( gamepad, button ) end +---Check if a gamepad button is NOT being pressed +---- Success return bool +---@param gamepad integer +---@param button integer +---@return any notPressed +function RL.IsGamepadButtonUp( gamepad, button ) end + +---Get the last gamepad button pressed +---- Success return int +---@return any button +function RL.GetGamepadButtonPressed() end + ---Return gamepad axis count for a gamepad ---- Success return int ---@param gamepad integer @@ -2101,11 +2119,16 @@ function RL.SetMouseOffset( offset ) end ---@return any RL.SetMouseScale function RL.SetMouseScale( scale ) end ----Returns mouse wheel movement Y +---Get mouse wheel movement for X or Y, whichever is larger ---- Success return float ---@return any movement function RL.GetMouseWheelMove() end +---Get mouse wheel movement for both X and Y +---- Success return Vector2 +---@return any movement +function RL.GetMouseWheelMoveV() end + ---Set mouse cursor ---@param cursor integer ---@return any RL.SetMouseCursor @@ -3106,6 +3129,14 @@ function RL.ImageCopy( image ) end ---@return any image function RL.ImageFromImage( image, rec ) end +---Create an image from text (default font) +---- Success return Image +---@param text string +---@param fontSize integer +---@param tint table +---@return any image +function RL.ImageText( text, fontSize, tint ) end + ---Create an image from text (custom sprite font) ---- Success return Image ---@param font any @@ -3114,7 +3145,7 @@ function RL.ImageFromImage( image, rec ) end ---@param spacing number ---@param tint table ---@return any image -function RL.ImageText( font, text, fontSize, spacing, tint ) end +function RL.ImageTextEx( font, text, fontSize, spacing, tint ) end ---Convert image data to desired format ---@param image any @@ -3372,6 +3403,15 @@ function RL.ImageDrawRectangleLines( dst, rec, thick, color ) end ---@return any RL.ImageDraw function RL.ImageDraw( dst, src, srcRec, dstRec, tint ) end +---Draw text (using default font) within an image (destination) +---@param dst any +---@param text string +---@param position table +---@param fontSize number +---@param tint table +---@return any RL.ImageDrawText +function RL.ImageDrawText( dst, text, position, fontSize, tint ) end + ---Draw text (Custom sprite font) within an image (Destination) ---@param dst any ---@param font any @@ -3517,6 +3557,15 @@ function RL.GetTextureFormat( texture ) end ---@return any RL.DrawTexture function RL.DrawTexture( texture, position, tint ) end +---Draw a Texture2D with extended parameters +---@param texture any +---@param position table +---@param rotation number +---@param scale number +---@param tint table +---@return any RL.DrawTextureEx +function RL.DrawTextureEx( texture, position, rotation, scale, tint ) end + ---Draw a part of a texture defined by a rectangle ---@param texture any ---@param source table @@ -3844,6 +3893,13 @@ function RL.DrawTextBoxedTinted( font, text, rec, fontSize, spacing, wordWrap, t ---@return any size function RL.SetTextLineSpacing( spacing ) end +---Measure string width for default font +---- Success return int +---@param text string +---@param fontSize integer +---@return any width +function RL.MeasureText( text, fontSize ) end + ---Measure string size for Font ---- Success return Vector2 ---@param font any @@ -3851,7 +3907,7 @@ function RL.SetTextLineSpacing( spacing ) end ---@param fontSize number ---@param spacing number ---@return any size -function RL.MeasureText( font, text, fontSize, spacing ) end +function RL.MeasureTextEx( font, text, fontSize, spacing ) end ---Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found ---- Success return int @@ -4078,6 +4134,12 @@ function RL.DrawCircle3D( center, radius, rotationAxis, rotationAngle, color ) ---@return any RL.DrawTriangle3D function RL.DrawTriangle3D( v1, v2, v3, color ) end +---Draw a triangle strip defined by points +---@param points table +---@param color table +---@return any RL.DrawTriangleStrip3D +function RL.DrawTriangleStrip3D( points, color ) end + ---Draw cube ---@param position table ---@param size table @@ -4505,6 +4567,14 @@ function RL.GenMeshCube( size ) end ---@return any mesh function RL.GenMeshSphere( radius, rings, slices ) end +---Generate half-sphere mesh (no bottom cap) +---- Success return Mesh +---@param radius number +---@param rings integer +---@param slices integer +---@return any mesh +function RL.GenMeshHemiSphere( radius, rings, slices ) end + ---Generate cylinder mesh ---- Success return Mesh ---@param radius number @@ -4894,6 +4964,13 @@ function RL.LoadSoundAlias( source ) end ---@return any isReady function RL.IsSoundReady( sound ) end +---Update sound buffer with new data +---@param sound any +---@param data any +---@param sampleCount integer +---@return any RL.UpdateSound +function RL.UpdateSound( sound, data, sampleCount ) end + ---Unload wave data ---@param wave any ---@return any RL.UnloadWave @@ -4977,6 +5054,12 @@ function RL.SetSoundPan( sound, pan ) end ---@return any RL.WaveFormat function RL.WaveFormat( wave, sampleRate, sampleSize, channels ) end +---Load samples data from wave as a 32bit float data array +---- Success return float{} +---@param wave any +---@return any samples +function RL.LoadWaveSamples( wave ) end + ---Copy a wave to a new wave ---- Success return Wave ---@param wave any diff --git a/apiScanner.lua b/apiScanner.lua index 6a23268..ca01bed 100644 --- a/apiScanner.lua +++ b/apiScanner.lua @@ -2,79 +2,69 @@ local raylib = { prefix = "RLAPI", file = "raylib.h", blacklist = { - InitWindow = true, -- Handled internally. - WindowShouldClose = true, -- Handled internally. - GetScreenWidth = true, -- Replaced by GetScreenSize. - GetScreenHeight = true, -- Replaced by GetScreenSize. - GetRenderWidth = true, -- Replaced by GetRenderSize. - GetRenderHeight = true, -- Replaced by GetRenderSize. - GetMonitorWidth = true, -- Replaced by GetMonitorSize. - GetMonitorHeight = true, -- Replaced by GetMonitorSize. - GetMonitorPhysicalWidth = true, -- Replaced by GetMonitorPhysicalSize. - GetMonitorPhysicalHeight = true, -- Replaced by GetMonitorPhysicalSize. - UnloadRandomSequence = true, -- Handled internally. - MemAlloc = true, -- Buffer should be used instead. - MemRealloc = true, -- Buffer should be used instead. - MemFree = true, -- Buffer should be used instead. - SetTraceLogCallback = true, -- Handled internally. - SetLoadFileDataCallback = true, -- Not seen necessary. - SetSaveFileDataCallback = true, -- Not seen necessary. - SetLoadFileTextCallback = true, -- Not seen necessary. - SetSaveFileTextCallback = true, -- Not seen necessary. - UnloadFileData = true, -- Handled internally. - UnloadFileText = true, -- Handled internally. - UnloadDirectoryFiles = true, -- Handled internally. - UnloadDroppedFiles = true, -- Handled internally. - GetMouseX = true, -- Replaced by GetMousePosition. - GetMouseY = true, -- Replaced by GetMousePosition. - GetTouchX = true, -- Replaced by GetTouchPosition. - GetTouchY = true, -- Replaced by GetTouchPosition. - UpdateCamera = true, -- Replaced by UpdateCamera3D. - UpdateCameraPro = true, -- Replaced by UpdateCameraPro3D. - DrawPixelV = true, -- Replaced by DrawPixel. - DrawLineV = true, -- Replaced by DrawLine. - DrawCircleV = true, -- Replaced by DrawCircle. - DrawCircleLinesV = true, -- Replaced by DrawCircleLines. - DrawRectangleV = true, -- Replaced by DrawRectangle. - DrawRectangleRec = true, -- Replaced by DrawRectangle. - ImageTextEx = true, -- Replaced by ImageText. - UnloadImageColors = true, -- Handled internally. - UnloadImagePalette = true, -- Handled internally. - ImageDrawPixelV = true, -- Replaced by ImageDrawPixel. - ImageDrawLineV = true, -- Replaced by ImageDrawLine. - ImageDrawCircleV = true, -- Replaced by ImageDrawCircle. - ImageDrawCircleLinesV = true, -- Replaced by ImageDrawCircleLines. - ImageDrawRectangleV = true, -- Replaced by ImageDrawRectangle. - ImageDrawRectangleRec = true, -- Replaced by ImageDrawRectangle. - DrawTextureV = true, -- Replaced by DrawTexture. - UnloadFontData = true, -- Handled internally. - MeasureTextEx = true, -- Replaced by MeasureText. - UnloadUTF8 = true, -- Handled internally. - UnloadCodepoints = true, -- Handled internally. - TextCopy = true, -- Can be replaced by Lua equivalent. - TextIsEqual = true, -- Can be replaced by Lua equivalent. - TextLength = true, -- Can be replaced by Lua equivalent. - TextSubtext = true, -- Can be replaced by Lua equivalent. - TextJoin = true, -- Can be replaced by Lua equivalent. - TextAppend = true, -- Can be replaced by Lua equivalent. - TextToUpper = true, -- Can be replaced by Lua equivalent. - TextToLower = true, -- Can be replaced by Lua equivalent. - TextToInteger = true, -- Can be replaced by Lua equivalent. - DrawCubeV = true, -- Replaced by DrawCube. - DrawCubeWiresV = true, -- Replaced by DrawCubeWires. - UploadMesh = true, -- Handled internally. - UpdateMeshBuffer = true, -- Handled internally. - UnloadWaveSamples = true, -- Handled internally. + InitWindow = "Handled internally", + WindowShouldClose = "Handled internally", + GetScreenWidth = "Replaced by GetScreenSize", + GetScreenHeight = "Replaced by GetScreenSize", + GetRenderWidth = "Replaced by GetRenderSize", + GetRenderHeight = "Replaced by GetRenderSize", + GetMonitorWidth = "Replaced by GetMonitorSize", + GetMonitorHeight = "Replaced by GetMonitorSize", + GetMonitorPhysicalWidth = "Replaced by GetMonitorPhysicalSize", + GetMonitorPhysicalHeight = "Replaced by GetMonitorPhysicalSize", + UnloadRandomSequence = "Handled internally", + MemAlloc = "Buffer should be used instead", + MemRealloc = "Buffer should be used instead", + MemFree = "Buffer should be used instead", + SetTraceLogCallback = "Handled internally", + SetLoadFileDataCallback = "Not seen necessary", + SetSaveFileDataCallback = "Not seen necessary", + SetLoadFileTextCallback = "Not seen necessary", + SetSaveFileTextCallback = "Not seen necessary", + UnloadFileData = "Handled internally", + UnloadFileText = "Handled internally", + UnloadDirectoryFiles = "Handled internally", + UnloadDroppedFiles = "Handled internally", + GetMouseX = "Replaced by GetMousePosition", + GetMouseY = "Replaced by GetMousePosition", + GetTouchX = "Replaced by GetTouchPosition", + GetTouchY = "Replaced by GetTouchPosition", + UpdateCamera = "Replaced by UpdateCamera3D", + UpdateCameraPro = "Replaced by UpdateCameraPro3D", + DrawPixelV = "Replaced by DrawPixel", + DrawLineV = "Replaced by DrawLine", + DrawLineEx = "Replaced by DrawLine", + DrawCircleV = "Replaced by DrawCircle", + DrawCircleLinesV = "Replaced by DrawCircleLines", + DrawRectangleV = "Replaced by DrawRectangle", + DrawRectangleRec = "Replaced by DrawRectangle", + UnloadImageColors = "Handled internally", + UnloadImagePalette = "Handled internally", + ImageDrawPixelV = "Replaced by ImageDrawPixel", + ImageDrawLineV = "Replaced by ImageDrawLine", + ImageDrawCircleV = "Replaced by ImageDrawCircle", + ImageDrawCircleLinesV = "Replaced by ImageDrawCircleLines", + ImageDrawRectangleV = "Replaced by ImageDrawRectangle", + ImageDrawRectangleRec = "Replaced by ImageDrawRectangle", + DrawTextureV = "Replaced by DrawTexture", + UnloadFontData = "Handled internally", + UnloadUTF8 = "Handled internally", + UnloadCodepoints = "Handled internally", + TextCopy = "Can be replaced by Lua equivalent", + TextIsEqual = "Can be replaced by Lua equivalent", + TextLength = "Can be replaced by Lua equivalent", + TextJoin = "Can be replaced by Lua equivalent", + TextAppend = "Can be replaced by Lua equivalent", + TextToUpper = "Can be replaced by Lua equivalent", + TextToLower = "Can be replaced by Lua equivalent", + TextToInteger = "Can be replaced by Lua equivalent", + DrawCubeV = "Replaced by DrawCube", + DrawCubeWiresV = "Replaced by DrawCubeWires", + UploadMesh = "Handled internally", + UpdateMeshBuffer = "Handled internally", + UnloadWaveSamples = "Handled internally", }, info = { - IsKeyPressedRepeat = "Will be added", - IsGamepadButtonUp = "Will be added", - GetGamepadButtonPressed = "Will be added", - GetMouseWheelMoveV = "Will be added", - DrawLineEx = "Will be added", - ImageDrawText = "Could be added", - DrawTextureEx = "Will be added", - DrawTriangleStrip3D = "Will be added", GenMeshHemiSphere = "Will be added", GenMeshCubicmap = "Will be added", UpdateSound = "Will be added", @@ -85,12 +75,12 @@ local rlgl = { prefix = "RLAPI", file = "rlgl.h", blacklist = { - rlVertex2i = true, -- Most likely not needed. - rlglInit = true, -- Handled internally. - rlglClose = true, -- Handled internally. - rlLoadExtensions = true, -- Handled internally. - rlLoadDrawCube = true, -- Most likely not needed. - rlLoadDrawQuad = true, -- Most likely not needed. + rlVertex2i = "Most likely not needed", + rlglInit = "Handled internally", + rlglClose = "Handled internally", + rlLoadExtensions = "Handled internally", + rlLoadDrawCube = "Most likely not needed", + rlLoadDrawQuad = "Most likely not needed", }, info = { rlEnableStatePointer = "Available for GRAPHICS_API_OPENGL_11", @@ -109,8 +99,8 @@ local raymath = { prefix = "RMAPI", file = "raymath.h", blacklist = { - Vector3ToFloatV = true, -- Can be replaced by Lua equivalent. - MatrixToFloatV = true, -- Can be replaced by Lua equivalent. + Vector3ToFloatV = "Can be replaced by Lua equivalent", + MatrixToFloatV = "Can be replaced by Lua equivalent", }, info = { Vector3Project = "Will be added", @@ -121,10 +111,10 @@ local easings = { prefix = "EASEDEF", file = "easings.h", blacklist = { - EaseLinearNone = true, -- "Replaced by EaseLinear" - EaseLinearIn = true, -- "Replaced by EaseLinear" - EaseLinearOut = true, -- "Replaced by EaseLinear" - EaseLinearInOut = true, -- "Replaced by EaseLinear" + EaseLinearNone = "Replaced by EaseLinear", + EaseLinearIn = "Replaced by EaseLinear", + EaseLinearOut = "Replaced by EaseLinear", + EaseLinearInOut = "Replaced by EaseLinear", }, info = { }, @@ -139,32 +129,53 @@ local headers = { easings, } -for _, header in ipairs( headers ) do - local file = io.open( filePrefix..header.file, "r" ) - - if file ~= nil then - local line = "" - - print( "\nFunctions not implemented from '"..header.file.."':\n" ) - - repeat - line = file:read( "*l" ) - - if line ~= nil and line:sub( 1, #header.prefix ) == header.prefix then - local splits = RL.TextSplit( line:sub( 1, RL.TextFindIndex( line, "(" ) ), " " ) - local func = splits[ #splits ] - func = func:gsub( "*", "" ) - - if RL[ func ] == nil and not header.blacklist[ func ] then - local output = func - - if header.info[ func ] ~= nil then - output = output.."\t\""..header.info[ func ].."\"" - end +if RL.arg[4] == "--help" then + print( "You can get blacklisted functions with argument '--blacklist'. Give additional argument to find specific function." ) + return +end - print( output ) +for _, header in ipairs( headers ) do + if RL.arg[4] == "--blacklist" then + if RL.arg[5] == nil then + print( "\nFunctions blacklisted from '"..header.file.."':\n" ) + + for func, info in pairs( header.blacklist ) do + print( func.."\t\""..info.."\"" ) + end + else + for func, info in pairs( header.blacklist ) do + if func:lower() == RL.arg[5]:lower() then + print( "\nFunction '"..func.."' blacklisted from '"..header.file.."'\t\""..info.."\"\n" ) end end - until line == nil + end + else + local file = io.open( filePrefix..header.file, "r" ) + + if file ~= nil then + local line = "" + + print( "\nFunctions not implemented from '"..header.file.."':\n" ) + + repeat + line = file:read( "*l" ) + + if line ~= nil and line:sub( 1, #header.prefix ) == header.prefix then + local splits = RL.TextSplit( line:sub( 1, RL.TextFindIndex( line, "(" ) ), " " ) + local func = splits[ #splits ] + func = func:gsub( "*", "" ) + + if RL[ func ] == nil and not header.blacklist[ func ] then + local output = func + + if header.info[ func ] ~= nil then + output = output.."\t\""..header.info[ func ].."\"" + end + + print( output ) + end + end + until line == nil + end end end @@ -7,6 +7,8 @@ KEY CHANGES: - CHANGE: Process renamed to update to be more inline with naming of raylib and common convention. - ADDED: Raygui lib tooltip. - ADDED: apiScanner.lua for searching unimplemented functions from raylib. + - ADDED & CHANGE: ImageText. ImageTextEx is now equivalent to raylib function and old ImageText. + - ADDED & CHANGE: MeasureText. MeasureTextEx is now equivalent to raylib function and old MeasureText. DETAILED CHANGES: - ADDED: GetBufferElementSize and GetBufferLength. @@ -18,6 +20,16 @@ DETAILED CHANGES: - ADDED: rlEnableStatePointer and rlDisableStatePointer for GRAPHICS_API_OPENGL_11. - ADDED: rlBlitFramebuffer and rlEnablePointMode. - ADDED: Vector3Project and Vector3Reject. + - ADDED: IsKeyPressedRepeat, IsGamepadButtonUp, GetGamepadButtonPressed and GetMouseWheelMoveV. + - ADDED: ImageDrawText. + - ADDED: DrawTextureEx. + - ADDED: DrawTriangleStrip3D. + - ADDED: GenMeshHemiSphere. + - FIXED: GenMeshCubicmap was not assigned. + - ADDED: UpdateSound and LoadWaveSamples. + - ADDED: TextSubtext, TextReplace and TextToPascal. + - ADDED: Custom frame control functions. + - REMOVED: GetPixelColor. Deviates too much from raylib function. ------------------------------------------------------------------------ Release: ReiLua version 0.7.0 Using Raylib 5.0 and Forked Raygui 4.0 @@ -112,7 +124,7 @@ KEY CHANGES: - ADDED: Global variable descriptions for API. - CHANGED: Organized functions by putting them in the same order as in Raylib. - ADDED: Matrix library. - - Removed: GC_UNLOAD build time define and replaced with flag to change it at runtime. + - REMOVED: GC_UNLOAD build time define and replaced with flag to change it at runtime. - ADDED: Quaternion library. - ADDED: Shader buffer storage object management (ssbo). - ADDED: Rest of rlgl texture management functions. diff --git a/examples/image_draw/main.lua b/examples/image_draw/main.lua index ba8881a..4a62840 100644 --- a/examples/image_draw/main.lua +++ b/examples/image_draw/main.lua @@ -31,7 +31,7 @@ function RL.init() RL.ImageDraw( image, catCopy, src, { 600, 200, src[3], src[4] }, RL.WHITE ) - textImage = RL.ImageText( RL.GetFontDefault(), "Cat", 10, 4, RL.WHITE ) + textImage = RL.ImageTextEx( RL.GetFontDefault(), "Cat", 10, 4, RL.WHITE ) local imageSize = RL.GetImageSize( textImage ) RL.ImageDraw( image, textImage, { 0, 0, imageSize[1], imageSize[2] }, { 250, 40, imageSize[1], imageSize[2] }, RL.WHITE ) diff --git a/examples/pong/main.lua b/examples/pong/main.lua index fc8cd75..f898ce3 100644 --- a/examples/pong/main.lua +++ b/examples/pong/main.lua @@ -127,6 +127,6 @@ function RL.draw() -- Draw score. RL.DrawText( tostring( playerLeft.score ), { 50, 10 }, 40, RL.WHITE ) - local rightTextSize = Vec2:new( RL.MeasureText( RL.GetFontDefault(), tostring( playerRight.score ), 40, 2 ) ) + local rightTextSize = Vec2:new( RL.MeasureTextEx( RL.GetFontDefault(), tostring( playerRight.score ), 40, 2 ) ) RL.DrawText( tostring( playerRight.score ), { winSize.x - 50 - rightTextSize.x, 10 }, 40, RL.WHITE ) end diff --git a/examples/resources/lib/gui.lua b/examples/resources/lib/gui.lua index bdb4ce1..413fcf6 100644 --- a/examples/resources/lib/gui.lua +++ b/examples/resources/lib/gui.lua @@ -243,7 +243,7 @@ function Text:set( text ) self.text = text end - local textSize = Vec2:new( RL.MeasureText( self.font, self.text, self.fontSize, self.spacing ) ) + local textSize = Vec2:new( RL.MeasureTextEx( self.font, self.text, self.fontSize, self.spacing ) ) self.bounds.width = textSize.x self.bounds.height = textSize.y diff --git a/examples/resources/lib/raygui.lua b/examples/resources/lib/raygui.lua index cd02c78..875a0f5 100644 --- a/examples/resources/lib/raygui.lua +++ b/examples/resources/lib/raygui.lua @@ -1852,7 +1852,7 @@ function Raygui:_addLastProperty( property ) end function Raygui:drawTooltip() - local textSize = Vec2:new( RL.MeasureText( + local textSize = Vec2:new( RL.MeasureTextEx( self.defaultFont, self.tooltip.text, RL.GuiGetStyle( RL.DEFAULT, RL.TEXT_SIZE ), diff --git a/examples/window/main.lua b/examples/window/main.lua index 99e8524..ec2377b 100644 --- a/examples/window/main.lua +++ b/examples/window/main.lua @@ -1,5 +1,6 @@ local textColor = RL.BLACK local textPos = { 192, 200 } +local textSize = 20 local text = "Congrats! You created your first window!" function RL.init() @@ -9,9 +10,9 @@ end function RL.update( delta ) if RL.IsKeyPressed( RL.KEY_ENTER ) then - local textSize = RL.MeasureText( RL.GetFontDefault(), text, 20, 2 ) local winSize = RL.GetScreenSize() - + + textSize = RL.MeasureText( text, textSize ) textColor = RL.BLUE textPos = { winSize[1] / 2 - textSize[1] / 2, winSize[2] / 2 - textSize[2] / 2 } end @@ -24,5 +25,5 @@ end function RL.draw() RL.ClearBackground( RL.RAYWHITE ) - RL.DrawText( text, textPos, 20, textColor ) + RL.DrawText( text, textPos, textSize, textColor ) end diff --git a/include/audio.h b/include/audio.h index cee8f0b..add37fc 100644 --- a/include/audio.h +++ b/include/audio.h @@ -14,6 +14,7 @@ int laudioIsWaveReady( lua_State* L ); int laudioLoadSoundFromWave( lua_State* L ); int laudioLoadSoundAlias( lua_State* L ); int laudioIsSoundReady( lua_State* L ); +int laudioUpdateSound( lua_State* L ); int laudioUnloadWave( lua_State* L ); int laudioUnloadSound( lua_State* L ); int laudioUnloadSoundAlias( lua_State* L ); @@ -29,6 +30,7 @@ int laudioSetSoundVolume( lua_State* L ); int laudioSetSoundPitch( lua_State* L ); int laudioSetSoundPan( lua_State* L ); int laudioWaveFormat( lua_State* L ); +int laudioLoadWaveSamples( lua_State* L ); int laudioWaveCopy( lua_State* L ); int laudioWaveCrop( lua_State* L ); /* Music management functions. */ diff --git a/include/core.h b/include/core.h index 9a9a144..e9f8d1b 100644 --- a/include/core.h +++ b/include/core.h @@ -91,9 +91,13 @@ int lcoreGetWorldToScreen2D( lua_State* L ); int lcoreGetScreenToWorld2D( lua_State* L ); /* Timing-related functions. */ int lcoreSetTargetFPS( lua_State* L ); -int lcoreGetFPS( lua_State* L ); int lcoreGetFrameTime( lua_State* L ); int lcoreGetTime( lua_State* L ); +int lcoreGetFPS( lua_State* L ); +/* Custom frame control functions. */ +int lcoreSwapScreenBuffer( lua_State* L ); +int lcorePollInputEvents( lua_State* L ); +int lcoreWaitTime( lua_State* L ); /* Random values generation functions. */ int lcoreSetRandomSeed( lua_State* L ); int lcoreGetRandomValue( lua_State* L ); @@ -141,6 +145,7 @@ int lcoreEncodeDataBase64( lua_State* L ); int lcoreDecodeDataBase64( lua_State* L ); /* Input-related functions: keyboard. */ int lcoreIsKeyPressed( lua_State* L ); +int lcoreIsKeyPressedRepeat( lua_State* L ); int lcoreIsKeyDown( lua_State* L ); int lcoreIsKeyReleased( lua_State* L ); int lcoreIsKeyUp( lua_State* L ); @@ -155,6 +160,8 @@ int lcoreGetGamepadName( lua_State* L ); int lcoreIsGamepadButtonPressed( lua_State* L ); int lcoreIsGamepadButtonDown( lua_State* L ); int lcoreIsGamepadButtonReleased( lua_State* L ); +int lcoreIsGamepadButtonUp( lua_State* L ); +int lcoreGetGamepadButtonPressed( lua_State* L ); int lcoreGetGamepadAxisCount( lua_State* L ); int lcoreGetGamepadAxisMovement( lua_State* L ); int lcoreSetGamepadMappings( lua_State* L ); @@ -169,6 +176,7 @@ int lcoreSetMousePosition( lua_State* L ); int lcoreSetMouseOffset( lua_State* L ); int lcoreSetMouseScale( lua_State* L ); int lcoreGetMouseWheelMove( lua_State* L ); +int lcoreGetMouseWheelMoveV( lua_State* L ); int lcoreSetMouseCursor( lua_State* L ); /* Input-related functions: touch. */ int lcoreGetTouchPosition( lua_State* L ); diff --git a/include/models.h b/include/models.h index 786b16e..d56d2c6 100644 --- a/include/models.h +++ b/include/models.h @@ -11,6 +11,7 @@ int lmodelsDrawLine3D( lua_State* L ); int lmodelsDrawPoint3D( lua_State* L ); int lmodelsDrawCircle3D( lua_State* L ); int lmodelsDrawTriangle3D( lua_State* L ); +int lmodelsDrawTriangleStrip3D( lua_State* L ); int lmodelsDrawCube( lua_State* L ); int lmodelsDrawCubeWires( lua_State* L ); int lmodelsDrawSphere( lua_State* L ); @@ -69,6 +70,7 @@ int lmodelsGenMeshPoly( lua_State* L ); int lmodelsGenMeshPlane( lua_State* L ); int lmodelsGenMeshCube( lua_State* L ); int lmodelsGenMeshSphere( lua_State* L ); +int lmodelsGenMeshHemiSphere( lua_State* L ); int lmodelsGenMeshCylinder( lua_State* L ); int lmodelsGenMeshCone( lua_State* L ); int lmodelsGenMeshTorus( lua_State* L ); diff --git a/include/text.h b/include/text.h index b921e9c..d936ec6 100644 --- a/include/text.h +++ b/include/text.h @@ -25,6 +25,7 @@ int ltextDrawTextBoxedTinted( lua_State* L ); /* Text font info functions. */ int ltextSetTextLineSpacing( lua_State* L ); int ltextMeasureText( lua_State* L ); +int ltextMeasureTextEx( lua_State* L ); int ltextGetGlyphIndex( lua_State* L ); int ltextGetGlyphInfo( lua_State* L ); int ltextGetGlyphInfoByIndex( lua_State* L ); @@ -54,6 +55,9 @@ int ltextGetCodepointNext( lua_State* L ); int ltextGetCodepointPrevious( lua_State* L ); int ltextCodepointToUTF8( lua_State* L ); /* Text strings management functions (no UTF-8 strings, only byte chars) */ +int ltextTextSubtext( lua_State* L ); +int ltextTextReplace( lua_State* L ); int ltextTextInsert( lua_State* L ); int ltextTextSplit( lua_State* L ); int ltextTextFindIndex( lua_State* L ); +int ltextTextToPascal( lua_State* L ); diff --git a/include/textures.h b/include/textures.h index e8e376f..e53e29c 100644 --- a/include/textures.h +++ b/include/textures.h @@ -28,6 +28,7 @@ int ltexturesGenImageText( lua_State* L ); int ltexturesImageCopy( lua_State* L ); int ltexturesImageFromImage( lua_State* L ); int ltexturesImageText( lua_State* L ); +int ltexturesImageTextEx( lua_State* L ); int ltexturesImageFormat( lua_State* L ); int ltexturesImageToPOT( lua_State* L ); int ltexturesImageCrop( lua_State* L ); @@ -70,6 +71,7 @@ int ltexturesImageDrawCircleLines( lua_State* L ); int ltexturesImageDrawRectangle( lua_State* L ); int ltexturesImageDrawRectangleLines( lua_State* L ); int ltexturesImageDraw( lua_State* L ); +int ltexturesImageDrawText( lua_State* L ); int ltexturesImageDrawTextEx( lua_State* L ); /* Texture loading functions. */ int ltexturesGetTextureDefault( lua_State* L ); @@ -95,6 +97,7 @@ int ltexturesGetTextureMipmaps( lua_State* L ); int ltexturesGetTextureFormat( lua_State* L ); /* Texture drawing functions. */ int ltexturesDrawTexture( lua_State* L ); +int ltexturesDrawTextureEx( lua_State* L ); int ltexturesDrawTextureRec( lua_State* L ); int ltexturesDrawTexturePro( lua_State* L ); int ltexturesDrawTextureNPatch( lua_State* L ); @@ -116,5 +119,4 @@ int ltexturesColorContrast( lua_State* L ); int ltexturesColorAlpha( lua_State* L ); int ltexturesColorAlphaBlend( lua_State* L ); int ltexturesGetColor( lua_State* L ); -int ltexturesGetPixelColor( lua_State* L ); int ltexturesGetPixelDataSize( lua_State* L ); diff --git a/src/audio.c b/src/audio.c index 04085b4..53031cd 100644 --- a/src/audio.c +++ b/src/audio.c @@ -189,6 +189,21 @@ int laudioIsSoundReady( lua_State* L ) { } /* +> RL.UpdateSound( Sound sound, Buffer data, int sampleCount ) + +Update sound buffer with new data +*/ +int laudioUpdateSound( lua_State* L ) { + Sound* sound = uluaGetSound( L, 1 ); + Buffer* buffer = uluaGetBuffer( L, 2 ); + int sampleCount = luaL_checkinteger( L, 3 ); + + UpdateSound( *sound, buffer->data, sampleCount ); + + return 0; +} + +/* > RL.UnloadWave( Wave wave ) Unload wave data @@ -387,6 +402,29 @@ int laudioWaveFormat( lua_State* L ) { } /* +> samples = RL.LoadWaveSamples( Wave wave ) + +Load samples data from wave as a 32bit float data array + +- Success return float{} +*/ +int laudioLoadWaveSamples( lua_State* L ) { + Wave* wave = uluaGetWave( L, 1 ); + + float* samples = LoadWaveSamples( *wave ); + + lua_createtable( L, wave->frameCount * wave->channels, 0 ); + + for ( int i = 0; i < wave->frameCount * wave->channels; ++i ) { + lua_pushnumber( L, samples[i] ); + lua_rawseti( L, -2, i+1 ); + } + UnloadWaveSamples( samples ); + + return 1; +} + +/* > wave = RL.WaveCopy( Wave wave ) Copy a wave to a new wave @@ -1221,6 +1221,32 @@ int lcoreSetTargetFPS( lua_State* L ) { } /* +> delta = RL.GetFrameTime() + +Get time in seconds for last frame drawn (Delta time) + +- Success return float +*/ +int lcoreGetFrameTime( lua_State* L ) { + lua_pushnumber( L, GetFrameTime() ); + + return 1; +} + +/* +> time = RL.GetTime() + +Get elapsed time in seconds since InitWindow() + +- Success return float +*/ +int lcoreGetTime( lua_State* L ) { + lua_pushnumber( L, GetTime() ); + + return 1; +} + +/* > FPS = RL.GetFPS() Get current FPS @@ -1234,29 +1260,42 @@ int lcoreGetFPS( lua_State* L ) { } /* -> delta = RL.GetFrameTime() +## Core - Custom frame control functions +*/ -Get time in seconds for last frame drawn (Delta time) +/* +> RL.SwapScreenBuffer() -- Success return float +Swap back buffer with front buffer (screen drawing) */ -int lcoreGetFrameTime( lua_State* L ) { - lua_pushnumber( L, GetFrameTime() ); +int lcoreSwapScreenBuffer( lua_State* L ) { + SwapScreenBuffer(); - return 1; + return 0; } /* -> time = RL.GetTime() +> RL.PollInputEvents() -Get elapsed time in seconds since InitWindow() +Register all input events +*/ +int lcorePollInputEvents( lua_State* L ) { + PollInputEvents(); -- Success return float + return 0; +} + +/* +> RL.WaitTime( number seconds ) + +Wait for some time (halt program execution) */ -int lcoreGetTime( lua_State* L ) { - lua_pushnumber( L, GetTime() ); +int lcoreWaitTime( lua_State* L ) { + double seconds = luaL_checknumber( L, 1 ); - return 1; + WaitTime( seconds ); + + return 0; } /* @@ -1908,6 +1947,21 @@ int lcoreIsKeyPressed( lua_State* L ) { } /* +> pressed = RL.IsKeyPressedRepeat( int key ) + +Check if a key has been pressed again (Only PLATFORM_DESKTOP) + +- Success return bool +*/ +int lcoreIsKeyPressedRepeat( lua_State* L ) { + int key = luaL_checkinteger( L, 1 ); + + lua_pushboolean( L, IsKeyPressedRepeat( key ) ); + + return 1; +} + +/* > pressed = RL.IsKeyDown( int key ) Detect if a key is being pressed @@ -2074,6 +2128,35 @@ int lcoreIsGamepadButtonReleased( lua_State* L ) { } /* +> notPressed = RL.IsGamepadButtonUp( int gamepad, int button ) + +Check if a gamepad button is NOT being pressed + +- Success return bool +*/ +int lcoreIsGamepadButtonUp( lua_State* L ) { + int gamepad = luaL_checkinteger( L, 1 ); + int button = luaL_checkinteger( L, 2 ); + + lua_pushboolean( L, IsGamepadButtonUp( gamepad, button ) ); + + return 1; +} + +/* +> button = RL.GetGamepadButtonPressed() + +Get the last gamepad button pressed + +- Success return int +*/ +int lcoreGetGamepadButtonPressed( lua_State* L ) { + lua_pushinteger( L, GetGamepadButtonPressed() ); + + return 1; +} + +/* > count = RL.GetGamepadAxisCount( int gamepad ) Return gamepad axis count for a gamepad @@ -2251,7 +2334,7 @@ int lcoreSetMouseScale( lua_State* L ) { /* > movement = RL.GetMouseWheelMove() -Returns mouse wheel movement Y +Get mouse wheel movement for X or Y, whichever is larger - Success return float */ @@ -2262,6 +2345,19 @@ int lcoreGetMouseWheelMove( lua_State* L ) { } /* +> movement = RL.GetMouseWheelMoveV() + +Get mouse wheel movement for both X and Y + +- Success return Vector2 +*/ +int lcoreGetMouseWheelMoveV( lua_State* L ) { + uluaPushVector2( L, GetMouseWheelMoveV() ); + + return 1; +} + +/* > RL.SetMouseCursor( int cursor ) Set mouse cursor diff --git a/src/lua_core.c b/src/lua_core.c index 3747791..a6078a9 100644 --- a/src/lua_core.c +++ b/src/lua_core.c @@ -1285,9 +1285,13 @@ void luaRegister() { assingGlobalFunction( "GetScreenToWorld2D", lcoreGetScreenToWorld2D ); /* Timing-related functions. */ assingGlobalFunction( "SetTargetFPS", lcoreSetTargetFPS ); - assingGlobalFunction( "GetFPS", lcoreGetFPS ); assingGlobalFunction( "GetFrameTime", lcoreGetFrameTime ); assingGlobalFunction( "GetTime", lcoreGetTime ); + assingGlobalFunction( "GetFPS", lcoreGetFPS ); + /* Custom frame control functions. */ + assingGlobalFunction( "SwapScreenBuffer", lcoreSwapScreenBuffer ); + assingGlobalFunction( "PollInputEvents", lcorePollInputEvents ); + assingGlobalFunction( "WaitTime", lcoreWaitTime ); /* Random values generation functions. */ assingGlobalFunction( "SetRandomSeed", lcoreSetRandomSeed ); assingGlobalFunction( "GetRandomValue", lcoreGetRandomValue ); @@ -1335,6 +1339,7 @@ void luaRegister() { assingGlobalFunction( "DecodeDataBase64", lcoreDecodeDataBase64 ); /* Input-related functions: keyboard. */ assingGlobalFunction( "IsKeyPressed", lcoreIsKeyPressed ); + assingGlobalFunction( "IsKeyPressedRepeat", lcoreIsKeyPressedRepeat ); assingGlobalFunction( "IsKeyDown", lcoreIsKeyDown ); assingGlobalFunction( "IsKeyReleased", lcoreIsKeyReleased ); assingGlobalFunction( "IsKeyUp", lcoreIsKeyUp ); @@ -1347,6 +1352,8 @@ void luaRegister() { assingGlobalFunction( "IsGamepadButtonPressed", lcoreIsGamepadButtonPressed ); assingGlobalFunction( "IsGamepadButtonDown", lcoreIsGamepadButtonDown ); assingGlobalFunction( "IsGamepadButtonReleased", lcoreIsGamepadButtonReleased ); + assingGlobalFunction( "IsGamepadButtonUp", lcoreIsGamepadButtonUp ); + assingGlobalFunction( "GetGamepadButtonPressed", lcoreGetGamepadButtonPressed ); assingGlobalFunction( "GetGamepadAxisCount", lcoreGetGamepadAxisCount ); assingGlobalFunction( "GetGamepadAxisMovement", lcoreGetGamepadAxisMovement ); assingGlobalFunction( "SetGamepadMappings", lcoreSetGamepadMappings ); @@ -1361,6 +1368,7 @@ void luaRegister() { assingGlobalFunction( "SetMouseOffset", lcoreSetMouseOffset ); assingGlobalFunction( "SetMouseScale", lcoreSetMouseScale ); assingGlobalFunction( "GetMouseWheelMove", lcoreGetMouseWheelMove ); + assingGlobalFunction( "GetMouseWheelMoveV", lcoreGetMouseWheelMoveV ); assingGlobalFunction( "SetMouseCursor", lcoreSetMouseCursor ); /* Input-related functions: touch */ assingGlobalFunction( "GetTouchPosition", lcoreGetTouchPosition ); @@ -1513,6 +1521,7 @@ void luaRegister() { assingGlobalFunction( "ImageCopy", ltexturesImageCopy ); assingGlobalFunction( "ImageFromImage", ltexturesImageFromImage ); assingGlobalFunction( "ImageText", ltexturesImageText ); + assingGlobalFunction( "ImageTextEx", ltexturesImageTextEx ); assingGlobalFunction( "ImageFormat", ltexturesImageFormat ); assingGlobalFunction( "ImageToPOT", ltexturesImageToPOT ); assingGlobalFunction( "ImageCrop", ltexturesImageCrop ); @@ -1555,6 +1564,7 @@ void luaRegister() { assingGlobalFunction( "ImageDrawRectangle", ltexturesImageDrawRectangle ); assingGlobalFunction( "ImageDrawRectangleLines", ltexturesImageDrawRectangleLines ); assingGlobalFunction( "ImageDraw", ltexturesImageDraw ); + assingGlobalFunction( "ImageDrawText", ltexturesImageDrawText ); assingGlobalFunction( "ImageDrawTextEx", ltexturesImageDrawTextEx ); /* Texture loading functions. */ assingGlobalFunction( "GetTextureDefault", ltexturesGetTextureDefault ); @@ -1580,6 +1590,7 @@ void luaRegister() { assingGlobalFunction( "GetTextureFormat", ltexturesGetTextureFormat ); /* Texture drawing functions. */ assingGlobalFunction( "DrawTexture", ltexturesDrawTexture ); + assingGlobalFunction( "DrawTextureEx", ltexturesDrawTextureEx ); assingGlobalFunction( "DrawTextureRec", ltexturesDrawTextureRec ); assingGlobalFunction( "DrawTexturePro", ltexturesDrawTexturePro ); assingGlobalFunction( "DrawTextureNPatch", ltexturesDrawTextureNPatch ); @@ -1601,7 +1612,6 @@ void luaRegister() { assingGlobalFunction( "ColorAlpha", ltexturesColorAlpha ); assingGlobalFunction( "ColorAlphaBlend", ltexturesColorAlphaBlend ); assingGlobalFunction( "GetColor", ltexturesGetColor ); - assingGlobalFunction( "GetPixelColor", ltexturesGetPixelColor ); assingGlobalFunction( "GetPixelDataSize", ltexturesGetPixelDataSize ); /* Models. */ @@ -1610,6 +1620,7 @@ void luaRegister() { assingGlobalFunction( "DrawPoint3D", lmodelsDrawPoint3D ); assingGlobalFunction( "DrawCircle3D", lmodelsDrawCircle3D ); assingGlobalFunction( "DrawTriangle3D", lmodelsDrawTriangle3D ); + assingGlobalFunction( "DrawTriangleStrip3D", lmodelsDrawTriangleStrip3D ); assingGlobalFunction( "DrawCube", lmodelsDrawCube ); assingGlobalFunction( "DrawCubeWires", lmodelsDrawCubeWires ); assingGlobalFunction( "DrawSphere", lmodelsDrawSphere ); @@ -1668,11 +1679,13 @@ void luaRegister() { assingGlobalFunction( "GenMeshPlane", lmodelsGenMeshPlane ); assingGlobalFunction( "GenMeshCube", lmodelsGenMeshCube ); assingGlobalFunction( "GenMeshSphere", lmodelsGenMeshSphere ); + assingGlobalFunction( "GenMeshHemiSphere", lmodelsGenMeshHemiSphere ); assingGlobalFunction( "GenMeshCylinder", lmodelsGenMeshCylinder ); assingGlobalFunction( "GenMeshCone", lmodelsGenMeshCone ); assingGlobalFunction( "GenMeshTorus", lmodelsGenMeshTorus ); assingGlobalFunction( "GenMeshKnot", lmodelsGenMeshKnot ); assingGlobalFunction( "GenMeshHeightmap", lmodelsGenMeshHeightmap ); + assingGlobalFunction( "GenMeshCubicmap", lmodelsGenMeshCubicmap ); assingGlobalFunction( "GenMeshCustom", lmodelsGenMeshCustom ); /* Material management functions. */ assingGlobalFunction( "LoadMaterials", lmodelsLoadMaterials ); @@ -1740,6 +1753,7 @@ void luaRegister() { /* Text font info functions. */ assingGlobalFunction( "SetTextLineSpacing", ltextSetTextLineSpacing ); assingGlobalFunction( "MeasureText", ltextMeasureText ); + assingGlobalFunction( "MeasureTextEx", ltextMeasureTextEx ); assingGlobalFunction( "GetGlyphIndex", ltextGetGlyphIndex ); assingGlobalFunction( "GetGlyphInfo", ltextGetGlyphInfo ); assingGlobalFunction( "GetGlyphInfoByIndex", ltextGetGlyphInfoByIndex ); @@ -1769,9 +1783,12 @@ void luaRegister() { assingGlobalFunction( "GetCodepointPrevious", ltextGetCodepointPrevious ); assingGlobalFunction( "CodepointToUTF8", ltextCodepointToUTF8 ); /* Text strings management functions (no UTF-8 strings, only byte chars) */ + assingGlobalFunction( "TextSubtext", ltextTextSubtext ); + assingGlobalFunction( "TextReplace", ltextTextReplace ); assingGlobalFunction( "TextInsert", ltextTextInsert ); assingGlobalFunction( "TextSplit", ltextTextSplit ); assingGlobalFunction( "TextFindIndex", ltextTextFindIndex ); + assingGlobalFunction( "TextToPascal", ltextTextToPascal ); /* Audio. */ /* Audio device management functions. */ @@ -1788,6 +1805,7 @@ void luaRegister() { assingGlobalFunction( "LoadSoundFromWave", laudioLoadSoundFromWave ); assingGlobalFunction( "LoadSoundAlias", laudioLoadSoundAlias ); assingGlobalFunction( "IsSoundReady", laudioIsSoundReady ); + assingGlobalFunction( "UpdateSound", laudioUpdateSound ); assingGlobalFunction( "UnloadWave", laudioUnloadWave ); assingGlobalFunction( "UnloadSound", laudioUnloadSound ); assingGlobalFunction( "UnloadSoundAlias", laudioUnloadSoundAlias ); @@ -1803,6 +1821,7 @@ void luaRegister() { assingGlobalFunction( "SetSoundPitch", laudioSetSoundPitch ); assingGlobalFunction( "SetSoundPan", laudioSetSoundPan ); assingGlobalFunction( "WaveFormat", laudioWaveFormat ); + assingGlobalFunction( "LoadWaveSamples", laudioLoadWaveSamples ); assingGlobalFunction( "WaveCopy", laudioWaveCopy ); assingGlobalFunction( "WaveCrop", laudioWaveCrop ); /* Music management functions. */ diff --git a/src/models.c b/src/models.c index 2133632..db98b31 100644 --- a/src/models.c +++ b/src/models.c @@ -173,6 +173,32 @@ int lmodelsDrawTriangle3D( lua_State* L ) { } /* +> RL.DrawTriangleStrip3D( Vector3{} points, Color color ) + +Draw a triangle strip defined by points +*/ +int lmodelsDrawTriangleStrip3D( lua_State* L ) { + int pointCount = uluaGetTableLen( L, 1 ); + Color color = uluaGetColor( L, 2 ); + + Vector3 points[ pointCount ]; + + int t = 1, i = 0; + lua_pushnil( L ); + + while ( lua_next( L, t ) != 0 ) { + if ( lua_istable( L, -1 ) ) { + points[i] = uluaGetVector3( L, lua_gettop( L ) ); + } + i++; + lua_pop( L, 1 ); + } + DrawTriangleStrip3D( points, pointCount, color ); + + return 0; +} + +/* > RL.DrawCube( Vector3 position, Vector3 size, Color color ) Draw cube @@ -1305,6 +1331,23 @@ int lmodelsGenMeshSphere( lua_State* L ) { } /* +> mesh = RL.GenMeshHemiSphere( float radius, int rings, int slices ) + +Generate half-sphere mesh (no bottom cap) + +- Success return Mesh +*/ +int lmodelsGenMeshHemiSphere( lua_State* L ) { + float radius = luaL_checknumber( L, 1 ); + int rings = luaL_checkinteger( L, 2 ); + int slices = luaL_checkinteger( L, 3 ); + + uluaPushMesh( L, GenMeshHemiSphere( radius, rings, slices ) ); + + return 1; +} + +/* > mesh = RL.GenMeshCylinder( float radius, float height, int slices ) Generate cylinder mesh @@ -663,18 +663,35 @@ int ltextSetTextLineSpacing( lua_State* L ) { } /* -> size = RL.MeasureText( Font font, string text, float fontSize, float spacing ) +> width = RL.MeasureText( string text, int fontSize ) + +Measure string width for default font + +- Success return int +*/ +int ltextMeasureText( lua_State* L ) { + const char* text = luaL_checkstring( L, 1 ); + int fontSize = luaL_checkinteger( L, 2 ); + + lua_pushinteger( L, MeasureText( text, fontSize ) ); + + return 1; +} + +/* +> size = RL.MeasureTextEx( Font font, string text, float fontSize, float spacing ) Measure string size for Font - Success return Vector2 */ -int ltextMeasureText( lua_State* L ) { +int ltextMeasureTextEx( lua_State* L ) { Font* font = uluaGetFont( L, 1 ); + const char* text = luaL_checkstring( L, 2 ); float fontSize = luaL_checknumber( L, 3 ); float spacing = luaL_checknumber( L, 4 ); - uluaPushVector2( L, MeasureTextEx( *font, luaL_checkstring( L, 2 ), fontSize, spacing ) ); + uluaPushVector2( L, MeasureTextEx( *font, text, fontSize, spacing ) ); return 1; } @@ -1144,6 +1161,43 @@ int ltextCodepointToUTF8( lua_State* L ) { */ /* +> text = RL.TextSubtext( string text, int position, int length ) + +Get a piece of a text string + +- Success return string +*/ +int ltextTextSubtext( lua_State* L ) { + const char* text = luaL_checkstring( L, 1 ); + int position = luaL_checkinteger( L, 2 ); + int length = luaL_checkinteger( L, 3 ); + + lua_pushstring( L, TextSubtext( text, position, length ) ); + + return 1; +} + +/* +> text = RL.TextReplace( string text, string replace, string by ) + +Replace text string + +- Success return string +*/ +int ltextTextReplace( lua_State* L ) { + char* text = (char*)luaL_checkstring( L, 1 ); + const char* replace = luaL_checkstring( L, 2 ); + const char* by = luaL_checkstring( L, 3 ); + + char* result = TextReplace( text, replace, by ); + + lua_pushstring( L, result ); + free( result ); + + return 1; +} + +/* > text = RL.TextInsert( string text, string insert, int position ) Insert text in a specific position, moves all text forward @@ -1213,3 +1267,18 @@ int ltextTextFindIndex( lua_State* L ) { return 1; } + +/* +> text = RL.TextToPascal( string text ) + +Get Pascal case notation version of provided string + +- Success return string +*/ +int ltextTextToPascal( lua_State* L ) { + const char* text = luaL_checkstring( L, 1 ); + + lua_pushstring( L, TextToPascal( text ) ); + + return 1; +} diff --git a/src/textures.c b/src/textures.c index aa9a053..6eff7bb 100644 --- a/src/textures.c +++ b/src/textures.c @@ -433,19 +433,37 @@ int ltexturesImageFromImage( lua_State* L ) { } /* -> image = RL.ImageText( Font font, string text, float fontSize, float spacing, Color tint ) +> image = RL.ImageText( string text, int fontSize, Color tint ) -Create an image from text (custom sprite font) +Create an image from text (default font) - Success return Image */ int ltexturesImageText( lua_State* L ) { + const char* text = luaL_checkstring( L, 1 ); + int fontSize = luaL_checkinteger( L, 2 ); + Color tint = uluaGetColor( L, 3 ); + + uluaPushImage( L, ImageText( text, fontSize, tint ) ); + + return 1; +} + +/* +> image = RL.ImageTextEx( Font font, string text, float fontSize, float spacing, Color tint ) + +Create an image from text (custom sprite font) + +- Success return Image +*/ +int ltexturesImageTextEx( lua_State* L ) { Font* font = uluaGetFont( L, 1 ); - float fontSize = lua_tonumber( L, 3 ); - float spacing = lua_tonumber( L, 4 ); + const char* text = luaL_checkstring( L, 2 ); + float fontSize = luaL_checknumber( L, 3 ); + float spacing = luaL_checknumber( L, 4 ); Color tint = uluaGetColor( L, 5 ); - uluaPushImage( L, ImageTextEx( *font, luaL_checkstring( L, 2 ), fontSize, spacing, tint ) ); + uluaPushImage( L, ImageTextEx( *font, text, fontSize, spacing, tint ) ); return 1; } @@ -499,7 +517,7 @@ Crop image depending on alpha value */ int ltexturesImageAlphaCrop( lua_State* L ) { Image* image = uluaGetImage( L, 1 ); - float threshold = lua_tonumber( L, 2 ); + float threshold = luaL_checknumber( L, 2 ); ImageAlphaCrop( image, threshold ); @@ -514,7 +532,7 @@ Clear alpha channel to desired color int ltexturesImageAlphaClear( lua_State* L ) { Image* image = uluaGetImage( L, 1 ); Color color = uluaGetColor( L, 2 ); - float threshold = lua_tonumber( L, 3 ); + float threshold = luaL_checknumber( L, 3 ); ImageAlphaClear( image, color, threshold ); @@ -1064,6 +1082,23 @@ int ltexturesImageDraw( lua_State* L ) { } /* +> RL.ImageDrawText( Image dst, string text, Vector2 position, float fontSize, Color tint ) + +Draw text (using default font) within an image (destination) +*/ +int ltexturesImageDrawText( lua_State* L ) { + Image* image = uluaGetImage( L, 1 ); + const char* text = luaL_checkstring( L, 2 ); + Vector2 position = uluaGetVector2( L, 3 ); + float fontSize = luaL_checknumber( L, 4 ); + Color tint = uluaGetColor( L, 5 ); + + ImageDrawText( image, text, position.x, position.y, fontSize, tint ); + + return 0; +} + +/* > RL.ImageDrawTextEx( Image dst, Font font, string text, Vector2 position, float fontSize, float spacing, Color tint ) Draw text (Custom sprite font) within an image (Destination) @@ -1071,12 +1106,13 @@ Draw text (Custom sprite font) within an image (Destination) int ltexturesImageDrawTextEx( lua_State* L ) { Image* image = uluaGetImage( L, 1 ); Font* font = uluaGetFont( L, 2 ); + const char* text = luaL_checkstring( L, 3 ); Vector2 position = uluaGetVector2( L, 4 ); float fontSize = luaL_checknumber( L, 5 ); float spacing = luaL_checknumber( L, 6 ); Color tint = uluaGetColor( L, 7 ); - ImageDrawTextEx( image, *font, luaL_checkstring( L, 3 ), position, fontSize, spacing, tint ); + ImageDrawTextEx( image, *font, text, position, fontSize, spacing, tint ); return 0; } @@ -1487,10 +1523,26 @@ Draw a Texture2D */ int ltexturesDrawTexture( lua_State* L ) { Texture* texture = uluaGetTexture( L, 1 ); - Vector2 pos = uluaGetVector2( L, 2 ); + Vector2 position = uluaGetVector2( L, 2 ); Color color = uluaGetColor( L, 3 ); - DrawTexture( *texture, pos.x, pos.y, color ); + DrawTexture( *texture, position.x, position.y, color ); + return 0; +} + +/* +> RL.DrawTextureEx( Texture texture, Vector2 position, float rotation, float scale, Color tint ) + +Draw a Texture2D with extended parameters +*/ +int ltexturesDrawTextureEx( lua_State* L ) { + Texture* texture = uluaGetTexture( L, 1 ); + Vector2 position = uluaGetVector2( L, 2 ); + float rotation = luaL_checknumber( L, 3 ); + float scale = luaL_checknumber( L, 4 ); + Color color = uluaGetColor( L, 5 ); + + DrawTextureEx( *texture, position, rotation, scale, color ); return 0; } @@ -1502,10 +1554,10 @@ Draw a part of a texture defined by a rectangle int ltexturesDrawTextureRec( lua_State* L ) { Texture* texture = uluaGetTexture( L, 1 ); Rectangle srcRect = uluaGetRectangle( L, 2 ); - Vector2 pos = uluaGetVector2( L, 3 ); + Vector2 position = uluaGetVector2( L, 3 ); Color tint = uluaGetColor( L, 4 ); - DrawTextureRec( *texture, srcRect, pos, tint ); + DrawTextureRec( *texture, srcRect, position, tint ); return 0; } @@ -1519,10 +1571,10 @@ int ltexturesDrawTexturePro( lua_State* L ) { Rectangle srcRect = uluaGetRectangle( L, 2 ); Rectangle dstRect = uluaGetRectangle( L, 3 ); Vector2 origin = uluaGetVector2( L, 4 ); - float rot = luaL_checknumber( L, 5 ); + float rotation = luaL_checknumber( L, 5 ); Color color = uluaGetColor( L, 6 ); - DrawTexturePro( *texture, srcRect, dstRect, origin, rot, color ); + DrawTexturePro( *texture, srcRect, dstRect, origin, rotation, color ); return 0; } @@ -2006,24 +2058,6 @@ int ltexturesGetColor( lua_State* L ) { } /* -> color = RL.GetPixelColor( Texture texture, Vector2 position ) - -Get pixel color from source texture - -- Success return Color -*/ -int ltexturesGetPixelColor( lua_State* L ) { - Texture* texture = uluaGetTexture( L, 1 ); - Vector2 pos = uluaGetVector2( L, 2 ); - Image srcImage = LoadImageFromTexture( *texture ); - - uluaPushColor( L, GetImageColor( srcImage, pos.x, pos.y ) ); - UnloadImage( srcImage ); - - return 1; -} - -/* > size = RL.GetPixelDataSize( int width, int height, int format ) Get pixel data size in bytes for certain format |
